原創 一篇文章就能理解門羅幣(Monero)標準地址的生成和校驗

關鍵提示:

1 位元組前綴 + 32 位元組公開支付鑰匙 + 32 位元組公開查看鑰匙 + 4 位元組校驗和

1 位元組 = 兩個英文字元,總長度 138

本文由兩部分組成:「地址生成」和 「地址校驗」。

地址生成:

這部分會演示如何選擇「地址類型」和「助記詞詞典」,然後隨機生成「1、助記詞種子」,之後轉換成「2、十六進位種子」,再是一起生成「3、私有支付鑰匙」和「4、私有查看鑰匙」。

然後分別生成「5、公開支付鑰匙」和「6、公開查看鑰匙」,最後進行 Base58 編碼得到「7、公開地址」。

地址校驗:

這部分會演示如何將「8、公開地址」,轉換為「9、十六進位公開地址」,然後對其解碼得到「公開支付鑰匙」和「公開查看鑰匙」,以及「11、地址校驗和」。

拼接「網路編碼」、「公開支付鑰匙」、「公開查看鑰匙」、「校驗和」這 4 者我們重新得到「標準地址」,以完成「地址校驗」。

一、地址生成

標準地址:

可以表示為:

network byte 18 + public spend key + public view key + checksum

或者:

1 byte prefix + 32 byte key + 32 byte key + 4 byte checksum

門羅幣地址是一個由數字和字母組成的字元串,可以與任何想給你門羅幣的人分享。

下面是一個門羅幣地址的例子:

46v3AmWgY7fdLYfiKKw6p78k1Esyky3GC7r2vwjNLrNbbr94cQ3hXzZifDZvYFMZanUuSvpoUkNvvDrqpaKGrcyy9rbo7Bz

下面我們就演示如何生成門羅幣地址,先看圖:

下面結合工具,給您做演示及講解。

地址類型

門羅幣「標準地址」為 95 個英文字元,由數字和字母組成。除了「標準地址」外,你還可以生成帶支付ID(Payment ID)的「集成地址」。

「標準地址」和「集成地址」,是門羅幣的全部地址類型。

另外,因為有其它虛擬貨幣,使用 CryptoNote 協議或者直接 clone 門羅幣代碼,所以你也可以用此工具生成其它幣種的地址。如:AEON、ETN

網路編碼

門羅幣不同類型的地址,使用不同的網路編碼以用於區分及方便識別。

「標準地址」用的是數字 18,「集成地址」用的是數字 19

助記詞詞典

門羅幣當前提供 13 種語言,可以用做詞典以方便你生成助記詞。

它們分別是:

簡體中文 (中國)、Nederlands、English、EnglishOld、Esperanto、Fran?ais、Deutsch、Italiano、日本語、Lojban、Português、русский язык 和 Espa?ol

每個詞典有 1626 個單詞。

1、助記詞種子

為方便你保存自己的私鑰,並且可以恢復賬號,門羅幣提供了「助記詞種子」。

「助記詞種子」一般由 25 個單詞構成,這是最常見通用的。

也有 24 個單詞的(25 個單詞的最後一個單詞為「校驗和」,可以省略,因此是 24)。

也有 13 個單詞的(這種地址比較舊,目前比較少見)。使用時程序會先將前 12 個單詞進行複製,再加上最後一個單詞,也是 25

本文僅使用「25 個單詞」構成的「助記詞種子」。

這 25 個單詞,從我們的「助記詞詞典」里根據規則選擇而來。下面我們隨機生成一個「助記詞種子」:

dapper muppet younger daytime waxing jaded lyrics hairy vary mesh warped object viking negativeisolated vipers winter frown ensign begun mowing awning kernels language warped

保存好它,不要丟失,不要讓任何人知道。否則,你賬戶里的「金錢」就會永遠丟失,或者有被盜的風險。

2、十六進位種子

下面開始講解如何由「助記詞種子」開始一步步進行恢復公鑰、私鑰。

上述「25 個單詞」構成的「助記詞種子」,最後一個單詞是「校驗和」,不參與恢復。

