兩個百萬富翁都想比較到底誰更富有,但是有都不想讓別人知道自己有多少錢。在沒有可信的第三方的情況下如何進行?這就是著名的姚式百萬赴富翁問題。
抽象並簡化問題,假設alice有乙個整數i,公鑰eb,私鑰db。bob有乙個整數j,且i,j
∈[1,
10]
i,j\in [1,10]
i,j∈[1
,10]
1.bob選擇乙個大隨機數x,用alice的公鑰加密:c=e
b(x)
c = eb(x)
c=eb(x
),將ct=
c−
jct = c - j
ct=c−j
傳送給alice;
2.alice收到資料後,計算yu=
db(c
t+u)
,u∈[
1,10]
y_ = db(ct + u),u\in [1,10]
yu=db
(ct+
u),u
∈[1,
10],選取乙個大素數p(p比x稍小),計算zu=
yumo
dp
z_ = y_ mod p
zu=yu
mod
p3.alice將[z1
,z2,
⋯,zi
,zi+
1+1,
zi+2
+1,⋯
,z10+
1]
[z_1,z_2,\cdots,z_,z_+1,z_+1,\cdots,z_+1]
[z1,z
2,⋯
,zi
,zi+
1+1
,zi+
2+1
,⋯,z
10+
1]傳送給bob;
4.bob檢視zjz_
zj是否等於x(m
odp)
x (modp)
x(modp
),若等於,則i≥j
i \geq j
i≥j,否則i
<
ji < j
i<
j,將結果告知alice;
選取乙個大素數,儘管alice得到ct,要猜測j也是困難的;
alice計算zuz_
zu後,從第i+1個位置開始,每個元素的值加上1,將序列發給bob;
bob解密後只關心第j個位置,因為zj=
ct+j
=c−j
+j=e
b(x)
z_ = ct+j = c-j + j= eb(x)
zj=ct
+j=c
−j+j
=eb(
x)(假設bob得到的序列沒有加1);
假設i
i< j,則zjz_ zj肯定是被加上了1,即是說zi≠ x(mo dp )z_ \neq x (modp) zi= x(mo dp);假設i≥j i \geq j i≥j,則zjz_ zj的值就沒有變,即是說zi= x(mo dp )z_ = x (modp) zi=x( modp ); 題目描述 乙個百萬富翁遇到乙個陌生人,陌生人找他談了乙個換錢的計畫。該計畫如下 我每天給你10 萬元,你第一天給我1 分錢,第二天2 分錢,第三天4 分錢 這樣交換 30 天後,百萬富翁交出了多少錢?陌生人交出了多少錢?注意乙個是萬元,乙個是分 輸入描述 該題沒有輸入 輸出描述 輸出兩個整數,分別代... 今天聽莫老師講了姚期智提出的百萬富翁問題,簡直神了,這也太厲害了吧,我覺得是和零知識證明一樣的神奇,或許這就是數學的魅力吧。在不洩露個人隱私的情況下,可以比較兩個富翁的財富大小。著實太強了,佩服,其實歸根結底都是數學,學好數學的重要性不言而喻,加油吧好好學習數學!首先我們假設有兩個富翁 a 和 b ... 1 秒 記憶體限制 128 兆 特殊判題 否 提交 4942 解決 1405 題目描述 乙個百萬富翁遇到乙個陌生人,陌生人找他談了乙個換錢的計畫。該計畫如下 我每天給你10 萬元,你第一天給我1 分錢,第二天2 分錢,第三天4 分錢 這樣交換 30 天後,百萬富翁交出了多少錢?陌生人交出了多少錢?注...百萬富翁問題
姚期智百萬富翁問題 隱私安全
題目1488 百萬富翁問題