隱私與機密交易

範圍證明

範圍證明是一種零知識證明,證明某個被承諾的秘密數字落在指定區間內——例如一筆隱藏餘額至少為零且小於 2^64——卻不洩漏該數字本身。白話地說,它讓你能證明「這個密封信封裡裝著一個非負、合理偏小的金額」,使機密交易無法偷渡偽造或負的數值,同時人人仍能保守自己的金額秘密。

範圍證明之所以存在,是因為機密交易有一個增發漏洞。金額被承諾在一個質數階 n 的有限循環群中,算術是模運算。數值 -1 與 n-1(一個天文數字)無法區分。若無防護,花費者可以把某個輸出承諾成接近 n 的值,使其行為如同負餘額,讓同態之和看似仍淨為零,卻暗中鑄造貨幣。範圍證明藉由證明每個被承諾的輸出值都落在 [0, 2^n)——對 64 位元的貨幣供給通常是 [0, 2^64)——杜絕了這點,使環繞不可能發生。

在機制上,經典做法逐位元證明界限:它證明被承諾的值可寫成各位元 b_i 乘以 2^i 之和,且每個 b_i 確實為 0 或 1。Zcash 早期的機密設計與最初的 Elements/Liquid CT 為此使用 Borromean 環簽章,正確但笨重——每個 64 位元輸出約 5 千位元組,主導了交易大小與驗證成本。正是這份重量,使金額隱私變得昂貴,並催生了更好的證明系統。

現代的答案是 Bulletproofs,它用一個內積論證更精簡地證明相同的位元分解,把 64 位元的範圍證明縮到不到 700 位元組,並以僅對數的增長聚合多個證明——全程不需可信設定。Monero 於 2018 年採用 Bulletproofs,把典型交易大小削減約 80%。因此範圍證明坐落在隱私與擴展性的交界:它是健全性所必需,但其大小與驗證時間始終是優化的目標。

Prove: v ∈ [0, 2^64) given only C = v*H + r*G

證明一個隱藏的被承諾值在範圍內,從不揭露 v。

範圍證明只認證數值的界限,而非它在帳本中的正確性;強制守恆的是同態平衡檢查。兩者缺一不可——拿掉範圍證明,攻擊者就能增發供給;拿掉平衡檢查,金額便不必相符。