跳至主要内容

白话 IT 之 聊聊数据加密

原文地址白话 IT 之 聊聊数据加密,作者是 嘀嗒嘀嗒 微信公众号运营者angela,表示感谢

嘀嗒嘀嗒按:今天的分享来自我们 Airbnb 的数据加密的大牛桑立锋。说到桑同学,那比我牛出不止一个数量级了。俄亥俄州立大学毕业的 PhD,曾在Yahoo!、LinkedIn 等多家公司担任技术骨干。在过去三四年间获各种数据加密相关的专利达五项之多。

除了技术扎实,桑同学平时也是极好相处,又特别愿意帮助别人。在我过去和他不多的几次合作中,也不时又机会请教一二。虽然对于数据加密仍然是个门外汉,但是桑同学解释问题总能听得懂。因此在我的再三请求下,有了这篇科普性的文章。

虽然我们都就职于 Airbnb,但是这篇文章和 Airbnb 现在使用的技术没有直接关联。下面是正文。



数据加密是一个古老的问题,但又是一个无法做到完美的问题,尤其在一个复杂的大型系统中需要考虑方方面面的问题,包括 security, availability, usability, consistentcy, performance,extensibility 等等。除了那些完全不做的,大部分公司都会根据自身的需求,环境,资源以及工程师的能力等,设计和开发适合公司实际情况的解决方案。有做的好的,也有坦诚做的不好的,还有自己认为做的好的但其实经不起真正考验的。各种各样的都有。

就算在同一个公司,很多也会有不同的解决方案并存。有些是因为历史原因,比方说早期用方案A,后来开发了更牛逼的方案B,但没有把A完全干掉;或者扩张原因,比方说兼并了一个用不同方案的别家公司;又或者是政治原因,不同部门谁都不屌谁,各自用自认为合适的方案。  无论公司选择什么方案,因为话题的敏感性(法律原因,或者圈内的潜规则,或者仅仅是不想当出头鸟而被黑客们盯上),绝大部分都不会公开数据加密的细节。同样原因,这篇文章也不会涉及笔者公司怎么做数据加密的具体细节。想到哪儿写到哪儿吧。


先说为什么要做数据加密。越来越多的数据泄露事件,比方说 Yahoo 2013年被盗超过10亿用户信息 [链接1], Yahoo 2014年又被盗超过5亿用户信息 [链接2], LinkedIn 被盗一亿多用户密码 [链接3],Ashley Madison 被盗三千多万用户数据以及大量支付信息 [链接4],Target 被盗近七千万用户数据和银行账号 [链接5],Adobe 被盗三千八百万用户数据 [链接6] 等等,以及由此导致的大量法律纠纷和巨额赔偿,还有很多很多大大小小没有被公布的安全事件,都说明了数据加密和保护的重要性。

说到这些安全事件中用户密码的保护,插个题外话。笔者曾经跟很多工程师(包括很多应用领域专家)聊天的时候,都会被问到,为什么笔者认为仅仅 Hash 用户密码是不够的。很多人(包括网上的很多文章)都误认为用户密码只要 Hash了,就安全了,其实不然。不说 weak Hash 函数诸如 RC4 [链接7], MD5 [链接8]就算用 Bcrypt [链接9],KDF [链接10] 等运算复杂的Hash函数,虽然能防 Rainbow Table Attack [链接11],但对 Dictionary Attack [链接12] 却是无效的。当然这不是 Hash 函数本身的错,而是很多人会选一个容易记的密码,而这类密码往往 entropy 不够,很容易被解密。对用户密码而言,笔者一直建议不仅需要Hash,还要加密 (比方说用 keyed hash function,or MAC) [链接13]

还有很多公司要做加密不仅仅是因为保护用户隐私,更是法律法规的要求,不得不做。有些涉及特殊数据,如信用卡号码,那就要做 PCI (The Payment Card Industry Data Security Standard );如用户健康信息,那就要做 HIPAA (The Health Insurance Portability and Accountability Act)等等。

