門羅幣中的機密交易,或者如何將誰知道什麼轉移到誰知道哪裡

我們繼續關於門羅幣區塊鏈的系列文章,今天的文章將重點介紹 RingCT(環機密交易)協議,該協議介紹了機密交易和新的環簽名。 不幸的是,網路上關於它如何運作的資訊很少,我們試圖填補這個空白。

門羅幣中的機密交易,或者如何將誰知道什麼轉移到誰知道哪裡

我們將討論網路如何使用該協議隱藏傳輸金額,為什麼他們放棄經典的加密貨幣環簽名,以及該技術將如何進一步發展。

由於該協議是門羅幣中最複雜的技術之一,因此讀者需要了解該區塊鏈的設計基礎知識以及橢圓曲線密碼學的基本知識(要重溫這些知識,您可以閱讀我們的上一篇文章關於 多重簽名).

RingCT協議

對加密貨幣的可能攻擊之一是基於對發送交易的金額和時間的了解的區塊鏈分析。 這允許 顯著縮小攻擊者感興趣的出口的搜尋區域。 為了防止此類分析,門羅幣實施了匿名交易協議,該協議完全隱藏網路上的傳輸金額。

值得注意的是,隱藏金額的想法並不新鮮。 比特幣核心開發者格雷格·麥克斯韋(Greg Maxwell)是第一個在他的著作中描述它的人之一。 文章 保密交易。 RingCT 目前的實現是對其進行修改,可以使用環簽名(無論是否沒有環簽名),這就是它的名字的由來 - 環機密交易。

除此之外,該協議還有助於消除混合灰塵輸出的問題 - 少量的輸出(通常以交易找零的形式收到),這會產生比其價值更多的問題。

2017 年 6 月,門羅幣網路發生了硬分叉,允許選擇性使用機密交易。 同年 XNUMX 月,隨著版本 XNUMX 硬分叉,此類交易成為網路上唯一允許的交易。

RingCT同時使用多種機制:多層連結自發性匿名群簽(Multilayered Linkable Spontaneous Anonymous Group Signature,以下簡稱MLSAG)、承諾方案(Pedersen Commitments)和範圍證明(該術語沒有既定的俄語翻譯) 。

RingCT協議引入了兩種類型的匿名交易:簡單和完整。 當交易使用多個輸入時,錢包會產生第一個,而在相反的情況下,錢包會產生第二個。 它們的差異在於交易金額的驗證和使用 MLSAG 簽章簽署的資料(我們將在下面詳細討論這一點)。 而且,完整類型的交易可以用任意數量的輸入生成,沒有根本的差異。 在書裡 “零到門羅幣” 對此,據說將全部交易限制為一個輸入的決定是倉促做出的,並且未來可能會發生變化。

MLSAG簽名

讓我們記住什麼是簽名的交易輸入。 每筆交易都會花費並產生一些資金。 資金的產生是透過創建交易輸出(直接類比鈔票)而發生的,交易花費的輸出(畢竟現實生活中我們花的是紙幣)成為輸入(小心,很容易混淆)這裡)。

一個輸入引用多個輸出,但只花費一個輸出,從而創建了一個“煙幕”,使分析翻譯歷史變得困難。 如果一筆交易有多個輸入,那麼這樣的結構可以表示為矩陣,其中行是輸入,列是混合輸出。 為了向網路證明交易準確地花費了其輸出(知道其密鑰),輸入使用環簽名進行簽名。 這樣的簽章保證簽章者知道任何欄位的所有元素的金鑰。

保密交易不再使用經典交易 cryptonote 環簽名,它們被 MLSAG 取代 - 類似的單層環簽名的版本,適用於多個輸入, LSAG.

它們被稱為多層,因為它們一次對多個輸入進行簽名,每個輸入都與其他幾個輸入混合,即對一個矩陣進行簽名,而不是對一行進行簽名。 正如我們稍後將看到的,這有助於節省簽名大小。

