重新讀《精通比特幣》,一遍讀不懂我就多讀幾遍,還不懂我就認(rèn)為是自己的問題,先記下來。
1、私鑰是如何產(chǎn)生的?隨機(jī),隨機(jī)源需要慎重選取,一般會(huì)選用密碼學(xué)安全的偽隨機(jī)數(shù)生成器(CSPRNG),并且需要有一個(gè)來自具有足夠熵值的源的種子。存儲(chǔ)在用戶錢包中的數(shù)字密鑰完全獨(dú)立于比特幣協(xié)議,可由用戶的錢包軟件生成并管理,而無需區(qū)塊鏈或網(wǎng)絡(luò)連接。密鑰是成對(duì)出現(xiàn)的,由一個(gè)私鑰和一個(gè)公鑰所組成。作者說投硬幣256次,相當(dāng)于256個(gè)二進(jìn)制,然后換算成16進(jìn)制。
私鑰是多少位的?還需要加密運(yùn)算嗎?需要Base58嗎?后來讀程序,私鑰是Base64,不需要運(yùn)算,在程序里的顯示是64個(gè)字符,256位的二進(jìn)制數(shù),以64位十六進(jìn)制數(shù)顯示,每個(gè)十六進(jìn)制數(shù)占4位。
2、私鑰如何產(chǎn)生公鑰?加密算法,橢圓曲線乘法,是單向加密函數(shù),暴力破解也很困難。公鑰是多少位的?公鑰也可以用多種不同格式來表示,最重要的是它們分為非壓縮格式或壓縮格式公鑰這兩種形式。前綴04是用來區(qū)分非壓縮格式公鑰,壓縮格式公鑰是以02或者03開頭。

3、公鑰如何生成地址?單向加密Hash函數(shù),Secure Hash Algorithm (SHA)和the RACE Integrity Primitives Evaluation Message Digest (RIPEMD),特別是SHA256和RIPEMD160。地址A = RIPEMD160(SHA256(K)),雙Hash160算法,此時(shí)會(huì)生成長(zhǎng)度為160比特(20字節(jié))的數(shù)字。


3、Base58不含Base64中的0(數(shù)字0)、O(大寫字母o)、l(小寫字母L)、I(大寫字母),以及“+”和“/”兩個(gè)字符。簡(jiǎn)而言之,Base58就是由不包括(0,O,l,I)的大 小寫字母和數(shù)字組成。
對(duì)于這種解釋,我打開blockchain.info查看,交易地址都能符合Base58標(biāo)準(zhǔn),其中有o也是小寫字母。
比特幣地址以“1”“3”開頭,為什么?

我們看上圖,這些屬性使用戶可以輕松明確被編碼的數(shù)據(jù)的類型以及如何使用它們。例如我們可以看到他們的不同,Base58Check編碼的比特幣地址是以1開頭的,而Base58Check編碼的私鑰WIF是以5開頭的。
4、公鑰和私鑰的都可以有多種編碼格式。一個(gè)密鑰被不同的格式編碼后,雖然結(jié)果看起來可能不同,但是密鑰所編碼數(shù)字并沒有改變。這些不同的編碼格式主要是用來方便人們無誤地使用和識(shí)別密鑰。
這就解釋了我的疑惑,為什么我總是不能夠找出編碼的規(guī)律,而且加上自己對(duì)于進(jìn)制的理解,總會(huì)有偏差。
5、比特幣錢包。比特幣錢包只包含私鑰而不是比特幣,比特幣是以交易輸出的形式來儲(chǔ)存在區(qū)塊鏈中。