Commitments

它是什麼類型的承諾計劃?

  • May 8, 2017

我有一個任務,我必須評估一個承諾計劃。我已經在這裡檢查了幾個問題,但他們沒有幫助我:(我希望有人能夠幫助我。

我有什麼?

$ commit_H $ - 完美隱藏和計算綁定

$ commit_B $ - 完美綁定和計算隱藏

這是 $ commit_1(m) $ 一步步。

$ commit_1(m) $ :

  1. 計算 $ (c_H, d_h) := commit_H(m) $
  2. 計算 $ (c_B, d_B) := commit_B(c_H) $
  3. 輸出 $ (c_B, (d_B, d_H)) $

第一個問題是這是否是一個承諾計劃。我的回答是肯定的,因為我們有一個承諾( $ c_B $ ) 和開放值 $ (d_B, d_H) $ .

如何開啟承諾? $ open(open(c_B, d_B), d_H) $

我希望到目前為止這是正確的。現在是我不知道的部分。我必須決定它是什麼類型的承諾。是 B 型(完美結合)還是 H 型(完美隱藏)。

我的第一個想法是它具有完美的約束力。為了證明這一點,我使用了矛盾。

矛盾:存在一個算法A,使得

$ ((x_1),(x_2)) \leftarrow A(1^n) ~~(x_1 \neq x_2) $

$ commit(x_1) = commit(x_2) $

$ commit_B(commit_H(x_1)) = commit_B(commit_H(x_2)) $

$ commit_B(c_{H1}) = commit_B(c_{H2}) $

這將是一個矛盾,因為 $ commit_B $ 完美結合。

下一步將表明它不是完全隱藏的,因為我認為它是 B 型。

這就是我卡住的地方。 $ commit_B $ 沒有完全隱藏,這意味著計算不受約束的攻擊者將能夠解除第一部分( $ commit_B(c_H) $ ),但會卡在第二部分( $ commit(m) $ ),因為它完全隱藏。

我的問題是,我做錯了什麼?我是不是誤會了什麼?有人可以幫我嗎?

謝謝


編輯:感謝雨披的回答,我得到了以下解決方案。它還沒有完成,因為我不確定它。如果有人甚至雨披在必要時可以糾正,那就太好了。

承諾方案 $ commit_1(m) $ 是類型 $ H $ . 這意味著,它將完美地隱藏和計算綁定。

我想展示三件事:

  1. 完美隱藏
  2. 計算綁定
  3. 不完美結合

我想從數字 3 開始 - 沒有完美結合。

$ commit_H $ 不完全具有約束力,這意味著 $ \exists m_1, m_2; m_1 \neq m_2 $ 這樣

$ c_{H1}=commit_H(m_1)=commit_H(m_2)=c_{H2} $ .

$ \implies commit_B(c_{H1}) = commit(c_{H2}) $

甚至 $ commit_B $ 完美裝訂,打開後 $ c_B $ 有可能打開 $ c_H $ 要麼 $ m_1 $ 或者 $ m_2 $ (給定無限計算)(感謝雨披)。

接下來,我想展示完美的隱藏。因此我使用了一個遊戲,攻擊者發送 $ m_1 $ 和 $ m_2 $ 至 $ commit_B $ 這是發送到 $ commit_H $ . 這是我一直在想的遊戲: 完美隱藏

我們有一個無限的攻擊者 $ A $ 具有以下優勢 $ \epsilon(n) $ .

贏得這場比賽的機率是:

$ Pr[b=b’] = Pr[Challenger_H(n)=1] = Pr[Challenger_B(n)=b] $ 因為他傳遞消息 $ m_0 $ 和 $ m_1 $ 不改變它們。

$ Pr[b=b’] = Pr[Challenger_H(n)=1] = Pr[Challenger_B(n)=b] = Pr[A(n)=b] $ .

自從 $ commit_H $ 完全隱藏,我們得到以下等式:

$ \frac{1}{2} = Pr[A(n)=b] = \frac{1}{2} + \epsilon(n) $ $ \Rightarrow \epsilon = 0 $ 否則就會產生矛盾。

要證明的最後一件事(我可以稱之為屬性嗎?)是計算綁定。我還不確定該怎麼做。我正在考慮用計算和統計上的不可區分性來證明它。稍後我也會在那個問題上破解我的頭。

關於編輯中的解決方案,您有點過於復雜了。第一個證明它不是完美結合的證據很好。但是你在那裡做雙重工作 - 當顯示該方案完全隱藏時,你不會免費完美綁定

在第二部分:做一個建設性的證明幾乎總是比做一個矛盾的證明要長。你的證明實際上是錯誤的:假設 $ \mathcal{A} $ 實際上並沒有對挑戰做任何事情,他只是用統一的一點回答。那麼公式仍然是相同的,但它並不能證明承諾方案的任何內容。

假設您的方案沒有完全隱藏,並且您有一個(可能是無限的)來破壞隱藏屬性。引導這個對手打破實際的完美隱藏方案——這與假設相矛盾。粗略的草圖:

  • 您是該計劃的攻擊者 $ commit_H $ ,並且您可以訪問 $ \mathcal{A} $ , 可以打破 $ commit_1 $ 具有一些非零優勢 $ \epsilon $ (任何一種優勢都意味著它不是完全具有約束力的)
  • 比賽開始: $ \mathcal{A} $ 向您發送他的挑戰 $ m_1,m_2 $ . 你把它們交給你的挑戰者。
  • 你得到一個挑戰 $ c=com_H(m_b) $ . 您使用承諾方案 $ com_B $ 並且寄出 $ com_B(c) $ 至 $ \mathcal{A} $ .
  • $ \mathcal{A} $ 答案是 $ b’ $ ,您只需將其轉發給您的挑戰者。
  • 現在你可以爭辯說你有同樣的非零優勢 $ \mathcal{A} $ . 但是,如果您有任何優勢, $ commit_H $ 不會完全隱藏。

編輯:原始參數中有錯誤

想像一個對手 $ \mathcal{A} $ ,誰能打破計算綁定屬性。計算綁定意味著它必須找到兩個具有相同承諾的輸入作為其輸出。所以 $ \mathcal{A} $ 是一種多時間算法,可以生成以下輸出: $ m_1,m_2,r_1,r_2 $ , 和機率 $ Pr[m_1 \neq m_2, Commit(m_1,r_1)= Commit(m_2,r_2)] $ 是不可忽略的並且 $ m_1,m_2 $ 是消息和 $ r_1,r_2 $ 隨機硬幣(通常也是開放值)

在您的範例中,值 $ r_1 $ 和 $ r_2 $ 實際上是元組,它們是你定義為開放值的東西,所以它們是 $ (d_{B,1},d_{H,1}) $ 和 $ (d_{B,2},d_{H,2}) $ .

所以 $ \mathcal{A} $ 能夠產生價值 $ m_1,m_2,(d_{B,1},d_{H,1}),(d_{B,2},d_{H,2}) $ 並且機率不可忽略 $ m_1 \neq m_2 $ 和 $ Commit_1(m_1,d_{B,1},d_{H,1}) = Commit_1(m_2,d_{B,2},d_{H,2}) $ . 一般來說,這並不意味著中間值 $ Commit_H(m_1,d_{H,1}) $ 和 $ Commit_H(m_2,d_{H,2}) $ 是平等的。但是,我們也知道外部綁定是完美綁定。所以這意味著沒有(無限的)對手可以生成具有相同承諾的兩條消息 - 這意味著 $ Commit_B $ 對於任何給定的消息都是單射的。然後我們可以按照它的輸出 $ \mathcal{A} $ 我們有 $ Commit_H(m_1,d_{H,1}) = Commit_H(m_2,d_{H,2}) $ .

引用自:https://crypto.stackexchange.com/questions/47182