讓我們看看環簽名是如何形成的,以一個交易為例,該交易花費 2 個實際輸出並使用區塊鏈中的 m - 1 個隨機輸出進行混合。 讓我們將我們花費的輸出的公鑰表示為
門羅幣中的機密交易,或者如何將誰知道什麼轉移到誰知道哪裡,以及對應的關鍵影像: 門羅幣中的機密交易,或者如何將誰知道什麼轉移到誰知道哪裡 這樣我們就得到了一個大小為 2×米。 首先,我們需要計算每對輸出的所謂挑戰:
門羅幣中的機密交易,或者如何將誰知道什麼轉移到誰知道哪裡
我們從輸出開始計算,並使用它們的公鑰進行計算:門羅幣中的機密交易,或者如何將誰知道什麼轉移到誰知道哪裡和隨機數門羅幣中的機密交易,或者如何將誰知道什麼轉移到誰知道哪裡結果,我們得到以下值:
門羅幣中的機密交易,或者如何將誰知道什麼轉移到誰知道哪裡,我們用它來計算挑戰
門羅幣中的機密交易,或者如何將誰知道什麼轉移到誰知道哪裡下一對輸出(為了更容易理解我們在哪裡替換什麼,我們用不同的顏色突出顯示了這些值)。 以下所有值均使用第一個插圖中給出的公式在一個圓圈中計算。 最後要計算的是一對實際輸出的挑戰。

正如我們所看到的,除了包含實際輸出的一列之外,所有列都使用隨機產生的數字門羅幣中的機密交易,或者如何將誰知道什麼轉移到誰知道哪裡。 為 π- 專欄我們也需要它們。 讓我們轉型吧門羅幣中的機密交易,或者如何將誰知道什麼轉移到誰知道哪裡在 s 中:門羅幣中的機密交易,或者如何將誰知道什麼轉移到誰知道哪裡
簽名本身是所有這些值的元組:

門羅幣中的機密交易,或者如何將誰知道什麼轉移到誰知道哪裡

然後該資料被寫入事務中。

正如我們所看到的,MLSAG 僅包含一項挑戰 c0,這可以讓您節省簽名大小(這已經需要大量空間)。 此外,任何檢查員使用這些數據門羅幣中的機密交易,或者如何將誰知道什麼轉移到誰知道哪裡,恢復值 c1,…, cm 並檢查門羅幣中的機密交易,或者如何將誰知道什麼轉移到誰知道哪裡。 因此,我們的環已關閉並且簽名已得到驗證。

對於完整類型的 RingCT 交易,在混合輸出的矩陣中又添加了一行,但我們將在下面討論這一點。

彼德森承諾

義務規劃 (更常用的是英文術語“承諾”),以便一方可以證明他們知道某個秘密(數字),而無需實際透露它。 例如,您擲骰子上的某個數字,考慮承諾並將其傳遞給驗證方。 這樣,在公開秘密數字的那一刻,驗證者就獨立地計算出承諾,從而確保你沒有欺騙他。

門羅幣承諾用於隱藏轉帳金額並使用最常見的選項 - Pedersen 承諾。 順便說一句,一個有趣的事實 - 最初開發人員建議通過普通混合來隱藏金額,即添加任意金額的輸出以引入不確定性,但後來他們轉向承諾(這並不是他們節省的事實)交易規模,我們將在下面看到)。
一般來說,承諾是這樣的:
門羅幣中的機密交易,或者如何將誰知道什麼轉移到誰知道哪裡在哪裡 C ——承諾本身的意義, a - 隱藏金額, H 是橢圓曲線上的一個固定點(附加產生器),並且 x - 某種任意掩碼,隨機產生的隱藏因子。 這裡需要掩碼,以便第三方不能簡單地猜測承諾的價值。

當產生新的輸出時,錢包會計算其承諾,並且在花費時,它會根據交易的類型,採用生成過程中計算的值或重新計算它。

環CT簡單

在簡單的RingCT交易的情況下,為了確保交易創建的輸出與輸入的數量相等(不是憑空產生錢),需要將第一和第二的承諾總和是一樣的,即:
門羅幣中的機密交易,或者如何將誰知道什麼轉移到誰知道哪裡
承諾委員會的看法略有不同——沒有面具:
門羅幣中的機密交易,或者如何將誰知道什麼轉移到誰知道哪裡哪裡 a — 佣金金額,是公開的。

這種方法使我們能夠向依賴方證明我們正在使用相同的金額,而無需披露它們。

