門羅幣
- 一、門羅幣(monero)介紹
- 二、隱蔽地址(stealth address)原理
- 1.原理分析
- 2.示例
- 3.子地址問題
- 三、環簽名
- 1.環簽名生成演算法
- 2.環簽名驗證演算法
- 總結
- 參考
一、門羅幣(monero)介紹
門羅幣(Monero)是一個衍生自位元幣的開源加密貨幣,門羅幣的設計基于CryptoNote 協議,并且提供了更強的隱私保護特性,在身份隱私保護方面,首先門羅幣沿用了位元幣中基于橢圓曲線公鑰密碼體制的匿名身份認證技術,門羅幣中每個用戶隨機生成兩個橢圓曲線公鑰(A,B)作為用戶的公開身份標識,相對應的私鑰(a,b)由每個用戶私自持有,并在交易程序中用于生成簽名資訊,完成用戶的身份認證和支付確認,但它不同于位元幣所使用的NIST 曲線和ECDSA 簽名演算法,門羅幣選用了設計更為公開和高效的ED 25519 數字簽名模式;其次,門羅幣實作了交易程序中的身份隱藏機制,它使用環簽名實作了交易發送方的身份隱藏,使用隱蔽地址(stealth address)實作了交易接收方的身份隱藏,
二、隱蔽地址(stealth address)原理
1.原理分析
門羅幣沿用了位元幣中的UTXO 交易模型并設計了基于隱蔽地址的交易接收方身份隱藏機制,在每次交
易程序中,通過使用發送方生成的亂數和接收方的身份標識(A,B)來運行一個半Diffie-Hellman 密鑰交換協議
派生出一個一次性接收地址,從而將真正的交易接收方身份隱藏在整個可能的用戶空間中,而只有持有相應私
鑰(a,b)的人才能夠判斷出這是一筆發送給(A,B)的交易,此時對于系統總用戶數為N 的情況,觀察者可成功判斷
出接收方身份的概率為1/N,
2.示例
設橢圓曲線中的基點為G,G 的階數為
l
l
l,則門羅幣中的隱蔽地址計算流程如圖所示:

- (1) Alice 想要付款給Bob,Alice 先需獲取Bob 的公鑰資訊 ( A , B ) (A,B) (A,B);
- (2) Alice 產生一個亂數 r ∈ [ 1 , l ? 1 ] r\in [1,l-1] r∈[1,l?1],然后計算一次性公鑰 P = H s ( r A ) G + B P=H_{s} (rA)G+B P=Hs?(rA)G+B;
- (3) Alice 計算 R = r G R=rG R=rG,然后生成一筆交易將 P P P作為目的地址,并將 R R R也放入交易中;
- (4) Alice 將交易廣播到區塊鏈上;
- (5) Bob 檢查區塊鏈上每一筆交易,并用他自己的私鑰
(
a
,
b
)
(a,b)
(a,b)計算出相應的
P
′
=
H
s
(
r
A
)
G
+
B
P{}' =H_{s} (rA)G+B
P′=Hs?(rA)G+B,因為
a
R
=
a
r
G
=
r
A
aR=arG=rA
aR=arG=rA,如果
P
=
P
′
P=P{}'
P=P′,那么說明這筆交易就是發送給自己的;
(6) Bob 找到自己的交易后就可以算出對應的一次性私鑰 x ′ = H s ( a R ) + b x'=H_{s}(aR)+b x′=Hs?(aR)+b,且 P ′ = x ′ G P'=x'G P′=x′G,他可以使用私鑰 x ′ x' x′簽名交易來進行支付.
3.子地址問題
為了滿足門羅幣用戶使用和管理多個地址(身份標識)的需求,類似于位元幣中的HD 錢包方案,門羅幣又提
出了用戶子地址(sub-address)的概念,用戶可通過自己的主錢包地址派生出任意數量的不可鏈接的子地址,在進行交易接收地址搜索時,使用主私鑰進行一次計算既可以判斷出是否為子地址對應的輸出地址,從而避免了使用多個私鑰進行多次計算匹配的復雜操作開銷,用戶通過自己的主錢包地址
(
A
,
B
)
(A,B)
(A,B)和索引
i
i
i派生出相應的子地址并存盤在串列中,生成方法如圖所示:

交易程序中生成的一次性子地址的判斷方法如下圖所示,接收方在判斷子地址時只需通過主私鑰
a
a
a、一
次性子地址
P
P
P和交換的隨機變數
R
R
R進行計算獲得
D
i
′
D'_{i}
Di′?并和串列中的
D
i
D_{i}
Di? 比較即可,匹配成功后,用戶可通過主私鑰
(
a
,
b
)
(a,b)
(a,b)和索引
i
i
i生成相應的一次性私鑰,

