安全多方計算(SMC)是解決一組互不信任的參與方之間保護隱私的協同計算問題,SMC要確保輸入的獨立性,計算的正確性,同時不泄露各輸入值給參與計算的其他成員。主要是針對無可信第三方的情況下,如何安全地計算一個約定函數的問題,安全多方計算在電子選舉、電子投票、電子拍賣、祕密共享、門限簽名等場景中有着重要的作用。
百萬富翁問題
1982年,姚啓智教授在提出百萬富翁問題後就給出了該問題的一種解決方案。該方案用於對兩個數進行比較,以確定哪一個較大。Alice知道一個整數i;Bob知道一個整數j, Alice與Bob希望知道誰的數最大,但都不想讓對方知道自己的數。爲簡單起見,假設j與i的範圍爲[1,100]。Bob有一個公開密鑰Eb和私有密鑰Db。
百萬富翁問題協議
(1) Alice選擇一個大隨機數x,並用Bob的公開密鑰加密c=Eb(x);
(2) Alice計算c-i,並將結果發送給Bob:
(3) Bob計算下面的100個數:Yu=Db(c-i+u),(u=1,2,...,100 )其中Db是Bob的私有解密密鑰。Bob選擇一個大素數p(p應該比x稍小一點,Bob不知道x,但Alice能容易地告訴他x的大小),然後計算下面的100個數:Zu=(Yu mod p),。然後驗證對所有的u≠v, |Zu-Zv|>=2,並對所有的u驗證:0<Zu<p—1。如果不成立,Bob就選擇另一個素數並重複驗證;
(4) Bob將以下數列和p發送給Alice:[Z1,Z2,... ,Zj + 1,Zj+1 +1, ..., Z100 +1],p;就是所從第j位對Zu數列+1操作;
(5) Alice驗證這個數列的第i個數是否與x模p同餘。如果同餘,她得出的結論是i<=j;如果不同餘,她得出的結論是i>j;
(6) Alice把這個結論告訴Bob。