在笔者看来,任何一个收集以及存储客户数据的公司,就算是初创公司,都应该认真对待这个问题。在圈内我们常说,不是系统会不会黑,数据会不会被盗,而是何时被黑被盗的问题。也许有人会说,就算偷了,盗了,那又如何?这种事可大可小,笔者私下就知道有公司被黑后,被迫关门了的。所以安全领域内的及时投资,对公司长期来讲都是非常有益的。对重要数据(包括系统密码,用户信息等)进行有效保护,数据被黑被盗的门槛就高了;就算有一天系统被黑了,数据被盗了,也能把损失降到最小。


你说数据加密这么重要,怎么做呢?如果把加密这个问题抽象出来,其实就是要计算一个加密函数:
encrypt(data, key)
(当然还有一个函数就是解密,跟加密类似道理,暂且不论)。看上去似乎是一个非常简单的问题,但要把它做好非常不容易。尤其是在一个系统复杂的公司,要考虑的问题很多很多。比方说,密码界有很多算法,应该用什么加密算法,对称的还是非对称的?具体选哪个,AES,DES,RSA,ECC等等,各有什么特点?题外话,笔者在曾经工作过的公司见过很多有趣的例子,比方说有些早期开发人员用 XOR 来加密,或者做点简单的迭代替换,或者自创所谓的加密算法(有点掩耳盗铃的感觉)等等,这些最后都变成 technical debt,需要花很大力气去清理。

每个算法也有不同的变种和模式,各有什么特点,性能如何?如果某个算法被宣布不安全了,如何快速迭代?这个 key 怎么来?多长才是安全的?怎么启动?怎么保存?怎么传播?怎么控制访问权限?怎么知道谁访问了什么?怎么来监控?怎么来预警?怎么来系统性的更新这些 key?key 能不能丢,丢了怎么办?不同的应用可能是用不同的语言写的,怎么兼容?怎么支持大流量等等,等等。还有更加不近人情的要求,比方说如何保证被加密的数据能够 preserve 原始数据的顺序,支持搜索,但又不牺牲安全性等(这方面 MIT 有学者在研究,有兴趣的朋友可以看看他们的论文)。

一个好的加密设计方案,不仅仅方案本身要满足安全上严格的要求,解决上面提到的很多问题,还需要实用,容易扩展和维护。在数据加密变得越来越重要,系统越来越复杂的年代,如果资源允许,应该把加密服务独立出来,然后提供高性能,统一,简单又容易理解的接口来进行数据加密,让应用开发人员很方便的使用,这样他们只需要专注他/她所擅长的领域,而不需要去思考怎么解决安全问题,因为术业有专攻。好的加密方案应该把数据和秘钥的存储分开,并且把存储和运算分开,尤其在 SOA 架构下, 这可能跟很多传统的数据加密方法(比方说直接实用某个语言的内置库加密解密)非常不一样。很多解决方案往往密钥和被加密的数据同时存在一个服务中,结果就是如果那个服务被黑了,那就整个被黑了。下面就捡几个要点简略讲讲。

(1)为什么要把运算和存储的分离?很多需要被加密的数据,往往和具体商业逻辑数据一起,属于不同的服务,比方说支付信息属于支付服务,护照号码属于用户服务等。把运算和存储分离可以带来很多好处,比方说:
  • 加密服务变得简单和高效。因为不需要存储那些被加密的数据,加密服务系统不会很复杂,也不需要负责存储系统所带来的维护,扩展等诸多问题;
  • 加密服务的安全性能提高很多。因为运算和存储的分离,如果仅仅是被加密的数据泄露(比方说数据库被盗),那些数据就没法被解密,因为黑客没法从外部访问加密服务。如果仅仅是客户服务被黑,想要盗取大量数据并且通过加密服务来解密而不被发现也很难。如果仅仅是加密服务服务被黑,因为加密服务本身并不拥有数据,被泄露的数据也不会很多。只有当加密服务和客户服务同时被黑,才会泄露大量数据,而同时能够侵入加密服务和客户服务的难度要高很多很多;
  • 灵动性。因为数据属于客户服务,不同的客户可以对数据进行不同的处理,比方说不同的有效性规则,数据交易完整性等等。

