Hmac

在 HMAC 上使用 Pedersen Commitment 方案的原因是什麼?

  • September 9, 2019

我想為任意長度的消息實現非互動式位承諾方案。

而且我很好奇,在 Salted Hash(換句話說HMAC)上使用Pedersen Commitment方案的原因是什麼。

範例是來自維基百科的硬幣翻轉協議:

  1. 愛麗絲“叫”擲硬幣,但只告訴鮑勃對她的電話的承諾,
  2. 鮑勃擲硬幣並報告結果,
  3. 愛麗絲揭示了她的承諾,
  4. Bob 驗證 Alice 的電話是否符合她的承諾,
  5. 如果愛麗絲的啟示與鮑勃報告的硬幣結果相匹配,愛麗絲獲勝

使用 HMAC,Alice 在步驟 1 計算她的呼叫的雜湊並將其報告給 Bob,將密鑰(鹽)保密。在揭示步驟 (3) 中,她揭示了一把鑰匙。

對於 Pedersen 承諾方案,她在第 1 步報告她的承諾,然後在第 3 步顯示她的呼叫以及與方案相關的附加數據。

在許多應用中,尤其是在零知識證明中,我們需要加性同態的承諾方案。Pedersen 承諾方案確實具有此屬性,而基於散列的承諾方案則沒有。

如果我們出於性能原因在橢圓曲線上進行 Pedersen 承諾,我們固定兩個點 $ P $ 和 $ Q $ 在曲線上,我們可以定義:

$ \text{commit}(s,r) := sP + rQ $

或者,如果我們固定點,則以更一般的形式 $ P_1, \ldots, P_n $ , $ Q $ 在曲線上,我們可以承諾多個值 $ s_1, \ldots, s_n $ 立刻:

$ \text{commit}(s_1, s_2, …, s_n, r) := s_1P_1 + s_2P_2 + … + s_nP_n + rQ $

這個 Pedersen 承諾方案是加法同態的。的確,在 $ \text{commit}(s,r) $ 如果只有一個值,我們可以承諾添加兩個值 $ s_1 $ 和 $ s_2 $ :

$ \text{commit}(s_1 + s_2, r_1 + r_2) = (s_1 + s_2)P + (r_1 + r_2)Q $

這等於

$ (s_1P + r_1Q) + (s_2P + r_2Q) = \text{commit}(s_1, r_1) + \text{commit}(s_2, r_2) $

它也適用於同時承諾 $ n $ 價值觀 $ s_1, \ldots, s_n $ .

基於雜湊的方案

$ \text{commit}(s,r) := H(s)P + rQ $

不是加法同態的,因為:

$ \text{commit}(s_1+s_2, r_1+r_2) \ne H(s_1 || s_2)P + (r_1+r_2)Q $

也可以看看:

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