官术网_书友最值得收藏!

3.2 創建比特幣賬戶

對于比特幣的交易用戶,客戶端會自動為用戶生成錢包,類似于在銀行開戶,用戶也需要一個如同銀行卡密碼的賬戶密碼來保護自己的數字資產。專屬密鑰就成為使用錢包中比特幣的必要條件。而用戶的密鑰不同于銀行卡密碼短小精悍方便記憶,密鑰對一般是經過特殊處理的長串隨機數列,很難記憶,為了保證其安全性和隱匿性,一般將密鑰存儲在數字錢包中。

3.2.1 密鑰對:私鑰和公鑰

比特幣作為一種數字資產,并不存在實體,網絡通過密鑰、比特幣地址和數字簽名來確認比特幣的所有權。用戶通過客戶端或錢包自動生成密鑰文件,存儲在本地,密鑰為自己獨有,不需要進行區塊鏈的網絡連接;用戶在交易環節,公鑰通過其數字指紋表示為比特幣地址,同時比特幣地址也存在腳本類型等其他表現形式,但公鑰最為常見;數字簽名證明了交易的有效性,交易只有攜帶有效的數字簽名才能存儲在區塊鏈中。

密鑰對是比特幣地址和數字簽名的基礎。一個比特幣錢包可以包含一系列的密鑰對,一個密鑰對包含一個私鑰和一個公鑰。私鑰為系統生成的隨機數,用于產生支付時的數字簽名。公鑰是私鑰通過橢圓曲線乘法產生的,用于產生地址接收比特幣,如圖3-13所示。公鑰是公開的,不會影響用戶錢包的安全性,但是用戶必須對私鑰進行保密儲存,同時注意對私鑰文件的多重備份。在生活大爆炸中,倫納德、霍華德和拉杰什就因為謝爾頓弄丟了私鑰的備份文件,失去了一夜暴富的機會。因為私鑰一旦丟失就難以復原,所有的比特幣也將一同消失。

圖3-13 私鑰、公鑰和比特幣地址關系圖

私鑰通過橢圓曲線乘法生成公鑰,這個過程是單向不可逆的,公鑰無法反推出私鑰。橢圓曲線乘法的原理已在第2章進行了闡述:在橢圓曲線上,以一個隨機產生的私鑰k為起點,將其與曲線上已經規定的一點G相乘,即可獲得公鑰。G點為標準規定的一部分,所有比特幣的生成點都是相同的。

圖3-14 公鑰壓縮類型

按照定義,根據橢圓曲線乘法生成的公鑰實際上為一個點(xy)的坐標。因為區塊中的交易數據包含了公鑰字段,為了優化數據結構、壓縮硬盤儲存的區塊鏈數據,同時根據橢圓曲線算法公式利用x值能夠推導出y值,因此引進了壓縮公鑰。根據選用的公鑰是(xy)坐標值還是x值,將公鑰劃分為非壓縮格式和壓縮格式兩種類型。非壓縮格式代表公鑰選用了坐標(xy)表示,通常此種情況下的公鑰前綴為04;壓縮格式為公鑰只選用x值,而舍棄了坐標中的y值。根據x值的奇偶性不同,前綴可分為02或03,如圖3-14所示。

私鑰是用戶在比特幣網絡的通行證,它是由客戶端隨機生成的一個256bit的二進制碼,也就是32字節,在不同的使用場景中采用不同的編碼方式可推導出不同格式的私鑰。表3-1列出了各種類型的私鑰格式。

表3-1 私鑰的格式

32字節的字符串是原生(Raw)形式,其十六進制(Hex)形式多在編碼中使用,普通用戶不會接觸到。為了方便復制私鑰并減少出錯,在錢包之間導入/導出私鑰時一般使用WIF(wallet import format)格式。在WIF格式的私鑰后增加后綴01,表明該私鑰只能用于生成壓縮格式的公鑰,將該形式的私鑰稱為壓縮格式私鑰(WIF-compressed),對應的有時也會將WIF格式的私鑰稱為非壓縮格式的私鑰。同一個256bit的隨機數對應的不同格式的私鑰如表3-2所示。

表3-2 不同格式私鑰舉例

需要留意的是,壓縮格式的私鑰并沒有壓縮,反而比WIF非壓縮格式多出1字節。一般所說的壓縮格式的私鑰只能用于生成壓縮格式的公鑰,其本身并不是壓縮格式。同時,非壓縮格式的私鑰只能用于生成非壓縮格式的公鑰,具體轉換關系如圖3-15所示。

圖3-15 壓縮、非壓縮格式私鑰和公鑰的對應關系

WIF格式的私鑰產生過程如圖3-16所示。

圖3-16 WIF格式私鑰產生過程示意圖

(1)系統產生256bit的隨機數,用十六進制表示,例如產生一個隨機數:

0C28FCA386C7A227600B2FE50B7CAE11EC86D3BF1FBE471BE89827E19D72AA1D。

(2)對隨機數添加網絡標示,前綴0x80表示mainnet網絡,前綴0xef表示testnet網絡,例如對上一步產生的隨機數添加網絡標示0x80之后生成800C28FCA386C7A227600B 2FE50B7CAE11EC86D3BF1FBE471BE89827E19D72AA1D。

(3)如果需要產生壓縮公鑰,那么需要使用壓縮私鑰,在字符串末尾增加后綴01;若使用非壓縮公鑰,則不追加。例如使用非壓縮公鑰,字符串保持不變,依然是800C28FCA386 C7A227600B2FE50B7CAE11EC86D3BF1FBE471BE89827E19D72AA1D。

