PlatON創新研究院夏伏彪解析隱私計算技術

在大資料時代中,由於對資料安全和隱私的考慮,例如政府、運營商、網際網路公司收集到的資料,不能透露給第三者,因此形成了一個個資料孤島,資料之間不能互通,資料的價值無法體現。如何應用海量的資料,實現資料流動,同時能夠保護資料隱私安全、防止敏感資訊洩露是當前大資料應用中的重大挑戰。隱私計算就是為了解決這些問題應運而生。

今天,PlatOn創新研究院的夏博士為我們解析隱私計算的各項技術。

現在業界提出隱私計算的時間並不太久,學術界對它的明確定義其實是源於2016年李鳳華博士等人的一篇文章。但是當時的定義過於形式化,實際難以實現。目前隱私計算還是由以資料為核心的大資料行業來驅動的(包括金融、醫療、政務、物流、網際網路等行業在這個資料的隱私保護上有比較強的需求)。

其次,隱私計算也有合規的需求:目前歐盟的GDPR以及美國醫療方面的法規已經比較完備了。國內大資料行業也不能像原先那樣直接賣資料。比如說,兩個企業之間需要資料共享,不能像原先那麼簡單粗暴以交易的形式來做,它會造成個人資料的隱私洩漏以及導致企業面臨處罰風險。比如,企業a和企業b之間做這個資料共享,企業a直接把資料明文丟給企業b;如果b拿到a資料再去賣,那麼a的資料價值確實丟失了,同時伴有隱私洩露的風險。所以從這個層面來說,資料明文共享或者資料明文交易,以後會越來越少。

如何用隱私計算的技術解決現有的資料共享或者資料協同的痛點?行業裡面有一句俗語叫“資料可用不可見”。比如說,a和b之間要去做一個聯合模型訓練,b有自己的模型,然後需要用到a的一些資料來把這個模型建的更加精確。資料原來是以明文的狀態直接流動的,現在我們需要將它處理成密態資料,即以密碼學的處理方式,使得整個建模過程中各方受到了隱私保護,b無法逆推推出a的任意原始資料片段,a無法獲得b的模型資訊。“可用”指的是b最後把a提供的這份資料的價值用到了;“不可見”的意思就是說明文在它的全生命週期中,除了在a的本地以外,其他地方都無法解析獲得。

隱私計算從技術的分類來看,有以下幾個主要方向:首先是以密碼學為核心的隱私計算技術棧,包括安全多方計算、零知識證明以及同態加密等,其次是聯邦學習、可信執行環境以及差分隱私等技術。

差分隱私

差分隱私是一種偏統計學的概念,最早在醫療行業有需求。它的意思是我對一個資料庫加入一些噪聲進行擾動,加完噪聲之後的資料庫和和原始資料庫相比,查詢的準確性仍然很高,同時新資料庫被識別出隱私的概率被最大限度地降低。

差分隱私這個技術的使用場景相對比較有限。比如說當醫院獲取到一些病人的基因資料,但不希望任何人透過這些病人基因資料關聯一些外部的資料庫(比如病人在某個醫院的醫療資訊),識別到病人的身份。當類似於資料庫之間需要做這種聯立攻擊的情況下,可以用差分隱私來保護。但這種技術不屬於主流的隱私計算,因為它沒有辦法去做一些像聯合建模或者資料交集計算這些常用的任務。

TEE

通俗地說,TEE是將所有的任務都丟到一個黑盒子裡面去計算。通常我們會將計算的時候用到程式碼和資料放在作業系統層面。黑盒子是在作業系統裡面的一個特殊的可信執行環境。那這種可信執行環境使得你可以將涉及敏感資料的計算任務都丟到這個盒子裡面。在可信執行環境裡面跑的可信應用是無法和普通的應用做資料互動的。當它跟外部的資料作互動的時候,需要透過特殊的一些安全介面,同時它的執行時安全也做得比較好。

目前,這個技術比較大的問題是它的安全性完全建立在對TEE產品的信任上。國際上Global Platform國際標準化組織最早做這塊的標準。目前實現技術主要有英特爾的SGX、AMD的SEV和還有ARM的Trust Zone等。

隱私計算裡面需要用到的任務,TEE差不多都能跑起來,但是它會有一些侷限性。因為它是一個硬體部署,所以硬體的升級改造通常沒有軟體那麼輕量級和方便。如果硬體出了一個漏洞的話,出現的問題會比較大;以及TEE有時候無法處理一些對網路頻寬和計算資源要去比較高的任務。TEE的好處就是它的設計和架構部署相對比較簡單。

聯邦學習

