受 EC El Gamal 啟發的零知識價值轉移協議
這是對我在這裡提出的問題的跟進。我設計了一個允許以下內容的方案:
- 愛麗絲有一個價值 $ a $ 她想保密
- 鮑勃有一個價值 $ b $ 他想保密
- 愛麗絲可以將她的一部分價值“轉移”給鮑勃,這樣她轉移的任何東西都必須從她的價值中減去(它們的價值總和必須保持不變)。例如,如果她有 $ 10 $ 鮑勃有 $ 5 $ , 轉移後 $ 2 $ ,她應該有 $ 8 $ 鮑勃應該有 $ 7 $
- Victor 是一個獨立的觀察者,並且必須能夠驗證值的總和不會因傳輸而改變。但他應該在不了解任何相關數字的情況下做到這一點
下面的方案受到 EC El Gamal 的啟發。如果有人能看到其中的漏洞,將非常感謝回饋。
設置
- Alice 和 Bob 持有使用帶有生成器的橢圓曲線生成的 EC 密鑰對 $ G $ (這種曲線的一個例子可能是 secp256k1)
- 他們的私鑰是 $ x_a, x_b $ , 和 $ X_a, X_b $ 是對應的公鑰
- 愛麗絲已承諾通過使 $ A = a*G + X_a $ 上市
- 鮑勃已通過以下方式承諾他的號碼 $ B = b*G + X_b $ 上市
轉移
愛麗絲想要轉移價值 $ c $ 給鮑勃這樣 $ a’ = a - c $ 和 $ b’ = b + c $ . 為此,她執行以下操作:
- 計算對新號碼的承諾 $ A’ = (a - c)*G + X_a $
- 計算對轉移號碼的承諾 $ C_1 = c*G $
- 計算與 Bob 的共享密鑰並使用它來建構共享密鑰 $ s = H(x_a * X_b $ ), 在哪裡 $ H $ 是一個散列函式
- 加密 $ c $ 使用共享密鑰 $ C_2 = E(c, s) $ , 在哪裡 $ E $ 是一個對稱加密函式
- 公開以下資訊 $ (A’, C_1, C_2) $
Bob 收到資訊並執行以下操作:
- 計算與 Alice 的共享密鑰並使用它來建構共享密鑰 $ s = H(x_b * X_a $ )
- 使用共享密鑰解密 $ c = D(C_2, s) $ , 在哪裡 $ D $ 是一個對稱解密函式
- 驗證 $ C_1 = c * G $
- 計算對新號碼的承諾 $ B’ = (b + c) * G + X_b $
- 使 $ B’ $ 上市
確認
獨立觀察者 (Victor) 可以通過執行以下操作來驗證系統中的總值沒有改變:
- 驗證 $ A = A’ + C_1 $
- 驗證 $ B’ = B + C_1 $
上面的方案應該是安全的,因為所有數字都被填充了。這些數字是 256 位整數,其中:
- 包含實際數字的 64 個最高有效位
- 其餘 192 位隨機設置
所以,有效地,而不是轉移類似的東西 $ 2 $ ,愛麗絲會轉移類似的東西 $ 2.00034094035343043 $
照原樣,沒有什麼可以阻止愛麗絲通過讓她花費超過她所擁有的 $ a $ 下溢模階 $ n=2^{256}-\mathtt{14551231950b75fc4402da1732fc9bebf_h} $ 的 $ g $ .
更新:正如 VincBreaker 在那個答案中指出的那樣,沒有什麼可以阻止 Bob 計算 Alice 的轉移承諾 $ \bar c $ 從 Alice 到 Bob:Alice 的私鑰的唯一用途是計算 $ s $ 她與鮑勃分享,並與 $ s $ Bob 可以做 Alice 可以做的任何事情。在所述答案中考慮了修復。
上述屬性是否是功能問題取決於應用程序,但這些是電子貨幣需要注意的事項。
如建議的那樣,64 位值/數量的填充方案 $ \bar x $ (限制為 $ 0\le\bar x\le2^{64}-2 $ ) 是 $ x=P(\bar x,r)=\bar x,2^{192}+r $ 為了 $ k=192 $ -位均勻 $ r $ , 和 $ \bar x=Q(x)=\displaystyle\left\lfloor\frac x{2^{192}}\right\rfloor $ 用於提取價值/金額 $ \bar x $ 從 $ x $ , 和 $ Q(P(\bar x))=\bar x $ . 由此可見,如果 $ a=b+c $ 然後要麼 $ \bar a=\bar b+\bar c $ 或者 $ \bar a+1=\bar b+\bar c $ 保持,幾乎相同的賠率。這是否是功能問題取決於應用程序(但請參閱最後一節以了解解決方法)。
另一個安全問題是 $ k $ -位隨機填充 $ r $ 充其量是 $ k/2 $ -針對試圖確認猜測的人的比特安全性,例如交易金額 $ \bar c $ 從 $ C_1=cG=\bar c,2^{192}G+rG $ , 通過求解 $ k $ -少量 $ r $ 方程 $ rG=C_1-\bar c,2^{192}*G $ 使案例如 Baby-Step/Giant-Step 算法。持有的值相同 $ \bar a $ 和 $ \bar b $ .
因此,我會說 256 位 ECC 太少了,特別是如果我們想要如下所示的精確平衡。
如果一個單位的不確定性是一個問題,我們可以通過犧牲一些 $ r $ . 那可能是 $ k=176 $ -位均勻 $ r $ 和 $ P(\bar x,r)=\bar x,2^{192}+r-2^{175} $ 和 $ Q(x)=\displaystyle\left\lfloor\frac{x+2^{191}}{2^{192}}\right\rfloor $ . 通過這種方式,大多數交易都是準確的,包括第一個 $ 2^{16} $ 可以肯定,而且在實踐中可能是第一個 $ 2^{22} $ .