大家剛開始使用錢包的時(shí)候都會(huì)被助記詞、Keystore、私鑰、地址、公鑰等各種概念搞得云里霧里,這些概念和傳統(tǒng)世界的銀行卡和密碼簡(jiǎn)單的兩個(gè)概念完全不一樣,只能按照錢包軟件的提示需要怎么做就怎么做,卻無(wú)法知道緣由,有點(diǎn)兒死背書的感覺(jué),本篇的主旨就是幫大家捋一捋:作為一款區(qū)塊鏈錢包,是如何工作的,如何生成密鑰、助記詞、Keystore等。先把結(jié)論置頂:
區(qū)塊鏈錢包實(shí)現(xiàn)的技術(shù)原理用一句話表示就是:錢包助記詞生成了種子(Seed),種子(Seed)生成了私鑰,私鑰推導(dǎo)出公鑰,公鑰節(jié)選部分成了錢包地址。同時(shí)錢包提供了keystore,它也是私鑰加密后的文件,可以配合正常的密碼使用,便捷了用戶的錢包使用。
區(qū)塊鏈的誕生,不僅僅是通過(guò)代碼和智能合約來(lái)將生產(chǎn)組織進(jìn)一步扁平化,從而達(dá)到優(yōu)化中間過(guò)程、精簡(jiǎn)中介的作用,更是產(chǎn)生了一個(gè)新的經(jīng)濟(jì)模式,創(chuàng)建了一種新的生產(chǎn)關(guān)系,這種理念上的變革遠(yuǎn)遠(yuǎn)大于技術(shù)本身帶來(lái)的影響,它最讓人著迷的地方莫過(guò)于利用人性的特點(diǎn),建立的一套自治的經(jīng)濟(jì)激勵(lì)機(jī)制,并誕生了一個(gè)新型的價(jià)值載體cryptocurrency(筆者習(xí)慣區(qū)分Coin和Token,可參見(jiàn)文章區(qū)塊鏈基礎(chǔ)概念 - 理解COIN和TOKEN)。
Cryptocurrency顯然不同于傳統(tǒng)的貨幣,它是通過(guò)一定的加密算法計(jì)算出來(lái)的數(shù)字貨幣,也就是說(shuō)電子化會(huì)是它的本質(zhì)屬性,這樣它的存儲(chǔ)問(wèn)題就會(huì)是一個(gè)熱門的研究領(lǐng)域,具體來(lái)講就是我們常說(shuō)的區(qū)塊鏈錢包。當(dāng)然,這里需要強(qiáng)調(diào)的是,區(qū)塊鏈錢包并不是存儲(chǔ)著大家的cryptocurrency,它是在鏈上存儲(chǔ)的,錢包主要存儲(chǔ)的是私鑰,它是用戶對(duì)鏈上cryptocurrency的所有權(quán)憑證,這是一個(gè)不記名、不可掛失的憑證。從開發(fā)者的角度看,錢包的作用就是管理用戶的私鑰、通過(guò)私鑰簽名交易管理用戶在區(qū)塊鏈上的數(shù)字貨幣Cryptocurrency Address + Private key = Cryptocurrency Wallet。
以上屬于對(duì)錢包相對(duì)傳統(tǒng)的一個(gè)定義,筆者最近結(jié)識(shí)到AlphaWallet的聯(lián)合創(chuàng)始人&CEO Victor Zhang對(duì)錢包的理解非常的獨(dú)樹一幟和有見(jiàn)解:區(qū)塊鏈錢包,其實(shí)更好叫做區(qū)塊鏈客戶端,其中“錢”只是其中一個(gè)應(yīng)用場(chǎng)景。當(dāng)然他們這個(gè)團(tuán)隊(duì)主要focus在帶有智能合約的公鏈錢包,目前主要就是ETH了,以其作為基礎(chǔ)衍生出眾多應(yīng)用場(chǎng)景供使用,而不是傳統(tǒng)理解的錢包概念了。筆者以前一直覺(jué)得在未解決Cryptocurrency價(jià)值波動(dòng)前,錢包的用戶大規(guī)模朝潮還很久遠(yuǎn),不能與交易所抗衡,但終究有一天王位會(huì)轉(zhuǎn)移給錢包。在聽了Victor的見(jiàn)解之后,筆者突然覺(jué)得視野更加開闊。BTW,他們團(tuán)隊(duì)還是ERC875的執(zhí)筆,對(duì)技術(shù)的追求和開發(fā)很有造詣,是個(gè)值得關(guān)注的團(tuán)隊(duì)!
【區(qū)塊鏈錢包基本類型和特點(diǎn)】
區(qū)塊鏈錢包的分類和描述依照所涉及的概念不同會(huì)有所區(qū)別,從其本質(zhì)特點(diǎn)上來(lái)講,可用下圖來(lái)表示:
區(qū)塊鏈錢包本質(zhì)特點(diǎn)劃分
區(qū)塊鏈錢包和區(qū)塊鏈一樣,也可以分為去onchain錢包和offchain錢包(如今很多人習(xí)慣稱之為中心化錢包和去中心化錢包,雖然方便無(wú)基礎(chǔ)的人形象理解,但是整個(gè)概念和精髓卻會(huì)被誤解),它們本質(zhì)區(qū)別在于錢包私鑰的存儲(chǔ)方式和地點(diǎn),私鑰存儲(chǔ)在用戶手中,錢包商無(wú)獲取途徑,用戶可以實(shí)時(shí)使用鏈上資產(chǎn)的稱之為onchain錢包;而私鑰存儲(chǔ)在錢包商或者交易所手中,用戶不能直接使用鏈上資產(chǎn)而需要通過(guò)第三方才能動(dòng)的稱之為offchain錢包。具體來(lái)講:
1.onchain錢包——全節(jié)點(diǎn)錢包
私鑰存儲(chǔ)在用戶手中,同時(shí)全節(jié)點(diǎn)錢包還保存了所有區(qū)塊的數(shù)據(jù),這樣就可以在本地直接驗(yàn)證交易數(shù)據(jù)的有效性。大部分全節(jié)點(diǎn)錢包也具備挖礦功能,它自身也是區(qū)塊鏈網(wǎng)絡(luò)中的一個(gè)節(jié)點(diǎn),如BTC的Bitcoin Core;ETH的Mist,Parity等。
優(yōu)點(diǎn):
一般屬于官方為區(qū)塊鏈設(shè)計(jì)的錢包,直接onchain,不需要經(jīng)過(guò)第三方發(fā)起交易,保證了基本安全性;
由于前節(jié)點(diǎn)下載到本地,所以會(huì)更快驗(yàn)證交易信息。
缺點(diǎn):
也因?yàn)橄螺d了所有節(jié)點(diǎn),所以占用很多硬盤空間(Mist現(xiàn)在達(dá)到了80G,筆者下了好幾天也失敗了;Bitcoin Core據(jù)說(shuō)是150G);
每次使用前需要同步數(shù)據(jù);
新手的使用體驗(yàn)不夠好;
不支持多種數(shù)字資產(chǎn);
往往都是電腦版本。
2.onchain錢包——SPV輕錢包
私鑰存儲(chǔ)在用戶手中,但不保存所有區(qū)塊的數(shù)據(jù),只保存跟自己相關(guān)的數(shù)據(jù),所以體積很小,可以運(yùn)行在電腦,手機(jī),網(wǎng)頁(yè)等地方。如Blockchain, imtoken等。
優(yōu)點(diǎn):
用戶體驗(yàn)很好,尤其對(duì)于新手
很多輕錢包都支持多種數(shù)字資產(chǎn)
體積小,不占空間
缺點(diǎn):
交易驗(yàn)證會(huì)稍微慢一點(diǎn)
3.offchain錢包——通過(guò)中心服務(wù)器訪問(wèn)區(qū)塊鏈網(wǎng)絡(luò)的錢包
該類型錢包的劃分有一定爭(zhēng)議,主要在于錢包數(shù)據(jù)傳輸?shù)姆绞绞强梢詳U(kuò)展選擇區(qū)塊鏈節(jié)點(diǎn)還是必須通過(guò)錢包服務(wù)方的服務(wù)器,如果是后者就存在私鑰存儲(chǔ)在中心化服務(wù)器的風(fēng)險(xiǎn),目前有很多區(qū)塊鏈錢包體驗(yàn)都很不錯(cuò),甚至很流暢,由于不開源無(wú)法排除該類風(fēng)險(xiǎn)。筆者推斷比特購(gòu)錢包應(yīng)該屬于此類。
優(yōu)點(diǎn):
同SPV輕錢包
用戶體驗(yàn)會(huì)比onchain錢包好
缺點(diǎn):
存在安全風(fēng)險(xiǎn)(雖然真正致力做區(qū)塊鏈的錢包企業(yè)哪怕即使通過(guò)自己的服務(wù)器將交易信息發(fā)送到節(jié)點(diǎn)上,即不會(huì)作惡,但是不能排除可能有作惡的人可以使用這種方式獲得用戶密鑰)
會(huì)比onchain錢包交易驗(yàn)證更慢,但是用戶可能體會(huì)不到。
4.offchain錢包——第三方托管錢包
完全依賴運(yùn)行這個(gè)錢包的公司和服務(wù)器,存在某個(gè)組織或者個(gè)體的錢包地址里,中心化交易所里的Cryptocurrency就是在offchain錢包(交易所)里保存的。
優(yōu)點(diǎn):
私鑰忘記了可以找回
平臺(tái)會(huì)把私鑰安全做的不錯(cuò)
一般以企業(yè)作為信用背書
缺點(diǎn):
你的私鑰控制在平臺(tái)手上,平臺(tái)“做壞事”你是無(wú)法阻止的,即作惡風(fēng)險(xiǎn)
平臺(tái)關(guān)閉后你的幣就沒(méi)有了,即跑路風(fēng)險(xiǎn)
當(dāng)然,根據(jù)不同的表現(xiàn)形式,我們還可以有不同的劃分:
這種劃分理解就比較簡(jiǎn)單了,電腦單機(jī)版的錢包,如前面提到的全節(jié)點(diǎn)錢包基本以此類為主;手機(jī)錢包和在線錢包以SPV輕錢包為主,前者以手機(jī)APP為主要表現(xiàn)形式,后者是網(wǎng)頁(yè)插件,如MyEtherWallet, MetaMask等。硬件錢包是為了增強(qiáng)安全性,通過(guò)專門設(shè)計(jì)的安全硬件來(lái)離線保存儲(chǔ)私鑰,隔絕黑客入侵。
所以,電腦錢包、手機(jī)錢包、在線錢包一般體現(xiàn)的都是實(shí)時(shí)可用性,它們更多被稱之為熱錢包,即實(shí)時(shí)在線,這樣就存在被黑客攻擊的風(fēng)險(xiǎn);于是硬件錢包作為常年離線保存,更多稱之為冷錢包,即離線保存。
但是硬件錢包往往需要購(gòu)置單獨(dú)的硬件設(shè)備,所以在成本上會(huì)付出更多,同時(shí)使用的便利性也不如熱錢包,因?yàn)閷?shí)時(shí)在線可用。當(dāng)然也有使用優(yōu)盤來(lái)自己制作硬件錢包的,一方面制作過(guò)程比較繁瑣,同時(shí)每次轉(zhuǎn)賬支出時(shí)會(huì)比較繁瑣,適用于比較有基礎(chǔ)的人士。
優(yōu)點(diǎn):
安全,私鑰不觸網(wǎng),黑客無(wú)法通網(wǎng)絡(luò)攻擊。另外設(shè)備都有PIN碼保護(hù),即使在物理環(huán)境中設(shè)備被盜走,也無(wú)法打開你的錢包;
易備份,設(shè)備在初始化配置的時(shí)候會(huì)生成助記詞(一般為12個(gè)或者24個(gè)單詞),而助記詞就是你私鑰的備份,當(dāng)你的設(shè)備丟失或者損壞以后,可以夠買新的設(shè)備然后通過(guò)助記詞來(lái)恢復(fù)私鑰;
多幣種同時(shí)管理,現(xiàn)在絕大多數(shù)的硬件錢包,不僅僅可以管理比特幣,像萊特幣、以太坊、比特現(xiàn)金等數(shù)字貨幣都可以同時(shí)管理。
缺點(diǎn):
不免費(fèi),你要為硬件付費(fèi);
無(wú)法獨(dú)立使用,硬件錢包都是隔絕網(wǎng)絡(luò)的,所以需要配合聯(lián)網(wǎng)的客戶端(Chrome 插件、桌面客戶端、手機(jī)客戶端等)來(lái)完成收幣和發(fā)幣。不過(guò)為了安全犧牲一些方便些也是值得的,畢竟一個(gè)比特幣8000刀,丟半個(gè)都疼。
【區(qū)塊鏈錢包實(shí)現(xiàn)技術(shù)原理】
理解區(qū)塊鏈錢包實(shí)現(xiàn)技術(shù)原理,先要理解:
1.私鑰、公鑰和地址產(chǎn)生的方法,這是區(qū)塊鏈的相關(guān)知識(shí);
2.接著理解如何使用API進(jìn)行遠(yuǎn)程調(diào)用等基礎(chǔ)概念,這是傳統(tǒng)IT行業(yè)相關(guān)知識(shí);
3.最后就是錢包設(shè)計(jì)相關(guān)的助記詞, keystore和密碼的概念,它和區(qū)塊鏈公鑰、私鑰和地址產(chǎn)生的方式思路一樣,但是整個(gè)過(guò)程屬于區(qū)塊鏈錢包設(shè)計(jì)過(guò)程,不能與區(qū)塊鏈的相關(guān)知識(shí)混淆。
一、私鑰、公鑰和地址產(chǎn)生的方式(以BTC為例):
1.比特幣私鑰其實(shí)是使用SHA-256生成的32字節(jié)(256位)的隨機(jī)數(shù),有效私鑰的范圍則取決于比特幣使用的secp256k1 橢圓曲線數(shù)字簽名標(biāo)準(zhǔn)。
2.在私鑰的前面加上版本號(hào),后面添加壓縮標(biāo)志和附加校驗(yàn)碼,(所謂附加校驗(yàn)碼,就是對(duì)私鑰經(jīng)過(guò)2次SHA-256運(yùn)算,取兩次哈希結(jié)果的前四字節(jié)),然后再對(duì)其進(jìn)行Base58編碼,就可以得到我們常見(jiàn)的WIF(Wallet import Format)格式的私鑰。
3.私鑰經(jīng)過(guò)橢圓曲線乘法運(yùn)算,可以得到公鑰。公鑰是橢圓曲線上的點(diǎn),并具有x和y坐標(biāo)。公鑰有兩種形式:壓縮的與非壓縮的。早期比特幣均使用非壓縮公鑰,現(xiàn)在大部分客戶端默認(rèn)使用壓縮公鑰。
從私鑰推導(dǎo)出公鑰、再?gòu)墓€推導(dǎo)出公鑰哈希都是單向的,也就是采用不可逆算法。
橢圓曲線算法
4.公鑰產(chǎn)生后,將公鑰通過(guò)SHA256哈希算法處理得到32字節(jié)的哈希值;后對(duì)得到的哈希值通過(guò)RIPEMD-160算法來(lái)得到20字節(jié)的哈希值 ——Hash160
5.把版本號(hào)[2]+Hash160組成的21字節(jié)數(shù)組進(jìn)行雙次SHA256哈希運(yùn)算,得到的哈希值的頭4個(gè)字節(jié)作為校驗(yàn)和,放置21字節(jié)數(shù)組的末尾。
6.對(duì)組成25位數(shù)組進(jìn)行Base58編碼,最后得到地址。
下圖以非壓縮格式的65字節(jié)公鑰示意上述過(guò)程:
二。遠(yuǎn)程過(guò)程調(diào)用(RemoteProcedure Call, RPC)
它是一個(gè)計(jì)算機(jī)通信協(xié)議。該協(xié)議允許運(yùn)行于一臺(tái)計(jì)算機(jī)的程序調(diào)用另一臺(tái)計(jì)算機(jī)的子程序,而程序員無(wú)需額外地為這個(gè)交互作用編程。RPC 的主要功能目標(biāo)是讓構(gòu)建分布式計(jì)算(應(yīng)用)更容易,在提供強(qiáng)大的遠(yuǎn)程調(diào)用能力時(shí)不損失本地調(diào)用的語(yǔ)義簡(jiǎn)潔性。廣為使用的是一個(gè)叫做 JSON(JavaScript Object Notation)- RPC 的協(xié)議。所以錢包都是通過(guò)某個(gè)區(qū)塊鏈RPC接口調(diào)用來(lái)和區(qū)塊鏈網(wǎng)絡(luò)進(jìn)行交互。
這里列出主流項(xiàng)目相關(guān)的 RPC 接口以及開源錢包項(xiàng)目,以供參考。
Bitcoin:
1.RPC
Original Bitcoin client/API calls list
API reference (JSON-RPC)
JSON RPC API
2.Wallet
Bitcoin Core,官方出品
bitcoinj,比特幣協(xié)議 Java 版
bither,簡(jiǎn)單安全的比特幣錢包
Electrum,全平臺(tái)輕錢包
bread,iOS 錢包
Mycelium,Android 錢包
Copay,同時(shí)支持 Bitcoin 和BitcoinCash
bitcoin-wallet,又一款 Android 錢包
DotNetWallet,.NET 實(shí)現(xiàn)的錢包
Coinpunk,基于瀏覽器的錢包
btcwallet,Go 實(shí)現(xiàn)的錢包
Ethereum/ERC20
1.RPC
JSON RPC
JSON RPC API
Management APIs
ethjsonrpc
web3.py
2.Wallet
go-ethereum,以太坊協(xié)議 Go 版
Mist,官方出品
Parity,支持 Windows、Mac、PC 的錢包
MetaMask
MyEtherWallet,基于瀏覽器的錢包
eth-lightwallet,輕量級(jí) JavasSript 版本錢包
ethaddress.org,紙質(zhì)版錢包生成器
Neureal wallet,支持 Windows、Mac、PC 的錢包
其他
1.Zcash
Zcash,官方出品
2.BitShares
BitShares,官方出品
3.Sia
Sia,官方出品
4.Nem
NanoWallet,官方出品
5.Dash
Dash,官方出品
6.Qtum
Qtum Core Wallet,官方出品
7.Litecoin
Litecoin,官方出品
8.IOTA
IOTA Wallet,官方出品
9.Monero
Monero,官方出品
10.GXS
GXS Wallet for mobile,官方出品
11.EthereumClassic
Ethereum Classic Wallet,官方出品
三、錢包設(shè)計(jì)相關(guān)的助記詞(mnemonic),keystore和密碼的概念
私鑰一般太難記憶了,使用也不方便,所以從錢包設(shè)計(jì)的角度,就為簡(jiǎn)化操作同時(shí)不丟失安全性,就出現(xiàn)了助記詞的方法。
一般情況下,助記詞由一些單詞組成,只要你記住這些單詞,按照順序在錢包中輸入,也能打開錢包。
根據(jù)密鑰之間是否有關(guān)聯(lián)可把錢包分為兩類:nondeterministic wallet 和 deterministic wallet。
nondeterministic wallet:密鑰對(duì)之間沒(méi)有關(guān)聯(lián);
deterministic wallet: 密鑰對(duì)由一個(gè)原始的種子主密鑰推導(dǎo)而來(lái)。最常見(jiàn)的推導(dǎo)方式是樹狀層級(jí)推導(dǎo) (hierarchical deterministic) 簡(jiǎn)稱 HD。
比特幣錢包 (Bitcoin Core) 生成密鑰對(duì)之間沒(méi)有任何關(guān)聯(lián),屬于 nondeterministic wallet ,這種類型的錢包如果想備份導(dǎo)入是比較麻煩的,用戶必須逐個(gè)操作錢包中的私鑰和對(duì)應(yīng)地址。
deterministic wallet基于BIP32(Bitcoin Improvement Proposal 32) 標(biāo)準(zhǔn)實(shí)現(xiàn),通過(guò)一個(gè)共同的種子維護(hù)n多私鑰,種子推導(dǎo)私鑰采用不可逆哈希算法,在需要備份錢包私鑰時(shí),只備份這個(gè)種子即可。
通過(guò)9個(gè)步驟即可生成錢包助記詞和種子,其中步驟1~6生成助記詞,步驟7~9把前六步生成的助記詞轉(zhuǎn)化為BIP32 種子:
生成助記詞:
規(guī)定熵的位數(shù)必須是 32 的整數(shù)倍,所以熵的長(zhǎng)度取值位128 到 256 之間取 32 的整數(shù)倍的值,分別為 128, 160, 192, 224, 256;
校驗(yàn)和的長(zhǎng)度為熵的長(zhǎng)度/32 位, 所以校驗(yàn)和長(zhǎng)度可為 4,5,6,7,8 位;
助記詞庫(kù)有 2048 個(gè)詞,用 11 位可全部定位詞庫(kù)中所有的詞,作為詞的索引,故一個(gè)詞用 11 位表示,助記詞的個(gè)數(shù)可為 (熵+校驗(yàn)和)/11,值為 12,15,18,21,24
助記詞規(guī)則
1.生成一個(gè)長(zhǎng)度為 128~256 位(bits)的隨機(jī)序列(熵);
2.取熵哈希后的前n位作為校驗(yàn)和(n= 熵長(zhǎng)度/32);
3.隨機(jī)序列+校驗(yàn)和;
4.把步驟3得到的結(jié)果每 11位切割;
5.步驟4得到的每11位字節(jié)匹配詞庫(kù)的一個(gè)詞;
6.步驟5得到的結(jié)果就是助記詞串;
錢包生成助記詞方法
通過(guò)助記詞生成種子
助記詞由長(zhǎng)度為128 到 256 位的隨機(jī)序列(熵)匹配詞庫(kù)而來(lái),隨后采用PBKDF2 function推導(dǎo)出更長(zhǎng)的種子(seed)。生成的種子被用來(lái)生成構(gòu)建 deterministic Wallet 和推導(dǎo)錢包密鑰。
在密碼學(xué)中,Key stretching技術(shù)被用來(lái)增強(qiáng)弱密鑰的安全性,增加了暴力破解 (Brute-force attack) 對(duì)每個(gè)可能密鑰嘗試攻破的時(shí)間,增強(qiáng)了攻擊難度。各種編程語(yǔ)言原生庫(kù)都提供了 key stretching 的實(shí)現(xiàn)。PBKDF2(Password-Based Key Derivation Function 2)是常用的 key stretching 算法中的一種?;驹硎峭ㄟ^(guò)一個(gè)為隨機(jī)函數(shù)(例如HMAC 函數(shù)),把明文和鹽值作為輸入參數(shù),然后重復(fù)進(jìn)行運(yùn)算最終產(chǎn)生密鑰。
為了從助記詞中生成二進(jìn)制種子,BIP39 采用 PBKDF2 函數(shù)推算種子,其參數(shù)如下:
7.助記詞句子作為密碼;
8.“mnemonic” + passphrase 作為鹽;
9.2048 作為重復(fù)計(jì)算的次數(shù)+HMAC-SHA512 作為隨機(jī)算法,最終得到BIP32 種子,512 位(64 字節(jié))是期望得到的密鑰長(zhǎng)度;
DK = PBKDF2(PRF, Password, Salt, c, dkLen)
助記詞生成種子
主私鑰和主鏈碼:
首先是從根種子生成主密鑰 (master key) 和主鏈碼 (master chain code)
種子生成密鑰
上圖中根種子通過(guò)不可逆HMAC-SHA512算法推算出512位的哈希串,左256位是Master Private key(m),右256位是master chain code,通過(guò)m結(jié)合推導(dǎo)公鑰的橢圓曲線算法能推導(dǎo)出與之對(duì)應(yīng)的264位master public Key (M)。chain code作為推導(dǎo)下級(jí)密鑰的熵。
同時(shí)錢包還提供了keystore和密碼基本功能
用戶最好的體驗(yàn)仍然會(huì)是密碼方式,所以錢包還提供了keystore讓用戶導(dǎo)出保存,這個(gè)Keystore也是私鑰經(jīng)過(guò)加密過(guò)后的一個(gè)文件,需要你自己設(shè)置的密碼才能打開文件。這樣的好處是就算keystore文件被盜,只要你額外設(shè)置的密碼夠長(zhǎng)夠隨機(jī),那么短時(shí)間內(nèi)私鑰也不會(huì)泄露,有充足的時(shí)間轉(zhuǎn)移地址里面的加密貨幣到其他地址。Keystore會(huì)存儲(chǔ)在使用的設(shè)備里,這樣每次登陸只用輸入相應(yīng)密碼即可。
【總結(jié)】
所以區(qū)塊鏈錢包實(shí)現(xiàn)的技術(shù)原理用一句話表示就是:錢包助記詞生成了種子(Seed),種子(Seed)生成了私鑰,私鑰推導(dǎo)出公鑰,公鑰節(jié)選部分成了錢包地址。同時(shí)錢包提供了keystore,他也是私鑰加密后的文件,可以配合正常的密碼使用,便捷了用戶的錢包使用。
所以,理解了一個(gè)錢包的生成原理之后就會(huì)更加理解下面幾種錢包丟失的情況:
1.地址忘了,可以用私鑰、助記詞、keystore+密碼,導(dǎo)入錢包找回。
2.密碼忘了,可以用私鑰、助記詞,導(dǎo)入錢包重置密碼。
3.密碼忘了,私鑰、助記詞又沒(méi)有備份,就無(wú)法重置密碼,就不能對(duì)代幣進(jìn)行轉(zhuǎn)賬,等于失去了對(duì)錢包的控制權(quán)。
4.密碼忘了,keystore 就失去了作用。
5.私鑰忘了,只要你錢包沒(méi)有刪除,并且密碼沒(méi)忘,可以導(dǎo)出私鑰。
6.私鑰忘了,還可以用助記詞、keystore+密碼,導(dǎo)入錢包找回。
7.助記詞忘了,可以通過(guò)私鑰、keystore+密碼,導(dǎo)入錢包重新備份助記詞。
8.keystore忘了,只要你錢包沒(méi)有刪除,密碼沒(méi)忘,可以重新備份keystore。
9.keystore 忘了,可以通過(guò)私鑰、助記詞,導(dǎo)入錢包重新備份 keystore。
【私鑰重復(fù)疑惑】
最后問(wèn)題來(lái)了,根據(jù)私鑰產(chǎn)生的機(jī)制就會(huì)有重復(fù)的可能。
私鑰有32個(gè)字節(jié)(1字節(jié)=8位二進(jìn)制),所以私鑰的總數(shù)是2^(8*32)=2^256個(gè)≈10^77個(gè)。假設(shè)全宇宙都在窮舉私鑰:
假設(shè)宇宙有一億個(gè)星系,
每個(gè)星系有一億顆恒星,
每顆恒星有一億顆人造衛(wèi)星,
每顆人造衛(wèi)星上有一億臺(tái)超級(jí)計(jì)算機(jī),
每臺(tái)超級(jí)計(jì)算機(jī)有一億個(gè)CPU,
每個(gè)CPU每秒可以窮舉一億個(gè)私鑰。
假設(shè)有一億個(gè)私鑰的地址上有BTC(每個(gè)地址平均0.21BTC),那么,多久可能窮舉出一個(gè)有幣的私鑰為:
10^77(私鑰總數(shù))/10^8(有幣私鑰)/10^8(星系)/10^8(恒星)/10^8(衛(wèi)星)/10^8(超級(jí)計(jì)算機(jī))/10^8(CPU)/10^8(每秒窮舉)=10^21秒。
10^21秒/3600秒/24小時(shí)/365天=317098億年。
現(xiàn)在宇宙年齡為138.2億年,相對(duì)來(lái)說(shuō),假如全宇宙都在窮舉私鑰,每1000倍宇宙年齡,可以期望窮舉到0.21 BTC。
以上查詢得到的計(jì)算方式只是說(shuō)明概率很小很小,小到可以忽略不計(jì),但是隨著時(shí)間軸的累積,加上現(xiàn)在不僅僅是BTC,還有各種各樣的新公鏈,如果都使用同樣的私鑰生成地址的規(guī)則,有概率就意味著最終無(wú)線長(zhǎng)時(shí)間總會(huì)出現(xiàn)重復(fù)的情況。而且概率學(xué)的范疇無(wú)法預(yù)測(cè)到偶然事件:如就偶然撞上了一次重復(fù)事件。
所以,筆者理解:只能說(shuō)刻意去窮舉私鑰投機(jī)的方式是不具備性價(jià)比(完全不可取或者說(shuō)代價(jià)慘重)的,在這樣的默認(rèn)假設(shè)下,萬(wàn)一出現(xiàn)偶然事件,生成錢包地址時(shí)會(huì)進(jìn)行網(wǎng)絡(luò)驗(yàn)證,如果發(fā)現(xiàn)重復(fù)(注意理論上即使地址重復(fù)也未必私鑰會(huì)重復(fù),但是算法上通過(guò)限制私鑰生成的范圍來(lái)保證不會(huì)有兩個(gè)私鑰對(duì)應(yīng)同一公鑰的情況,所以還是可以理解成私鑰和地址一一對(duì)應(yīng))就重新生成新的,并不會(huì)出現(xiàn)資產(chǎn)損失的可能。
評(píng)論
查看更多