聯邦學習(Federated Learning, FL)最早是由谷歌提出來的,他們當時要解決的一個問題:谷歌希望將每個人分散式手機上的資料彙總到一起,然後做一個模型的訓練。所以谷歌一開始提出的聯邦學習的開源框架是基於移動的環境下的。發展到現在,像微眾銀行、百度,包括谷歌自己,都提出了各自的聯邦學習的技術框架。聯邦學習其實主要解決的就是怎麼樣在一個分散式的環境下,各個參與方有各自的資料,如何將這些資料充分運用起來進行模型訓練,又能滿足各個參與方的隱私訴求(參與方不希望把自己的資料告訴剩餘方,甚至是可信平臺)。

聯邦學習的演算法需要用到一些機器學習的模型建模的:比如說神經網路、邏輯迴歸或是線性迴歸。聯邦學習中,多個資料來源在分散式的條件下,希望僅透過傳遞梯度來保護資料隱私和完成模型訓練。並且假設中間層的梯度值洩露出來不影響安全性,不會導致攻擊者對原始資料的獲取。

聯邦學習它有很多優點,比如支援比較多的AI演算法,且效率比較高。聯邦學習的缺點在於這套技術是AI專家提出來的,它的安全性基礎缺乏理論支撐。目前業界也會對一些聯邦學習的方案做攻擊,並且基於梯度安全性的攻擊,已經有一些成果出來了。

從具體的聯邦學習分類來看,因為每一方的資料分佈不同,其架構設計也是有差異的。通常分為橫向聯邦和縱向聯邦,分別面向相同維度但是不同使用者組,和不同維度但是相同使用者組的建模場景。

同態加密

同態加密是一種特殊的加密技術。加密是如何將明文進行變換,變成密文的一個過程。同態加密是什麼意思呢?它的本質就是說我可以對密文做計算。密文字身它是一個無序、內容隨機分佈的一串“code”,因此對密文計算是比較難的事情,但是同態加密就可以實現。同態加密的意思是,對兩個密文進行操作的結果,等於對這兩個密文對應的明文m1、m2進行操作後再加密的結果。舉個例子。假設Alice希望工匠幫她把兩個金塊加工成手鐲。在這個加工過程中,她希望工匠無法把這個金塊的碎片收集起來。因此工匠需要藉助一個特殊的裝置。這個裝置是透明的並且帶了一把鎖(僅有Alice可以開啟這把鎖拿到裝置內部的物體),並且固定了一個手套,工匠可以將雙手放到手套裡,隔著裝置進行精細的加工,但是戴著手套,並且手套無法離開裝置,工匠實際上無法觸碰到任何的金塊和金塊碎片。在這個例子裡,裝置裡的兩個金塊可以看成原始密文Encrypt(m1)和Encrypt(m2),工匠所做的事情,就好像是他在盒子的遮擋下在操作密文,而Encrypt(m1+m2)就是裝置裡的手鐲,Alice透過解鎖獲得了手鐲,即m1+m2。

同態加密需要解決的一個核心問題是可以支援任意型別的計算。任意的意思是指加法和乘法,因為所有的計算程式抽象為算術電路表示都可以用加法和乘法實現。傳統的聯邦學習用的一般是加法同態加密系統,而著名的商用密碼演算法RSA就是一個乘法同態加密演算法。最厲害的是全同態加密,指的是對於既支援加法操作又支援乘法操作,並且計算次數沒有限制的加密演算法。這種方案特別非常少,直到2009年第一個全同態加密方案被Gentry等人提出來。現代的全同態加密系統,一般基於格理論等基礎工具,可以對抗量子攻擊。

安全多方計算

安全多方計算(MPC)是由圖靈獎獲得者,中國科學院院士姚期智先生最早提出來的。姚先生當時提出了一個百萬富翁問題,兩個富翁非常有錢,他們互相之間要比較誰更富有,但是又不想告訴對方自己具體的財富數,同時他們不希望依託一個可信的第三方來完成問題的回答。事實上,MPC要解決的就是多個參與方在不洩露隱私資料的前提下,如何協作,完成對一個問題的求解。當然,各方要計算的任務是公開的。比如說多方之間想要做一個聯合的加法或者聯合的建模,模型是邏輯迴歸,需要多少輪等這些細節是約定好的。MPC的結果輸出一般是可以指定的,可以以明文形式輸出,也可以以密文形式輸出並且分割在多方進行儲存。

MPC有兩個模式,一個模式就是使用者有一個隱私輸入x ;然後服務提供商有一個隱私輸入y,根據一個公開的計算函式f, 兩方協作最後會輸出一個f(x,y)。還有一種模式是,使用者輸入x,然後服務提供商提供計算函式f,服務提供商希望把函式f 藏起來,最後兩方協作輸出f(x,y)。這兩種模式在業務上是有差別的,一種是演算法是公開的,另一種是演算法是隱藏的,但是對於MPC底層電路而言,其本質是一樣的,演算法設計部分其實沒有太大差別。

傳統的MPC技術路線分為兩類,分別針對兩類不同的電路系統。 一類叫布林電路,指的是每一個計算單元的表示形式是布林門(與門、或門、非門);這類布林電路,會有一套專門的MPC密碼協議來處理。另一類叫算術電路,指電路完全由加法和乘法組成。出於效能效率的原因,不同的電路型別任務需要用選用不同的密碼協議來實現。

