安全計算(Secure Multi-party Computation)



本文為知乎專欄 安全計算與密碼學 學習筆記。

問題描述

安全計算的目的是在沒有可信第三方的情況下,在保證數據隱私的條件下完成計算任務。當有多方參加時,就稱為安全多方計算。它具有如下特點:

  • 輸入隱私性:安全多方計算過程中必須保證各方私密輸入獨立,計算時不泄露任何本地數據。
  • 計算正確性:多方計算參與各方就某一約定計算任務,通過約定MPC協議進行協同計算,計算結束后,各方得到正確的數據反饋。
  • 去中心化:傳統的分布式計算由中心節點協調各用戶的計算進程,收集各用戶的輸入信息,而安全多方計算中,各參與方地位平等,不存在任何有特權的參與方或第三方,提供一種去中心化的計算模式。

應用場景

安全多方計算適用於計算任務需要用到來自多個參與者的數據,但各個參與者又不想(或不被允許)交換或公開數據的場景。例如:

  • 電子選舉
  • 門限簽名
  • 電子拍賣

實現方法

基於噪音的安全計算方法

差分隱私

差分隱私保護數據源中一點微小的改動導致的隱私泄露問題。即對於一個隨機化算法,該算法作用於兩個相鄰數據集(數據只有細微差別)得到的兩個輸出分布不可區分。這樣,可對計算過程用噪音干擾(原始數據或中間參數中加入噪音),讓原始數據淹沒在噪音中,使別竊聽者無法從結果反推原始數據。

  • 優點:效率高(只要生成服從特定分布的隨機數)。
  • 缺點:結果不夠准確,在復雜的計算任務中結果會和無噪音的結果相差很大導致結果無法使用。

非噪音方法

通過密碼學方法將原始數據編碼或加密,使得數據結果看似隨機但實際保留了原始數據的一些性質。

  • 優點:結果准確,密碼學理論保障安全性。
  • 缺點:計算量和通訊量較大,對於一些復雜的任務,短時間內無法完成。

混淆電路(Garbled Circuit)

由姚期智教授在80年代提出,通過布爾電路的構造安全函數計算,使得參與者可以針對某個數值來計算答案,而不需要知道他們在計算式中輸入的具體數字。

實際上,所有可計算問題都可以轉換為各個不同的電路,例如加法電路,比較電路,乘法電路等。而電路是由一個個門(gate)組成,例如與門,非門,或門,與非門等。

混淆電路里的多方計算通過電路實現,若Alice和Bob要進行多方計算,他們首先需要構建一個由與、或、非、與非門組成的布爾邏輯電路,每個門都包括輸入線,輸出線。混淆電路通過加密和擾亂這些電路的值來掩蓋信息,而這些加密和擾亂是以門為單位,每個門都有一張真值表。Alice用密鑰加密真值表,並把表打亂后發給Bob。而Bob在接收到加密表后,根據收到的加密真值表,混淆的輸入,及自己的Key,對加密真值表的每一行嘗試解密,最終只有一行能解密成功,並提取相關信息。最后Bob將計算結果返回給Alice。

  • 優點:對於由位運算(AND、OR、XOR)組成的算法,效率較高。
  • 缺點:對於常見算術操作,如乘法、乘方等,電路較為復雜,效率很低。

密鑰分享(Secret Sharing)

密鑰分享的基本思路是將每個數字\(x\)拆散成多個數\(x_1,x_2,\cdots,x_n\),並將這些數分發到\(n\)個參與方。每個參與方拿到的都是原始數據的一部分,一個或少數幾個參與方無法還原出原始數據,只有大家把各自的數據湊在一起時才能還原真實數據。

計算時,各參與方直接用它自己本地的數據進行計算,並且在適當的時候交換一些數據(交換的數據本身看起來也是隨機的,不包含關於原始數據的信息),計算結束后的結果仍以secret sharing的方式分散在各參與方那里,並在最終需要得到結果的時候將某些數據合起來。這樣的話,密鑰分享便保證了計算過程中各個參與方看到的都是一些隨機數,但最后仍然算出了想要的結果。

(t,n)閾值密鑰分享

允許任意t個參與方將秘密數據解開,但任何小於t個參與方均無法將秘密數據解開。

  • 優點:適用於各種算術操作。
  • 缺點:對於乘法,需要預計算。

同態加密(Homomorphic Encryption)

對原文進行加密並在密文上進行運算。借助同態性質,可保證先加密后運算與先運算后加密計算結果相同。需要注意的是,許多方案只支持部分同態運算。

  • RSA:乘法同態 \(x^{e}y^{e}=(xy)^e\)
  • Paillier加密方案:加法同態 \(g^xr_x^n g^yr_y^n = g^{x+y}(r_xr_y)^n\)
  • Dan Boneh等於2005年基於雙線性對構造出了一種同時具備乘法同態和加法同態的算法,但是只能進行一次乘法運算。
  • Learning with error(LWE):根據一個或一組被噪音擾動的多項式回推原始數據
    例如\(c = m \oplus 2x \oplus kp\),其中\(m\)為單比特數據,\(p\)為奇數,且可看做是加密\(m\)的私鑰,\(x\)為噪聲。那么只要\(k\)是隨機的,\(c\)就是隨機的,也就是\(c\)不泄露\(m\)的信息,並且這個式子滿足加法和乘法同態。為了保證解密的正確性,\(c\)的值不能太大(否則無法正確解密)
    • 缺點:噪音隨運算次數增加而增長
  • Gentry方案(基於理想格):
    • Bootstrapping:每計算幾輪更新一次密文,使得密文中的噪音降為0,然后繼續用來計算,如此循環往復。(使用密文的密文及密鑰的密文進行運算)
    • Squashing:通過預計算減少DEC階段(降噪)的運算量
    • 優點:解決噪聲爆炸問題
    • 缺點:Bootstrapping和Squashing階段計算量較大;密文大小不斷膨脹
    • 改進:基於環的somewhat homomorphic encryption。將數字表示為多項式,進行多項式的加法和乘法(運算次數有限)。由於整系數多項式操作比理想格中矩陣操作快,且避開了Bootstrapping和Squashing,所以整體速度在可接收范圍內。

零知識證明(Zero—Knowledge Proof)

證明者(P)能夠在不向驗證者(V)提供任何有用的信息的情況下,使驗證者相信某個論斷是正確的。
(向你證明我知道答案,但就是不告訴你答案是啥)

零知識證明的性質:

  • 正確性。P無法欺騙V。換言之,若P不知道一個定理的證明方法,則P使V相信他會證明定理的概率很低。
  • 完備性。V無法欺騙P。若P知道一個定理的證明方法,則P使V以絕對優勢的概率相信他能證明。
  • 零知識性。V無法獲取任何額外的知識。

零知識證明並不是數學意義上的證明,因為它存在小概率的誤差,欺騙者有可能通過虛假陳述騙過證明者。換句話來說,零知識證明是概率證明而不是確定性證明。但是也存在有技術能將誤差降低到可以忽略的值。

應用:

  • 區塊鏈:證明交易符合規則
  • MPC:防止偏離協議發送假數據的惡意節點
  • 身份證明


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM