區塊鏈節點間的數據驗證:哈希值與非對稱加密
在前面的內容中,我們一起學習了區塊鏈網絡中各個節點之間是如何建立連接和進行協同合作的。了解了這些知識之后,你有沒有好奇過兩個節點之間是如何保證傳輸數據的正確性和判斷是否未更改呢?
本期就為你剖析一下區塊鏈網絡中節點之間是如何進行數據驗證,保證數據的完整性和真實性的。其實特別簡單,看完你就知道了!
一、先了解一個概念:哈希值
哈希值是一串固定長度的二進制數值,它是哈希算法(Hash算法)計算的出來的。
哈希算法可以將任意長度的二進制值映射為較短的固定長度的二進制值,這個小的二進制值稱為哈希值。哈希值是一段數據唯一且極其緊湊的數值表示形式。如果進行哈希運算的數據哪怕只更改該段落的一個字母,隨后的哈希都將產生不同的值。
要找到哈希值為同一個值的兩個不同的輸入,在計算上是不可能的,所以數據的哈希值可以檢驗數據的完整性;一般用于快速查找和加密算法。
說人話,哈希值就是通過哈希算法將一段數據進行計算,得出的一個數值。這個數值它有兩個特性:單向性和唯一性。
單向性
哈希值是無法通過反向運算得出原始數據的。比如一段數字“1234”可以通過哈希算法得出哈希值A,但是通過哈希值A是永遠也沒有辦法解密出原始數字“1234”的。
唯一性
只有完全相同的數據進行哈希計算得到的哈希值才是相同的,也就是說哈希值和原始數據是唯一對應的,不存在兩個不一樣的數據得出相同哈希值這種情況。
哈希加密的強大之處在于,我不管你的內容是什么, 只要內容一致得出哈希值就是一致的。這樣就可以簡單粗暴的對比兩條信息是否一致,而不需要去關心數據的細節是什么。
正是因為哈希值的這種屬性,才使得哈希算法在區塊鏈網絡中起到舉足輕重的作用。
二、再了解一個概念:非對稱加密
非對稱加密算法是一種密鑰的保密方法。 非對稱加密算法需要兩個密鑰:公鑰(公開密鑰)和私鑰(私有密鑰)。 公鑰和私鑰是一對,如果用公鑰對數據進行加密,只有用對應的私鑰才能解密;如果用私鑰對數據進行加密,那么只有用對應的公鑰才能解密。
如果對加密算法和對公鑰和密鑰還感覺毫無概念,可以就把它們理解成兩個密碼,若其中一個密碼對數據進行了上鎖,則只能用另一個密碼進行解鎖。
因為對數據進行加密和解密使用的是兩個不同的密鑰,所以這種算法就叫做非對稱加密算法。在區塊鏈網絡中某個節點的公鑰是全網公開的,私鑰只有該節點才擁有。
三、第一個記錄交易的節點做了什么?
以比特幣網絡中的一筆交易信息為例來看記錄交易節點和驗證交易節點是如何配合的。
比如一個交易A在節點001發生,那節點001就負責記錄交易A的具體數據,這里其實首先需要驗證交易A的合法性(比如購買方是否有足夠的余額來支付),這不是本期重點所以暫不展開,我們假設交易A就是合法的。
節點001在拿到交易A之后會先對交易數據進行哈希運算,生成一個交易哈希值001。然后再用自己的私鑰對哈希值001進行簽名(加密)生成簽名信息,簽名信息中包含了交易哈希值001。
節點001完成上述的工作之后就會對外廣播,廣播內容 = 原始交易信息A + 簽名信息。
一圖勝千言,處理流程見下圖。
四、驗證數據的節點做了什么?
假設比特幣網絡中的節點002收到了節點001發送來的廣播內容。節點002得到了“原始交易信息A”和簽名信息。這個時候會遇到兩個問題:
- 簽名信息是不是節點001用自己的私鑰簽名產生的?
- 節點002是無法判斷原始交易信息A是否在傳輸中發生了更改?
如何解決這些問題呢?
節點002如果能通過節點001的公鑰對簽名信息進行解密(逆運算)則可以證明該簽名信息屬于節點001 ,并且在解密之后得到了哈希值001。
節點002對接收到的“原始交易信息A”進行一次哈希運算得到哈希值002。判斷交易信息是否發生改變只需要對比哈希值001和哈希值002是否一致即可。
如果一致則證明數據傳輸無誤,通過驗證。如果不一致則證明交易信息發生了更改,驗證無法通過。
這樣就完美的解決了兩個節點驗證交易一致性的問題了。
一圖勝千言,處理流程見下圖。
五、總結
兩個節點之間的數據驗證整體流程我整理到了一個圖上,方便大家建立一個更宏觀的認識。
在數據驗證的過程中,我認為哈希算法是起決定性作用的,有了哈希算法我們不再需要通過判斷交易信息的內部邏輯來判斷是否改變,或者說我們根本不需要關心數據內容多復雜,而只需要對比兩個數值就可以達到判斷數據是否一致的目的。
哈希算法真是一個偉大的發明!
版權聲明:數字簽名:Press.one 如需轉載,請聯系作者微信:w4533001
作者:liheng,區塊鏈探索者、互聯網產品經理,超級個體修煉中,只創作對用戶有價值的內容
本文由 @liheng 原創發布于人人都是產品經理。未經許可,禁止轉載
題圖來自Unsplash,基于CC0協議
您好,那么請問節點002是如何獲取001的公鑰的么,是001廣播的時候一起廣播出去了么?
是的,公鑰會一起給下一個節點
您好,那么如何保證公鑰在廣播出去后,在網絡中未被更改過呢?
牛逼 很清晰明了果斷粉
作者好強大,深入淺出
非常感謝你的認可 ??
科普一下廣播,一個網絡術語:把信息數據發送到所在系統/網絡/封閉空間等內所有的有效對象,讓所有的對象都接收到這個發送的數據