區塊鏈與密碼學全民課堂第2-3講:區塊鏈基礎技術大剖析之雜湊函式

買賣虛擬貨幣

導語:本課堂用通俗易懂的系列內容為大家呈現區塊鏈與密碼學領域相關知識。這裡有知識也有故事,從感興趣到有樂趣,全民課堂等你來學。

這個系列中的課程內容首先從比特幣著手進行入門介紹,再延伸至區塊鏈的相關技術原理與發展趨勢,然後深入淺出地依次介紹在區塊鏈中應用的各類密碼學技術。歡迎大家訂閱本公眾號,持續進行學習。

【本課堂內容全部選編自PlatON首席密碼學家、武漢大學國家網路安全學院教授、博士生導師何德彪教授的《區塊鏈與密碼學》授課講義、教材及網際網路,版權歸屬其原作者所有,如有侵權請立即與我們聯絡,我們將及時處理。】

2.4.1

雜湊函式

區塊鏈作為一個誕生剛到十幾年的技術,的確算是一個新興的概念,但是它所用到的基礎技術全是當前非常成熟的技術。可以說是一個技術的“結晶體“。

區塊鏈的基礎技術如雜湊運算、數字簽名、P2P網路、共識演算法以及智慧合約等,在區塊鏈興起之前,很多技術已經在各種網際網路應用中被廣泛使用。

但這並不意味著區塊鏈就是一個新瓶裝舊酒的東西。就好比積木遊戲,雖然是一些簡單有限的木塊,但是組合過後,就能創造出一片新的世界。

同時,區塊鏈也並不是簡單的重複使用現有技術,例如共識演算法、隱私保護在區塊鏈中已經有了很多的革新,智慧合約也從一個簡單的理念變成了一個現實。

區塊鏈“去中心化”或“多中心”這種顛覆性的設計思想,結果其資料不可篡改、透明、可追溯、合約自動執行等強大能力,足以掀起一股新的技術風暴。

本節課主要探討這些技術的原理及在區塊鏈系統中的作用。首先從雜湊函式說起。

什麼是雜湊運算

雜湊演算法(Hash Algorithm)即雜湊演算法的直接音譯。它的基本功能概括來說,就是把任意長度的輸入(例如文字等資訊)透過一定的計算,生成一個固定長度的字串,輸出的字串稱為該輸入的雜湊值。在此以常用的SHA-256演算法分別對一個簡短的句子和一段文字求雜湊值來說明。

輸入:

This is a hash example!

雜湊值:

17f2cf0bcbfbc11a8ab6b6883b03c721407da5c97

45d46a5fc53830d4749504a

我們在第一單元課程中對涉及雜湊函式的公鑰與私鑰的的換算有細緻的講解,請看:

【圖學院】區塊鏈與密碼學全民課堂第1-4講:比特幣的交易

雜湊運算的特性

一個優秀的雜湊演算法要具備正向快速、輸入敏感、逆向困難、強抗碰撞等特徵。

正向快速

正向即由輸入計算輸出的過程,對給定資料,可以在極短時間內快速得到雜湊值。如當前常用的SHA256演算法在普通計算機上一秒鐘能做2000萬次雜湊運算。

輸入敏感

輸入資訊發生任何微小變化,哪怕僅僅是一個字元的更改,重新生成的雜湊值與原雜湊值也會有天壤之別。同時完全無法透過對比新舊雜湊值的差異推測資料內容發生了什麼變化。

因此,透過雜湊值可以很容易地驗證兩個檔案內容是否相同。該特性廣泛應用於錯誤校驗。在網路傳輸中,傳送方在傳送資料的同時,傳送該內容的雜湊值。

接收方收到資料後,只需要將資料再次進行雜湊運算,對比輸出與接收的雜湊值,就可以判斷資料是否損壞。

逆向困難

要求無法在較短時間內根據雜湊值計算出原始輸入資訊。該特性是雜湊演算法安全性的基礎,也因此是現代密碼學的重要組成。雜湊演算法在密碼學中的應用很多,此處僅以雜湊密碼舉例進行說明。

當前生活離不開各種賬戶和密碼,但並不是每個人都有為每個賬戶單獨設定密碼的好習慣,為了記憶方便,很多人的多個賬戶均採用同一套密碼。

如果這些密碼原封不動地儲存在資料庫中,一旦資料洩露,則該使用者所有其他賬戶的密碼都可能暴露,造成極大風險。所以在後臺資料庫僅儲存密碼的雜湊值,每次登入時,計算使用者輸入的密碼的雜湊值,並將計算得到的雜湊值與資料庫中儲存的雜湊值進行比對。

強抗碰撞性

即不同的輸入很難可以產生相同的雜湊輸出。當然,由於雜湊演算法輸出位數是有限的,即雜湊輸出數量是有限的,而輸入卻是無限的,所以不存在永遠不發生碰撞的雜湊演算法。

