哈希的本質(zhì)是一個采用哈希算法的數(shù)學(xué)函數(shù),它被廣泛應(yīng)用于區(qū)塊鏈中構(gòu)建區(qū)塊以及確認(rèn)交易信息的完整性上。
什么是哈希算法?哈希算法是密碼學(xué)中的一個重要算法,哈希的英文為Hash。
哈希算法有一個輸入和一個輸出,其輸入稱為消息,輸出值是根據(jù)消息內(nèi)容計算出的值,稱為哈希值(又或稱為摘要)
哈希算法函數(shù)的定義描述:
(1)輸入消息長度任意
(2)輸出哈希值長度固定
簡單的理解,就是一串任意長的數(shù)據(jù)經(jīng)過哈希函數(shù)的計算后,生成一串長度固定的短數(shù)據(jù)。
當(dāng)今區(qū)塊鏈技術(shù)中大量使用的哈希算法函數(shù)是SHA-256。SHA-256是SHA-2算法家族中的一種,SHA全稱是安全哈希算法(Secure Hash Algorithm)。SHA-256的輸入消息長度為任意位數(shù),其輸出的哈希值長度固定為二進制的256位。SHA-256具備密碼哈希函數(shù)的基本特性
哈希函數(shù)有三個重要的特征。
第一,哈希的單向性、就是我們只能夠把任意長度的數(shù)據(jù),通過哈希函數(shù)生成一個固定長度的哈希值,反過來卻不可能通過這個哈希值再推導(dǎo)出原來的輸入數(shù)據(jù),這就是哈希的單向性。
很多人好奇區(qū)塊鏈?zhǔn)窃趺葱纬傻模唵卫斫猓瑓^(qū)塊鏈=區(qū)塊+鏈。例如我們把一個區(qū)塊打包以后就會通過哈希函數(shù)計算出一個哈希值,這個值就會存放到下一個區(qū)塊中,下一個區(qū)塊里的哈希值就把上一個區(qū)塊給鎖定了,這就是哈希鎖定。區(qū)塊鏈的不可更改就是從這里來的,因為如果你把前面的區(qū)塊數(shù)據(jù)篡改了,那和后面區(qū)塊里的哈希值,就不能夠?qū)?yīng)了。在區(qū)塊鏈中,每一個區(qū)塊都對上一個區(qū)塊進行內(nèi)容鎖定,這就是哈希鎖定。
第二,哈希的唯一性。我們把一個任意長的數(shù)據(jù)通過哈希函數(shù)生成一個哈希值,生成的這個哈希值是唯一的。不會存在兩個不同的輸入生成的哈希值相同的這種情況。但是這句話是有問題的,為什么呢?你把任意長數(shù)據(jù)變成短數(shù)據(jù),或者說你把大的文件變成一個短的哈希值,在科學(xué)上它是有一定的概率會形成相同的哈希值的,只是這個概率極低極低,到目前為止,采用SHA256算法的哈希函數(shù)還沒有發(fā)生過相同哈希值的碰撞事件,所以說哈希的唯一性,就是這么來的。
第三,哈希的離散性。離散性是什么意思呢,就是兩個非常相近的文件,或者說兩個只相差一位數(shù)的數(shù)據(jù),計算出來的兩個哈希值卻是天壤之別,是沒有任何相似的地方的,這就是哈希的離散性。這個特性有效地規(guī)避了一些特定的攻擊,如果兩個文件只相差那么一丟丟,他計算出來的哈希值也很相近的話,是很容易遭受到攻擊的。以上所述是哈希的三個重要特征。
審核編輯:符乾江
-
數(shù)學(xué)函數(shù)
+關(guān)注
關(guān)注
0文章
9瀏覽量
6333 -
哈希算法
+關(guān)注
關(guān)注
1文章
56瀏覽量
10735
發(fā)布評論請先 登錄
相關(guān)推薦
評論