- +1
Comunion 區塊鏈深度學習系列|什么是哈希
Comunion 是一個去中心化的(DAO) 組織協作網絡,提供面向數字時代的全新商業基礎設施和價值轉化機制,致力于讓勞動價值 像 資本一樣自由流通、交易和積累。
本系列內容包含:基本概念及原理、密碼學、共識算法、錢包及節點原理、挖礦原理及實現。
發展史
哈希算法是為了檢測數據在傳輸的過程當中是否被篡改而誕生的。
比如特工A和特工B在進行信息交換,為了防止數據在傳輸的過程中沒有被丟失或者被篡改,這個時候可以使用哈希算法。
特工A將其所發的信息進行哈希,然后將信息和哈希碼一起傳給特工B,特工B收到之后,也可以對文本進行哈希,然后和這個哈希碼進行匹配,如果匹配上的話,說明信息在傳播的過程當中沒有丟失或者被篡改。
最開始誕生的是 MD4 和 MD5 。1990年,工作于麻省理工學院的教授 Ronald Rivest 設計了一種信息摘要算法,這就是 MD4,次年 MD5 誕生。
說到 MD4,大家可能聽說過,我們國家的王小云院士曾經將其攻破過,這是一個很重要的研究成果。普通破解MD4法,需要計算2的55次方,而王院士把時間復雜度給降低了,他只需要2的10次方~20方,就把MD4破解了,這就把破解所需的量級降低了很多。
沿著時間順序后面誕生了SHA-0、SHA-1、SHA-2、SHA-3。
目前來說 SHA 是一個安全的哈希算法,按版本來說才到了SHA-3,其中每個版本相當于一個家族,里面會包含很多不同的哈希算法。
MD4 出現之后,美國國家標準技術研究院,開始進行一個公開的算法募集。
1997年左右,SHA-0 家族開始全球性征集算法,任何人有好的算法都可以提交。這其實是一個全球的算法競爭,其目的是收錄全球公認能最好的算法,以此擴充家族。
隨著時間的推移,產生了 SHA-2,我們之前所說比特幣里面使用的算法 SHA-256,就是隸屬于 SHA-2 家族里面的算法。SHA-2 家族里面包含眾多算法,比如:SHA-168、SHA-512等,都有不同的尾綴。拿 SHA-256 來說,256 是指算法輸出的字符長度。
提到 SHA-256,大家可能會想一下我們前文提到的問題:中本聰為什么選擇用SHA-266,而不是其他的哈希算法呢?
剛才我們也說過 SHA 家族的成長是按照時間順序來的,當中本聰使用這個算法是在2008年,那個時候 SHA-2 家族里面的算法在當時是比較盛行的,雖然當時 SHA-3 也出來了,但是還不太成熟。
所以中本聰采用了 SHA-2 里面的 SHA-256 算法,應用到比特幣系統里面去。
沿著時間順序往下走,我們會看到以太坊里面使用的哈希算法,就不是 SHA-2 家族里面的了,而是 SHA-3 家族里面的。這是因為到2014年的時候,SHA-3 里的算法已經穩定下來了,并且其性能遠優于 SHA-2 里的算法。
開發者采用的算法也是根據哈希算法的成熟度,來不斷的去采用更成熟、更好的算法。
所以如果讀者想設計一個區塊鏈系統,如果里面涉及到使用哈希算法的話,那么一定要選擇更好哈希算法,而不是一味模仿之前的系統,這些 SHA 算法僅僅是一個加密算法而已,沒有我們想的那么神秘。
哈希函數
哈希函數最開始被稱之為摘要函數,意思是消息摘要,下圖是對它的定義:哈希函數是為了對于任意長的字符串產生一個消息摘要。
這段話其實有一些含義沒有表達出來,對任意長的一個字符串進行哈希,可以產生一個哈希摘要,也就是產生一個由0和1組成的字符串。這個字符串如果給到 SHA-256 的話,那其產生的消息摘要會是一個 256比特由0和1組成的數據串(比特是計算機專業術語,是信息量單位)。
摘要函數是由一對 ppt算法(Gen,H)組成的,這兩個算法需要滿足兩個性質。
ppt算法的意思是概率多項式時間算法,那么什么是概率多項式時間算法呢?
什么叫概率算法?
概率算法也叫隨機算法,也就是算法在執行過程中隨機地選擇下一個計算步驟。其意義是,很大程度上降低算法的復雜度。
比如拋硬幣,需要猜硬幣是正面還是反面,那么解決這個問題的成功概率是50%,算法只需要重復正或者反就可以了。
什么是多項式?
假設我有一個問題,這個問題是有規模的,規模用參數λ來表示,再引入常數a和c,將其做成一個多項式:a乘以λ的C次方。其中λ是一個安全參數,如問題的規模,密碼系統的安全級別,私鑰長度等。
概率多項式時間算法組合起來通俗地說就是:當這個算法應用于某一項方案或者攻擊一個密碼系統,算法最多能運行a乘以λ的C次方的時間,在這個時間內能以多大的概率去解決這個問題或者攻破這個密碼系統。
這樣的設計使哈希算法非常高效。
需要滿足的兩個條件
上圖第一句話,1λ是一個安全參數,即將安全參數輸入到Gen算法中產生一個s。
我們上文講了有很多哈希家族,每個哈希家族中又包含很多哈希算法,那么到底用哪個算法呢?這里的s就是表示選擇的算法,比如選用了SHA-256,那么s就可以確定。
第二句話, 最前面是一個自然數,后面的 ?x 中x,指任意的字符串,這句話的意思是任意字符串可以任意長,并且用0和1來表示。
繼續往下看,H上標s和x,由于第一句話的時候s確定了,那么此時H也就可以確定。
再往下走,對于任意兩個消息m1和m2,如果這兩個消息經過哈希函數產生的結果是一樣的,那么此時就產生了一個碰撞(下文詳細解讀什么是碰撞)。
我們通過簡單分析哈希的定義,其實能發現一個特點:哈希算法能將任意長的輸入數據壓縮成固定長且短的數據。
例如SHA-256算法能夠將任意長的一個字符串,哈希成一個256比特長的由0和1組成的數據串。
利用這個特點我們也就能返回去解釋為什么在區塊鏈當中會使用哈希算法。
下期預告:哈希碰撞原理
本文為澎湃號作者或機構在澎湃新聞上傳并發布,僅代表該作者或機構觀點,不代表澎湃新聞的觀點或立場,澎湃新聞僅提供信息發布平臺。申請澎湃號請用電腦訪問http://renzheng.thepaper.cn。
- 報料熱線: 021-962866
- 報料郵箱: news@thepaper.cn
互聯網新聞信息服務許可證:31120170006
增值電信業務經營許可證:滬B2-2017116
? 2014-2025 上海東方報業有限公司