跳至主要内容

白话 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 产品随想的博客

产品随想 | 陪读《乔布斯传》:1-17章

乔布斯经典照片集 坐在麗莎電腦旁。他說:「毕加索曾說:「好的藝術家懂得模仿,佛大的藝術家善於偷取。」因此,窃取偉大的點子沒有什麼好羞耻的。 與蓋茲在電話中達成協議:「比爾,謝謝你支持蘋果。因為你的支持,世界將變得更美好。」 1997年蘋果在波士頓舉行的麥金塔世界大會,蓋茲透過衛星連線在巨大的螢幕上出現。質伯斯說:「我真是笨死了,竟然讓蓋兹以這種方式現身。他讓我看起來好沙小。」 ──时刻自省 前言 The people who are crazy enough to think they can change the world are the ones who do. 只有那些瘋狂到以為自己可以改變世界的人, 才能改變這個世界。 這麼些年來,賈伯斯說起話來的認真與專注態度,著實打動不少人。我們一直保持連絡,即使在他被逐出蘋果之後,我們還有來往。每次他有新產品要推出時,像 NeXT 電腦或皮克斯 (Pixar)的電影,他就會來找我。他常帶我去曼哈頓下城一家壽司店用餐,講起他的產品,渾身散發出光和熱,眉飛色舞的說這是他登峰造極之作。我喜歡這個人。 ──对自己产品深深的爱 他的堅持教我疑惑。人人都知道賈伯斯不道餘力捍衛隱私, 而且我不知道他是否看過我寫的任何一本傳記。我還是不敢立刻答應,只說或許再等等。然而到了 2009年,我接到他太太蘿琳. 鮑威爾打來的電話。她直截了當說:「如果你還想為史帝夫寫傳,最好趕快動筆。」這是他第二次因病向公司請長假。我坦言他早在2004 年得知自己罹患胰臟癌的時候就曾主動邀我寫傳,但我當時對他罹癌的事一無所知。蘿琳解釋說,他們盡量保密,因此當時根本沒幾個人知道。他是在動手術的前夕打電話給我的。 ──和Make Something Wonderful对照起来看 他還說,自從他回到蘋果重新掌權,這十二年來是他創造新產品的高峰期,但他還有更重要的目標,也就是效法惠普的惠立和普克(David Packard),締造一家創新動力無限的公司,進而超越惠普。 ──苹果公司才是乔布斯最得意的产品 他說:「我一直認為,自己是個偏向人文的孩子,但我也喜歡電子的東西。後來,我讀到寶麗來(Polaroid)創辦人蘭德 (Edwin Land)曾說過,一個人能站在人文和科學的交會口,兼容贯通,才是真正的人才。在那當下,我决定要當這樣的人。」他似乎在暗示我,這可以做為傳...

产品随想 | 周刊 第63期:中国城市化的历史思考

Products 李志 · BB   https://github.com/turkyden/lizhi-app 开箱即用,一个珍藏了李志音乐作品集的在线播放器 作者的描述很有意思:我们不能失去信仰~ Watt Toolkit 🧰 (原名 Steam++)   https://github.com/BeyondDimension/SteamTools 「Watt Toolkit」是一个开源跨平台的多功能游戏工具箱,此工具的大部分功能都是需要您下载安装 Steam 才能使用。 语雀为什么没被钉钉吃掉,跟支付宝又是什么关系?   https://www.xiaoyuzhoufm.com/episode/62ed2b1d226f5c1fa0d58357 乱翻书播客推荐 Behind the Curtain   https://www.quiverquant.com/sources/behind-the-curtain/ 我们正在结合我们一直在收集的关于公司游说、国会股票交易和拟议立法的数据,以便让您跟踪华盛顿特区幕后发生的事情您可以使用此工具查看哪些法案正在被国会审议了哪些上市公司正在就这些法案进行游说,以及哪些国会议员交易了这些公司的股票。 民主非常需要这样的信息透明 脑洞大开,给自行车装上倒车雷达和行车记录仪   https://sspai.com/post/73521 佳明-骑行雷达尾灯 Varia RCT 715,非常喜欢,但真的好贵.....3K+ RMB Health 体检报告出现高尿酸,你该如何在饮食方面控制风险?   https://sspai.com/post/73031 Citizenship Consciousness & Privacy 张鸣:中国城市化的历史思考 2019 09 04   https://www.youtube.com/watch?v=rRcPssCkXeI 内核论点是:城市化最重要的有私有产权的商人 这个创作者也值得关注 Run 日本移居指南   https://guoyu.mirror.xyz/bPaDKAcrhJGUbaXu9BWDcdD-F46gBFATTvf_qwZ9Bso 添加加Run模块,润 A Programmer's Guid...

