在 HMAC 上使用 Pedersen Commitment 方案的原因是什麼?
我想為任意長度的消息實現非互動式位承諾方案。
而且我很好奇,在 Salted Hash(換句話說HMAC)上使用Pedersen Commitment方案的原因是什麼。
範例是來自維基百科的硬幣翻轉協議:
- 愛麗絲“叫”擲硬幣,但只告訴鮑勃對她的電話的承諾,
- 鮑勃擲硬幣並報告結果,
- 愛麗絲揭示了她的承諾,
- Bob 驗證 Alice 的電話是否符合她的承諾,
- 如果愛麗絲的啟示與鮑勃報告的硬幣結果相匹配,愛麗絲獲勝
使用 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 $
也可以看看: