论坛首页 移动开发技术论坛

未来世界是个“大型隐私交换现场”,不如趁早认识一个“隐私红娘”

浏览 896 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2018-08-08  
wp7
        昨天,我的一位女票在公司客串了一天红娘。
        起因是一个资深小鲜肉想要让她帮忙介绍个姑娘。她把鲜肉的照片挂在朋友圈,于是引发了大量小姐姐好奇。
        于是,信息交换量像火山一样迅速喷发以至于场面一度失去控制。小鲜肉和小姐姐纷纷给“红娘”发私信。到这为止剧情都很烂俗,但是骚操作紧接着来了。
        他们的诉求很有意思:
        小姐姐的诉求:在不把我的身高、体重、家庭背景、经济状况、性格特点暴露给小鲜肉的前提下,了解他的身高、体重、家庭背景、经济状况、性格特点是否和我匹配。
        小鲜肉的诉求:在不把我的身高、体重、家庭背景、经济状况、性格特点暴露给小姐姐的前提下,了解她的身高、体重、家庭背景、经济状况、性格特点是否和我匹配。
       


        后来她搞了一个模板,让所有人填写
        “红娘”(也就是我女票)问:我把你们微信交换一下,你们自己聊行不?Ta 们同时开心地表示:不行。于是,所有的信息必须汇集到红娘身上,再由她来统一判断,她为此忙了一天,连自己的工作都没顾得上打理。
        晚上,女票跟我吐槽,没想到人心如此复杂:“左右两边都想保护自己的隐私,同时还都想知道别人的隐私。”
        我推了一下眼镜,平静地说:这是个典型的“私有集合求交”问题。
        女票说:“纳尼?求交?”
        没错,今天的故事,就从这个“求交”问题说起。
        “私有集合求交”,是不久前另一位帅哥在采访中告诉我的,他就是百度安全实验室的 Dingelish。(Dingelish 文能起笔安天下武能上马定乾坤,上得厅堂下得厨房,已婚勿念,女粉止步,恕不奉送照片。)
        他研究的项目叫做 Rust SGX。没错,这个“每个字母都认识但合起来完全不明白什么意思”的项目,正是用来辅助解决“红娘难题”的。
        所以各位腰间盘同志请坐好,我们开始学突出!
一、几个有趣的问题
        他给我讲了几个既有趣又尴尬的场景。
        1)富二代王XX和李XX,有一天在 KTV 里和妹子探讨人生的时候,突发奇想要比比谁更有钱。但是出于隐私考虑,他们又都不愿告诉对方自己有多少钱,这怎么办?
        2)打扑克的时候,A手里有23456,B手里有45678,他们都不想让对方看自己的牌,却想知道彼此的牌有哪些是重复的(456)。这又怎么办?
        也许你已经明白了,“富二代斗富难题”、“比较手牌难题”和“红娘难题”本质上是一样的,这就是之前说的“私有集合求交问题”。
        我猜有人已经恍然大悟,明白了这个问题的普遍性,有的童鞋可能还懵着。你可能会问,这算啥破问题,富二代比有钱跟我的生活有毛关系吗?我可以负责任地告诉你,不仅有关系,关系比你想得更深。在文章最后,我会举几个让你大吃一惊的例子,这里先卖个关子。
        现在我们讨论,这样的问题怎么解?
        Dingelish 说,有两种方法:
        1)使用数学方法。
   


        这种方法叫做“多方安全计算”。
        这个方法可以参考中美科学院双料院士,计算机泰斗姚期智早年提出的“乱码电路”理论。简单来说就是进行一系列复杂的运算,最终把两个数据变得亲妈都不认识,在比较出大小的同时,又不暴露原始的数据。
        这种计算方法适用范围有限,到现在为止都是密码学专业模式研究的问题。原谅中哥不是霍金,真的科普不动。但是有一点是确定的:
        这种操作计算特别复杂,要耗费巨大的算力,巨长的时间和巨多的钱,所以不适合富二代在 KTV 里吹牛这个场景。(当然在很多其他场合也不适合)
        2)利用“可信第三方”。
        这种问题还有个简单的方法。找一个面似包公,样貌可靠的姑娘,然后两个人都把自己有多少钱告诉她(是要打开银行账户给人家看的那种,不是空口吹牛),姑娘摸着良心判断一下谁有钱,就行了啊。
        你看,在最开始的“红娘问题”中,红娘就承担了这个“中间人”的角色。
        扯了这么多,我其实是为了介绍,在你们每个人的电脑中,那块 Intel 芯片里,其实都有一个公正的“红娘”。这就是         Intel 的 SGX 技术。