(4)對步驟3產生的字符串執行SHA-256算法,生成8147786C4D15106333BF278D7 1DADAF1079EF2D2440A4DDE37D747DED5403592。

(5)對步驟4產生的字符串再次執行SHA-256算法,生成507A5B8DFED0FC6FE880 1743720CEDEC06AA5C6FCA72B07C49964492FB98A714。

(6)取步驟5產生的字符串的前4字節作為校驗和,添加至步驟3產生的字符串末尾,生成800C28FCA386C7A227600B2FE50B7CAE1 1EC86D3BF1FBE471BE89827E1 9D72 AA1D507A5B8D。

(7)執行Base58Check編碼算法,得到WIF格式私鑰為5 HueCGU8rMjxEXxiPuD5B Dku4MkFqeZyd4dZ1jvhTVqvbTLvyTJ。

3.2.2 比特幣地址

圖3-17 公鑰產生比特幣地址的示意圖

人們可以根據E-mail地址互相發送郵件,通過E-mail地址對應的密碼可以讀取郵件內容。類似E-mail系統,比特幣網絡中的交易實際就是根據比特幣地址發送比特幣,擁有某個比特幣地址的私鑰就可以獲得這個比特幣地址中的比特幣。

比特幣地址是由數字和字母組成的字符串,公鑰通過一系列哈希算法和編碼算法生成比特幣地址,可以簡單地將比特幣地址理解為公鑰的一種摘要表示。因為公鑰產生地址利用了單向哈希算法,不具備可逆性,所以地址不能反推出公鑰。比特幣地址并不是固定且唯一的,用戶的一個錢包就可以包含多個比特幣地址,錢包能夠針對不同的交易產生不同的地址,從而保證賬戶的安全性。

公鑰通過SHA-256和RIPEMD160的雙哈希算法生成160bit(20字節)的公鑰哈希。為了提高地址的可讀性和魯棒性,公鑰哈希還會經過Base58Check編碼生成最終的比特幣地址。Base58Check編碼算法利用了Base58數字系統中的58個字符和校驗碼,能夠有效防止地址在具體使用過程中產生的錯誤,具體過程如圖3-17所示。

3.2.3 數字錢包

私鑰作為隨機產生毫無規律的隨機數,如果僅憑用戶大腦記憶很容易產生私鑰錯誤或遺忘。因此在具體使用過程中,錢包不僅生成密鑰對和地址,還能幫助用戶存儲它們,一個錢包中可以存儲多個私鑰。但是錢包客戶端可能也會出現數據丟失或其他遺失私鑰的可能。因此,如何安全方便地生成、保存和備份密鑰是判斷錢包性能好壞的關鍵因素。

為了完善這些因素,數字錢包不斷發展,經歷了大致三個階段:非確定性(隨機)錢包、確定性(種子)錢包和分層確定性錢包。

非確定性錢包,也稱為隨機錢包,如圖3-18(a)所示。錢包只是隨機生成的私鑰們的儲存容器,私鑰之間沒有任何聯系。相互獨立的私鑰擁有更好的匿名性,如果一個私鑰丟失或者被盜,非確定性錢包能夠將損失風險降到最低,賬戶的安全性得到保障。大量隨機私鑰意味著,一旦出現新的私鑰,用戶就需要重新將所有私鑰文件再備份一遍,每次備份后都要再次導入,工作重復且煩瑣,用戶使用體驗并不良好。

為了方便用戶操作,解決經常性備份的問題,出現了確定性(種子)錢包。在種子錢包中,所有私鑰都是通過一個公共的種子文件生成的,種子能夠回收所有已經產生的私鑰,用戶只需要備份種子,就能夠完成對所有私鑰的備份。如果想要更換錢包,只需要將種子文件導入即可,如圖3-18(b)所示。

在BIP0032/BIP0044協議中,又對確定性錢包做了進一步的升級,即分層確定性錢包,如圖3-18(c)所示。對比確定性錢包,共同之處是,兩者的所有私鑰都是通過一個公共種子文件生成的,但不同于確定性錢包中所有私鑰的并行關系,分層確定性錢包中私鑰的衍生結構是樹狀結構。父密鑰可以衍生一系列子密鑰(例如:私鑰1、私鑰2、私鑰3),每個子密鑰又可以衍生一系列孫密鑰(例如:私鑰2-1、私鑰2-2、私鑰2-3),以此類推。根據其樹狀結構,分層確定性錢包的應用場景和安全性得到了進一步的擴展和提升。樹狀結構可以表示額外的組織架構的含義,因此,比如在企業環境中,不同職能部門可以被分配使用不同分支的密鑰,也可以一個特定的分支子密鑰用來接收收入而另一個分支的密鑰用來支付花費。另外,如果想要在不安全的環境下進行交易,分層確定性錢包保證了在每筆不同的交易中能夠發行不同的公鑰,而不需要訪問相對應的私鑰,保證了賬戶的安全性。

圖3-18 三種數字錢包示意圖

主站蜘蛛池模板: 伊金霍洛旗| 黄陵县| 萨嘎县| 玉田县| 寿宁县| 临邑县| 连云港市| 南召县| 安阳市| 奉贤区| 桃园县| 海口市| 开化县| 保德县| 澄迈县| 雅安市| 阳曲县| 临江市| 金川县| 临夏市| 吴旗县| 八宿县| 新津县| 宁夏| 株洲县| 大港区| 赣州市| 资阳市| 威海市| 新邵县| 桐乡市| 株洲县| 鸡东县| 平阴县| 和平县| 应城市| 鹤山市| 镇安县| 陆丰市| 肥东县| 隆德县|