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