二、SGX 技术
        在网络世界里,与一个程序相关的角色有两个:1)程序开发者;2)程序使用者。
        他们是一对天生冤家:
        使用者怕开发者拿走自己的隐私数据,转手卖掉;
        开发者怕使用者盗走自己的关键参数,转手盗版。
        总之,麻杆打狼——两头怕,经常吵得不可开交。
        这时候,Intel 就挺身而出:
        灯,等灯等灯,既然你们大家都喜欢在电脑上用我的芯片(不喜欢也没别的选),那不如我来帮你们做个“红娘”:软件可以把核心参数加密,秘钥放到 Intel 芯片里,用户也可以把核心数据加密,秘钥也放到芯片里。
        这就是大名鼎鼎的 SGX 技术。
        这就等同于一个黑盒子,允许在两方互不接触的情况下,完成合作。从本质上说,Intel 充当了“可信第三方”。
        举个小栗子:
        如果评选当今世上最不互相信任的一对 Partner,当选第一名的估计是:云计算厂商和它上面的用户。
        如果把云计算服务商比作一个五星级宾馆,那么它的客户就是租用房间的客人。
        客人担心宾馆工作人员私自进屋偷东西;
        宾馆担心用户在屋子里搞破坏。
        而 Intel SGX 就解决了这个问题。它就像房间里的保险箱,房客自由设置保险箱的密码,即使酒店工作人员偷偷打开房门,他们也打不开这个保险箱;而这个保险箱足够小,只能放一些文件(数据),藏不了冲锋枪手榴弹之类的杀伤性武器,所以不会对酒店造成威胁。
  


        酒店房间中的保险箱。
        大概就是这样,
        灵魂画手中哥尽力了。。。
        怎么样,技术之美感觉到了么?
        OK,明白了 Intel SGX ,本期节目到此结束。
        等等,好像忘记说今天的主要内容了。那百度安全实验室研究的 Rust SGX 到底是什么呢?