但是雜湊演算法仍然被廣泛使用,只要演算法保證發生碰撞的概率夠小,透過暴力列舉獲取雜湊值對應輸入的概率就更小,代價也相應更大。只要能保證破解的代價足夠大,那麼破解就沒有意義。

就像我們購買雙色球時,雖然我們可以透過購買所有組合保證一定中獎,但是付出的代價遠大於收益。優秀的雜湊演算法即需要保證找到碰撞輸入的代價遠大於收益。

區塊鏈科普之雜湊函式的應用

雜湊函式在區塊鏈之前,就已經得到了廣泛應用,以下為一些常見的應用場景:

訊息認證碼

使用單向雜湊函式可以構造訊息認證碼。訊息認證碼是將“傳送者和接收者之間的共享金鑰”和“訊息,進行混合後計算出的雜湊值。使用訊息認證碼可以檢測並防止通訊過程中的錯誤、篡改以及偽裝。

數字簽名

在進行數字簽名時也會使用單向雜湊函式。數字簽名是現實社會中的簽名(sign)和蓋章這樣的行為在數字世界中的實現。數字簽名的處理過程非常耗時,因此一般不會對整個訊息內容直接施加數字簽名,而是先透過單向雜湊函式計算出訊息的雜湊值,然後再對這個雜湊值施加數字簽名。

偽隨機數生成器

使用單向雜湊函式可以構造偽隨機數生成器。密碼技術中所使用的隨機數需要具備“事實上不可能根據過去的隨機數列預測未來的隨機數列”這樣的性質。為了保證不可預測性,可以利用單向雜湊函式的單向性。

一次性口令

使用單向雜湊函式可以構造一次性口令(one-time password)。一次性口令經常被用於伺服器對客戶端的合法性認證。在這種方式中,透過使用單向雜湊函式可以保證口令只在通訊鏈路上傳送一次(one-time),因此即使竊聽者竊取了口令,也無法使用。

本內容來自使用者“wilsonyx”的總結

防篡改是雜湊的功勞?

每個區塊頭包含了上一個區塊資料的雜湊值,這些雜湊層層巢狀,最終將所有區塊串聯起來,形成區塊鏈。

區塊鏈裡包含了自該鏈誕生以來發生的所有交易,因此,要篡改一筆交易,意味著它之後的所有區塊的父區塊雜湊全部要篡改一遍,這需要進行大量的運算。

如果想要篡改資料,必須靠偽造交易鏈實現,即保證在正確的區塊產生之前能快速地運算出偽造的區塊。同時在以比特幣為代表的區塊鏈系統要求連續產生一定數量的區塊之後,交易才會得到確認,即需要保證連續偽造多個區塊。

只要網路中節點足夠多,連續偽造的區塊運算速度都超過其他節點幾乎是不可能實現的。

另一種可行的篡改區塊鏈的方式是,某一利益方擁有全網超過50%的算力,利用區塊鏈中少數服從多數的特點,篡改歷史交易。

然而在區塊鏈網路中,只要有足夠多的節點參與,控制網路中50%的算力也是不可能做到的。如果某一利益方擁有了全網超過50%的算力,它就已經成為既得利益者,從收益角度來看,維護會比破壞價值更大,因此肯定會更堅定地維護區塊鏈網路的穩定性。

可以實現內容改變快速檢測的一種樹

除上述防篡改特性,基於雜湊演算法組裝出的默克爾樹也在區塊鏈中發揮了重要作用。默克爾樹本質上是一種雜湊樹,1979年瑞夫·默克爾申請了該專利,故此得名。

前面已經介紹了雜湊演算法,在區塊中默克爾樹就是當前區塊所有交易資訊的一個雜湊值。但是這個雜湊值並不是直接將所有交易內容計算得到的雜湊,而是一個雜湊二叉樹。

首先對每筆交易計算雜湊值;然後進行兩兩分組,對這兩個雜湊值再計算得到一個新的雜湊值,兩個舊的雜湊值就作為新雜湊值的葉子節,如果雜湊值數量為單數,則對最後一雜湊值再次計算雜湊值即可;

然後重複上述計算,直至最後只剩一個雜湊值,作為默克爾樹的根,最終形成一個二叉樹的結構。在區塊鏈中,我們只需要保留對自己有用的交易資訊,刪除或者在其他裝置備份其餘交易資訊。

如果需要驗證交易內容,只需驗證默克爾樹即可。若根雜湊驗證不透過,則驗證兩個葉子節點,再驗證其中雜湊驗證不透過的節點的葉子節點,最終可以準確識別被篡改的交易。

有關於雜湊函式就講到這裡啦,下節課我們將解析區塊鏈基礎技術之數字簽名,和我們日常的簽名有什麼不一樣呢?下節課揭曉!

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;