(2)其次是 granular control。假设支付服务要求加密/解密信用卡号码,用户服务要求加密/解密护照号码,如何能保证用户服务不能加密/解密信用卡号码。这就需要解决两个基本问题:客户认证(authentication)和权限控制(authorization)。怎么做客户认证(authentication)?客户认证要知道每一个请求是谁发出的。因为只有知道客户是谁才可以进行权限检查。常用的有基于客户证书的(如 client certificate over TLS),基于 OAuth(开放授权)的,或者各种各样定制的方案,如基于 Curve25519 [链接14] 等等。笔者一般遵循两个原则:
  1. 是不是业界公认的。如果不是,最好避免。业界公认的解决方案往往经过过严格的检验, 评价,批评,经得起考验;
  2. 有没有广泛的类库支持,以及多语言的支持。如果有,可以节省大量的开发以及维护的时间和精力。

(3)数据监控和预警。为了审计以及安全的需求,一般要对加密服务做很多的数据监控,预警的工作。这样可以知道谁在访问这些数据,何时访问的,怎么访问的,访问的模式是怎么样的。监控系统还需要侦测异常的流量变化,进行流量控制以及快速的反攻击保护。

(4)最后,重中之重,怎么保护 root key?无论是用哪种 envelope encryption的变种,都会涉及到怎么保护 root key。这是一个很有意思的话题,但篇幅关系就不展开来讲了。常见的有用 secret sharing [链接15] 的一些变种方式,也有通过公证人公证整个过程藏在银行保险箱的,也有藏在创始人地下室的:)怎么来 bootstrap 和 deploy 这个 root key 到加密服务里也是一个非常有意思和挑战的问题。

总的来说,数据加密不是一件神秘的事情,但要做好非常不容易,需要一定的技术积累和资源的投入。做任何一个安全系统,风险都不小。圈内人第一反应是怀疑,因为职业病;圈外人很多也觉得重要,但不关心,或者说不知道怎么关心。但不管如何,无论是因为潜在的法律风险还是用户的信任风险,这种安全上的投入从长期来说一定是值得的。


链接1:http://money.cnn.com/2016/12/14/technology/yahoo-breach-billion-users/
链接2:http://money.cnn.com/2016/09/22/technology/yahoo-data-breach/?iid=EL
链接3:https://techcrunch.com/2016/05/18/117-million-linkedin-emails-and-passwords-from-a-2012-hack-just-got-posted-online/
链接4:https://www.wired.com/2015/08/happened-hackers-posted-stolen-ashley-madison-data/
链接5:http://money.cnn.com/2015/10/14/pf/target-pin-credit-card/index.html?iid=EL
链接6:http://krebsonsecurity.com/2013/10/adobe-breach-impacted-at-least-38-million-users/
链接7:https://en.wikipedia.org/wiki/RC4
链接8:https://en.wikipedia.org/wiki/MD5
链接9:https://en.wikipedia.org/wiki/Bcrypt
链接10:https://en.wikipedia.org/wiki/Key_derivation_function
链接11:https://en.wikipedia.org/wiki/Rainbow_table
链接12:https://en.wikipedia.org/wiki/Dictionary_attack
链接13:https://en.wikipedia.org/wiki/Message_authentication_code
链接14:https://en.wikipedia.org/wiki/Curve25519
链接15:https://en.wikipedia.org/wiki/Secret_sharing

Popular posts from 产品随想的博客

《逢いたくていま》──仁医主题曲

