大家剛開始使用錢包的時(shí)候都會(huì)被助記詞、Keystore、私鑰、地址、公鑰等各種概念搞得云里霧里,這些概念和傳統(tǒng)世界的銀行卡和密碼簡(jiǎn)單的兩個(gè)概念完全不一樣,只能按照錢包軟件的提示需要怎么做就怎么做,卻無法知道緣由,有點(diǎn)兒死背書的感覺,本篇的主旨就是幫大家捋一捋:作為一款區(qū)塊鏈錢包,是如何工作的,如何生成密鑰、助記詞、Keystore等。先把結(jié)論置頂:
區(qū)塊鏈錢包實(shí)現(xiàn)的技術(shù)原理用一句話表示就是:錢包助記詞生成了種子(Seed),種子(Seed)生成了私鑰,私鑰推導(dǎo)出公鑰,公鑰節(jié)選部分成了錢包地址。同時(shí)錢包提供了keystore,它也是私鑰加密后的文件,可以配合正常的密碼使用,便捷了用戶的錢包使用。
區(qū)塊鏈的誕生,不僅僅是通過代碼和智能合約來將生產(chǎn)組織進(jìn)一步扁平化,從而達(dá)到優(yōu)化中間過程、精簡(jiǎn)中介的作用,更是產(chǎn)生了一個(gè)新的經(jīng)濟(jì)模式,創(chuàng)建了一種新的生產(chǎn)關(guān)系,這種理念上的變革遠(yuǎn)遠(yuǎn)大于技術(shù)本身帶來的影響,它最讓人著迷的地方莫過于利用人性的特點(diǎn),建立的一套自治的經(jīng)濟(jì)激勵(lì)機(jī)制,并誕生了一個(gè)新型的價(jià)值載體cryptocurrency(筆者習(xí)慣區(qū)分Coin和Token,可參見文章區(qū)塊鏈基礎(chǔ)概念 - 理解COIN和TOKEN)。
Cryptocurrency顯然不同于傳統(tǒng)的貨幣,它是通過一定的加密算法計(jì)算出來的數(shù)字貨幣,也就是說電子化會(huì)是它的本質(zhì)屬性,這樣它的存儲(chǔ)問題就會(huì)是一個(gè)熱門的研究領(lǐng)域,具體來講就是我們常說的區(qū)塊鏈錢包。當(dāng)然,這里需要強(qiáng)調(diào)的是,區(qū)塊鏈錢包并不是存儲(chǔ)著大家的cryptocurrency,它是在鏈上存儲(chǔ)的,錢包主要存儲(chǔ)的是私鑰,它是用戶對(duì)鏈上cryptocurrency的所有權(quán)憑證,這是一個(gè)不記名、不可掛失的憑證。從開發(fā)者的角度看,錢包的作用就是管理用戶的私鑰、通過私鑰簽名交易管理用戶在區(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ú)樹一幟和有見解:區(qū)塊鏈錢包,其實(shí)更好叫做區(qū)塊鏈客戶端,其中“錢”只是其中一個(gè)應(yīng)用場(chǎng)景。當(dāng)然他們這個(gè)團(tuán)隊(duì)主要focus在帶有智能合約的公鏈錢包,目前主要就是ETH了,以其作為基礎(chǔ)衍生出眾多應(yīng)用場(chǎng)景供使用,而不是傳統(tǒng)理解的錢包概念了。筆者以前一直覺得在未解決Cryptocurrency價(jià)值波動(dòng)前,錢包的用戶大規(guī)模朝潮還很久遠(yuǎn),不能與交易所抗衡,但終究有一天王位會(huì)轉(zhuǎn)移給錢包。在聽了Victor的見解之后,筆者突然覺得視野更加開闊。BTW,他們團(tuán)隊(duì)還是ERC875的執(zhí)筆,對(duì)技術(shù)的追求和開發(fā)很有造詣,是個(gè)值得關(guān)注的團(tuán)隊(duì)!
【區(qū)塊鏈錢包基本類型和特點(diǎn)】
區(qū)塊鏈錢包的分類和描述依照所涉及的概念不同會(huì)有所區(qū)別,從其本質(zhì)特點(diǎn)上來講,可用下圖來表示:
區(qū)塊鏈錢包本質(zhì)特點(diǎn)劃分
區(qū)塊鏈錢包和區(qū)塊鏈一樣,也可以分為去onchain錢包和offchain錢包(如今很多人習(xí)慣稱之為中心化錢包和去中心化錢包,雖然方便無基礎(chǔ)的人形象理解,但是整個(gè)概念和精髓卻會(huì)被誤解),它們本質(zhì)區(qū)別在于錢包私鑰的存儲(chǔ)方式和地點(diǎn),私鑰存儲(chǔ)在用戶手中,錢包商無獲取途徑,用戶可以實(shí)時(shí)使用鏈上資產(chǎn)的稱之為onchain錢包;而私鑰存儲(chǔ)在錢包商或者交易所手中,用戶不能直接使用鏈上資產(chǎn)而需要通過第三方才能動(dòng)的稱之為offchain錢包。具體來講:
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)過第三方發(fā)起交易,保證了基本安全性;
由于前節(jié)點(diǎn)下載到本地,所以會(huì)更快驗(yàn)證交易信息。
缺點(diǎn):
也因?yàn)橄螺d了所有節(jié)點(diǎn),所以占用很多硬盤空間(Mist現(xiàn)在達(dá)到了80G,筆者下了好幾天也失敗了;Bitcoin Core據(jù)說是150G);
每次使用前需要同步數(shù)據(jù);
新手的使用體驗(yàn)不夠好;
不支持多種數(shù)字資產(chǎn);
往往都是電腦版本。
2.onchain錢包——SPV輕錢包
私鑰存儲(chǔ)在用戶手中,但不保存所有區(qū)塊的數(shù)據(jù),只保存跟自己相關(guān)的數(shù)據(jù),所以體積很小,可以運(yùn)行在電腦,手機(jī),網(wǎng)頁等地方。如Blockchain, imtoken等。
優(yōu)點(diǎn):
用戶體驗(yàn)很好,尤其對(duì)于新手
很多輕錢包都支持多種數(shù)字資產(chǎn)
體積小,不占空間
缺點(diǎn):
交易驗(yàn)證會(huì)稍微慢一點(diǎn)
3.offchain錢包——通過中心服務(wù)器訪問區(qū)塊鏈網(wǎng)絡(luò)的錢包
該類型錢包的劃分有一定爭(zhēng)議,主要在于錢包數(shù)據(jù)傳輸?shù)姆绞绞强梢詳U(kuò)展選擇區(qū)塊鏈節(jié)點(diǎn)還是必須通過錢包服務(wù)方的服務(wù)器,如果是后者就存在私鑰存儲(chǔ)在中心化服務(wù)器的風(fēng)險(xiǎn),目前有很多區(qū)塊鏈錢包體驗(yàn)都很不錯(cuò),甚至很流暢,由于不開源無法排除該類風(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è)哪怕即使通過自己的服務(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)“做壞事”你是無法阻止的,即作惡風(fēng)險(xiǎn)
平臺(tái)關(guān)閉后你的幣就沒有了,即跑路風(fēng)險(xiǎn)
當(dāng)然,根據(jù)不同的表現(xiàn)形式,我們還可以有不同的劃分:
這種劃分理解就比較簡(jiǎn)單了,電腦單機(jī)版的錢包,如前面提到的全節(jié)點(diǎn)錢包基本以此類為主;手機(jī)錢包和在線錢包以SPV輕錢包為主,前者以手機(jī)APP為主要表現(xiàn)形式,后者是網(wǎng)頁插件,如MyEtherWallet, MetaMask等。硬件錢包是為了增強(qiáng)安全性,通過專門設(shè)計(jì)的安全硬件來離線保存儲(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)盤來自己制作硬件錢包的,一方面制作過程比較繁瑣,同時(shí)每次轉(zhuǎn)賬支出時(shí)會(huì)比較繁瑣,適用于比較有基礎(chǔ)的人士。
優(yōu)點(diǎn):
安全,私鑰不觸網(wǎng),黑客無法通網(wǎng)絡(luò)攻擊。另外設(shè)備都有PIN碼保護(hù),即使在物理環(huán)境中設(shè)備被盜走,也無法打開你的錢包;
易備份,設(shè)備在初始化配置的時(shí)候會(huì)生成助記詞(一般為12個(gè)或者24個(gè)單詞),而助記詞就是你私鑰的備份,當(dāng)你的設(shè)備丟失或者損壞以后,可以夠買新的設(shè)備然后通過助記詞來恢復(fù)私鑰;
多幣種同時(shí)管理,現(xiàn)在絕大多數(shù)的硬件錢包,不僅僅可以管理比特幣,像萊特幣、以太坊、比特現(xiàn)金等數(shù)字貨幣都可以同時(shí)管理。
缺點(diǎn):
不免費(fèi),你要為硬件付費(fèi);
無法獨(dú)立使用,硬件錢包都是隔絕網(wǎng)絡(luò)的,所以需要配合聯(lián)網(wǎng)的客戶端(Chrome 插件、桌面客戶端、手機(jī)客戶端等)來完成收幣和發(fā)幣。不過為了安全犧牲一些方便些也是值得的,畢竟一個(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è)過程屬于區(qū)塊鏈錢包設(shè)計(jì)過程,不能與區(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)過2次SHA-256運(yùn)算,取兩次哈希結(jié)果的前四字節(jié)),然后再對(duì)其進(jìn)行Base58編碼,就可以得到我們常見的WIF(Wallet import Format)格式的私鑰。
3.私鑰經(jīng)過橢圓曲線乘法運(yùn)算,可以得到公鑰。公鑰是橢圓曲線上的點(diǎn),并具有x和y坐標(biāo)。公鑰有兩種形式:壓縮的與非壓縮的。早期比特幣均使用非壓縮公鑰,現(xiàn)在大部分客戶端默認(rèn)使用壓縮公鑰。
從私鑰推導(dǎo)出公鑰、再?gòu)墓€推導(dǎo)出公鑰哈希都是單向的,也就是采用不可逆算法。
橢圓曲線算法
4.公鑰產(chǎn)生后,將公鑰通過SHA256哈希算法處理得到32字節(jié)的哈希值;后對(duì)得到的哈希值通過RIPEMD-160算法來得到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é)公鑰示意上述過程:
二。遠(yuǎn)程過程調(diào)用(RemoteProcedure Call, RPC)
它是一個(gè)計(jì)算機(jī)通信協(xié)議。該協(xié)議允許運(yùn)行于一臺(tái)計(jì)算機(jī)的程序調(diào)用另一臺(tái)計(jì)算機(jī)的子程序,而程序員無需額外地為這個(gè)交互作用編程。RPC 的主要功能目標(biāo)是讓構(gòu)建分布式計(jì)算(應(yīng)用)更容易,在提供強(qiáng)大的遠(yuǎn)程調(diào)用能力時(shí)不損失本地調(diào)用的語義簡(jiǎn)潔性。廣為使用的是一個(gè)叫做 JSON(JavaScript Object Notation)- RPC 的協(xié)議。所以錢包都是通過某個(gè)區(qū)塊鏈RPC接口調(diào)用來和區(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ì)之間沒有關(guān)聯(lián);
deterministic wallet: 密鑰對(duì)由一個(gè)原始的種子主密鑰推導(dǎo)而來。最常見的推導(dǎo)方式是樹狀層級(jí)推導(dǎo) (hierarchical deterministic) 簡(jiǎn)稱 HD。
比特幣錢包 (Bitcoin Core) 生成密鑰對(duì)之間沒有任何關(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),通過一個(gè)共同的種子維護(hù)n多私鑰,種子推導(dǎo)私鑰采用不可逆哈希算法,在需要備份錢包私鑰時(shí),只備份這個(gè)種子即可。
通過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é)果就是助記詞串;
錢包生成助記詞方法
通過助記詞生成種子
助記詞由長(zhǎng)度為128 到 256 位的隨機(jī)序列(熵)匹配詞庫(kù)而來,隨后采用PBKDF2 function推導(dǎo)出更長(zhǎng)的種子(seed)。生成的種子被用來生成構(gòu)建 deterministic Wallet 和推導(dǎo)錢包密鑰。
在密碼學(xué)中,Key stretching技術(shù)被用來增強(qiáng)弱密鑰的安全性,增加了暴力破解 (Brute-force attack) 對(duì)每個(gè)可能密鑰嘗試攻破的時(shí)間,增強(qiáng)了攻擊難度。各種編程語言原生庫(kù)都提供了 key stretching 的實(shí)現(xiàn)。PBKDF2(Password-Based Key Derivation Function 2)是常用的 key stretching 算法中的一種?;驹硎峭ㄟ^一個(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)
種子生成密鑰
上圖中根種子通過不可逆HMAC-SHA512算法推算出512位的哈希串,左256位是Master Private key(m),右256位是master chain code,通過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)過加密過后的一個(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.密碼忘了,私鑰、助記詞又沒有備份,就無法重置密碼,就不能對(duì)代幣進(jìn)行轉(zhuǎn)賬,等于失去了對(duì)錢包的控制權(quán)。
4.密碼忘了,keystore 就失去了作用。
5.私鑰忘了,只要你錢包沒有刪除,并且密碼沒忘,可以導(dǎo)出私鑰。
6.私鑰忘了,還可以用助記詞、keystore+密碼,導(dǎo)入錢包找回。
7.助記詞忘了,可以通過私鑰、keystore+密碼,導(dǎo)入錢包重新備份助記詞。
8.keystore忘了,只要你錢包沒有刪除,密碼沒忘,可以重新備份keystore。
9.keystore 忘了,可以通過私鑰、助記詞,導(dǎo)入錢包重新備份 keystore。
【私鑰重復(fù)疑惑】
最后問題來了,根據(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ì)來說,假如全宇宙都在窮舉私鑰,每1000倍宇宙年齡,可以期望窮舉到0.21 BTC。
以上查詢得到的計(jì)算方式只是說明概率很小很小,小到可以忽略不計(jì),但是隨著時(shí)間軸的累積,加上現(xiàn)在不僅僅是BTC,還有各種各樣的新公鏈,如果都使用同樣的私鑰生成地址的規(guī)則,有概率就意味著最終無線長(zhǎng)時(shí)間總會(huì)出現(xiàn)重復(fù)的情況。而且概率學(xué)的范疇無法預(yù)測(cè)到偶然事件:如就偶然撞上了一次重復(fù)事件。
所以,筆者理解:只能說刻意去窮舉私鑰投機(jī)的方式是不具備性價(jià)比(完全不可取或者說代價(jià)慘重)的,在這樣的默認(rèn)假設(shè)下,萬一出現(xiàn)偶然事件,生成錢包地址時(shí)會(huì)進(jìn)行網(wǎng)絡(luò)驗(yàn)證,如果發(fā)現(xiàn)重復(fù)(注意理論上即使地址重復(fù)也未必私鑰會(huì)重復(fù),但是算法上通過限制私鑰生成的范圍來保證不會(huì)有兩個(gè)私鑰對(duì)應(yīng)同一公鑰的情況,所以還是可以理解成私鑰和地址一一對(duì)應(yīng))就重新生成新的,并不會(huì)出現(xiàn)資產(chǎn)損失的可能。
評(píng)論
查看更多