以下全文來自圖說區(qū)塊鏈。因為不會用自己的語言方式來說明概念,所以全部都是抄送全文的。這讓我明顯感到只有深入理解一個概念之后,才能通過自己的語言模式來講述文章。有些文章就算是別人的,也能通過一定程度的修改來加上自己的語言。而區(qū)塊鏈就完全不同了,這個不懂就一點都加不上自己的思考。
一、區(qū)塊
區(qū)塊作為區(qū)塊鏈的基本結(jié)構(gòu)單元,由包含元數(shù)據(jù)的區(qū)塊頭和包含交易數(shù)據(jù)的區(qū)塊主體構(gòu)成。區(qū)塊頭包含三組元數(shù)據(jù):
1. 用于連接前面的區(qū)塊、索引自父區(qū)塊哈希值的數(shù)據(jù);
2. 挖礦難度、Nonce(隨機數(shù),用于工作量證明算法的計數(shù)器)、時間戳;
3. 能夠總結(jié)并快速歸納校驗區(qū)塊中所有交易數(shù)據(jù)的Merkle(默克爾)樹根數(shù)據(jù)。
二、哈希算法
哈希算法是區(qū)塊鏈中保證交易信息不被篡改的單向密碼機制。哈希算法接收一段明文后,以一種不可逆的方式將其轉(zhuǎn)化為一段長度較短、位數(shù)固定的散列數(shù)據(jù)。它有兩個特點:
1. 加密過程不可逆,意味著我們無法通過輸出的散列數(shù)據(jù)倒推原本的明文是什么;
2. 輸入的明文與輸出的散列數(shù)據(jù)一一對應(yīng),任何一個輸入信息的變化,都必將導(dǎo)致最終輸出的散列數(shù)據(jù)的變化。
三、公鑰和私鑰
在區(qū)塊鏈的話題中,我們還經(jīng)常聽到這樣的詞匯——公鑰和私鑰。這就是俗稱的不對稱加密方式,是對以前的對稱加密方式(使用用戶名與密碼)的提高。
我們用電子郵件加密的模型來簡單介紹一下:公鑰就是給大家用的,你可以通過電子郵件發(fā)布,可以通過網(wǎng)站讓別人下載,公鑰其實是用來加密/驗章的。私鑰就是自己的,必須非常小心保存,最好加上密碼,私鑰用來解密/簽章,私鑰由個人擁有。
在比特幣的系統(tǒng)中,私鑰本質(zhì)上是32個字節(jié)組成的數(shù)組,公鑰和地址的生成都依賴私鑰,有了私鑰就能生成公鑰和地址,就能夠花費對應(yīng)地址上面的比特幣。私鑰花費比特幣的方式就是對這個私鑰所對應(yīng)的未花費的交易進行簽名。
信息發(fā)送者:用私鑰對信息進行簽名,使用信息接收方的公鑰對信息加密。
信息接收方:用信息發(fā)送者的公鑰驗證信息發(fā)送者的身份,使用私鑰對加密信息解密。
四、時間戳
區(qū)塊鏈中的時間戳從區(qū)塊生成的一刻起就存在于區(qū)塊之中,它對應(yīng)的是每一次交易記錄的認(rèn)證,證明交易記錄的真實性。
時間戳是直接寫在區(qū)塊鏈中的,而區(qū)塊鏈中已經(jīng)生成的區(qū)塊不可篡改,因為一旦篡改,生成的哈希值就會變化,從而變成一個無效的數(shù)據(jù)。每一個時間戳?xí)⑶耙粋€時間戳也納入其隨機哈希值中,這一過程不斷重復(fù),依次相連,最后會生成一個完整的鏈條。
五、Merkle樹結(jié)構(gòu)
區(qū)塊鏈利用Merkle樹的數(shù)據(jù)結(jié)構(gòu)存放所有葉子節(jié)點的值,并以此為基礎(chǔ)生成一個統(tǒng)一的哈希值。Merkle樹的葉子節(jié)點存儲的是數(shù)據(jù)信息的哈希值,非葉子的節(jié)點存儲的是對其下面所有葉子節(jié)點的組合進行哈希計算后得出的哈希值。
同樣地,區(qū)塊中任意一個數(shù)據(jù)的變更都會導(dǎo)致Merkle樹結(jié)構(gòu)發(fā)生變化,在交易信息驗證比對的過程中,Merkle樹結(jié)構(gòu)能夠大大減少數(shù)據(jù)的計算量,畢竟,我們只需驗證Merkle樹結(jié)構(gòu)生成的統(tǒng)一哈希值就可以了。