原始链接: 听歌学日语 | 唱哭很多人的《逢いたくていま》 あ いたくていま - MISIA 现在好想见你- MISIA 初 はじ めて 出会 であ った 日 ひ のこと  覚 おぼ えてますか 第一次相遇的那天 你是不是还记得呢?   過 す ぎ 行 ゆ く 日 ひ の 思 おも い 出 で を  忘 わす れずにいて 那些过去日子的回忆 我一直没有有忘记   あなたが 見 み つめた  全 すべ てを  感 かん じていたくて 凝视着你 这一切的全部 我都想要感觉   空 そら を 見上 みあ げた 抬头仰望天空   今 いま はそこで  私 わたし を  見守 みまも っているの? 你到现在是否还在那里守护着我?   教 おし えて… 请你告诉我 今 いま   逢 あ いたいあなたに 现在好想见你 伝 つた えたい 事 こと がたくさんある 有好多想要告訴你的事情   ねえ  逢 あ いたい  逢 あ いたい 呐 好想见你 好想见你   気 き づけば  面影 おもかげ   探 さが して  悲 かな しくて 如果能注意到的话 你的面容 是在寻找着 还是悲伤着 どこにいるの?  抱 だ きしめてよ 到底在哪里呢? 好想抱紧你 私 わたし はここにいるよ ずっと 我 会一直在这里 一直等你 もう 二度 にど と 逢 あ えないことを  知 し っていたなら 如果能早点知道 已经再也无法相见   繋 つな いだ 手 て をいつまでも  離 はな さずにいた 我会牵在一起的手 永远都不会放开   『ここにいて』と そう 素直 すなお に  泣 な いていたなら 如果当初诚实哭泣地告诉你『留在我身边』的话   今 いま もあなたは  変 か わらぬまま 现在的你是否也依然不变地   私 わたし の 隣 とな りで ...

Interview with Steve Jobs, WGBH, 1990

Interviewer: what is it about this machine? Why is this machine so interesting? Why has it been so influential? Jobs: Ah ahm, I'll give you my point of view on it. I remember reading a magazine article a long time ago ah when I was ah twelve years ago maybe, in I think it was Scientific American . I'm not sure. And the article ahm proposed to measure the efficiency of locomotion for ah lots of species on planet earth to see which species was the most efficient at getting from point A to point B. Ah and they measured the kilocalories that each one expended. So ah they ranked them all and I remember that ahm...ah the Condor, Condor was the most efficient at [CLEARS THROAT] getting from point A to point B. And humankind, the crown of creation came in with a rather unimpressive showing about a third of the way down...

犀流研习班第十期001-2讲听课笔记

一. 杂谈   1. Max  逼真的效果图和视频   2. SU  显示模式,费力可以作出好看的效果图   3. Maya  支持Nurbs,但不快捷,对CAD导出也不方便

产品随想 | 周刊 第69期:Do not go gentle into that good night

Products Windows Apps That Amaze Us   https://amazing-apps.gitbook.io/windows-apps-that-amaze-us/ 令人精细的Windows App 文物出版社   https://book.douban.com/press/2456/ 这是一个宝藏出版社,出品书籍质量非常高,大开眼界 blind   https://www.teamblind.com/ 老外的匿名职场社交工具,挺有意思,看看硅谷的meme 中国科学技术大学测速网站   https://test.ustc.edu.cn/ 看着还不错,挺靠谱的 底层代码是LibreSpeed   https://github.com/librespeed/speedtest 能不能好好说话?   https://github.com/itorr/nbnhhsh 也是我的一个痛点 Tree Style Tab (aka TST)   https://github.com/piroor/treestyletab 一个超强的浏览器扩展插件,树状呈现浏览器标签 Failory Pitch Decks   https://www.failory.com/pitch-deck 超级多的融资计划投资板,Pitch Book AutoCut   https://github.com/mli/autocut 用文本编辑器剪视频 全网漫游指南   https://tagly.notion.site/tagly/a333efd8c3e54e12b123acd541e8d3e6 数字时代的指引,希望他们成功 IT eBooks   https://it-ebooks.info/ IT书籍下载 ToastFish   https://github.com/Uahh/ToastFish 一个利用摸鱼时间背单词的软件。 利用Win10通知栏,出现、背单词 Ideas 沈向洋:IDEA 如何找到创新的「甜区」   https://mp.weixin.qq.com/s/OlI5VUxQKU_ijWZClQCG0Q AIGC How Did Nor...

