您現在的位置是:首頁 > 籃球

數字錢包概念

  • 由 imToken數字錢包 發表于 籃球
  • 2022-03-21
簡介最早期的比特幣錢包就是就是這樣,還有一個暱稱:“Just a Bunch Of Keys(一堆私鑰)“為了解決這種麻煩,就有了BIP32 提議: 根據一個隨機數種子透過分層確定性推導的方式得到n個私鑰,這樣儲存的時候,只需要儲存一個種子就可

常數的概念是什麼

錢包用來存錢的,在區塊鏈中,我們的數字資產都會對應到一個賬戶地址上, 只有擁有賬戶的鑰匙(私鑰)才可以對資產進行消費(用私鑰對消費交易簽名)。

私鑰和地址的關係如下:

數字錢包概念

圖來自精通比特幣)

一句話概括下就是:

私鑰透過橢圓曲線生成公鑰, 公鑰透過雜湊函式生成地址,這兩個過程都是單向的。

因此實際上,數字錢包實際是一個管理私鑰(生成、儲存、簽名)的工具,注意錢包並不儲存資產,資產是在鏈上的。

如何建立賬號

建立賬號關鍵是生成一個私鑰, 私鑰是一個32個位元組的數,

生成一個私鑰在本質上在1到2^256之間選一個數字

因此生成金鑰的第一步也是最重要的一步,是要找到足夠安全的熵源,即隨機性來源,只要選取的結果是不可預測或不可重複的,那麼選取數字的具體方法並不重要。

比如可以擲硬幣256次,用紙和筆記錄正反面並轉換為0和1,隨機得到的256位二進位制數字可作為錢包的私鑰。

從程式設計的角度來看,一般是透過在一個密碼學安全的隨機源(不建議大家自己去寫一個隨機數)中取出一長串隨機位元組,對其使用SHA256雜湊演算法進行運算,這樣就可以方便地產生一個256位的數字。

實際過程需要比較下是否小於n-1(n = 1。158 * 10^77, 略小於2^256),我們就有了一個合適的私鑰。否則,我們就用另一個隨機數再重複一次。這樣得到的私鑰就可以根據上面的方法進一步生成公鑰及地址。

BIP32

錢包也是一個私鑰的容器,按照上面的方法,我們可以生成一堆私鑰(一個人也有很多賬號的需求,可以更好保護隱私),而每個私鑰都需要備份就特別麻煩的。

最早期的比特幣錢包就是就是這樣,還有一個暱稱:“Just a Bunch Of Keys(一堆私鑰)“

為了解決這種麻煩,就有了

BIP32 提議

: 根據一個隨機數種子透過分層確定性推導的方式得到n個私鑰,這樣儲存的時候,只需要儲存一個種子就可以,私鑰可以推匯出來,如圖:

數字錢包概念

(圖來自精通比特幣)上圖中的孫秘鑰就可以用來簽發交易。

補充說明下 BIP: Bitcoin Improvement Proposals 比特幣改進建議, bip32是第32個改進建議。

BIP32提案的名字是:Hierarchical Deterministic Wallets, 就是我們所說的HD錢包。

來分析下這個分層推導的過程,第一步推導主秘鑰的過程:

數字錢包概念

根種子輸入到HMAC-SHA512演算法中就可以得到一個可用來創造主私鑰(m) 和 一個主鏈編碼( a master chain code)這一步生成的秘鑰(由私鑰或公鑰)及主鏈編碼再加上一個索引號,將作為HMAC-SHA512演算法的輸入繼續衍生出下一層的私鑰及鏈編碼,如下圖:

數字錢包概念

衍生推導的方案其實有兩個:一個用父私鑰推導(稱為強化衍生方程),一個用父公鑰推導。同時為了區分這兩種不同的衍生,在索引號也進行了區分,索引號小於2^31用於常規衍生,而2^31到2^32-1之間用於強化衍生,為了方便表示索引號i‘,表示2^31+i。

因此增加索引(水平擴充套件)及 透過子秘鑰向下一層(深度擴充套件)可以無限生成私鑰。

注意, 這個推導過程是確定(相同的輸入,總是有相同的輸出)也是單向的,子金鑰不能推匯出同層級的兄弟金鑰,也不能推出父金鑰。如果沒有子鏈碼也不能推匯出孫金鑰。現在我們已經對分層推導有了認識。

一句話概括下BIP32就是:

為了避免管理一堆私鑰的麻煩提出的分層推導方案。

Top