Monero技術詳解(四): 隱藏交易數額之Pederson承諾

買賣虛擬貨幣
不好意思,停更好長時間了。這幾天有空,快點繼續更新。前一篇文章(https://learnblockchain.cn/article/1158 )介紹了Monero的核心技術之一——環簽名的一部分,這篇來介紹Monero隱藏交易數額的技術。在以比特幣為代表的UTXO交易模型中,普通交易中包括支付給礦工的手續費在內,不產生多餘數額的幣,交易輸入與輸出相等。由於比特幣之類的UTXO時可以將交易中UTXO的數額顯式地展現出來,礦工可以驗證交易輸出的數額不大於輸入的數額即可。但是在隱私交易的需求下,驗證交易數額的合法性變得較為複雜。退一步來想這個問題,實際上礦工只是想知道交易是否符合“輸出的數額不大於輸入的數額”這一要求(一般看是否相等),而並不必知道具體的數額是多少。換句話說,關於交易數額,礦工知道的比他想要知道的多,這也就是其中的gap。合理切割”礦工欲知“與”礦工所知“是隱藏交易數額的方法。1. 簡單加密數額

這裡用到的方法與前文對一次性金鑰中的噪聲項處理方法相似,都是將數額欄位加密。由於該加密方式具有加法同態性,對於輸入、輸出的數額密文欄位作減法(減法可以看成加法),比較減法之後的結果是否為0的密文即可判斷交易數額是否合法。具體做法是,在UTXO中使用欄位

2. 盲化數額

以上的簡單加密數額,並沒有真正隱藏住UTXO的數額。詳細來說,因為數額空間較小。以比特幣為例,全網總共21,000,000BTC,以最小計量單位聰(Satoshi)來計算,總共

枚Satoshi。惡意觀察者可以讓取遍所有可能的數額計算並比對UTXO中的數額欄位,可以獲UTXO被隱藏的數額。因為數額空間有限,可以在暴力搜尋範圍了。所有以上的方案並沒有真正地隱藏數額欄位。

3. 數額承諾的證明

盲化了數額欄位之後,礦工簡單地求交易輸入輸出金額欄位的代數和已經不能驗證交易過程沒有產生多餘的金額了。仍以上述二進三出的交易為例,其交易輸入輸出代數和

注意,這裡傳送人在構建交易時,組裝數額承諾需要用到交易輸入所對應的盲化因子和數額明文。這些都是需要從上一筆交易中獲得,所以交易是需要將盲化因子和交易數額秘密傳遞給接收人,以便接收人可以順利構建下一筆交易,花出UTXO。

4. 數額欄位的秘密傳遞

由於在介紹地址那一節中提到,為了讓接受人知道一次性公鑰,採用了DH秘密交換的方式將隨

總結,本文主要介紹Monero幣用“Pedersen承諾+簽名技術”來隱藏使用者交易數額的隱藏問題的一部分。

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;