安全多方計算(1):不經意傳輸協議

學習&轉載文章:安全多方計算(1):不經意傳輸協議

前言

在安全多方計算系列的首篇文章(安全多方計算之前世今生)中,我們提到了百萬富翁問題,並提供了百萬富翁問題的通俗解法,該通俗解法可按圖1簡單回顧。

圖片

圖1 百萬富翁問題通俗解法

百萬富翁問題通俗解法場景中,我們可以將Alice和Bob的訴求總結如下:

  • Alice:有9個裝有物品的箱子,Bob只能打開其中一個箱子看到物品,看不到其他箱子內的物品。

  • Bob:不希望Alice知道自己打開的是哪個箱子。

百萬富翁問題通俗解法可以通過密碼學中的n選1的不經意傳輸協議(Oblivious Transfer,OT)完美解決。

通過百萬富翁問題通俗解法場景描述,對OT協議解決的問題可抽象爲:Alice擁有\(n\)條消息\({m_1,…,m_n}\),Bob想知道其中一條消息\(m_i\);通過執行OT協議,Bob可以正確獲得想要知道的消息\(m_i\),且無法獲得其它\(n-1\)條消息,而Alice無法知道Bob獲得的是哪條消息。

OT協議按研究類別區分,可以分爲以下3種OT協議:

  • 2選1的OT協議\(2\)條消息中正確解密(選)\(1\)條)
  • n選1的OT協議\(n\)條消息中正確解密(選)\(1\)條)
  • OT擴展協議\(n\)條消息中正確解密(選)\(m\)條,\(m<n\)

受篇幅所限,本文僅介紹2選1與n選1的OT協議,OT擴展協議則在後續系列文章中進行介紹。

利用RSA加密實現n選1的OT協議

自1981年提出以來,OT協議有多種多樣的實現形式,其中最容易理解的是基於RSA公鑰算法實現的n選1的OT協議[1]。

RSA加解密過程簡介

此處不講解RSA原理,只介紹RSA加解密過程和用到的參數,便於密碼學知識儲備不足的讀者理解後面的OT協議。

  • RSA密鑰參數:\(N=p*q\)\(L=(p-1)*(q-1)\)其中\(p\)\(q\)爲大素數。

  • RSA公私鑰對:生成\(d\)\(e\),滿足\(d\)\(L\)互質,\(e\)\(L\)互質,且\(d*e(mod L)=1\),則令\((d,N)\)爲公鑰,\(e\)爲私鑰。

則RSA算法對明文\(m\)\(m\)爲大整數)的加解密過程如圖2所示。

圖片

圖2 RSA算法加解密計算過程

RSA實現n選1的OT協議過程描述

基於RSA公鑰算法實現的n選1的OT協議執行過程如圖3所示。

圖片

圖3 基於RSA公鑰算法實現n選1的OT協議執行過程

協議執行過程分爲4個步驟:

  1. Alice有\(n\)條消息,則產生\(n\)個RSA公私鑰對,並將\(n\)個私鑰保留,\(n\)個公鑰發送給Bob。
  2. Bob隨機產生一個大整數key,假定Bob想要獲得第\(t\)條消息,則Bob用收到的第\(t\)個RSA公鑰加密大整數key,加密計算結果爲\(s\),Bob將\(s\)發送給Alice。
  3. Alice用保留的\(n\)個RSA私鑰,依次解密\(s\),獲得\(n\)個解密結果,依次爲\({key1,key2,…,keyt,…,keyn}\);利用對稱加密算法,利用\((key1,...,keyn)\),加密對應的消息\((m1,...,mn)\),得到密文消息\((M1,...,Mn)\),將\((M1,...,Mn)\)發送給Bob。
  4. Bob利用自己掌握的大整數\(key\)作爲密鑰,對第\(t\)條密文\(Mt\)進行對稱解密,則得到想要的第\(t\)條原始明文消息\(mt\)

n選1的OT協議解決百萬富翁問題

將圖1中的百萬富翁問題和圖3中的n選1的OT協議結合,我們可以對圖1中的操作步驟做如圖4的改造:

  • Step1:Alice構造9條明文消息,序號\(<x\),消息爲“0”;否則消息爲“1”。

  • Step2:Alice與Bob執行9選1的OT協議,解密第7條消息,看到0,\(y<x\);看到1,\(y≥x\)