产品随想 | 周刊 第115期:2024.5.16 Great libraries build communities

Loop   https://github.com/MrKai77/Loop Loop is a macOS app that simplifies window management for you! 我的电视 my-tv   https://github.com/lizongying/my-tv 我的电视 电视直播软件,安装即可使用 When we think about this technology, we need to put human dignity, human well-being—human jobs—in the center of consideration. ————Fei-Fei Li Author Talks: Dr. Fei-Fei Li sees ‘worlds’ of possibilities in a multidisciplinary approach to AI   https://www.mckinsey.com/featured-insights/mckinsey-on-books/author-talks-dr-fei-fei-li-sees-worlds-of-possibilities-in-a-multidisciplinary-approach-to-ai Randy Ubillos   https://apple.fandom.com/wiki/Randy_Ubillos Randall Hayes "Randy" Ubillos is the original software engineer behind Adobe Premiere and Final Cut Pro. 影响全球视频制作的男人, Reminders MenuBar   https://github.com/DamascenoRafael/reminders-menubar Simple macOS menu bar application to view and interact with reminders. Developed with SwiftUI and using Apple Reminders as a source. Bad libraries build colle...

产品爱好者周刊 第36期:走进Linux

Products OpenShot   https://github.com/OpenShot/openshot-qt OpenShot Video Editor is an award-winning free and open-source video editor for Linux, Mac, and Windows 开源的视频剪辑工具,跨平台 Run   https://github.com/The-Run-Philosophy-Organization/run 润学全球官方指定GITHUB,整理润学宗旨、纲领、理论和各类润之实例 Dozer   https://github.com/Mortennn/Dozer Hide menu bar icons on macOS ThisIsWin11   https://github.com/builtbybel/ThisIsWin11 Win11的隐私保护 RoundedTB   https://github.com/torchgm/RoundedTB Add margins, rounded corners and segments to your taskbars! Droptop Four   https://github.com/Droptop-Four/Basic-Version Droptop Four is the fourth iteration of the popular dropdown app launcher for Windows & Rainmeter. LibreTube   https://github.com/Libre-tube/LibreTube An alternative frontend for YouTube, for Android. nheko   https://github.com/Nheko-Reborn/nheko Quaternion   https://github.com/quotient-im/Quaternion 多平台的Matrix客户端 FluffyChat   https://fluffychat.im/ Phone端的Matrix...

Apple's One-Dollar-a-Year Man, By Steve Jobs, 2000

(FORTUNE Magazine) – Now that Steve Jobs has showed his hand on Apple's Internet and system software strategies and dropped the "interim" from his title, other questions loom. He's always denied it, but isn't it true that his old company, Next, did wind up taking over Apple? Will there ever be an encore to the 15-year-old Macintosh? Short of that, does Apple have any plans to jump into the "Internet appliance" fray? Will Apple ever build computers for business people again? And what, pray tell, does Steve think of all these young Internet zillionaires? Let's ask. Practically every technology that your old company, Next, possessed when Apple acquired it in 1997 is now being used by Apple in some strategic way. This must seem like sweet vindication.  The thing about Next was that we produced something that was truly brilliant for an audience that our heart really wasn't into selling to--namely, the enterprise. I suppose if you were wr...

产品随想 | 周刊 第43期:历史上的今天

