在比特幣中,經(jīng)常出現(xiàn)三個(gè)詞:私鑰,公鑰和地址。它們是什么意思呢?他們之間又有什么樣的關(guān)系呢?搞清楚他們之間的關(guān)系和區(qū)別,是了解比特幣的基礎(chǔ)。
今天看群里有同學(xué)說(shuō)這里大多數(shù)人都不懂技術(shù),今天我將用比較易懂的方式來(lái)告訴大家。
就在今天上午對(duì)吧?群里一位叫“磊哥”的同學(xué)說(shuō)他的手機(jī)掉了,換了新手機(jī),但重新登陸imToken時(shí),卻忘記助記詞了,只有私鑰……幸好私鑰還在啊,不然可就慘了。
中本聰?shù)纳矸菀恢币詠?lái)都是個(gè)謎,自從2008年中本聰發(fā)表了比特幣白皮書(shū)后,就出現(xiàn)過(guò)很多個(gè)“中本聰”。其中最出名的,莫過(guò)于克雷格?賴特(Craig Wright),也就是我們調(diào)侃的澳本聰,當(dāng)時(shí)他站出來(lái)公開(kāi)表示他是中本聰,且能提供中本聰?shù)乃借€。結(jié)果大家都知道了吧。
上面提到的私鑰,就是像下面這樣的一段字符串:
5KYZdUEo39z3FPrtuX2QbbwGnNP5zTd7yyr2SC1j299sBCnWjss
支持比特幣協(xié)議的應(yīng)用都可以把這段字符串轉(zhuǎn)換成比特幣的私鑰,再轉(zhuǎn)換出公鑰,再得到一個(gè)比特幣地址。如果該地址上面有對(duì)應(yīng)的比特幣,就可以使用這個(gè)私鑰花費(fèi)上面的比特幣。你們看上面那段字符串,就是沒(méi)有對(duì)應(yīng)比特幣的。這是我新建的一個(gè)錢(qián)包中的地址,在復(fù)制出私鑰后,已經(jīng)刪除,只要里面沒(méi)有比特幣,對(duì)我是沒(méi)有任何影響的。而大家要注意的就是:別把你們的私鑰泄露出去,也不要保存在云盤(pán)或本地硬盤(pán)、通過(guò)聊天工具發(fā)送等,這些都有可能造成損失。最好是寫(xiě)在紙上,保存在安全的地方。當(dāng)然,里面啥都沒(méi)有的話,就另說(shuō)了。
說(shuō)了這么多,那私鑰是怎么生成的呢?emmmmm我說(shuō)是隨機(jī)生成的,會(huì)不會(huì)有人打我?。?/p>
其實(shí),私鑰本質(zhì)上就是隨機(jī)數(shù)。私鑰由32個(gè)byte組成的數(shù)組,1個(gè)byte等于8位二進(jìn)制,一個(gè)二進(jìn)制只有兩個(gè)值0或者1。
這樣說(shuō),可能有些沒(méi)學(xué)過(guò)計(jì)算機(jī)的同學(xué)就不太懂了,那直接說(shuō)結(jié)論吧。
私鑰的總數(shù)是將近2的256次方個(gè)。這個(gè)數(shù)量已經(jīng)超過(guò)了宇宙中原子的總數(shù),想要遍歷所有的私鑰,耗盡整個(gè)太陽(yáng)的能量也是不可能的。這一點(diǎn),說(shuō)的是私鑰在密碼學(xué)上的安全性。當(dāng)然,并不是說(shuō)不可能出現(xiàn)重復(fù)的私鑰,而是說(shuō)不可能通過(guò)遍歷的方式找到某一個(gè)特定的私鑰,或者通過(guò)其它的方式找,而不通過(guò)私鑰就能花費(fèi)地址上面的比特幣,私鑰的安全性是由數(shù)學(xué)上保證的。
私鑰字符串是按照一定的規(guī)律從32位byte數(shù)據(jù)格式化生成的,32個(gè)byte的數(shù)組是由256個(gè)0或者1組成的,如果顯示出來(lái),不僅僅是識(shí)別率不高,而且私鑰太長(zhǎng)。
因此私鑰字符串就是對(duì)于原始的隨機(jī)數(shù)進(jìn)行一定的轉(zhuǎn)換,轉(zhuǎn)換為識(shí)別率高的形式,下面私鑰的是對(duì)32個(gè)byte數(shù)組就做了Base58的轉(zhuǎn)換。
5KYZdUEo39z3FPrtuX2QbbwGnNP5zTd7yyr2SC1j299sBCnWjss
Base58是用于比特幣中使用的一種獨(dú)特的編碼方式,主要用于產(chǎn)生Bitcoin的錢(qián)包地址和私鑰。相比Base64,Base58不使用數(shù)字“0”,字母大寫(xiě)“O”,字母大寫(xiě)“I”,和字母小寫(xiě)“l(fā)”,以及“+”和“/”符號(hào)。這樣做的主要原因是為了肉眼容易識(shí)別,在輸入的時(shí)候不容易打錯(cuò)。(百科)
所以為了便于人眼識(shí)別,我們把原本很長(zhǎng)又不好記的字符,用一種叫做Base58的編碼方式,轉(zhuǎn)換成了一段更易識(shí)別的字符串。不過(guò)轉(zhuǎn)換后的這串字符,輸入起來(lái)還是挺費(fèi)勁的。這時(shí)候,也可以把私鑰轉(zhuǎn)換其他形式,比如以單詞的形式。這就是大家在錢(qián)包中看到的助記詞。
私鑰大致說(shuō)完了, 都是比較簡(jiǎn)單的概念。大家對(duì)理論有興趣可以去查資料。
下面來(lái)說(shuō)公鑰。
公鑰實(shí)際上是由私鑰轉(zhuǎn)來(lái)的,這個(gè)過(guò)程,使用了之前提到的一種算法——橢圓曲線加密算法。
至于算法的過(guò)程,我們就不探討了,涉及到計(jì)算以及理論。
給大家看一張圖,其中講到了私鑰到公鑰的過(guò)程。
橢圓曲線加密法以橢圓曲線理論為基礎(chǔ),利用橢圓曲線等式的性質(zhì)來(lái)產(chǎn)生密鑰,而不是采用傳統(tǒng)的方法利用大質(zhì)數(shù)的積來(lái)產(chǎn)生,其特點(diǎn)是:密鑰長(zhǎng)度小,安全性能高,整個(gè)數(shù)字簽名耗時(shí)小。
這里提到的數(shù)字簽名技術(shù),簡(jiǎn)稱DSA,全稱是Digital Signature Standard,在DSA數(shù)字簽名和認(rèn)證中,發(fā)送者使用自己的私鑰對(duì)文件或消息進(jìn)行簽名,接受者收到消息后使用發(fā)送者的公鑰來(lái)驗(yàn)證簽名的真實(shí)性。這里有一個(gè)非常便于理解DSA的網(wǎng)站,我發(fā)給你們
“What is a Digital Signature?”
http://www.youdzone.com/signature.html
公鑰是任何人都可以獲得的,而私鑰只能你們自己保留好,公鑰經(jīng)過(guò)一系列數(shù)字簽名運(yùn)算就會(huì)得到大家常說(shuō)的比特幣錢(qián)包地址。因?yàn)橛晒€可以算出比特幣地址,所以我們經(jīng)常會(huì)把它們兩兄弟搞混。它們都是指的同一個(gè)概念,不過(guò)比特幣錢(qián)包地址是另一種格式的公鑰,但是兩兄弟的衣服穿的不一樣。區(qū)別在于外在表現(xiàn)形式。
我們看到的比特幣地址一般都是Base58編碼處理的,地址的生成比較復(fù)雜,看吧,Base58 又出來(lái)了。整個(gè)過(guò)程比較復(fù)雜,這里就不細(xì)講了。
評(píng)論
查看更多