區塊鏈去中心化錢包系統開發功能定製邏輯分析

nice1022發表於2022-05-23

比特幣的所有權是通過數字金鑰、比特幣地址和數字簽名來確立的。系統詳情瞭解(V+hkkf5566)數字金鑰由使用者生成並儲存在數字錢包(也稱比特幣錢包)。錢包中包含成對的私鑰和公鑰。使用者用私鑰來簽名交易,從而證明他們擁有交易的輸出;而通過公鑰生成的比特幣地址,則用於收款。以下分別對公/私鑰、比特幣地址、比特幣錢包進行說明。

(1)公鑰和私鑰

比特幣使用橢圓曲線演算法作為其公鑰加密的基礎演算法。

每個金鑰對包括一個私鑰和一個公鑰。私鑰是一個隨機選擇的數字,由256位的二進位制數字組成,由隨機數生成。

使用橢圓曲線演算法這個單向加密函式,由私鑰生成公鑰;而反向用公鑰求解私鑰的過程是非常困難的,被稱為“尋找離散對數”。

在橢圓曲線上,公鑰計算方法為:

K=k*G

其中,k是私鑰,G是生成點,在該曲線上所得的點K是公鑰。比特幣中的生成點G都是相同的。

在比特幣中,私鑰和公鑰可以用多種編碼格式表示。公鑰分為非壓縮格式公鑰和壓縮格式公鑰兩種。其中,非壓縮格式公鑰的字首是04,壓縮格式公鑰的字首是02或者03。

(2)比特幣地址

比特幣地址是一個由數字和字母組成的字串,通常作為收款方出現。由公鑰生成比特幣地址時使用的演算法是SHA (Secure Hash Algorithm)和RIPEMD (RACE Integrity Primitives Evaluation Message Digest),特別是SHA256和RIPEMD160。

以公鑰K為輸入,計算其SHA256雜湊值,並用該結果計算RIPEMD160雜湊值,得到一個長度為160位元(20位元組)的數字:

A=RIPEMD160(SHA256(K))

其中,K是公鑰,A是生成的比特幣地址。

通常,比特幣地址是經過Base58Check編碼的,這種編碼使用了58個字元(一種Base58數字系統)和校驗碼,提高了可讀性,避免了歧義,並有效防止了在地址轉錄和輸入中產生的錯誤。下圖是公鑰生成比特幣地址的過程。

區塊鏈去中心化錢包系統開發功能定製邏輯分析

從公鑰生成比特幣地址

(3)比特幣錢包

作為私鑰的容器,比特幣錢包有兩種型別,即非確定性(隨機)錢包和確定性(種子)錢包。

早期的比特幣錢包屬於非確定性(隨機)錢包,錢包是隨機生成的私鑰集合,通過有序檔案或簡單的資料庫實現。這種錢包的缺點是對於錢包中的多個隨機私鑰,需要經常性地備份,以免錢包不能訪問時,錢包所控制的資金將不能再被使用。

目前使用較多的確定性(種子)錢包通過使用單項離散方程可從公共的種子生成私鑰,只需在初始建立時做一次備份即可。該型別錢包中,代表性的是分層確定性錢包(Hierarchical Deterministic Wallet或HDWallet),簡稱HD錢包。

HD錢包由單個根種子建立,根種子為128〜256位的隨機數。為了便於使用者抄寫和備份,根種子表示為助記碼詞彙序列。使用HMAC-SHA512演算法,可以由根種子衍生出子金鑰序列,繼而衍生出孫金鑰序列,以此無窮類推。

助記碼和種子的建立過程如下:

1)創造一個128〜256位的隨機順序(熵)。

2)提出SHA256雜湊前幾位,就可以創造一個隨機序列的校驗和。

3)把校驗和加在隨機順序的後面。

4)把順序分解成11位的不同集合,並用這些集合去和一個預先己經定義的由2048個單片語成的字典做對比;

5)生成一個12〜24個詞的助記碼。

建立主金鑰以及HD錢包的主鏈編碼的過程如圖7-2所示。根種子輸入到HMAC-SHA512演算法中,就可以得到一個可用來創造主私鑰m和主鏈編碼的雜湊。使用橢圓曲線上的K=k*G可以由主私鑰m生成相對應的主公鑰M。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70011332/viewspace-2896561/,如需轉載,請註明出處,否則將追究法律責任。

相關文章