Hash
加密數據的單向散列,結果對散列器隱藏
我正在尋找一種單向雜湊函式,它可以由 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 。這表明使用亂碼電路計算散列函式可能是實用的。