Hash

使用 hmac_sha512(block_hash, trans_id) 作為可證明公平遊戲的結果雜湊有什麼問題?

  • October 23, 2013

讓我們假設有人想要製作他們自己版本的 Satoshi Dice。Satoshi Dice 表示,遊戲的獲勝輸出以下列方式確定。

用於確定遊戲獲勝者的幸運數字很簡單。它只是 hmac_sha512(secret,txid:out_idx) 的第一個字節。這將是作為密鑰的秘密字元串和作為數據的投注交易的交易 ID。

我做了一些研究,大多數可證明公平的遊戲網站都使用密鑰進行結果散列。

我的問題是,在確定獲勝結果時使用塊雜湊作為雜湊算法的密鑰而不是定期更新的密鑰有什麼問題?

我看不出這種方法如何使玩家受益,因為在他們送出交易並且包含塊至少被確認一次之前,他無法知道塊的雜湊值是什麼。

阻止網站使用這種簡單的方法來計算贏/輸條件的漏洞是什麼?

礦工可以通過扣留會導致他們輸掉的區塊來欺騙這場遊戲。

為簡單起見,讓我們假設遊戲設計為大約 50/50 的賠率(例如,玩家投注 hmac_sha512(block_hash, trans_id) 的第一位)。

採礦卡特爾可以做以下事情。卡特爾成員集中他們的硬幣並在您的賭場下一個大賭注(例如 BTC 1000)。如果他們在網路上的任何其他人之前解決下一個塊,他們會計算塊雜湊和交易 ID 的雜湊,並確定這個塊雜湊是否會贏得他們的賭注。如果可以,他們會發布並收集他們的獎金(以及他們的 BTC 25 塊獎勵)。如果不這樣做,他們就把它扔掉並繼續挖礦(並沒收 BTC 25)。這將他們的有效雜湊率降低了一半,但這意味著每次他們確實找到一個好塊時,他們都有保證贏得 BTC 1000。

這在遊戲中引入了一種偏差,與卡特爾控制的網路散列能力的比例成正比。但即使是對大額賭注和長時間的輕微偏見,也可能讓卡特爾以賭場為代價進行清理。

更糟糕的是,由於卡特爾的活動對其所有成員都有利可圖,因此會有更多礦工加入卡特爾的動機,這使得偏見更加強烈。在極限情況下,網路上的每個礦工都加入卡特爾,卡特爾贏得 100% 的賭注。

一個單獨的礦工可以發起類似的攻擊。Alice 創建了一個在賭場下注 BTC 1000 的交易,但沒有將其發佈到 p2p 網路。相反,她將其包含在她散列的塊中。當她解決一個塊時,她會檢查它的雜湊以確定它是否會贏得她的賭注。如果是這樣,她會發布它。(也許,為了不那麼明顯,她會在 p2p 網路上發布她的投注交易並等待幾秒鐘再發佈區塊,並希望在此期間沒有人解決另一個區塊。)如果該區塊沒有贏得她打賭,她丟棄它。與前一個案例一樣,她的有效雜湊率下降了一半,但她贏得了她所做的每一次賭注。

“可證明公平”可能是違反直覺的。進行可證明公平的遊戲的方法是不要押注您認為任何一方都無法預測或影響的外部現象;當事人常常會讓你大吃一驚,而且在任何情況下,證明他們做不到通常並不容易。相反,可證明公平的系統押注於由雙方的輸入(沒有外部輸入)決定的東西,但以這樣一種方式確定,即任何一方都可以通過選擇真正隨機的輸入來確保公平的結果*。*

引用自:https://bitcoin.stackexchange.com/questions/13999