姚式百萬富翁問題

2021-10-03 14:42:38 字數 1684 閱讀 7726

兩個百萬富翁都想比較到底誰更富有,但是有都不想讓別人知道自己有多少錢。在沒有可信的第三方的情況下如何進行?這就是著名的姚式百萬赴富翁問題。

抽象並簡化問題,假設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 ...

題目1488 百萬富翁問題

1 秒 記憶體限制 128 兆 特殊判題 否 提交 4942 解決 1405 題目描述 乙個百萬富翁遇到乙個陌生人,陌生人找他談了乙個換錢的計畫。該計畫如下 我每天給你10 萬元,你第一天給我1 分錢,第二天2 分錢,第三天4 分錢 這樣交換 30 天後,百萬富翁交出了多少錢?陌生人交出了多少錢?注...