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