三、環簽名
門羅幣中交易發送方的身份隱藏是通過環簽名技術來實作的,環簽名是由Rivest 等人在如何匿名泄漏秘
密背景下提出來的新型簽名技術,環簽名不同于群簽名,它在構造匿名集合的程序中無需配置程序和管理者,在環簽名中,簽名者將自己的公鑰和另外一些公鑰(但不知道私鑰)進行混淆構成匿名集合,然后再對訊息進行簽名,這樣對于觀察者而言,無法區分簽名來自匿名集合中的哪一個公鑰(真正的簽名者),環簽名的定義如下:
給定一個環
U
=
U
1
,
U
2
,
U
3
,
…
,
U
n
U={U_1,U_2,U_3,…,U_n}
U=U1?,U2?,U3?,…,Un?,環中每個成員的公私鑰對為
(
p
k
i
,
s
k
i
)
,
i
=
1
,
2
,
.
.
.
,
n
(pk_i,sk_i),i=1,2,...,n
(pki?,ski?),i=1,2,...,n,不失一般性,假設
U
k
(
1
≤
k
≤
n
)
U_k(1≤k≤n)
Uk?(1≤k≤n)是簽名人,則環簽名、驗簽演算法可如下定義:
1.環簽名生成演算法
由簽名人運行,其輸入是待簽名的訊息 m m m、環中所有成員的公鑰 p k i pk_i pki?、真正簽名人的私鑰 s k k sk_k skk?;其輸出就是 U k U_k Uk? 對訊息m 的環簽名 σ \sigma σ,
2.環簽名驗證演算法
由簽名驗證者運行,其輸入是待驗證的訊息簽名對 ( m , σ ) (m,\sigma) (m,σ)、環中所有成員的公鑰,當接受該簽名時輸出為1,否則輸出為0,
門羅幣中所使用的是一類具有可鏈接性的環簽名,稱為可鏈接環簽名,可鏈接性是指如果環 U = U 1 , U 2 , U 3 , … , U n U={U_1,U_2, U_3,…,U_n} U=U1?,U2?,U3?,…,Un?中的某個簽名人產生了兩個訊息簽名對 ( m , σ 1 ) (m,\sigma _{1} ) (m,σ1?)、 ( m , σ 2 ) (m,\sigma _{2}) (m,σ2?),則存在有效演算法使得簽名驗證者可以確定這兩個訊息是由環中同一個簽名人產生的,其中,判斷鏈接性的演算法如下定義:
簽名鏈接演算法 :其輸入是環 U = U 1 , U 2 , U 3 , … , U n U={U_1,U_2,U_3,…,U_n} U=U1?,U2?,U3?,…,Un?的兩個訊息簽名對 ( m , σ 1 ) (m,\sigma _{1} ) (m,σ1?)、 ( m , σ 2 ) (m,\sigma _{2}) (m,σ2?),當簽名 σ 1 \sigma _{1} σ1?、 σ 2 \sigma _{2} σ2?,是由同一個環成員產生時,演算法輸出為1,否則為0,
門羅幣用戶在進行交易時首先執行自主混幣程序,即搜索鏈上具有相同面額的 U T X O UTXO UTXO,選擇它們的公鑰和自身公鑰一起來構成環(匿名集合);其次,用戶通過自身私鑰和環成員的公鑰對支付訊息生成環簽名;最后,驗證節點驗證環簽名的有效性和鏈接性(防雙花),門羅幣自主混幣程序的實體如圖所示:以其中的交易 T X N 2 TXN_2 TXN2?為例,交易發送方 P 4 P_4 P4?與具有同等貨幣面額的支付者 P 2 、 P 5 、 P 6 P_2、P_5、P_6 P2?、P5?、P6?混淆在一起構成一個環進行交易,對于觀察者來說,通過支付資訊和簽名無法辨別出交易發送方的真實身份,
通過對上述分析可知,門羅幣采用基于可鏈接環簽名技術的混淆方案實作了如下3 個功能:(1) 利用環簽名的匿名性將交易發送方的身份隱藏在環成員構成的匿名集合中;(2) 利用環簽名的不可偽造性實作了用戶對交易行為的確認和不可否認;(3) 利用可鏈接環簽名的可鏈接性防止貨幣(UTXO)雙花(double spending),

總結
門羅幣通過一次性地址和環簽名所構建的自主混幣與協同混幣技術存在著類似的混淆程序,但二者又存
在不同:(1) 門羅幣的混淆程序無需發起方與參與方間的互動;(2) 參與方無需真正發起交易,這些特點使得門羅幣基于非互動模式的自主混淆程序實作了發送方的身份隱私保護,
參考
[1]姚前,張大偉.區塊鏈系統中身份管理技術研究綜述[J].軟體學報,2021,32(07):2260-2286.
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/351054.html
標籤:區塊鏈