所以,實際有「24 個單詞」參與恢復工作。

每 3 個單詞成一組,每組單詞可以恢復 4 個位元組的數據,共 8 組。

每個位元組數據,等於 2 個英文字元,所以總長度為 64

即:

24 / 3 = 8 # 每 3 個單詞成一組

4 * 8 = 32 # 每組單詞可恢復 4 個位元組的數據,共 8 組。

32 * 2 = 64 # 每個位元組數據,等於 2 個英文字元,所以總長度為 64

根據上面我們示例里的「助記詞種子」,恢復得到「十六進位種子」

94d7bb70663d9f793f795390332cf5a3ba90b8dce68dad56832d54732dd18603

「助記詞種子」到「十六進位種子」這個過程是可逆的,也就是說從「十六進位種子」也可以得到「助記詞種子」。

3、私有支付鑰匙

94d7bb70663d9f793f795390332cf5a3ba90b8dce68dad56832d54732dd18603

長度 64,私有支付鑰匙(Private Spend Key)通過它你就能對賬戶里的「資金」進行支付操作。我會和下面的「私鑰查看鑰匙」一起講解。

4、私鑰查看鑰匙

f50c8572b29c426682c84b5550e5ef6df19c0dd4b4bf4f42aee26e534d2f5000

長度 64,私鑰查看鑰匙(Private View Key)通過它你就能對賬戶里的「資金」進行查看操作。我會和上面的「私鑰支付鑰匙」一起講解。

中途講解:

根據 CryptoNote 協議創建的虛擬貨幣(門羅幣就是其中之一),與大部分其它貨幣(如比特幣)不同,它的「賬戶」由兩對鑰匙構成。對應的,地址也有兩對鑰匙構成。

其中,一對用於「支付」,另一用於「查看」,並且都有公鑰、私鑰之分。也就是說有:

私有支付鑰匙 -> 公開支付鑰匙

私有查看鑰匙 -> 公開查看鑰匙

門羅幣有嚴格的「隱私保護」功能,交易的「發送方」、「接收方」、「交易金額」除了參與交易的雙方知道外,對於外部人員來說都是未知的(但能驗證)。

擁有某個賬戶的「私有支付鑰匙」,你才能對其資金進行支付操作。

擁有某個賬戶的「私有查看鑰匙」,你才能對其資金進行查看操作。

5、公開支付鑰匙

00da825e55d03d6ab445f9dfc2faa744f39bda4aeb6ee07e6f81a17d8dc4d470

長度 64,由「私鑰支付鑰匙」生成,可以公開。涉及知識「ECC,橢圓曲線密碼學」,生成公式:

K = kG

6、 公開查看鑰匙

187049d4ca00b2fd6642c8da50757711e1601a965ace2dbc06f8673dad1bc7bf

長度 64,由「私鑰查看鑰匙」生成,可以公開。涉及知識「ECC,橢圓曲線密碼學」,生成公式:

K = kG

中途講解:

「私有查看鑰匙」,一般根據「私有支付鑰匙」生成,這樣我們只要記一個鑰匙就行了。涉及知識「Keccak,SHA-3」

7、公開地址

41ez4ahijjAJrAXpJERmGaCXvBKmdFPs5N9aqeMaZVvKKkU41Sp21GMjPHwntt97ca3zToDFXRykpYT6nCSV5gTgNafYPsf

門羅幣的「標準地址」,共 95 個字元。

地址生成,偽代碼:

Checksum = H(Varint(Prefix) || A || B)[0..3]

SerializedString = Base58(Prefix || A || B || Checksum)

地址生成,圖解:

二、地址校驗

本過程不涉及「助記詞種子」、「私有支付鑰匙」 和「私有查看鑰匙」等敏感數據,所需數據是完全可以公開的,所有操作是安全可靠的。

8、公開地址

這裡的「公開地址」,即門羅幣「標準地址」。示例:

41ez4ahijjAJrAXpJERmGaCXvBKmdFPs5N9aqeMaZVvKKkU41Sp21GMjPHwntt97ca3zToDFXRykpYT6nCSV5gTgNafYPsf

