Confidential-Transactions
向收款人發送機密交易金額
在 Maxwell 提出的機密交易中,我們使用 pedersen 承諾來隱藏金額,而不是交易金額,並將範圍證明添加到交易中以防止溢出。一個輸入一個輸出C1和C2的簡單承諾如下:(為了簡單,忽略費用)
C1 = C2 => BF1*G + a*H = BF2*G + a*H
在這個例子中
BF1 = BF2
顯然是因為它只有一個輸入和輸出。發送方如何將金額和致盲因子發送給接收方?收件人可以檢查金額是否正確!我注意到 Maxwell 說他們使用 ECDH。我假設 ECDH 沒有額外的通信渠道。那麼發送者如何獲得接收者的公鑰呢?發件人是否需要在 ECDH 中顯示致盲因子和金額?
在 Elements Alpha 中,輸出“數量”由 3 條數據組成:
- 彼得森對價值的承諾,被致盲因素蒙蔽了雙眼。
- 範圍證明,可以公開證明該值在 [0..2^32-1] 單位 (satoshis) 範圍內,而不會透露任何有關致盲因子的資訊。
- 發件人的 ECDH 臨時公鑰。
後者是解決方案所在。除了普通的 P2PKH 或 P2SH 數據之外,每個機密交易地址都包含一個接收者的 ECDH 公鑰(致盲密鑰)。
當發送 CT 交易時,發送者選擇一個ECDH 臨時私鑰,並將其與致盲密鑰組合以派生致盲種子。該種子用作隨機數生成器創建範圍證明的基礎。然後將臨時密鑰的公共版本寫入金額的第三個欄位。
當接收者看到這個 ECDH 臨時公鑰時,他會將其與他的私有密鑰結合起來,以派生與發送者使用的相同的種子。使用同樣的種子,他可以“展開”範圍證明,並解碼創建它時使用的秘密資訊:價值和致盲因子。實際上,範圍證明中還有另外 2 KB 的數據空間,只有接收者(或持有私有致盲密鑰的任何人)才能看到。