為了讓事情更清楚,讓我們來看一個例子。 假設一筆交易花費了 10 和 5 XMR 的兩個輸出(意味著它們成為輸入),並產生了三個價值 12 XMR 的輸出:3、4 和 5 XMR。 同時,他支付了3 XMR的佣金。 因此,花費的金額加上產生的金額和佣金等於 15 XMR。 讓我們嘗試計算承諾並查看其金額的差異(記住數學):

門羅幣中的機密交易,或者如何將誰知道什麼轉移到誰知道哪裡
在這裡我們看到,為了使方程式收斂,我們需要輸入和輸出掩碼的總和相同。 為此,錢包隨機生成 x1、y1、y2 和 y3,以及剩餘的 x2 計算如下:
門羅幣中的機密交易,或者如何將誰知道什麼轉移到誰知道哪裡
使用這些掩碼,我們可以向任何驗證者證明我們產生的資金不會多於我們支出的資金,而無需透露金額。 原創吧?

環CT全

在完整的 RingCT 交易中,檢查轉帳金額稍微複雜一些。 在這些交易中,錢包不會重新計算輸入的承諾,而是使用生成時計算的承諾。 在這種情況下,我們必須假設總和差不再為零,而是:
門羅幣中的機密交易,或者如何將誰知道什麼轉移到誰知道哪裡
這裡 z — 輸入和輸出遮罩之間的差異。 如果我們考慮 zG 作為公鑰(事實上是),那麼 z 是私鑰。 這樣,我們就知道公鑰和對應的私鑰了。 有了這些數據,我們就可以在 MLSAG 環簽名中使用它以及混合輸出的公鑰:
門羅幣中的機密交易,或者如何將誰知道什麼轉移到誰知道哪裡
因此,有效的環簽名將確保我們知道其中一列的所有私鑰,並且只有在交易產生的資金不超過其支出的資金時,我們才能知道最後一行的私鑰。 順便說一句,這是“為什麼承諾金額的差異不會導致零”問題的答案 - 如果 zG = 0,然後我們將用實際輸出擴展該列。

資金接收者如何知道向他發送了多少錢? 這裡一切都很簡單 - 交易的發送者和接收者使用 Diffie-Hellman 協定交換金鑰,使用交易金鑰和接收者的檢視金鑰併計算共用金鑰。 發送者將有關輸出金額的資料寫入交易的特殊欄位中,並使用此共用金鑰加密。

範圍證明

如果您使用負數作為承諾金額會發生什麼? 這可能會導致額外硬幣的產生! 這個結果是不可接受的,所以我們需要保證我們使用的金額不是負數(當然不能透露這些金額,否則這麼多工作都是白費)。 換句話說,我們必須證明總和在區間內 [0, 2n - 1].

為此,每個輸出的總和被分成二進制數字,並分別計算每個數字的承諾。 最好透過一個例子來了解這是如何發生的。

假設我們的金額很小並且適合 4 位(實際上是 64 位),並且我們創建一個價值 5 XMR 的輸出。 我們計算每個類別的承諾以及整個金額的總承諾:門羅幣中的機密交易,或者如何將誰知道什麼轉移到誰知道哪裡
接下來,每個承諾都與代理商混合 (Ci-2iH) 並與 Borromeo 環簽名(另一個環簽名)成對簽名,由 Greg Maxwell 在 2015 年提出(您可以閱讀更多相關資訊) 這裡):
門羅幣中的機密交易,或者如何將誰知道什麼轉移到誰知道哪裡總而言之,這稱為範圍證明,並允許您確保承諾使用範圍內的金額 [0, 2n - 1].

接下來是什麼?

在目前的實作中,範圍證明佔用大量空間 - 每個輸出 6176 位元組。 這導致交易量更大,因此費用更高。 為了減少門羅幣交易的規模,開發人員正在引入防彈技術而不是 Borromeo 簽名——一種沒有按位承諾的範圍證明機制。 根據一些估計,它們能夠將範圍證明的大小減少多達 94%。 順便說一句,XNUMX月中旬該技術通過了 審計 來自 Kudelski Security 的報告,該報告沒有揭示技術本身或其實施方面的任何重大缺陷。 該技術已經在測試網路中使用,並且透過新的硬分叉,它可能會轉移到主網路。

提出您的問題,為加密貨幣領域技術的新文章提出主題,並訂閱我們的小組 Facebook隨時了解我們的活動和出版物。

來源: www.habr.com

添加評論