閱讀此文之前,請先閱讀 安全計算初探,並一直向上追溯直至到達根節點或已訪問節點。

安全計算這個領域雖然很小眾,但其實理論界很早就開始關注它了。研究計算理論的學者們四十多年當中已經提出了很多種實現安全計算的方法。總的來說,大致可歸為兩類:一類是基於噪音的,另一類不是基於噪音的。當然也有人認為基於噪音的不應算在安全計算當中,但這就純粹是摳字眼的文字遊戲了,我們這裡先不管這些,為方便以後的敘述,暫且把「保護數據隱私的多方計算方法」都歸入到安全計算當中。

基於噪音的安全計算方法,最主要代表是目前很火的差分隱私(differential privacy)。這類方法的思想是,對計算過程用噪音干擾,讓原始數據淹沒在噪音中,使別有用心者無法從得到的結果反推原始數據。這就好像我們拿到一張打了馬賽克的圖片,雖然可能可以猜出馬賽克後面大概長啥樣,但很難知道馬賽克後面的所有細節。

有一點值得注意:這個干擾既可以是數據源,也可以是模型參數和輸出。也就是說,參與者既可以對自己的原始數據加噪音使得原始數據從來沒在計算過程中出現過,也可以在模型訓練的時候改變通過改變模型參數影響輸出結果,也可以直接在輸出暴露前在輸出上加噪音從而使得從計算結果無法反推輸入。比如我們要計算一個函數 f(x_1, x_2, dots, x_n, 	heta) ,那麼對輸入進行干擾後得到的結果便是 f(x_1 + r_1, x_2+r_2, dots, x_n+r_n, 	heta) ,對參數進行干擾後得到的結果為 f(x_1, x_2, dots, x_n, 	heta + r_{	heta}) ,對輸出進行干擾後的結果是 f(x_1, x_2, dots, x_n, 	heta) + r

這種方法的優點是效率高(畢竟只需要生成服從特定分布的隨機數即可),缺點是最後得到的結果不夠準確,而且在複雜的計算任務中結果會和無噪音的結果相差很大導致結果無法使用。

非噪音方法一般是通過密碼學方法將數據編碼或加密,得到一些奇怪的數字,而且這些奇怪的數字有一些神奇的性質,比如看上去很隨機但其實保留了原始數據的線性關係,或者順序明明被打亂但人們卻能從中很容易找到與原始數據的映射關係。如果將計算過程比作炒菜,那數據就是炒菜的原料,輸出就是最後做出來的美味佳肴。而實現安全計算方法,就好像是讓廚師閉著眼睛炒菜一般。

這一類方法主要包括三種:混淆電路(Garbled Circuit)、同態加密(Homomorphic Encryption)和密鑰分享(Secret Sharing)。這些方法一般是在源頭上就把數據加密或編碼了,計算操作方看到的都是密文,因此只要特定的假設條件滿足,這類方法在計算過程中是不會泄露信息的。比如計算函數 f(x_1, x_2, dots, x_n, 	heta) 的時候,實際操作的是 f(hat{x_1}, hat{x_2}, dots, hat{x_n}, 	heta) (這裡 hat{x}_ix_i 的密文)。相比於前一類基於噪音的方法,這種方法的優點是不會對計算過程加干擾,因此我們最終得到的是準確值,且有密碼學理論加持,安全性有保障,缺點則是由於使用了很多密碼學方法,整個過程中無論是計算量還是通訊量都非常龐大,對於一些複雜的任務(如訓練幾十上百層的CNN等),短時間內可能無法完成。而且對於密碼學基礎薄弱的程序猿來說,要實現前一類基於噪音的方法沒啥難度,但要實現後一類方法則還是要費不少功夫的。

總之,不同的安全計算的方法在效率、安全性和可擴展性上各有取捨,需根據具體應用場景選擇相應的方法。在後續文章中,我將對這些方法逐一介紹,敬請點贊。


推薦閱讀:
查看原文 >>
相关文章