什么是哈希算法?有什么特征和未來?
當(dāng)新人在學(xué)區(qū)塊鏈技術(shù)的時(shí)候,都會(huì)聽到哈希和哈希算法,這似乎是無處不在的安全性保證。例如比特幣或者以太坊這種運(yùn)行去中心化網(wǎng)絡(luò)和共識(shí)的機(jī)器,都會(huì)有上萬個(gè)節(jié)點(diǎn)通過P2P連接,并且需要“無需可信”和可驗(yàn)證的效率。這些系統(tǒng)需要將信息寫入緊湊的格式,從而通過參與者進(jìn)行保證安全和快速驗(yàn)證。
比特幣和以太坊主要的primitive是區(qū)塊的noTIon,這是包含轉(zhuǎn)賬信息,時(shí)間戳和其他重要數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)。他們安全性的重要部件,就是能夠壓縮網(wǎng)絡(luò)全部的狀態(tài)信息,變成很短,并且標(biāo)準(zhǔn)的信息,在需要的時(shí)候可以進(jìn)行有效驗(yàn)證,這就被稱之為哈希。
到處都會(huì)使用加密哈希,從密碼存儲(chǔ)到文件驗(yàn)證系統(tǒng)。使用確定性算法的基本原理,就是使用一個(gè)輸入,并且每次都產(chǎn)生一個(gè)固定長度的字符串。也就是說,使用同樣的輸入總是會(huì)導(dǎo)致同樣的輸出。
確定性不僅對(duì)哈希很重要,而且可以改變輸入的單個(gè)字符會(huì)產(chǎn)生完全不同的哈希。
哈希算法的問題是碰撞(collisions)的必然性。哈希是固定的字符串,意味著對(duì)于每個(gè)輸入,不同的輸入都會(huì)產(chǎn)生同樣的輸出。碰撞(collisions)是不好的。這意味著如果有攻擊者能夠根據(jù)需求創(chuàng)建這種collisions,那么他就可以讓欺詐文件或者數(shù)據(jù)看起來像正確的,合適的哈希,并且冒充合法。優(yōu)質(zhì)哈希功能的目標(biāo)是讓攻擊者很難找到,獲得輸入數(shù)據(jù)的方法。
計(jì)算哈希不應(yīng)該太簡單,因?yàn)檫@會(huì)讓對(duì)于攻擊者來說,計(jì)算collisions也變得很容易。哈希算法需要對(duì)“預(yù)攻擊”有抵抗性。也就是說,給定哈希,應(yīng)該很難計(jì)算追溯確定性的步驟來重新產(chǎn)生由哈希創(chuàng)建的數(shù)值。
Given s= hash(x), finding x should be near impossible.
概括來看,“好的”哈希算法會(huì)有以下3種特性:
-在輸入中改變一個(gè)字符,應(yīng)該會(huì)創(chuàng)建雪崩效應(yīng),從而導(dǎo)致完全不同的哈希
-很低的概率會(huì)產(chǎn)生collisions
-提高效率,但是不會(huì)犧牲c(diǎn)ollision的對(duì)抗性
破散哈希
其中一個(gè)初始哈希算法標(biāo)準(zhǔn)是MD5哈希,這是被廣泛用來進(jìn)行文件整合驗(yàn)證,而且存儲(chǔ)哈希密碼在網(wǎng)頁應(yīng)用數(shù)據(jù)庫。這個(gè)功能非常簡單,因?yàn)檩敵鍪枪潭ǖ模?28個(gè)字符串對(duì)于每個(gè)輸入,并且使用幾輪微不足道的單向運(yùn)算來計(jì)算其確定性輸出。它的輸出長度短,操作簡單,使得MD5徹底易碎,被稱為生日攻擊。
“生日攻擊”是什么?我們?cè)?jīng)聽過,如果你把23個(gè)人放在一個(gè)房間,就會(huì)有50%的概率,其中的2人會(huì)有同樣的生日?將這個(gè)數(shù)字提升到70人在一個(gè)房間,就會(huì)有99.9%的概率。這就是我們所說的鴿巢原理,也就說如果把100個(gè)各自放到99個(gè)箱子,你就必須在1個(gè)盒子里面放2個(gè)鴿子。換句話說,固定的輸出意味著collisions 可能會(huì)找到固定的排序。
其實(shí),MD5對(duì)于collision的抵抗是很脆弱的,家庭使用的2.4GHz處理器就可以在幾秒鐘算出哈希collision。而且,對(duì)于現(xiàn)在網(wǎng)頁的早期使用,還可以在網(wǎng)絡(luò)上創(chuàng)建很多MD5的預(yù)圖形,如果搜索哈希,就可以在谷歌上很容易找到。
哈希算法的多樣化和革新開始:SHA1 &SHA2
NAS被稱為哈希算法標(biāo)準(zhǔn)的先驅(qū),最初的想法是安全哈希算法或者SHA1,創(chuàng)建了160固定長度的輸出。不幸地是,SHA1通過增加了輸出長度,單向操作的數(shù)量,還有單向操作的復(fù)雜性,從而形成了MD5算法,但是這不會(huì)提供任何基礎(chǔ)的提升,來對(duì)抗更有力量的機(jī)器來嘗試不同的攻擊。
我們?cè)趺床拍茏龅酶媚兀?進(jìn)入SHA3時(shí)代
在2006年,國家標(biāo)準(zhǔn)和技術(shù)研究院提出了一個(gè)比賽,來找到SHA2的替代,這在本質(zhì)上九不同,從而形成了標(biāo)準(zhǔn)。因此,SHA3作為現(xiàn)在所知的KECCAK哈希算法一部分,就這樣誕生了。
盡管表面看起來是相同的,SHA3通過一個(gè)被稱為海綿結(jié)構(gòu)的機(jī)制,讓內(nèi)部變得非常不同,這使用了隨機(jī)的排列來輸入和輸出數(shù)據(jù),同時(shí)也為未來的輸入提供了隨機(jī)的來源,這會(huì)進(jìn)入到哈希算法中。
SHA3維持了內(nèi)部的狀態(tài)并且有和輸出相關(guān)的更多信息,這可以防止之前算法的限制。在2015年,通過NIST成為了標(biāo)準(zhǔn)。
哈希算法和工作量證明當(dāng)考慮到整合哈希算法到區(qū)塊鏈協(xié)議中的時(shí)候,比特幣使用了比較舊的SHA256算法,但是以太坊使用了修改后的SHA3算法,作為工作量證明的算法。選擇工作量證明區(qū)塊鏈的哈希功能是很重要的部分,但是計(jì)算的效率稱為哈希。
比特幣SHA256算法通過特定的硬件ASIC,進(jìn)行有效計(jì)算。在礦池中,很多都是在ASIC上寫入的算法,但是這也會(huì)使得整個(gè)協(xié)議往中心化計(jì)算發(fā)展。也就是說,工作量證明激勵(lì)了有效計(jì)算機(jī)器來聚集成礦池,同時(shí)也增加了哈希力?;蛘咭环N機(jī)器可以計(jì)算每個(gè)時(shí)間間隔的哈希數(shù)量。
以太坊,使用的是被稱為KECCAK256的改進(jìn)SHA3。而且,以太坊的工作量證明算法,Dagger-Hashimoto意味著意味著內(nèi)存難以計(jì)算硬件。
為什么比特幣使用雙重SHA256算法?
比特幣通過SHA256算法,會(huì)有很有趣的方式來獲得哈希數(shù)據(jù),因?yàn)樗鼤?huì)在協(xié)議中運(yùn)行算法的2次迭代。需要注意地是,這并不是生日攻擊的對(duì)策,因?yàn)楹苊黠@如果hash(x) = hash(y),那么hash(hash(x)) = hash(hash(y))。但是,雙重SHA256算法是被使用來減輕長度擴(kuò)展攻擊。
本質(zhì)上來說,這類攻擊包括,惡意欺詐的人知道哈希輸入的長度,可以用來欺騙哈希來開始內(nèi)部狀態(tài)的某個(gè)部分,通過附加一個(gè)私密字符串到哈希值。SHA256,是SHA2算法大家庭中的一個(gè),逃離這個(gè)陷阱,比特幣通過計(jì)算哈希兩次來減輕它。
以太坊2.0和BLAKE算法SHA3并不是來自2006年NIST哈希比賽的唯一突破。盡管SHA3獲得勝利,稱為BLAKE的算法獲得第二。對(duì)于以太坊2.0分片技術(shù)的部署,更有效的哈希幾乎是個(gè)特性要求,研究團(tuán)隊(duì)非常重視。BLAKE2b哈希算法,這是BLAKE的更新版本,在和KECCAK256算法相比的時(shí)候,它由于效率很高正在被廣泛使用,同時(shí)也保證了很高的安全性。
BLAKE2b的計(jì)算速率實(shí)際上是比KECCAK在現(xiàn)代CPU上要快3倍。
哈希算法的未來不論我們?cè)趺醋?,我們只能?)提高內(nèi)部哈希操作的復(fù)雜性,或者(2)提高哈希輸出的長度,希望攻擊者的計(jì)算機(jī)不會(huì)足夠快到能夠有效地計(jì)算collision。
我們依賴于網(wǎng)絡(luò)安全單向操作前圖像的模糊性。也就是說,哈希算法的安全目標(biāo)是讓所有人盡可能困難地找到能夠獲得同樣哈希輸出的數(shù)值,盡管對(duì)于可能的collision,其數(shù)值是有限的。
未來有量子計(jì)算機(jī)了?哈希算法還安全嗎?
根據(jù)現(xiàn)在的理解,答案是肯定的。哈希算法將經(jīng)受量子計(jì)算機(jī)的考驗(yàn)。量子計(jì)算能夠打破的東西,是嚴(yán)密的,用巧妙的技巧和理論建立的底層數(shù)學(xué)架構(gòu),例如RSA加密。另個(gè)方面來看,哈希算法在內(nèi)部的框架中,有更少的形式結(jié)構(gòu)。
量子計(jì)算機(jī)確實(shí)加快了計(jì)算的速度,例如哈希算法,但是最后,它們也會(huì)被利用來進(jìn)行如同現(xiàn)在計(jì)算機(jī)的攻擊。
不論我們?yōu)閰f(xié)議選擇了什么算法,很清楚地是我們都處于有效計(jì)算的未來,而且我們必須要使用最好的方式來獲得正確的工具,以及那些希望能經(jīng)受時(shí)間考驗(yàn)的人。