产品随想 | 周刊 第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...

零碎思考 | 關於LLM的閱讀筆記

  通向AGI之路:大型语言模型(LLM)技术精要   https://zhuanlan.zhihu.com/p/597586623 拆解追溯 GPT-3.5 各项能力的起源   https://yaofu.notion.site/GPT-3-5-360081d91ec245f29029d37b54573756 清晰明瞭 A Closer Look at Large Language Models Emergent Abilities   https://yaofu.notion.site/A-Closer-Look-at-Large-Language-Models-Emergent-Abilities-493876b55df5479d80686f68a1abd72f 試圖說明LLM的涌現能力] 如何利用GPT-4打造高效智能信息收集神器   https://lpcv.org/fwc/a/MzU0MDk3NTUxMA==/2247483868/1 學習思路 GPT-4编码教程,如何用AI构建和宣传我的Midjourney网站增强插件   https://op7418.zhubai.love/posts/2254193381183922176 AUTOMATIC1111 GUI: A Beginner’s Guide   https://stable-diffusion-art.com/automatic1111/ 其實就是AI界的雲渲染,挺有意思的 Midjourney还是Stable Diffusion: 你应该选哪个?   https://zhuanlan.zhihu.com/p/617157677 看到作者下方的“註冊會計師”,中國太卷了 树莓派4B刷OpenWrt做路由器的经验+踩坑   https://zhuanlan.zhihu.com/p/451788328 關注其中的坑點 doc.openwrt.cc   https://doc.openwrt.cc/

《Becoming Steve Jobs》Chapter 13 Stanford

Steve was a natural performer who elevated business presentations to something close to high art. But what made him fidgety this day was the prospect of addressing the Stanford University graduating class of 2005. University president John Hennessy had broached the idea several months earlier, and after taking just a little time to think it over, Steve had said yes. He was offered speaking engagements constantly, and he always said no. In fact, he was asked to do so many commencement addresses that it became a running joke with Laurene and other friends who had college or graduate degrees: Steve said he’d accept one just to make an end run around them and get his PhD in a day, versus the years and years it had taken them. But in the end, saying no was simply a question of return on investment—conferences and public speaking seemed to offer a meager payoff compared to other things, like a dazzling MacWorld presentation, working on a great product, or being around his family. “If you loo...

ifconfig参数备忘

       主要指标说明: eth0/lo:网络接口名 Link encap:网络类型

产品随想 | 周刊 第99期:Organize the world's information and make it universally accessible and useful.

MIST   https://github.com/ninxsoft/Mist A Mac utility that automatically downloads macOS Firmwares / Installers. Google's mission is to organize the world's information and make it universally accessible and useful. Google策略是搜索来驱动世界信息 而字节是推荐来驱动世界信息,某个意义上来说,字节是Google的继承者 Reflecting on 18 years at Google   https://ln.hixie.ch/?start=1700627373&count=1 Google的吐槽,哈哈哈 The Little Kernel Embedded Operating System   https://github.com/littlekernel/lk The LK kernel is an SMP-aware kernel designed for small systems ported to a variety of platforms and cpu architectures. 在软件行业越久,就越对操作系统这颗皇冠,感到着迷 ArchiveOS   https://archiveos.org/ 致敬那些存在过的操作系统们 Travis Geiselbrecht   https://tkgeisel.com/ 世界级的操作系统工程师 每一个项目都赫赫有名 一生都在做操作系统 Hiddify-Next   https://github.com/hiddify/hiddify-next A multi-platform auto-client based on Sing-box that serves as a universal proxy tool-chain. This app offers a wide range of capabilities, which are listed below. It also supports a large number ...

