所謂區塊鏈,就是字面意思,由區塊組成的一個鏈條。在計算機領域,鏈表是最為基本的數據結構之一。區塊鏈就是對鏈表數據結構的擴展和應用。每一個區塊中都維護著自己的數據結構,而每個區塊又都指向它的下一個區塊。

區塊鏈的基本結構
區塊鏈采用點對點網絡(P2P,可不是網貸,網貸是坑人的,P2P網絡卻很實用),該網絡中所有節點都是對等的,沒有主次之分。這是區塊鏈分布式和去中心化的基礎之一。
區塊鏈采用數字加密算法,將上鏈的所有數據進行加密處理,并且保證鏈上數據的不可篡改。同時,區塊鏈采用Paxos一致性協議,在網絡上傳播數據時保證各個節點之間數據的一致性。
為什么區塊鏈是不可篡改的?
首先,所謂的不可篡改是指在區塊鏈中網絡節點達到一定規模之后,區塊鏈中已經形成的數據是很難被修改的,而并不是100%不能篡改,只是代價極高。
區塊鏈的不可篡改就要深入了解區塊的結構。

區塊的結構
從上圖可以看出,區塊是由區塊頭和區塊主體兩部分組成。這里先解釋下哈希(hash)值,這是計算機領域最為重要和 著名的算法之一,通過哈希算法,可以給某數據計算出世界上唯一的編碼,這個編碼就是哈希值。
區塊內防篡改的措施
區塊主體中是一顆默克爾樹,就是要將樹上的節點(樹的最下層稱為葉子節點,區塊鏈中葉子節點就是交易;其它節點都是為了計算默克爾樹根而形成的冗余節點,沒有實際的數據)的哈希值兩兩哈希后形成新的節點,重復哈希直到只存在一個哈希值為止。這個最終的哈希值就是默克爾樹根。由于哈希值是全局唯一的,可以相見,如果一個交易(樹的葉子節點)發生變化,就要修改一整條哈希路徑,直到修改掉默克爾樹根為止。
區塊間防篡改的措施
關注下區塊頭,里面有一項叫做“前一區塊的哈希值”。這個值就是對前面的區塊進行哈希得到的全局唯一值。如果之前的區塊被修改了,那么它對應的哈希值就會變化,它的后繼區塊中“前一區塊的哈希值”也會變化,導致后續區塊的哈希值變化……通過的鏈的傳導,就需要將被修改區塊之后的所有區塊都做出相應的修改。
網絡和協議的支持
上面已經說過,區塊鏈采用P2P網絡,所有節點都是對等的。如果修改了本地區塊鏈,還需要傳播到所有節點,而一致性協議規定了半數以上的結果才能被支持。這又大大增加了篡改的代價。
通過以上幾點,篡改交易會導致默克爾樹根變化,從而導致區塊變化;而區塊變化會導致后繼節點的“前一區塊的哈希值”變化,從而導致整個鏈的變化;要將篡改后的區塊鏈同步到所有對等網絡節點,由于一致性協議的限制,幾乎沒有可能。
51%攻擊,篡改并非完全不可能
Paxos一致性協議設計中,得到半數以上支持的提議將被確定為最終協議。這是區塊鏈一致性的基礎。所以,你只需要具備區塊鏈的對等網絡中50%以上的節點(實際情況中并不是每個節點都有計算能力,準確來說應該是50%以上的算力),就能夠將自己篡改之后的區塊鏈發布到整個系統當中去。
由于區塊鏈上所有的信息都是透明的,即使有人具有了50%以上的算力,相信其也不會去篡改區塊鏈。這將會導致區塊鏈公信力的下降,從而導致整個應用和信用體系的崩塌。尤其是在比特幣這種靠信仰支撐的應用中,篡改將導致所有人的出逃。
比特幣的交易防篡改措施:非對稱加密
以上介紹了區塊鏈中的防篡改措施。比特幣中,還應用到了非對稱加密算法,防止單筆交易被篡改。
非對稱加密有一對密鑰,分為公鑰和私鑰,兩者是一對一的關系。公鑰顧名思義是可以公開的密鑰,私鑰必須自身嚴格保存,一旦暴露就相當于銀行卡密碼被人知道一樣的可怕后果。
用戶發起的每筆交易都需要自身的私鑰做簽名,每個參與記賬的節點都可以驗證交易是否正確并通過用戶的公鑰驗簽信息是否被篡改過。這就完成了比特幣防篡改的第一步--單筆交易防篡改。