哈希函數:區塊鏈的數字指紋 | 哈希未來

區塊鏈 哈希函數 密碼學 哈希未來 2018-07-24

作者:哈希未來  蒙繹澤、陳致佳

哈希未來是聚焦區塊鏈底層技術與應用場景的研究開發。

支持機構:金色財經

哈希函數是指一類數學運算過程,它接受任意大小的輸入值,經過一番運算後可以很快給出一個確定的固定長度的輸出值,這個輸出值可以作為這個輸入值的數字指紋。

正如對於雙胞胎而言,他們各自的指紋也是獨一無二的,哈希函數的設計使得它也具有同樣的特性:即使是非常微小的輸入值差別,哈希函數的運算結果也會有非常巨大的差異。除此以外,哈希函數沒有任何啟發式算法,輸入和輸出的關係看起來是完全隨機的,例如給一個確定的輸出結果,要求對應的輸入值應該是多少,或者是要求輸出結果小於某個值,問一個符合條件的輸入值應該是多少,這些問題的求解沒有什麼技巧和方法可循,只能通過不斷地進行嘗試,嘗試的次數越多,越有可能找到答案。

我們可以利用哈希函數的這些特性實現很多功能。例如數據保護:將數據的內容和數據的哈希值一起發送,接收者對接收到的數據進行哈希運算,對比即可知道數據是否被篡改。再比如,網站在進行用戶登錄時,可以在數據庫裡存儲用戶密碼的哈希值,與用戶輸入的密碼的哈希值進行比對來驗證身份,好處是如果數據庫洩露,黑客也不能通過這些哈希值來反推出用戶的密碼,相對來說比較安全。

值得注意的是,哈希函數的輸入集合是無限的,而由於輸出長度固定,輸出的所有可能集合是有限的,根據鴿籠原理:n+1個元素放到n個集合中去,其中必定有一個集合裡至少有兩個元素。所以兩個不同的輸入值有相同的哈希值理論上是一定存在的,但是好在這樣的事情發生的概率非常小,而且哈希函數也在不斷改進,SHA1函數就曾經被密碼分析人員發現了有效的攻擊方法,目前比特幣在內的系統採用了更先進的SHA2系列算法,比特幣多年的良好運行表明至少到目前為止SHA256算法經受了檢驗。此外,連續多次使用哈希函數也是一種更加安全的選擇。

哈希函數在比特幣中有多處運用,可以說扮演了非常關鍵的角色。

1. 對交易信息進行壓縮和驗證

由於區塊鏈要處理的交易信息內容龐大,將每個塊內的所有數據直接以序列的方式存儲將會非常低效且耗時,但是利用哈希函數可以對信息進行壓縮和驗證。使用Merkle樹可以很快驗證某筆交易是否屬於某個區塊,它的簡化示意圖如下,對於打包到一個區塊的所有交易,首先將它們劃分為幾個部分,如下圖中的交易信息1、交易信息2……並計算出對應的哈希值1、哈希值2… …之後兩兩結合進行哈希運算,最終得到這個Merkle樹的根哈希值。如果某一筆交易信息記錄的數據有變化,那麼最終算出來的Merkle根哈希值也會不一樣。

哈希函數:區塊鏈的數字指紋 | 哈希未來

圖1 比特幣中的Merkle樹

那麼為什麼要使用這樣的算法,而不是直接將所有的交易信息串成一個大塊並且算出它的哈希值呢?原因在於這樣的二叉樹結構可以允許僅僅進行少量數據的驗證,同時如果交易的數據信息有誤也可以快速定位至出錯的位置。

2. 用於工作量證明,形成共識

為什麼都說區塊鏈是不可篡改的呢?首先考慮一個如下的簡單的哈希鏈:每次打包時包含上一個區塊的哈希值和這個區塊的相關信息,如果某一個塊的信息被篡改了,往後所有塊的哈希值都會有變化,其他人也會注意到這個變化。但是這樣設計的問題在於任何人都可以修改某一個區塊上的信息,重新計算剩餘鏈條的所有信息,並且聲稱這才是正確的鏈。

比特幣設計的精妙之處在於,它使得要實現這樣的過程需要付出昂貴的成本。它採用工作量證明的共識機制,大家爭相證明自己完成了一定的工作量,最先完成的獲得記賬權。而工作量指的就是要求找到一個隨機數,使得它加上一個給定的字符串後計算得到的哈希值小於某個值。在比特幣中,這個給定的字符串包含了版本號、上一個區塊的哈希值、以Merkle根哈希值存放的交易信息,時間戳、難度值的信息。

礦工找到符合要求的隨機數,既“合法”宣告了自己的記賬權,也通過哈希函數完成了對交易信息的編碼,並以一種不可篡改的方式存儲。如果有人試圖想更改交易信息,他必須運氣特別好,能夠快速且成功地找到往後鏈條的每個區塊的正確的隨機數,使得他篡改信息後的鏈條成為當前最長的鏈條,這樣的情況理論上的確可能發生,但是在算力有限的情況下,概率比較小。

3 用於生成比特幣錢包地址

在比特幣的交易中,大家都能看到的信息如下圖,左上角是交易號碼,綠色箭頭連接的兩個字母和數字組成的字符串是比特幣地址,表明比特幣在兩個地址之間有了轉移。而這個地址的生成是由錢包的公鑰經過哈希函數轉換而成的。其中公鑰是由隨機數字構成的私鑰通過非對稱加密形成的。交易時公鑰和比特幣地址都需要公開發布,來使區塊鏈系統驗證付款交易的有效性。

哈希函數:區塊鏈的數字指紋 | 哈希未來

圖2 比特幣轉賬示

在這裡哈希函數扮演的角意圖色相當巧妙:量子計算機可以很容易從公鑰反推出私鑰,但是量子計算機在面對哈希算法時則難以找出擁有同一個哈希值的兩個不同輸入值,可以說中本聰的這個設計使得通過一些操作可以讓比特幣有可能抵禦量子計算機的威脅:比如每個比特幣地址都只用一次,每次付款轉賬到別人的地址和自己的找零地址中。

由上可見,中本聰通過巧妙的設計很好地利用了哈希函數的特性,並最終形成了一個良好運轉的系統,這當中牽扯到了多種交叉學科,也啟示我們在技術創新時需要抽象出一件事物的本質,注意與其他領域相互融合。隨著技術的進步,新的哈希函數也在不斷地被設計出來,並接受著大家的檢驗,哈希函數的發展可以說是“道高一尺,魔高一丈,愈進愈阻,永無止息”。

文章為哈希未來研究院原創作品,如需轉載,請聯繫哈希未來工作人員。

哈希函數:區塊鏈的數字指紋 | 哈希未來
文章作者: 哈希未來 我要糾錯
聲明:本文由入駐金色財經的作者撰寫,觀點僅代表作者本人,絕不代表金色財經贊同其觀點或證實其描述。
比特幣實時價格 ¥54428.47(數據來源:火幣Pro)

相關推薦

推薦中...