Zero-Knowledge-Proofs

如何驗證使用未知密鑰加密的數字

  • October 21, 2013

Alice 和 Bob 將遵循以下協議。是否有任何加密結構可以幫助 Bob 驗證他得到的答案的正確性?:

  1. Alice 使用一些密碼系統和密鑰(例如 Paillier 密碼系統)對一組數字進行加密。
  2. Bob 將密文相乘以獲得數字總和的加密。
  3. Bob 將總和的密文發送給 Alice。愛麗絲用她的密鑰解密總和,然後用鮑勃知道的密鑰加密總和。
  4. Bob 收到用他的密鑰加密的和並成功解密。

問題:Bob 如何驗證 Alice 在重新加密之前沒有將總和更改為不同的數字?某種零知識證明有用嗎?

您可能不需要使用 Paillier 加密系統重新加密。

  1. Alice 加密 $ c_1=g^{m_1} r_1^n $ 和 $ c_2=g^{m_2} r_2^n $ 併計算 $ r_3=r_1 \cdot r_2 $ 和 $ m_3=m_1+m_2 $ ,然後發送 $ c_1 $ , $ c_2 $ , $ m_3 $ 和 $ r_3 $ 給鮑勃

  2. Bob 計算 $ c_3=c_1 \cdot c_2=g^{m_3} r_3^n $ - 如果同態計算的和與重新加密相匹配,Bob 會相信 $ c_3 $ 加密 $ m_3 $

基本思想是 $ g^{m_1} r_1^n \cdot g^{m_2} r_2^n = g^{m_1+m_2} (r_1 \cdot r_2)^n $

所有密文操作都是模執行的 $ n^2 $

這個證明得到了 Paillier 原始論文的支持。不幸的是,證明並不是絕對零知識,因為總和可能會為您提供有關可能要求的資訊。但是,您可以為 $ r $ s 所以攻擊者需要一個有效的素因數分解解決方案(請參閱此處的其他問題)。

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