安全兩方計算所使用的協議一般為混淆電路(GC)結合不經意傳輸(OT);而安全多方計算(指三方或者三方以上)所使用的協議一般為秘密分享(SS)結合不經意傳輸。前者(GC+OT)主要的問題在於計算開銷會比較大,而且一般比較適合於做兩方之間的隱私計算。它的好處在於需要的通訊輪數比較少。後者的問題在於通常需要迭加多輪OT,會引入非常高的通訊輪數;它的好處在於計算開銷比較小。對於網路要求比較高的這種場景裡面不太適合用這種SS+OT的方法。

從目前的工程經驗來看,業界用SS+OT實現基於算術電路的MPC方案較多。當然本質上技術的選取還是跟計算任務相關。很多情況下,比如說你要做AI建模涉及較多的乘法、線性運算,更適合用算術電路來實現;而如果要做一些比較查詢,更適合用混淆電路來處理。

在實際的MPC部署問題上,我們通常會把資料方和計算方分開。這樣可以儘可能地支援更多的參與方,並且實際的計算節點不會太多,一般會有兩個或者三個。否則增多計算節點,會導致通訊輪數指數級的上升,網路開銷無法承擔。

零知識證明

零知識證明(ZKP)是反直覺的,簡單來說是證明者向驗證者進行證明“我知道問題的解”,但不直接透露解,驗證者完成驗證後會確信前者知道解但是無法獲得任何解的資訊。通常ZKP的兩方之間需要進行互動通訊,屬於一種“互動式證明系統”。實際的設計裡,出於通訊效率的考慮,可以將各類ZKP系統轉成非互動式。零知識證明目前主要還是用來做認證相關的場景。

傳統的零知識證明系統裡,一般是形如證明者提供承諾-驗證者發出隨機挑戰-證明者完成應答的互動式“三步曲”。通常證明者可以用類似隨機猜測的辦法以一定概率完成驗證者的挑戰,需要把這個三步曲過程重複很多輪,來儘可能降低證明者欺詐的概率。目前ZKP的非常熱門,湧現瞭如zk-SNARKs, zk-STARKs, bulletproof等非常優秀的通用類ZKP系統,可以實現對任意論述的證明。

零知識證明在區塊鏈中用的最多的就是做隱私交易,主要是指隱藏交易三要素——付款人,收款人以及金額。目前像ZCash、Monero等隱私代幣都有很不錯的隱私交易技術。在聯盟鏈裡,需要考慮審計等第三方介入的場景,因此需要將零知識證明與審計需求進行技術上的結合。

從技術路線來看,目前零知識證明的演算法有個主要的問題是,——一去建立零知識證明系統的時候,整個系統它會有一些初始化的引數,這些引數的建立過程其實是需要一定的信任假設的。比如可以找一個可信的第三方來建立,建立過程中會用到一些隨機數,那這些隨機數如果持續不刪除的話,獲得了這些隨機數的人就可以成功地偽造證明。這也就是所謂trust setup問題。各類通用ZKP系統目前均無法很好地解決這個問題,有些是需要透過一個額外機制來實現這個可信的初始化過程,有些是無需可信初始化但是會造成很嚴重的效率問題。

代理重加密

代理重加密解決的是一個資料外包共享的問題。一個典型的例子是, a想要把她的資料儲存到雲端,同時不想讓雲看到這個資料,所以她的資料顯然是需要加密再放到雲端的。某個時刻,b需要向a獲得這個資料,a又不想自己直接把這個資料下載下來解密後再傳給b,那麼有沒有什麼辦法完成業務需求?代理重加密就是解決這個問題的。首先,雲端有這個a的加密資料,雲會藉助代理重加密技術把a的密文轉成b(能夠解開)的密文。所以這裡面有一個顯式的密文轉換操作。b經過a的授權,從雲端下載了轉換後的密文,再用自己的金鑰解開,就可以獲得a的資料明文。a是一個輕計算節點,所有的重型計算都是在雲端操作,然後這裡面藉助一個授權過程,雲端把這個密文進行計算轉換(並不是簡單地將a的密文解密後用b的公鑰加密,而是一種特殊的密文計算)。

從計算型別來看,隱私計算其實是關聯實際的業務場景的。前面提到的是機器學習相關的計算是一大類;還有一類叫集合運算,其中典型的問題就是兩方之間做集合的交集:a有一個集合x,b有一個集合y;a 作為發起方,b作為協作方,然後計算完成後,發起方a能夠得到中間的這部分交集x∩y,但是她無法知道y中的剩餘元素;另一方面,b全程無感,即b不知道x∩y。這個就是所謂的隱私集合求交問題(PSI)。PSI涉及的具體場景很多,例如兩個資料庫撞庫,黑名單查詢等。

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读