如何建構某個加密文件的解密與雜湊匹配的證據?
假設愛麗絲有文件 $ F $ 她生成密鑰 $ K $ . 她廣泛發表 $ hash(F) $ 用於辨識。她想把文件賣給鮑勃。她用 $ K $ 並發送兩者 $ E_f = E(F, K) $ 和 $ hash(K) $ 給鮑勃。但是,Bob 想要驗證這個加密文件是否真的是他要求購買的文件。
Bob 如何驗證 $ hash(Dec(E_f, K)) = hash(f) $ 只知道 $ hash(K) $ 和 $ E_f $ ? 他不應該能夠解密文件,但應該能夠證明 Alice 發送的加密文件在解密時與雜湊匹配, $ hash(f) $ .
似乎我可能需要使用某種 ZK 證明,但這可能行不通,因為證明會非常大。
這個問題可能類似於:Proof that a hash match an encrypted file,但是,只知道密鑰的雜湊值似乎會帶來不同的問題。
這也可以看作是密鑰的知識證明 $ K $ 這樣 $ hash(K) $ 與愛麗絲向鮑勃透露的那個相匹配,並且 $ Dec(E_f, K) = hash(f) $ .
你所描述的非常接近為比特幣交換數字商品而提出的零知識或有支付(ZKCP)。
設置是愛麗絲有一個文件 $ F $ 鮑勃願意花錢買它。然而,他們並不信任對方。所以 Alice 生成了一個密鑰 $ k $ 並加密文件 $ E_f=E_{K}(F) $ 使用密碼 $ E $ , 並散列密鑰 $ y=H(K) $ . 然後她發 $ (E_f,y) $ 給鮑勃,連同知識證明 $ (F,k) $ 這樣 $ c $ 是一種加密 $ F $ 在鑰匙下 $ K $ 滿足 $ H(K) = y $ . 如果 Bob 對證明感到滿意,他將在比特幣網路上發布一筆交易,說有一些比特幣被鎖定在一個帳戶中,這樣任何人都可以送出 $ H(K) $ 到賬戶地址可以取幣。
在您的情況下,您有一個額外的雜湊值 $ z $ 愛麗絲發布的文件。似乎您希望 Bob 也能夠驗證文件匹配 $ z $ . 在這種情況下,Alice 的證明將是一個合取,即 $ c $ 是一種加密 $ F $ 在鑰匙下 $ K $ 這樣 $ H(K) = y $ 和 $ z=hash(F) $ .
要進行此類證明,您需要 SNARK(簡潔的非互動式知識論證)。從概念上講很簡單,證明者表明他知道的一些秘密,如果通過一些公開的函式正確計算,將產生一些驗證者知道的值。然而,實際的實現可能相當複雜,並且在安全屬性方面也有一些注意事項。
一篇包含更多細節且值得一讀的論文:重新審視零知識或有支付:Campanelli 等人的攻擊和服務支付,發表於 CCS 2017。