在交易中,門羅幣地址通常以收款方出現。

如果把門羅幣交易比作一張支票,門羅幣地址就是收款人,也就是我們要寫入收款人一欄的內容。一張支票的收款人可能是某個銀行賬戶,也可能是某個公司、機構,甚至是現金支票。支票不需要指定一個特定的賬戶,而是用一個普通的名字作為收款人,這使它成為一種相當靈活的支付工具。

9、十六進位公開地址

1200da825e55d03d6ab445f9dfc2faa744f39bda4aeb6ee07e6f81a17d8dc4d470187049d4ca00b2fd6642c8da50757711e1601a965ace2dbc06f8673dad1bc7bf478234aa

先將「公開地址」進行轉換,轉換成「十六進位公開地址」,此過程是可逆的。

中途講解

注意:這個「地址」共分為 4 部分,我們先對之前的知識進行回顧。

標準地址,可以表示為:

1 byte prefix + 32 byte key + 32 byte key + 4 byte checksum

一個位元組等於兩個英文字元,因此其長度為

(1 + 32 + 32 + 4) * 2 = 138

上面我們的「十六進位公開地址」,正好符合其結構和長度(這不是巧合)。

10、解碼

解碼結果

# 恰好是「公開支付鑰匙」

00da825e55d03d6ab445f9dfc2faa744f39bda4aeb6ee07e6f81a17d8dc4d470

# 恰好是「公開查看鑰匙」

187049d4ca00b2fd6642c8da50757711e1601a965ace2dbc06f8673dad1bc7bf

11、地址校驗和

478234aa

12、網路編碼、公開支付鑰匙、公開查看鑰匙

1200da825e55d03d6ab445f9dfc2faa744f39bda4aeb6ee07e6f81a17d8dc4d470187049d4ca00b2fd6642c8da50757711e1601a965ace2dbc06f8673dad1bc7bf

13、計算校驗和

對「12、網路編碼、公開支付鑰匙、公開查看鑰匙」進行計算。

478234aa0cce50168842fec519f556508024852c7961ee40b172adde23e0387f

14、校驗和

取「13、計算校驗和」的前 4 個位元組(即 8 個英文字元)

478234aa

15、標準地址

將上述「網路編碼」、「公開支付鑰匙」、「公開查看鑰匙」、「校驗和」 這 4 部分進行拼接。結果

41ez4ahijjAJrAXpJERmGaCXvBKmdFPs5N9aqeMaZVvKKkU41Sp21GMjPHwntt97ca3zToDFXRykpYT6nCSV5gTgNafYPsf

這正好和我們的輸入地址一致,說明校驗成功。

三、回顧

如果下次有人給你一個門羅幣地址,請記住:

門羅幣「標準地址」是由 95 個數字+字母組合的字元串,如果想對其進行了解。

首先,將其轉換成 16 進位的字元串,結果長度固定為 138

然後,對上面的字元串按長度 2、64、64、8 進行拆分,它們分別對應「網路編碼」、「公開支付鑰匙」、「公開查看鑰匙」、「校驗和」

練習:

在網址 monero-xmr.org/addresst 校驗以下門羅幣地址

46v3AmWgY7fdLYfiKKw6p78k1Esyky3GC7r2vwjNLrNbbr94cQ3hXzZifDZvYFMZanUuSvpoUkNvvDrqpaKGrcyy9rbo7Bz

如果你恰好擁有門羅幣,也可以嘗試向其進行轉賬。

作者微信公眾號 Cryptocurrency 文末的門羅幣地址是本文作者的,歡迎打賞。

-- 本文完


推薦閱讀:

數字貨幣可是此生最好的財富自由的機會
為什麼數字貨幣應該受到國家監管?
國內外幾個主流數字貨幣交易平台應用體驗
數字時代的銀行大劫案:犯罪分子如何盜取數字貨幣
數字貨幣交易所開放API接入-序

TAG:門羅幣 | 虛擬貨幣 | 數字化貨幣 |