Zero-Knowledge-Proofs

Vector Pedersen 承諾中元素的範圍證明

  • February 21, 2022

如果我構造一個向量 pedersen 承諾 $ c = a_1G_1 + a_2G_2 + … + a_nG_n $ 具有任意標量向量 $ (a_1, a_2, …, a_n) $ 和組元素 $ (G_1, G_2, …, G_n) $ ,是否可以創建一個範圍證明來證明該承諾中的每個元素都是非負的?

我知道可以使用 Bulletproofs 來創建範圍證明,例如 $ c=aG+bH $ ,但是是否也可以為上述向量創建範圍證明?

您的向量承諾沒有致盲因素,這意味著它不會隱藏兩個不同的承諾是否屬於同一個 $ a_i $ 成分。根據性質 $ a_i $ 組件,也可以暴力破解承諾來確定它所代表的組件。

我們可以通過添加致盲因子輕鬆解決此問題 $ b $ :

$ C = a_0G_0 + a_1G_1 + … + a_{n-1}G_{n-1} + bH $

我們希望證明每個組件 $ a_i $ 是小於的正整數 $ 2^s $ .

為此,我們創建並聲明 $ (n\cdot s) $ 每個承諾都有自己的統一隨機致盲因子 $ b_{i,j} $ , 在哪裡 $ 0\leq i <n $ 和 $ 0\leq j <s $ . 每一個承諾 $ C_{i,j} $ 計算為 $ C_{i,j} = (z_{i,j}\cdot 2^j)G_i + b_{i,j}H $ , 在哪裡 $ z_{i,j} $ 是 $ 0 $ 或者 $ 1 $ 並代表 $ j $ 組件的第 th 位 $ a_i $ .

驗證者可以計算 $ C’=\sum C_{i,j} $ . 我們可以證明 $ C $ 表示相同的列表 $ a_i $ 組件作為 $ C’ $ 通過為公鑰提供簽名 $ (C-C’) $ 在基點上 $ H $ . 點的私鑰 $ (C-C’) $ 將是價值 $ b-\sum b_{i,j} $ .

我們現在展示了兩件事: $ C $ 是對相同組件列表的承諾 $ C’ $ ,並且每個組件 $ a_i $ 被創建為不超過 $ s $ 位(因此必須是正整數)。

剩下的就是證明每一項已宣布的承諾 $ C_{i,j} $ 真的是一個承諾 $ 0 $ 或者 $ 2^jG_i $ .

這可以通過證明私鑰的任何類型的環簽名來實現 $ C_{i,j} $ 或者 $ (C_{i,j} - 2^jG_i) $ 在基點上 $ H $ 是已知的。您可以使用防彈或更簡單的方式來理解 Borromean 環簽名來實現此目的。

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