三、Rust SGX
        其实,SGX 技术固然好,但它并不是无懈可击:
        1、稍微多说一句,SGX 的加密功能,不是由软件实现的,而是由硬件电路实现的。用他们程序员的黑话就是被“拍在电路板上”的,相当于把一种技能写进了 CPU 的基因里,安全性很高。
        2、硬件是安全了,但如果跑在 SGX 里面的软件本身有漏洞,那之前所有的努力不就白搭了么?
        我再用五星级宾馆给你举个例子:
        你入住了五星级宾馆。你不相信宾馆的工作人员,于是把秘密文件放在了房间的保险柜里,自己设置了密码。但是,一个间谍已经先你一步,在房间里藏了一枚摄像头。你从保险柜里拿出文件查看的时候,头顶的摄像头已经拍下了秘密文件上的每一个字。可谓钳工进气。。。
        在赛博世界,这个间谍正是通过软件漏洞进来的。如果硬件极其安全,而软件不安全,这就像吃鸡的时候遇到了猪队友,纵然你落地八倍镜,他也能分分钟保你成盒。
        你可能会说,让程序员编一个没有漏洞的程序不就行了嘛?
        我给你讲个故事:晋惠帝执政时,全国爆发饥荒,善良的皇帝问:“百姓无粟米充饥,何不食肉糜?”
        实际上,C/C++语言和漏洞永远是“相爱相杀”的。
        虽然 C 语言最为流行广泛,但它也更为自由。这就像我们日常用口语交流,经常有误会产生。举个例子。A说,我的头像牛逼吗?B说,像。
        因此在 C 语言环境下,要想写出完全没有漏洞的程序,确实非常困难。那么,这个世界上有没有比较严谨一点的语言呢?
        候选人有三位:谷歌几位大神开发的 Go 语言,火狐核心团队提出的 Rust 语言,还有苹果推出的 Swift 语言。
        2016年底的时候,经过各种严格的“血检尿检胸透核磁共振”,几位大神觉得还是 Rust 抗蹂躏性更好,更适合这个需要绝对安全的场景。
        因为 Go 语言在处理程序并发上有优势,但它的底层调度机制相当复杂,完整的安全性能移植进 SGX 需要长期投入的成本太大,而且 Go 不适合被第三方程序作为库来调用;
        Swift 语言目前与 Object C 语言耦合太紧,还不够稳定;
        Rust 的内存管理模式很新,不仅严格保障内存安全,还不依赖于“内存清理机制”(GC),在底层场景里更有优势。总之,Rust 写出来的东西没有溢出,是很优雅的语言。
        Dingelish 说。
        举个例子,你是没办法用 Rust 写出一个带有“心脏滴血”漏洞的 TLS 协议的,因为根本编译不过去。
        (有关 Rust 内存安全性,可以参考我之前对 OASES 其他技术的介绍:《MesaLock Linux:能用在黑匣子里的操作系统是什么样?》《一把锁的传奇——从 OpenSSL 到 MesaLink》 )
        彼时,Intel 已经自己给程序员们提供了一套使用C语言编写 SGX 的开发套件,但百度安全实验室决定给普天之下的程序员们开发一套用 Rust 编写 SGX 程序的开发套件:Rust SGX!
  


        Rust SGX 在 GitHub 上的主页
        回忆起往事,这个“移植”工作,做起来比说起来难多了。“几十万行代码,估计我们写不出来,即使写出来,也不知这种冷门的语言有没人用。”这种自暴自弃甚至就是他们 2016年刚开始做 Rust SGX 时的心态。
        但是随着他们一天天死磕,慢慢深入理解了 Rust 语言和 Intel SGX 的真谛,发现Rust 和 SGX 竟然像初恋一样,充满酸酸甜甜的美好滋味了。而与此同时,全球使用 Rust 语言做开发的社区,突然像 TNT 爆炸那样膨胀了起来。
        在一次基因组大数据的竞赛上(iDASH),有一组选手使用百度安全的 Rust SGX 的开发环境编写了一个基因组分析程序。现场 Intel 的工作人员大吃一惊。纳尼?一个中国公司,不远万里帮助我们搞出了一套 Rust SGX 的开发环境,这是什么精神?这是国际主义的精神,这是共产主义的精神。
        Intel 十分感动,把 Rust SGX 的链接直接挂到了自己官网上。
       


        software.intel.com/en-us/sgx
        这“妙手回春”的锦旗一挂不要紧,全球的开发者都像发现了宝贝,跑到 Github 上来围观。很多人都跃跃欲试,想用 Rust SGX 开发自己的安全程序。
四、把 Rust SGX 变成现实有多难呢?
        把 Rust SGX 变成码农们喜闻乐见的开发工具,起码要翻三座大山:
        1)SGX 中的数据,其实分了可信区域和不可信区域。
        打个比方:如果你是个处女座的人,桌子上的东西必须按顺序摆放,凡事有条有理,但你难免和不严谨的同学同事合作,所以你必须能在脑海中,分清哪些数据是自己的“可信区域”,哪些数据是别人的“不可信区域”。
        所以,Rust SGX 实际上就要给程序员提供这两种能力。不仅需要提供可信区域的 SDK,还需要提供不可信区域的 SDK,这就使得工作量变大很多。
        2)然而,Intel 本身的帮助文档,就有很多不清晰的地方。
        我觉得,用 Rust 写一遍 SGX 的 SDK,大概相当于用山西话翻译了一遍英文圣经。你既然要做翻译,首先你得明白人家上帝究竟是怎么想的。这需要对 Intel SGX 的技术实现有非常深刻的理解。边猜边蒙直至深刻地理解那些 Intel 大牛写的 SGX 代码,这是非常考验人的。
        结果一年下来,百度安全这些小哥眼睛都绿了,但成果斐然。这么说吧,他们研究 SGX 的时候,还顺便帮 Intel 发现了不少程序里的 bug,可见下了多深的功夫 。
        3)最难得的是,他们还为开发者搞了很多便利的工具。
        比如,除了 libc和libstd,他们还开发了很多第三方库。而且,他们还用 Rust 重写了无敌的编译器 WebAssembly。
        重写这些辅助工具,其实会耗费很多时间。但是,平心而论,越是方便,才越会让更多的程序员加入用 Rust 开发软件的行列。
