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