Hash

加密數據的單向散列,結果對散列器隱藏

  • May 9, 2016

我正在尋找一種單向雜湊函式,它可以由 A 對 B 提供的加密數據 E(D) 執行,而執行者 A 無法計算出 D 或 H(D)。這類似於 HMAC(Message, Key),只是 A 無法知道輸出雜湊。

用法:

  • B 加密數據 D => E(D)
  • B 將 E(D) 發送給 A
  • A 包含一個密鑰 SK
  • A 執行 F(E(D), SK) => E(H(D))
  • A 發送 E(H(D)) 給 B
  • B 解密 E(H(D)) => H(D)

約束:

  • A 無法恢復 D
  • A 無法從 E(H(D)) 中恢復 H(D)
  • B 無法從 E(H(D)) 或 H(D) 恢復 SK

我相信可能存在涉及公鑰/私鑰加密的解決方案,但我不打算推​​出自己的解決方案。

如果您不限於 HMAC,盲簽名將滿足您的要求。

在 RSA 中,您可以按如下方式進行盲簽名:

讓 $ M $ 成為要簽名的消息(可能是消息的雜湊)並讓 $ e,N $ 是 A 的公鑰, $ d $ 是 A 的私鑰。

B 計算 $ M’ = M\cdot r^e \bmod{N} $ 並發送 $ M’ $ 給 A.

A 計算 $ S’ = M’^d\bmod{N} $ 並將其發送給 B。B

計算 $ S = S’\cdot r^{-1}\bmod{N} = M^d\bmod{N} $ (IE, $ M $ 用 A 的私鑰簽名)。

我不知道有任何開箱即用支持此方案的庫,但添加功能不會太難。此外,其他密碼系統也會支持這個想法。

同態加密

使用完全同態加密,這將是非常可能的。您只需要實現雜湊函式的同態版本並將其建構為 HMAC 函式。鑑於目前的公鑰同態技術,它會非常慢。不過,這項技術對於部署來說太新了。

亂碼電路

實現 HMAC 的另一個選項應該滿足您所說的要求是亂碼電路。亂碼電路甚至可以比同態 AES的最優化版本更快地私下評估 AES 。這表明使用亂碼電路計算散列函式可能是實用的。

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