先說說什么是“錢包”,一般我們理解的錢包是這樣的
這里的錢包最主要的功能是:存放現(xiàn)金
那區(qū)塊鏈錢包一樣么?
區(qū)塊鏈“錢包”其實(shí)和我們理解的錢包不是一回事钟沛。哪里不一樣呢券腔?首先伏穆,“錢包”里面是沒有錢的,那我們錢包里有什么纷纫?區(qū)塊鏈“錢包”里存的其實(shí)是私鑰(這個后面說)枕扫。從這點(diǎn)來看,區(qū)塊鏈錢包更像銀行存折辱魁,存折里沒有錢烟瞧,但是存折上有余額和所有交易記錄,存折里有多少錢染簇,要問銀行:“我卡上有多少錢参滴?”。為什么會這樣呢锻弓?因?yàn)殂y行保存有賬本砾赔,你有多少錢,要查下賬本上青灼,你的卡里有多少錢才知道暴心。
那么區(qū)塊鏈?zhǔn)窃鯓拥哪兀?/p>
如圖所示,一個典型的去中心化的分布式節(jié)點(diǎn)杂拨,每個節(jié)點(diǎn)都獨(dú)立的維護(hù)自己的賬本专普,每個節(jié)點(diǎn)依靠“共識”來記賬,保證每人手上的賬本都是真實(shí)的扳躬,無法篡改的脆诉,并且賬本數(shù)據(jù)都是一樣的甚亭。這個時(shí)候,你想看看你的錢包余額有多少击胜,直接看自己賬本上自己錢包地址對應(yīng)的余額就行亏狰,也可以去網(wǎng)絡(luò)中任何一個可信節(jié)點(diǎn)查詢賬本數(shù)據(jù)。
如果我想實(shí)現(xiàn)轉(zhuǎn)賬(花錢)怎么辦偶摔?
這點(diǎn)和銀行匯款就很像了暇唾,先寫我(Alice的錢包地址)轉(zhuǎn)賬給(Bob的錢包地址)10個幣,就行了辰斋,那么要是別人寫了轉(zhuǎn)我的錢怎么辦策州?別怕,和銀行一樣宫仗,這里要用你自己的私鑰簽名够挂,這樣就能保證只有你才能“花”你的錢。
到這里藕夫,我們已經(jīng)接觸到了私鑰孽糖、錢包地址、交易等等概念毅贮,我們來看看怎么回事办悟。
根據(jù)secp256k1加密算法(一種橢圓曲線加密算法)可以用私鑰推導(dǎo)出公鑰(其實(shí)就是密鑰對),在用公鑰哈希推導(dǎo)出錢包地址滩褥,但是錢包地址無法反推出公鑰病蛉,這樣,只要我們掌握了私鑰瑰煎,就什么都有了铺然。可見私鑰非常非常重要丢间。私鑰可以理解為銀行存折密碼探熔,密碼丟了,錢就沒有了烘挫。
現(xiàn)在我們因該能理解我們遇到的第一種錢包了:全節(jié)點(diǎn)錢包(全功能節(jié)點(diǎn)錢包)這種錢包不直接對外提供接口诀艰,理論上最安全,但是缺點(diǎn)也很明顯饮六,必須要維護(hù)巨大的區(qū)塊鏈數(shù)據(jù)(賬本)并且數(shù)據(jù)必須同步到最新其垄,否則會導(dǎo)致無法查詢交易狀態(tài),甚至無法交易等情況出現(xiàn)卤橄。
有的同學(xué)說我就想查帳绿满,轉(zhuǎn)帳,還要這么復(fù)雜窟扑,有沒有方便點(diǎn)的方法呢喇颁?這時(shí)候漏健,該輕錢包出場了。
顧名思義橘霎,輕錢包不用維護(hù)巨大的區(qū)塊數(shù)據(jù)蔫浆,輕錢包只要保管私鑰,簽名交易姐叁,然后將簽好名的交易發(fā)送到信任的全節(jié)點(diǎn)就行了瓦盛。當(dāng)然,這里需要有誠實(shí)的全節(jié)點(diǎn)開放這個功能外潜,愿意提供代發(fā)交易的服務(wù)原环。如果將交易信息發(fā)到惡意節(jié)點(diǎn),會有潛在風(fēng)險(xiǎn)处窥。
還要謹(jǐn)防一種偽裝成輕錢包的錢包嘱吗。這種錢包從使用上來看好像是輕錢包,但是實(shí)際上私鑰都是保存在節(jié)點(diǎn)服務(wù)器上碧库,只要節(jié)點(diǎn)愿意柜与,可以隨時(shí)拿到私鑰。
如圖所示嵌灰,兩種錢包雖然發(fā)送交易的流程完全一樣,但是私鑰保存的方式不一樣颅悉,會導(dǎo)致嚴(yán)重的安全問題沽瞭。
說了那么多你因該明白了,區(qū)塊鏈錢包其實(shí)是個用來管理私鑰的管理程序吧黄。
按照管理私鑰的方式周荐,錢包又能分為非確定性錢包和確定性(種子)錢包付呕。
詳見深入淺出 HD 錢包基本原理
比特幣早期的錢包客戶端 Satoshi Client 里面會自動隨機(jī)生成 100 個私鑰、公鑰對豌鹤,這些私鑰之間完全沒有關(guān)聯(lián),這種錢包也叫做隨機(jī)錢包(Random Wallet)或者非確定性錢包(Non-Deterministic Wallet)枝缔,錢包的備份和恢復(fù)必須針對每個私鑰進(jìn)行布疙。或者說愿卸,錢包的作用就是管理100個甚至更多的公私鑰對灵临,可以想象,這個管理過程是非常繁重趴荸,每次備份儒溉,必須備份所有有余額的公私鑰對,并且非常不方便記憶发钝。好處是每個公私鑰對都是獨(dú)立的顿涣,任何一個公私鑰對泄露或者遺失波闹,不會對其他公私鑰對產(chǎn)生影響,安全性非常高涛碑。
為了方便私鑰管理舔痪,就有了確定性錢包(Deterministic Wallet)和現(xiàn)在普遍被大家接受的分層確定性錢包(Hierarchical Deterministic Wallet)。
如圖所示锌唾,這種樹狀結(jié)構(gòu)的公私鑰對管理方式優(yōu)勢特別明顯锄码,所有的child keys 和 grandchild keys都可由seed推導(dǎo)得出。所以我們只需要記住seed就可以了晌涕。同樣滋捶,這種“方便的”私鑰管理方式的缺點(diǎn)也很明顯,如果seed一旦泄露余黎,所有的賬號都會被泄露重窟。并且特別重要的一點(diǎn),不光seed泄露會導(dǎo)致?lián)p失全部錢包資產(chǎn)惧财,任何一個子私鑰巡扇,加上主公鑰,就能反推出主私鑰垮衷,這個是特別致命的厅翔。所以在HD錢包的使用上,需要特別慎重搀突!