Hash

是否有散列秘密的零知識證明?

  • May 17, 2022

愛麗絲想分享一個秘密 $ S $ 與 Bob,所以她用 Bob 的私鑰對其進行加密。

Bob 目前不線上,因此 Victor 會在此期間為他保密。

驗證者維克多想驗證它確實是秘密 $ S $ 在不知道秘密的情況下 $ S $ 自己。Victor 可以可靠地知道秘密的雜湊值 $ S $ (關於他如何依賴散列的細節與這裡無關)。Victor 也可以有任何其他類型的承諾,它不必是散列,只要他永遠不能用純文字推斷秘密。

愛麗絲這樣做

encryptedSecret = encrypt(secret, bobsPublicKey)

維克多這樣做

verify(encryptedSecret, hashOfSecret) => true
verify("anything else", hashOfSecret) => false

有這樣的verify功能嗎?

在 Financial Crypto 2016 研討會上對數獨解決方案、Bowe-Maxwell 談話和比特幣交易進行私人驗證。

驗證解決的問題是:

  1. 買家不願意先發送他的硬幣,有收到隨機比特的風險;
  2. 賣家不願意先將他的解決方案發送給拼圖,否則可能得不到任何獎勵。

引入並實施了非互動式證明來驗證:

  1. 明文是手頭難題的有效數獨解決方案;
  2. 密文是用密鑰生成的;
  3. 密鑰是散列值的原像,它與密文一起發送給買方。

此雜湊可用於創建 HTLC 交易,以便賣方僅通過在區塊鏈上發布密鑰來索取他的硬幣。好吧,實際上使用了一個腳本,但讓我們堅持使用 HTLC 作為簡化。

簡短的實用答案是:可以使用 zkSNARK 證明來驗證雜湊原像。另一個(一般)答案是,任何 NP 語言都存在互動式證明系統。

一個無恥的廣告:從多項式集合表示和 Naor 的“撲克牌”解決方案開始,設計了另一種數獨解決方案驗證電路,在 IEEE ATIT 2019 上展示。

https://github.com/vadym-f/Sudoku_solvability_proof/tree/master/IEEE_ATIT_2019

有一個 ZK-STARK 可以證明你知道原像到一個值。“這段程式碼中給出的證明者證明的 Rescue-Hash 語句是:

"I know a sequence of n + 1 inputs {w_i} such that H(...H(H(w_0, w_1), w_2) ..., w_n) = p"

在哪裡:

H is the Rescue hash function.
Each w_i is a 4-tuple of field elements. These are private inputs, known only to the prover.
p is the public output of the hash (which also consists of 4 field elements).

" https://github.com/starkware-libs/ethSTARK/tree/ziggy

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