圖片

圖4 基於n選1的OT協議實現百萬富翁問題

協議分析

該協議執行過程可以滿足OT協議中Alice和Bob的核心訴求,關鍵在於第2步和第3步。

  • 第3步中,Alice利用\(n\)個私鑰逐個嘗試解密\(s\),得到\((key1,...,keyn)\),由於\(s\)是由Bob利用第\(t\)個公鑰加密整數key計算得到的,因此只有keyt=key,但對於Alice來說,\((key1,...,keyn)\)都是大整數,根本無法區分哪個纔是Bob掌握的key,實現了Bob的訴求,即Alice無法知道Bob選擇的是哪條消息。

  • 對於Bob來說,拿到了\(n\)個密文消息\((M1,...,Mn)\),但是自己只有一個key,此key只能解密消息\(Mt\),對於其他\(n-1\)條消息則無法解密,實現了Alice的訴求,即Bob只能正確得要Bob想要得到1條消息,無法正確得到其他\(n-1\)條消息。

如果\(n=2\),則該n選1的OT協議就退化成了2選1的OT協議。

雖然基於RSA實現的n選1的OT協議簡單易懂,但是卻存在如下缺陷:

  • key爲0或1時,Alice的訴求無法保證。Bob如果將key指定爲0或1,則根據圖2中RSA的加解密計算方法,無論私鑰\(e\)是否正確,解密後的\(m0=m\)均成立,意味着第3步中,Alice強行解密\(s\)得到的\((key1,...,keyn)\)均等於key(看加密就懂了~),則Bob可以解密所有的消息,獲得所有的明文\((m1,...,mn)\)
  • 協議計算效率有待優化。第1步Alice需要產生\(n\)個RSA公私鑰對,而RSA公私鑰對的產生比較耗時。

爲了提高安全性和計算效率,還有基於其他密碼學方法的OT協議,如基於離散對數的OT協議,將在本文第四節和第五節中進行介紹。(如果您僅希望簡單瞭解OT協議的原理和能解決的問題,則讀到此處足矣,本文後面的內容適合有一定密碼學基礎讀者。)

基於離散對數實現2選1的OT協議

爲了優化OT協議計算效率和安全性,學者一般對2選1的OT協議和n選1的OT協議分開進行研究。對於2選1的OT協議,Tung Chou[2]於2015年基於離散對數問題,在DH密鑰協商協議的基礎上設計的2選1的OT協議,被認爲是一個簡單清晰的2選1的OT協議。

離散對數簡介

離散對數問題通俗理解:有限域\(F_p\)\(p\)爲大素數,\(F_p\)中元素共\(p-1\)個整數,取值\([1,p-1]\))上的大整數冪乘取模容易計算,即\(a*b mod p=c,a,b\in F_p\),而計算對數是很困難的,即 \(log_a^c(mod p)=b\)

離散對數實現2選1的OT協議過程描述

基於離散對數實現2選1的OT協議執行過程如圖5所示:

圖片

圖5 離散對數實現2選1的OT協議執行過程

協議執行過程分爲4個步驟:

  • Alice有消息\(m0、m1\in F_p\)*,則Alice挑選\(g,a\in F_p\),並計算\(A=g^a mod p\),將\(A、g、p\)發送給Bob。
  • Bob想要第\(\sigma\)條消息(\(\sigma=0\)或1),Bob挑選\(b\in F_p\)*,並計算\(B=A^\sigma *g^b mod p\),將B發送給Alice。
  • Alice利用\(a、A、B\),按照圖4中的步驟3計算\(C0\)\(C1\)的值,然後用\(C0\)爲密鑰,對稱加密\(m0\);用\(C1\)爲密鑰,對稱加密\(m1\)。將加密後的密文\(M0\)\(M1\)傳遞給Bob。
    • 這裏的密文\(M_0\)\(M_1\)只有一個是“可用”的,也就是說\(C_0\)\(C_1\)只有一個是可用的,當\(\sigma =0\)時,\(C_0\)是可用的;當\(\sigma =1\)時,\(C_1\)是可用的。
  • Bob利用\(A\)\(b\)計算解密密鑰\(g^{ab} mod p\),對稱解密對應的密文後拿到想要的正確消息。