五、一个有关“信任”的未来世界
        很多人说,隐私和易用性是一对天然的矛盾。
        你有没有过类似的纠结:
        当你使用地图软件导航的时候,你想让它给你推荐最佳路线,却不想让它知道你常去的地方。
        当你使用点评软件找饭店的时候,你想让它帮你找到适合你口味的饭店,却不想让它记录你去过哪些馆子。
        你想让电商平台给你推荐适合的衣服,却又不想让他们掌握你的购物记录。
        人性虽然不完美,但你总要选择信任一个人。
        Dingelish 说,所有这些非信任状态下的协作,都可以通过一个“可信第三方”来解决。而目之所及,全球范围内适用性最广的,公信力最好的,只有 Intel SGX,而在 SGX 中,最可信的开发环境就是 Rust SGX。
        虽然 Intel 在 2016年才正式推出 SGX 技术,但是所谓“可信第三方”的模式,几乎每个人都体验过:
        拿出你的手机,用指纹或者人脸解锁。
        在这一瞬间,你就已经利用了“可信第三方”技术。因为,你的指纹和人脸这类敏感信息,就是存在了手机处理器中的一个独立区域。这个区域的所有数据都是加密的,而且不对外提供,它只能做一件事,就是“验证”:
        验证现在的指纹和预先录入的指纹是否一致,验证现在的人脸和预先录入的人脸是否一致。一致就打开手机,否则不开。就是这么简单。
        在整个过程中,你不用信任手机厂商,手机厂商也不用信任你,但你们仍然能在零点一秒内达成合作——把屏幕解锁。这是因为你们都信任一个人——芯片厂商。(当然在 iPhone 中,手机厂商和芯片厂商都是一个人。。。)
        Dingelish 认为:
        1、信任这个词,说到底还是需要有人为此负责。
        2、所以在现有科技条件下,信任一个最有公信力的第三方,是最好的选择。
        3、在全球 PC/服务器 生态里,人们最信任 Intel,也只能信任 Intel。
        就在不久前,2018年5月,Rust SGX 发布了 1.0.0 版本,集合了常用的开发库和第三方工具,已经正式“开门迎客”了。
        需要强调一下的是,Rust SGX 是一个完全开源的免费软件,所以开发者可以直接登录 GitHub 来使用。
        1、从公开信息来看,有很多著名的区块链项目已经采用了 Rust SGX 来编辑他们的智能合约机制。
        2、在 GitHub 的页面上,也可以看出这个项目有很多活跃的分叉,被改造用于不同的场景。
        3、这个项目已经获得了三百多颗星星,在我写这篇文章的时候,只比 Intel 原生的 SGX 项目差四颗星星。(如果你忍不住想帮他们点个赞,这里是 Rust SGX 的 GitHub 链接:https://github.com/baidu/rust-sgx-sdk)
在未来,我们很可能生活在这样的世界里:
1、
        每一辆车上,都搭载了人工智能自动驾驶系统,但是这些系统需要不同的路况数据来改进自己。这样,每两辆汽车错车的时候,他们就可以利用“第三方隐私保护技术”进行数据交换运算,在不拿到对方车辆具体的行驶数据的情况下,可以学习到对方的驾驶经验。
2、
        每个人,都携带一个信誉分数。你的驾驶习惯决定了你的车险保费,你的消费习惯决定了你的信用卡额度,你的收入情况决定了你是否可以免押金入住宾馆。而这些,都需要征信公司根据你的记录计算。于是,一个利用“第三方隐私保护技术”开发的软件可以在不泄露你财务信息的情况下,替你算出信誉分数,从各个方面方便你的生活。
3、
        每个人都能通过全基因组测序,获知自己容易罹患的疾病。你可以放心地把自己的全部基因数据,交给基因测序机构,他们在“第三方隐私保护环境”中开发的软件下对你做基因检测。这就保证了你的基因数据绝对不会泄露的同时,机构还给出了对你的诊断。
        如此想象,数不胜数。我相信这不是脑洞,而是未来。我们要做的,只不过是找到一条通往未来的更平稳的路。
        百度安全的 Rust SGX,可能就是这样一种尝试。
        对啦,再说一句,我和百度安全实验室的小哥们关系挺好的。他们都是操守满满的技术宅,会试着用自己的技术想办法帮助智能硬件生态解决问题。所以欢迎大家支持他们。
        再自我介绍一下吧。我叫史中,是一个倾心故事的科技记者。我的日常是和各路大神聊天。如果想和我做朋友,可以关注微博:@史中方枪枪,或者搜索微信:shizhongst。
  • 大小: 43.2 KB
  • 大小: 22.1 KB
  • 大小: 18.4 KB
  • 大小: 20.4 KB
  • 大小: 16.2 KB
论坛首页 移动开发技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics