百萬富翁問題的介紹與實現

2022-03-13 23:13:26 字數 1911 閱讀 9001

yao a c.protocols for secure computation[c].in proc. of the 23rd annual symposium on foundations of computer science,1982.

4.《聯邦學習》楊強 劉洋等

安全多方計算最初是針對乙個安全兩方計算問題,即所謂的「百萬富翁問題」而被提出的,並與2023年被姚期智提出和推廣。在安全多方計算中,目的是協同地從每一方的隱私輸入中計算函式的結果,而不用將這些輸入展示給其他方。

通常情況下,安全多方計算能夠通過三種不同的框架來實現:不經意間傳輸(oblivious transfer,ot)、秘密共享(secret share,ss)和閾值同態加密(threshold homomorphic encryption,the).從某種程度上來講,不經意傳輸協議和閾值同態加密方法都是用了秘密共享的思想,這可能就是為什麼秘密共享被廣泛認為是安全多方計算的核心。

兩個富翁,分別為alice和bob。他們自己都清楚自己有幾百萬財產,也即,他們心裡清楚 1~10中的乙個數(代表自己百萬級的財富);他們想知道到底誰的數更大一些。

這裡假定:

· 兩人都值得信任,不會作假

· 兩人都希望誠實地比較出誰更服務(即誰的數更大)

· 兩人又都希望知道對方財產到底是多少,如果可能的話,拿到具體數字最好了

· 其實這裡假定的是乙個安全多方計算的模型 - 半誠實對手模型,即計算方存在獲取其他計算方原始資料的需求,但仍然按照計算協議執行。另外有惡意敵手模型,在這種模型中,參與方可以造假,即不按照計算協議執行計算過程。這就要複雜很多。為簡化期間,本文僅討論半誠實對手模型。

乙個簡單的解決方案就是一下步驟:

alice找10個一模一樣的箱子,按照1~10的順序擺好,並按照自己的財富值分別往裡面放入蘋果梨和香蕉,具體放法為:如果序號小於自己的財富之,放入蘋果,相等,則放入梨,大於自己的財富值,放入香蕉;把10個盒子都叫上鎖;

並叫bob過來(或者寄給bob)bob根據自己的財富值對相應的箱子再加一把鎖。然後把其他所有箱子銷毀。並把這個選擇的箱子送給alice。

alice看到送回來的箱子,但他不知道bob選擇的是第幾個箱子,因為每個箱子都是一樣的。

alice、bob分別開鎖,看裡面是什麼水果:

· 如果是蘋果,alice比bob富有;

· 如果是梨,兩人一樣有錢

· 如果是香蕉,bob比alice富有

簡單吧,可行嗎?當然可行!前提是雙方都是可信的,雙方會遵守協議,所以這是乙個半誠實對手模型。如果有一方造假,那麼結果就不可信了。那是惡意敵手模型要討論的問題。

參考的知乎上君莫惘使用者的**(程式使用的是rsa公鑰加密演算法),進行了部分修改,主要是隨機數x和p的選取要符合規範,並且滿足pj,即alice比bob有錢。")

if i - j >= 0:

print("驗證成功")

else:

print("**存在錯誤")

elif d_list[j - 1] == (x%p)+1:

print("i=j,即alice和bob一樣有錢。")

else:

print("i執行效果:

百萬富翁問題

題目描述 乙個百萬富翁遇到乙個陌生人,陌生人找他談了乙個換錢的計畫。該計畫如下 我每天給你10 萬元,你第一天給我1 分錢,第二天2 分錢,第三天4 分錢 這樣交換 30 天後,百萬富翁交出了多少錢?陌生人交出了多少錢?注意乙個是萬元,乙個是分 輸入描述 該題沒有輸入 輸出描述 輸出兩個整數,分別代...

題目1488 百萬富翁問題

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

題目1205 百萬富翁問題

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