為什么哈希在區(qū)塊鏈中如此重要
什么是哈希?
加密哈希函數(shù)是在數(shù)字?jǐn)?shù)據(jù)上運行的數(shù)學(xué)運算。在比特幣中,所有操作都使用SHA256作為底層加密哈希函數(shù)。
安全哈希算法是由美國國家安全局(NSA)設(shè)計的一套加密哈希函數(shù)。
簡單地說,哈希函數(shù)就像一個黑盒子,在這里輸入任何大小的數(shù)字信息,結(jié)果(輸出)是一個字母數(shù)字字符串(例如:0xe3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855)。對于SHA-256,輸出是32字節(jié)。該函數(shù)有兩個特點:
1)毫不含糊:哈希 (輸出)就像輸入數(shù)據(jù)的指紋。因此,從數(shù)字輸入的哈希中,您無法創(chuàng)建原始數(shù)字輸入。
2)抗沖突:任何人都不可能能夠找到導(dǎo)致相同哈希輸出的兩個不同輸入值。換句話說,對于任何不同的輸入,總會有不同的輸出。這允許使用這個函數(shù)來檢查數(shù)據(jù)完整性,通過將計算的“哈希”(算法執(zhí)行的輸出)與已知和期望的哈希進(jìn)行比較,可以確定數(shù)據(jù)的完整性。例如,計算下載文件的哈希,并將結(jié)果與之前發(fā)布的哈希進(jìn)行比較,可以顯示下載是否被修改或篡改。
但是為什么哈希在區(qū)塊鏈中如此重要呢?
這是挖礦過程和礦工職責(zé)的一部分: 礦工獲取一些交易并將其用作輸入的一部分,他們試圖計算一個哈希函數(shù)來為鏈提供一個新的塊。
加密哈希算法有很多。下面列出了一些相對經(jīng)常被引用的算法??梢栽诎用芄:瘮?shù)比較的頁面上找到更廣泛的列表。
MD5
MD5是由Ronald Rivest在1991年設(shè)計的,用于替換以前的哈希函數(shù)MD4,并在1992年指定為RFC 1321。對MD5的沖突可以在幾秒鐘內(nèi)計算出來,這使得該算法不適合大多數(shù)需要加密哈希的用例。MD5生成128位(16字節(jié))。
SHA-1
SHA-1是美國政府Capstone項目的一部分。該算法的最初規(guī)范——現(xiàn)在通常稱為SHA-0——由美國政府標(biāo)準(zhǔn)機(jī)構(gòu)NIST(國家標(biāo)準(zhǔn)與技術(shù)研究所)于1993年以“安全哈希標(biāo)準(zhǔn)FIPS PUB 180”的名義發(fā)布。它在出版后不久就被美國國家安全局撤回,并被1995年在FIPS PUB 180-1(通常稱為SHA-1)上出版的修訂版所取代。SHA-1生成一個160位(20字節(jié))的哈希。
文檔可能只將SHA-1稱為“SHA”,這可能與其他標(biāo)準(zhǔn)哈希算法(如SHA-0、SHA-2和SHA-3)相沖突。
RIPEMD - 160
RIPEMD (RACE Integrity Primitives EvaluaTIon Message Digest)是由比利時魯汶大學(xué)(Katholieke Universiteit Leuven) COSIC研究小組的Hans DobberTIn、Antoon Bosselaers和Bart Preneel在魯汶開發(fā)的一個加密哈希函數(shù),于1996年首次出版。RIPEMD基于MD4中使用的設(shè)計原則,其性能類似于更流行的SHA-1。然而,RIPEMD-160并沒有被破壞。顧名思義,RIPEMD-160生成160位(20字節(jié))的哈希。
Whirlpool
在計算機(jī)科學(xué)和密碼學(xué)中,Whirlpool是一個加密哈希函數(shù)。它是由Vincent Rijmen和Paulo s.l. M. Barreto設(shè)計的,他們在2000年首次描述了它。Whirlpool是基于一個基本修改版本的高級加密標(biāo)準(zhǔn)(AES)。Whirlpool生成一個512位(64字節(jié))的哈希。
SHA-2
SHA-2(安全哈希算法2)是由美國國家安全局(NSA)設(shè)計的一組加密哈希函數(shù),于2001年首次發(fā)布。它們是使用merker - damgard結(jié)構(gòu)(來自單向壓縮函數(shù)本身)構(gòu)建的,使用分類的專用塊密碼器中使用的Davies結(jié)構(gòu)來構(gòu)建。
SHA-2基本上由兩種哈希算法組成:SHA-256和SHA-512。SHA-224是SHA-256的一個變體,具有不同的初始值和截斷的輸出。SHA-384和不太為人所知的SHA-512/224和SHA-512/256都是SHA-512的變形。在AMD64等64位上,SHA-512比SHA-256更安全,而且通常比SHA-256更快。
以位為單位的輸出大小由“SHA”名稱的擴(kuò)展名給出,因此SHA-224的輸出大小為224位(28字節(jié)),SHA-256生成32字節(jié),SHA-384生成48字節(jié),最后SHA-512生成64字節(jié)。
SHA-3
SHA-3 (Secure Hash Algorithm 3)于2015年8月5日由NIST發(fā)布。SHA-3是更廣泛的Keccak的一個子集。Keccak算法是Guido Bertoni、Joan Daemen、Michael Peeters和Gilles Van Assche的成果。Keccak基于sponge 結(jié)構(gòu),sponge 結(jié)構(gòu)還可以用于構(gòu)建其他加密原語,如流cypher。SHA-3提供與SHA-2相同的輸出大?。?24、256、384和512位。
還可以使用SHAKE-128和SHAKE-256函數(shù)獲得可配置的輸出大小。這里名稱的-128和-256擴(kuò)展表示函數(shù)的安全強(qiáng)度,而不是以位為單位的輸出大小。
BLAKE2
2012年12月21日,布萊克的改版產(chǎn)品BLAKE2發(fā)布。它是由Jean-Philippe Aumasson、Samuel Neves、Zooko Wilcox-O ‘Hearn和ChrisTIan Winnerlein創(chuàng)建的,目標(biāo)是取代廣泛使用的MD5和SHA-1算法。當(dāng)運行在64x64和ARM架構(gòu)上時,BLAKE2b比SHA-3、SHA-2、SHA-1和MD5更快。盡管BLAKE和BLAKE2還沒有被標(biāo)準(zhǔn)化為SHA-3,但它已經(jīng)在許多協(xié)議中使用,包括argon2加密哈希,因為它在現(xiàn)代cpu上提供了很高的效率。由于BLAKE是SHA-3的候選對象,BLAKE和BLAKE2都提供了與SHA-3相同的輸出大小——包括可配置的輸出大小。