产品随想 | 周刊 第86期:Next Generation of AI

  gerev   https://github.com/GerevAI/gerev AI-powered enterprise search engine 聚合了Confluence,Slack,Jira等非常多的平台,还是很不错的 假如有个定位在C端的产品,能让用户自己来定义来源,就更好了,maybe是alist的思路(精准搜索已经被everything承接了) Dalai   https://github.com/cocktailpeanut/dalai Run LLaMA and Alpaca on your computer. 对计算机硬件的要求,并不高 Chatbox   https://github.com/Bin-Huang/chatbox Your Ultimate Copilot on the Desktop. Chatbox is a desktop app for GPT-4 / GPT-3.5 (OpenAI API) that supports Windows, Mac & Linux. Tune-A-Video   https://github.com/showlab/Tune-A-Video Tune-A-Video: One-Shot Tuning of Image Diffusion Models for Text-to-Video Generation Given a video-text pair as input, our method, Tune-A-Video, fine-tunes a pre-trained text-to-image diffusion model for text-to-video generation. Diffusion的本质是模仿和乐高式的重新拼接 Jensen Huang — NVIDIA's CEO on the Next Generation of AI and MLOps   https://wandb.ai/wandb_fc/gradient-dissent/reports/Jensen-Huang-NVIDIA-s-CEO-on-the-Next-Generation-of-AI-and-MLOps--Vmlldz...

产品随想 | 周刊 第85期:e-Residency与数字游民

  David Shambaugh   https://www.google.com/search?q=David+Shambaugh 中国问题研究专家,著作极多 郭玉闪   https://zh.wikipedia.org/wiki/郭玉闪?useskin=vector 中国公共知识分子 我只想好好观影   github.com/BetterWorld-Liuser/autoMovies 刘煜辉:中国资本市场灵魂出窍 最有活力的公司几乎不在A股   https://finance.sina.com.cn/stock/marketresearch/2017-06-23/doc-ifyhmtek7705574.shtml 回看17年的专家讲话,还是挺有水平的,挺多都认可 纽约文化沙龙   https://www.youtube.com/@user-cu2hl5tf6y/videos 视频质量出奇的高,推荐 透视中国政治by吴国光、程晓农 备忘下,貌似评价挺好的一本书 CAPI China Chair Wu Guoguang (吴国光 / 吳國光)   https://www.youtube.com/playlist?list=PLIt1szHhnm_Hso3jGUbfGpnEAbsPOuEVV 因为热爱中国,我们越要看懂中国 AI Canon   https://a16z.com/2023/05/25/ai-canon/ in this post, we’re sharing a curated list of resources we’ve relied on to get smarter about modern AI. We call it the “AI Canon” because these papers, blog posts, courses, and guides have had an outsized impact on the field over the past several years. 希望中国的投資機構,也能有更多的分享與輸出,提升整個社會的認知 Cantonese Font 粵語字體   https://visual-fonts.com/zh/...

初识协议

TCP 面向有连接,能够处理丢包,顺序乱掉+带宽利用与拥堵,因为某些环境至少7次收发,网络资源浪费,而TCP定义各种复杂规范,因此不利于视频会议(音频,视频的数据量既定)等场合使用  UDP 面向无连接,不关注是否收到,常用于分组数据较少,广播通信以及视频通信等领域 ARP:从分组数据包的IP地址中解析出物理地址(Mac地址)的一种协议  FTP 传输文件时建立两个连接,一个是传输连接,一个是控制连接