主頁
微信公眾號:密碼應用技術實戰
部落格園首頁:https://www.cnblogs.com/informatics/
GIT地址:https://github.com/warm3snow
簡介
從2009年比特幣的誕生,區塊鏈技術已經發展了十多年,區塊鏈技術的應用也從最初的數字貨幣擴充套件到金融、供應鏈、醫療、物聯網等多個領域。區塊鏈技術的核心是去中心化、不可篡改、匿名性等特性,其中匿名性是區塊鏈技術的重要特性之一,它可以保護使用者的隱私,防止使用者的交易資訊被洩露。在區塊鏈技術中,匿名地址是使用者的重要身份標識,使用者可以透過匿名地址進行資產託管、資產轉賬等操作,而不用暴露自己的真實身份。
在比特幣中過,使用者可以透過私鑰生成公鑰,再透過公鑰生成比特幣地址,然後透過比特幣地址進行交易,而不用暴露自己的真實身份。雖然比特幣地址(如:1BvBMSEYstWetqTFn5Au4m4GFg7xJaNVN2)具有一定的匿名性,但是比特幣地址是公開的,透過大資料手段,可以將該地址相關的交易資訊進行關聯,只要有一個交易地址被關聯到了使用者的真實身份,那麼使用者的所有交易資訊都會被暴露,因此比特幣匿名性較差。
隨著區塊鏈技術的發展,區塊鏈使用者隱私的研究也逐漸增多,其中Zcash、Monero等匿名幣的研究較為深入,它們透過零知識證明、環簽名、隱形地址等技術,實現了更好的匿名性和使用者隱私。本文及系列文章將重點介紹門羅幣的隱私保護技術,如:隱形地址、環簽名、機密交易等。
術語介紹
橢圓曲線定義
橢圓曲線(Elliptic Curve)是一種數學曲線,它的一般代數表達形式為:
其中,\(a, b\)是橢圓曲線的引數,\((x, y)\)是橢圓曲線上的點。
在密碼學中,橢圓曲線通常定義在有限域\(F_p\)上, 其中\(p\)是一個大素數。此時,\(x\)和\(y\)的取值範圍是\(0\)到\(p-1\)。具體來說,\(x\)和\(y\)都是有限域\(F_p\)中的元素,滿足橢圓曲線方程,這樣的方程我們也稱為有限域上的橢圓曲線。構造在橢圓曲線上的密碼學我們稱為橢圓曲線密碼學,英文縮寫為ECC(Elliptic Curve Cryptography)。
有限域上的橢圓曲線有以下幾個重要的性質:
- 單位元:橢圓曲線上的單位元\(O\)是一個特殊的點,它是橢圓曲線上的無窮遠點,單位元\(O\)是橢圓曲線上的一個特殊點,它滿足\(P + O = P\),\(P - P = O\),\(O + O = O\)
- 逆元:橢圓曲線上的逆元是指給定一個點\(P\),求解滿足\(Q = -P\)的點\(Q\),其中\(Q\)是橢圓曲線上的另一個點
- 點加:橢圓曲線上的點加法是指給定兩個點\(P, Q\),\(P \neq Q\), 求解它們的和\(R = P + Q\), 其中\(R\)是橢圓曲線上的另一個點
- 生成元:橢圓曲線上的生成元是指給定一個點\(G\),透過不斷地對\(G\)進行倍乘運算,可以得到橢圓曲線上的所有點
- 倍乘:橢圓曲線上的點倍乘是指給定一個點\(P\)和一個整數\(k\),求解滿足\(Q = kP = \sum_{i=1}^{k}P\)的點\(Q\),其中\(Q\)是橢圓曲線上的另一個點
離散對數困難問題是指在有限域的橢圓曲線上,給定橢圓曲線上的一個點\(P\)和另一個點\(Q\),求解滿足\(Q = aG\)的\(a\)值。(該問題是一個困難問題,目前沒有有效的解決方案,也是橢圓曲線加密演算法的安全基礎)
匿名性定義
隱私和匿名是電子現金最重要的方面。與傳統銀行不同的是,區塊鏈交易(或者說點對點支付)旨在不依賴於第三方。特別是,T. Okamoto 和 K. Ohta 描述了理想電子現金的幾個標準,其中包括“隱私:交易雙方的關係必須對任何人不可追蹤”。根據他們的描述,完全匿名的電子現金模型必須滿足的兩個屬性:
- 不可追蹤性(Untraceability):對於每一筆 incoming 交易,所有可能的傳送者都是等機率的。這意味著,對於任何兩個 incoming 交易,無法證明它們是由同一個人傳送的。
- 不可連結性(Unlinkability):對於任何兩筆 outgoing 交易,無法證明它們是傳送給同一個人的。即對於任何兩個 outgoing 交易,無法證明它們是由同一個人收款的。
不幸的是,比特幣並不滿足不可追蹤性要求。由於網路參與者之間發生的所有交易都是公開的,任何交易都可以明確地追溯到唯一的來源和最終收款者。即使兩個參與者以間接方式交換資金,經過精心設計的路徑查詢方法也會揭示出來源和最終收款者。
雖然比特幣可以提供不可連結性,但是它並不是預設的。使用者必須小心地處理他們的地址,以確保不會在不同的交易中使用相同的地址。這是因為,如果兩個交易都使用相同的地址,那麼這兩個交易就可以被連結在一起,從而揭示出使用者的身份。
術語定義
- 公私鑰對:公私鑰對常見於非對稱密碼演算法,在這些演算法中,使用的金鑰包含公鑰和私鑰。公鑰公開,用於加密或簽名驗證;私鑰保密,用於解密或簽名。常見的非對稱密碼演算法有RSA、ECC等。如在橢圓曲線中,\(Q = aG\),其中\(Q\)是公鑰,\(a\)是私鑰
- 使用者公私鑰對/金鑰對:使用者公私鑰對用\((a, Q)\)表示,其中\(a\)是使用者的私鑰,\(Q\)是使用者的公鑰。其中\((a, Q)\)被稱為標準的橢圓曲線金鑰對
- 門羅幣使用者金鑰對:在門羅幣中,使用者金鑰對包含兩個標準的橢圓曲線金鑰對\((a, A)\)和\((b, B)\),不是一般性,後文中稱\((a, b)\)為使用者私鑰,稱\((A, B)\)為使用者公鑰
門羅幣之隱形地址
在比特幣和以太坊等經典區塊鏈系統中,使用者可以在不同交易中使用不同的地址來保證交易的不可連結性
比特幣交易模型如下:
以上圖為例,在比特幣網路中,當Alice在給Bob進行2次轉賬時,使用了Bob不同的地址,對應不同的公私鑰對。比特幣交易具有如下特點:
- 為了保證使用者的隱私,Bob需要每次生成一個新的比特幣地址(對應新的公私鑰對),這樣可以保證每次交易的地址不同,從而保證交易的隱私性
- 比特幣錢包需要維護一個地址池,每次生成一個新的地址,就需要將該地址加入到地址池中,這樣會增加錢包的儲存空間
- 由於錢包儲存空間有限,限制了使用者生成地址的數量,從而不可避免導致在不同交易中使用相同的地址,無法保證地址的不可連結性
- 不同的地址之間相互獨立,無法關聯,能夠保證交易的不可連結性,從而保證使用者的隱私性
門羅幣使用了一種匿名地址技術,稱為隱形地址(stealth address),隱身地址與實際收款人的使用者唯一公私鑰繫結,但只有傳送方和收款方知道兩者之間的關聯。對於使用者的每一筆轉賬交易,收款方可以使用不同的隱形地址,從而保證了使用者交易的不可連結性
門羅幣交易模型如下:
以上圖為例,在門羅幣網路中,當Alice在給Bob進行2次轉賬時,使用了Bob不同的地址,對應不同的公私鑰對,但這些不同的公私鑰對都是由相同的金鑰對派生得到。門羅幣交易具有如下特點:
- 門羅幣使用者只需要維護兩個標準的公私鑰對\((a, A)\)和\((b, B)\),在每次收款時,基於使用者的公私鑰對生成一個隱形地址,用於收款。如:\(Q_1\)和\(Q_2\)是基於使用者公私鑰對生成的臨時公鑰,對應私鑰為\(a_1\)和\(a_2\)
- 隱形地址不需要事先生成和本地儲存,只需要在收款時,基於使用者的公私鑰對生成一個隱形地址即可,降低了錢包的儲存空間
- 基於使用者公私鑰對可以生成多個隱形地址,每個隱形地址之間不可關聯,從而保證了使用者的隱私性
門羅幣中的隱形地址是透過使用者的公私鑰對\((a, A)\)和\((b, B)\)生成的,通常用\((a, b)\)表示使用者的私鑰,用\((A, B)\)表示使用者的公鑰。隱形地址主要應用在門羅幣生成交易和接收交易中,下面我們分別介紹隱形地址的生成和驗證過程。
生成交易(轉賬)
- Alice要向Bob轉賬, Alice首先生成隨機數\(r\), 並計算\(R = rG\),作為交易的一部分
- Alice補充轉賬金額,如圖中為\(1.5 XMR\), 表示Alice向Bob轉賬\(1.5\)個門羅幣
- Bob私下提供給Alice自己的公鑰\((A, B)\)
- Alice基於Bob的公鑰生成一個隱形地址\(P = H_s(rA)G + B\), 其中\(H_s\)是雜湊函式,\(G\)是橢圓曲線上的生成元
- Alice對交易資訊\((R, 1.5XMR, P)\)進行簽名,生成簽名\(S\),並將\((R, 1.5XMR, P, S)\)傳送到門羅幣網路中
值得注意的是,隱形地址\(P\)的隨機性是由\(r\)決定的,而\(r\)是Alice生成的隨機數,只有Alice知道,因此隱形地址的安全性依賴於Alice生成\(r\)的安全性
接收交易(收款)
- Bob在區塊鏈上查詢到Alice的交易資訊\((R, 1.5XMR, P, S)\),並驗證簽名的有效性
- Bob基於自己的金鑰\((a, B)\),計算\(P^{'} = H_s(aR)G + B\),並驗證\(P \stackrel{?}{=} P^{'}\),如果驗證透過,則表示該交易是Bob的收款交易
- 同時當Bob需要花費該筆交易時,Bob可以使用自己的金鑰\((a, b)\),計算\(x = H_s(aR) + b\),並使用\(x\)作為簽名私鑰,從而授權該交易
收款隱私性和正確性驗證
- 隱私性:需要注意的是,由於只有Bob知道自己的私鑰\((a)\),因此只有Bob能夠計算出\(H_s(aR)\),從而計算出\(P^{'}\),因此只有Bob能夠確認該交易是自己的收款交易,保證了使用者隱私性
- 正確性驗證如下:
因此,\(P^{'} = P\),驗證透過,表示Bob能夠正確驗證該交易是自己的收款交易
支出正確性驗證
Bob要能夠花費該筆資產,需要保證自己有\(P\)對應的私鑰。Bob可以根據自己的私鑰\((a, b)\),計算\(x = H_s(aR) + b\)
支出正確性驗證如下:
因此,\(P = xG\),表示\(x\)是\(P\)對應的私鑰,Bob可以使用\(x\)作為簽名私鑰,從而授權對應資產的支出
檢視金鑰和支出金鑰
從Bob收款和支出的過程中,我們可以看到Bob收款時只需要用到\((a, B)\), 而支出時需要用到\((a, b)\),按照使用場景,一般將\((a, B)\)稱為檢視金鑰,將\((a, b)\)稱為支出金鑰
- 檢視金鑰:用於收款,可以公開給監管結構或第三方,第三方可以透過檢視金鑰檢視使用者的交易記錄,但是由於不知道全部的私鑰\((a, b)\),因此無法花費使用者的資產
- 支出金鑰:用於支出,只有使用者自己知道,用於花費使用者的資產
門羅幣的隱形地址技術,為監管機構提供了一種有效的監管手段,既保護了使用者的隱私,又滿足了監管機構的監管需求。因此,在不少數字貨幣友好的國家和地區也開始嘗試在主權數字貨幣中引入門羅幣的隱形地址技術。
結語
隱形地址技術是門羅幣的核心技術之一,實現了使用者的隱私保護和監管需求。本文簡單介紹了比特幣和門羅幣的交易模型,並詳細介紹了門羅幣的隱形地址技術,包括隱形地址的生成和驗證過程。希望透過本文的介紹,讀者能夠了解門羅幣的隱形地址技術,以及隱形地址技術的應用場景和優勢。
下一篇文章將介紹門羅幣的環簽名技術,環簽名技術是門羅幣的另一個核心技術,它透過環簽名技術,實現了交易的不可追蹤性。
參考文獻
- 【1】CryptoNote wiki
- 【2】Monero wiki
- 【3】Home | Monero - secure, private, untraceable
- 【4】Elliptic-curve cryptography
- 【5】CryptoNote whitepaper v2.0