Products Huberman Lab   https://hubermanlab.com/ 一款聚焦于健康的播客 今日热榜   https://tophub.today/ 聚合展示,国内各热门榜单,对跟进热点非常有帮助,热点运营的好帮手 SketchyBar   https://github.com/FelixKratz/SketchyBar A highly customizable macOS status bar replacement Mac菜单栏定制 自定义程度很高,看作者展示的案例,暂时没想出这样的好处(不过应用本身的编辑,确实也没啥意义)生命在于折腾吧! Thanks-Mirror   https://github.com/eryajf/Thanks-Mirror 整理记录各个包管理器,系统镜像,以及常用软件的好用镜像,Thanks Mirror。 Musicn   https://github.com/zonemeen/musicn 一个下载高品质音乐的命令行工具,音乐来源: 咪咕 Planet Minecraft A creative Minecraft community fansite sharing maps, minecraft skins, resource packs, servers, mods, and more. 里面有很多动人的故事 可能是世界上最大的Minecraft社区,从2010年至今 The Uncensored Library   https://www.uncensoredlibrary.com/en blockworks   https://www.blockworks.uk/ "Distinctive maps for Minecraft that have educated players and risen to the level of art" 游戏也可以让人有更高的实现,而不仅仅是沉迷其中,国外游戏厂商比我们做的好太多 Minecraft_Memory_Bypass_GUI   https://github.com/xingchuanzhen/Minecraft_Memory_Bypass_GUI 绕过Minecraft...

Steve Jobs: `There's Sanity Returning', 1998

Nobody can doubt the charisma of Steven P. Jobs. The interim CEO of Apple Computer Inc., who returned to the company last July after his ignominious 1985 ouster, has brought back his legendary vision, impatience, and infectious passion for the Macintosh. Jobs spoke to Business Week Correspondent Andy Reinhardt in Apple's stark, fourth-floor boardroom, just after the company rolled out its new software strategy on May 11. Note: This is an extended, online-only version of the Q&A that appears in the May 25, 1998, issue of Business Week. Q: Now that you've introduced the new, bold-looking iMac, are you going to do some radically different products? A: There's a lot of talk about such things -- about handhelds, set-top boxes. A lot of computer companies have been searching for a consumer product. My view is that the personal computer has been the most successful consumer product of the last 10 years. What we have to do, what the industry stopp...

有关密码学 Cryptography

% Crypto 101 % CUI Hao 密码学 Cryptography 加密 :军事、商业保密、身份认证、日记... 计算机出现前:加密 人类语言文字 。 计算机出现后:加密比特流(ASCII文本、网络协议) 古典替换式密码 凯撒密码 文本中每个字母在字母表上后移 k 个位置。 ATTACK -> DWWDFN (k=3) IBM -> HAL (k=-1) 改进 重新排列 字母表(单字母替换): alphabet: ABCDEFGHIJKLMNOPQRSTUVWXYZ map to: RCPWUXNQBZFMYTLIEGVDJOAKHS example: ATTACK -> RDDRPF "密码组合"有 26! 种之多。 维吉尼亚密码 每k个字母一组,与长度k的密码做 加法 : ATTACKATDAWN (plaintext) + LEMONLEMONLE (key: LEMON) = LXFOPVEFRNHR (ciphertext) 多个字母的凯撒密码。 替换式密码 substitution cipher 单字母替换/多字母替换/密码本... 加密算法:映射 密码:描述映射关系 解密算法:反过来映射 另一种设计方案 也许是中国人发明的吧: 群书万卷常暗诵, 主人顾盼千金重。 药物楚老渔商市, 丸剑跳踯霜雪浮。 移位式密码 ( transposition cipher ) 列移位密码 按密码重新排列文本各列,然后竖着读出来: KEY: 6 3 2 4 1 5 TEXT: W E A R E D     CT:     I S C O V E ==> EVLNEACDTKESEAQROFOJDEECUWIREE     R E D F L E     E A T O N C     E Q K J E U     (WE ARE DISCOVERED. FLEE AT ONCE) ...