協議分析

該協議的核心步驟是步驟2和步驟3,對這兩步中的參數B、C0、C1進行展開,展開後如圖6所示。

圖片

圖6 2選1的OT協議部分參數展開

從圖6的展開式可知,無論\(\sigma =0\)還是\(\sigma =1\)\(C0\)\(C1\)始終只有一個爲\(g^{ab}\),而另一個對於Bob而言則不可計算(Bob不知道\(a\)的值),\(g^{ab}\)的計算實質上就是DH密鑰協商協議。

對於Alice來說,僅知道\(B、A、g\),不知道\(b\)的情況下,由於離散對數問題難解,因此是無法推斷出\(\sigma =0\)還是\(\sigma =1\)

與2.2的協議相比,該協議不存在Bob選擇特殊的\(b\)會導致密文消息\(M0\)\(M1\)同時正確解密這一缺陷(只能正確解密其中一個)。

基於離散對數實現n選1的OT協議

本章節將以Wen-Guey Tzeng[3]提出的高效n選1的OT協議爲例,講解如何基於離散對數實現基本的n選1的OT協議。

離散對數實現n選1的OT協議過程描述

基於離散對數實現n選1的OT協議執行過程如圖7所示。

圖片

圖7 離散對數實現n選1的OT協議執行過程

協議執行過程分爲4個步驟:

  • Alice有\(n\)條消息\({m1,…,mn}\)\(mi\in G\)(\(G\)代表素數域\(F_p^*\)),挑選\(G\)的兩個生成元\(g\)\(h\),將\(g,h,p\)發送給Bob。
  • 假定Bob想獲得第\(t\)條消息,則Bob隨機選擇大整數\(r\in G\),並計算\(y=g^r*h^tmod p\),將\(y\)發送給Alice。
  • Alice利用\(y,g,h\),分別對\(n\)條消息,重複執行圖6中左下角的計算步驟,每一次執行都會隨機選擇大整數\(k_i\in G\),並結合消息\(mi\)計算\(ai\)\(bi\)。然後將\(n\)\((ai,bi)\)發送給Bob。
  • Bob拿到\(n\)\((ai,bi)\)後,利用掌握的大整數\(r\),計算想要的第\(t\)條消息\(m_t=b_t∕(a_t)^r\)

協議分析

對於第4步Bob的操作,我們把消息\(m_t\)泛指爲\(m_x\),則對\(m_x\)的計算公式展開後如圖8所示。

圖片

圖8 消息mx的計算公式展開

從圖8可以看出,要想獲得消息\(m_x\),要麼令\(x=t\),此時消息爲Bob想要獲得的消息;要麼計算出\(h^{(t-x)*k_x}\),由於\(k_x\)是Alice的祕密數字,因此保證了Bob不可能正確解密除消息\(m_t\)之外的其餘\(n-1\)條消息。

對於Alice來說,雖然知道\(y,g,h\),但是不知道\(r\)的情況下,由於離散對數問題難解,因此是無法推斷出\(t\)的正確值。

與2.2的協議相比,該協議不存在Bob選擇特殊的\(r\)會導致\(n\)條消息同時正確解密這一缺陷,同時也不存在需要產生\(n\)對公私鑰這一耗時操作。

總結

本文介紹了OT協議和3個基於密碼學實現的OT協議實例,並結合百萬富翁問題的通俗解法看到了OT協議的應用實例,這樣的實例很難看出OT協議的重要性。

其實OT協議是安全多方計算中很重要的一個協議,在安全多方計算系列的首篇文章(安全多方計算之前世今生)中,我們提到,安全多方計算的通用技術路線可以用混淆電路解決,而混淆電路的構建離不開OT協議。因此,下期文章將會講解如何通過OT協議實現混淆電路,以及如何實現基於混淆電路的通用安全多方計算路線。

參考文獻

[1] https://en.wikipedia.org/wiki/Oblivious_transfer

[2] Chou T , Orlandi C . The Simplest Protocol forOblivious Transfer[C]// International Conference on Cryptology and InformationSecurity in Latin America. Springer International Publishing, 2015.

[3] Tzeng W G . Efficient 1-out-of-noblivious transfer schemes with universally usable parameters[J]. IEEETransactions on Computers, 2004, 53(2):p.232-240.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章