昨天,我的一位女票在公司客串了一天紅娘。
起因是一個資深小鮮肉想要讓她幫忙介紹個姑娘。她把鮮肉的照片掛在朋友圈,于是引發了大量小姐姐好奇。
于是,信息交換量像火山一樣迅速噴發以至于場面一度失去控制。小鮮肉和小姐姐紛紛給“紅娘”發私信。到這為止劇情都很爛俗,但是騷操作緊接著來了。
他們的訴求很有意思:
小姐姐的訴求:在不把我的身高、體重、家庭背景、經濟狀況、性格特點暴露給小鮮肉的前提下,了解他的身高、體重、家庭背景、經濟狀況、性格特點是否和我匹配。
小鮮肉的訴求:在不把我的身高、體重、家庭背景、經濟狀況、性格特點暴露給小姐姐的前提下,了解她的身高、體重、家庭背景、經濟狀況、性格特點是否和我匹配。

后來她搞了一個模板,讓所有人填寫
“紅娘”(也就是我女票)問:我把你們微信交換一下,你們自己聊行不?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。
行業資訊、企業動態、業界觀點、峰會活動可發送郵件至news#citmt.cn(把#換成@)。
海報生成中...