你真是個(gè)特別的人
誰能想到,我們之前用作校驗(yàn)文件,核驗(yàn)數(shù)據(jù)的一種算法,現(xiàn)在卻奠定了區(qū)塊鏈數(shù)字貨幣帝國大廈,這個(gè)算法有很多名字,比如一般叫做哈希算法(HASH的英文而來),有的也稱在雜湊算法(很形象~~)或者散列算法等(以下我們統(tǒng)稱哈希)。那么現(xiàn)在我們就來解開這種算法的層層面紗,在本文中,我們將解析加密貨幣中最常用的四種加密哈希函數(shù)的特性和差異。但在此之前,還是需要了解哈希的含義。
什么是HASH(哈希)
簡單來說,哈希意味著輸入任意長度的字符串通過密碼運(yùn)算來實(shí)現(xiàn)固定長度的輸出。在像比特幣這樣的加密貨幣的情況下,交易被視為輸入并通過哈希算法(比特幣使用SHA-256)運(yùn)行(該算法提供固定長度的輸出)。
先了解下哈希算法是如何工作的。我們以SHA-256(256位安全哈希算法)為例。
在SHA-256的情況下,無論你的輸入有多大或多小,輸出總是有一個(gè)固定的256位長度。這對(duì)于處理大量的數(shù)據(jù)和事務(wù)校驗(yàn)時(shí)非常關(guān)鍵,這里先看看哈希函數(shù)的各種特性以及它們在區(qū)塊鏈中的實(shí)現(xiàn)方式。
加密哈希算法特性
哈希算法其特俗的特性使得非常適合密碼應(yīng)用,加密哈希算法具有以下幾個(gè)特性:
特性 1:確定性
這意味著無論 你通過哈希函數(shù)解析特定輸入多少次, 你都會(huì)得到相同的結(jié)果。這是至關(guān)重要的,因?yàn)槿绻看味嫉玫讲煌墓V担筒豢赡芨欇斎搿?/p>
特性2:快速計(jì)算
哈希函數(shù)應(yīng)該能夠快速返回輸入的哈希。
性質(zhì)3:單向性
單向性指的是:假設(shè)A是輸入數(shù)據(jù)并且H(A)是輸出哈希結(jié)果,假設(shè)給定H(A)來倒推出A是“不可行”的(注意使用“不可行”一詞而不是“不可能”)。
因?yàn)槲覀円呀?jīng)知道從它的哈希值中確定原始輸入并不是“不可能”的。舉個(gè)例子吧。
假設(shè)你擲骰子,輸出是骰子出現(xiàn)的數(shù)字的哈希。我們將如何確定原始號(hào)碼是什么?很簡單,所要做的就是從1-6中找出所有數(shù)字的哈希值并進(jìn)行比較。由于哈希函數(shù)是確定性的,所以特定輸入的哈??偸窍嗤模虼?我們可以簡單地比較哈希并找出原始輸入。
但是,只有在給定的數(shù)據(jù)量非常少的情況下,這才有效。當(dāng)你有大量的數(shù)據(jù)時(shí)會(huì)發(fā)生什么?假設(shè)你正在處理128位哈希。唯一必須找到原始輸入的方法是使用“暴力群舉”。暴力群舉基本上意味著你必須選取一個(gè)隨機(jī)輸入,對(duì)其進(jìn)行哈希,然后將輸出與目標(biāo)哈希進(jìn)行比較并重復(fù),直到找到匹配。
如果你使用這種暴力方法后:
最好的結(jié)果: 你可能在第一次嘗試時(shí)獲得答案,不過這只是理論上的可能,因?yàn)樗母怕适?的128次方分之1(自己去算算)。
最壞的情況:你在2 ^ 128 - 1次之后得到答案。基本上,這意味著你會(huì)在所有數(shù)據(jù)的末尾找到你的答案。
平均情景:在2 ^ 128/2 = 2 ^ 127次之后, 你會(huì)在中間的某處找到它。從這個(gè)角度來看,2 ^ 127 = 1.7 *10 ^ 38。換句話說,這是一個(gè)巨大的數(shù)字。
所以,雖然可以通過暴力方法來打破單向性,但同時(shí)也要有巨大的算力投入。
特性4:雪崩效應(yīng)。
即使 你對(duì)原始輸入數(shù)據(jù)進(jìn)行了小改動(dòng),哈希的結(jié)果差異也非常大。讓我們使用SHA-256對(duì)其進(jìn)行測試:
即使你只是改變了輸入的第一個(gè)字母表的大小寫,看看它對(duì)輸出哈希值有多大影響。
這個(gè)特性也被稱為雪崩效應(yīng)。
性質(zhì)5:防碰撞
給定兩個(gè)不同的輸入A和B,其中H(A)和H(B)是它們各自的哈希,H(A)等于H(B)是不可行的。這意味著大多數(shù)情況下,每個(gè)輸入都會(huì)有自己獨(dú)特的哈希。為什么我們說“大部分”?為了理解這一點(diǎn),我們需要知道什么是“生日悖論”。
什么是生日悖論?
如果你在街上碰到任何陌生人,那么你們兩個(gè)都有相同的生日的可能性非常低。事實(shí)上,假設(shè)一年中的所有日子都有生日的可能性,另一個(gè)人分享你的生日的機(jī)會(huì)是1/365,這是0.27%:概率非常低。
不過,如果你在一個(gè)房間里聚集20-30人,那么兩個(gè)分享完全相同生日的人的幾率會(huì)大幅度上升。
生日悖論
這是基于一個(gè)簡單的概率原理:
假設(shè)你有一個(gè)事件發(fā)生N種不同的可能性,那么你需要N個(gè)隨機(jī)項(xiàng)的平方根,以使它們有50%的碰撞幾率。
因此,將這個(gè)理論應(yīng)用于生日時(shí), 你有365種不同的生日可能性,所以 你只需要Sqrt(365),即約23%,隨機(jī)選擇兩個(gè)人分享生日的可能性為50%。
假設(shè)你有一個(gè)128位哈希,有2 ^ 128種不同的可能性。通過使用生日悖論,你有50%的幾率在sqrt(2 ^ 128)= 2 ^ 64的情況下打破防碰撞機(jī)制。
正如你所看到的,打破防碰撞要比打破單向性容易得多。所以,如果你使用的是SHA-256這樣的函數(shù),假設(shè)如果H(A)= H(B),那么A = B是可以認(rèn)為成立。
那么,你如何創(chuàng)建一個(gè)抗碰撞的哈希函數(shù)?為此,我們使用一種稱為Merkle-Damgard的結(jié)構(gòu)。
什么是Merkle-Damgard結(jié)構(gòu)?
該結(jié)構(gòu)非常簡單,并且遵循以下原則:給定短消息的防碰撞哈希函數(shù),我們可以為長消息構(gòu)造防碰撞哈希函數(shù)。
圖片來源:youtube
記住上面的圖表,注意以下幾點(diǎn):
較大的消息M被分解為m [i]的較小塊。
哈希函數(shù)H由許多較小的哈希函數(shù)“h”組成。
“h”是一個(gè)較小的哈希函數(shù),又稱壓縮函數(shù),它接收一小塊消息并返回一個(gè)哈希。
第一個(gè)哈希函數(shù)“h”(在上圖中圈出)接收第一個(gè)消息塊(m [0]),并添加一個(gè)固定值IV并返回哈希值。
哈?,F(xiàn)在被添加到第二個(gè)消息塊并通過另一個(gè)哈希
函數(shù)h,并且這一直持續(xù)到最后的消息塊,其中填充塊PB也被添加到消息中。
每個(gè)壓縮函數(shù)h的輸出被稱為鏈接變量。
填充塊是一系列1和0。在SHA-256算法中,PB長64位。
哈希壓縮函數(shù)h的輸出是大消息M的輸出。
既然已經(jīng)了解了哈希方法以及加密哈希函數(shù)的特性,讓我們熟悉一些加密貨幣中最常用的加密哈希函數(shù)。
先把幾種加密哈希算法列出來:
MD 5:它產(chǎn)生一個(gè)128位哈希。在~2 ^ 21哈希后,防碰撞機(jī)制被打破。
SHA 1:生成一個(gè)160位哈希。經(jīng)過2 ^ 61次哈希后,防碰撞機(jī)制被打破。
SHA 256:產(chǎn)生一個(gè)256位哈希。這是目前比特幣正在使用的。
Keccak-256:產(chǎn)生256位哈希,目前由Ethereum使用。
RIPEMD-160:產(chǎn)生160個(gè)輸出,由比特幣腳本(和SHA-256)使用。
CryptoNight:Monero使用的哈希函數(shù)。
安全哈希算法(SHA)
安全哈希算法是由美國國家標(biāo)準(zhǔn)與技術(shù)研究院(NIST)發(fā)布的美國聯(lián)邦信息處理標(biāo)準(zhǔn)(FIPS)的一系列加密哈希函數(shù)。SHA由以下算法組成:
SHA-0:指1993年發(fā)布的名為“SHA”的原始160位哈希函數(shù)。由于未公開的“重大缺陷”,并在稍后修訂的版本SHA-1中取而代之,它在出版后不久被撤回。
SHA-1:當(dāng)SHA-0傳送失敗時(shí)被引入。這是一個(gè)160位哈希函數(shù),類似于早期的MD5算法。這是由國家安全局(NSA)設(shè)計(jì)的數(shù)字簽名算法的一部分。然而,人們注意到加密圖形的弱點(diǎn)之后不久就被拋棄了。
SHA-2:現(xiàn)在我們來看一下哈希函數(shù)中最受歡迎的類別之一。它是由NSA使用Merkle-Damgard范例設(shè)計(jì)的。它們是具有不同字長的兩種哈希函數(shù)族:SHA-256和SHA-512。比特幣使用SHA-256
SHA-3:之前被稱為keccak,它在2012年被非NSA設(shè)計(jì)師的公開競爭之后選中。它支持與SHA-2相同的哈希長度,其內(nèi)部結(jié)構(gòu)與SHA系列的其他部分有很大不同。以太坊使用這個(gè)哈希函數(shù)。
圖片來源:維基百科
讓我們仔細(xì)看看SHA-256和SHA-3。
SHA-256
SHA-256是一個(gè)SHA-2函數(shù),它使用32個(gè)單詞,而不是使用64位單詞的SHA-512。比特幣在以下兩種情況下使用SHA-256:
采礦。
創(chuàng)建地址。
采礦:
比特幣采礦涉及礦工解決復(fù)雜的計(jì)算難題,以找到一個(gè)塊,然后將其附加到比特幣區(qū)塊鏈。就是我們經(jīng)常稱的工作量證明(proof-of-work),它涉及SHA-256哈希函數(shù)的計(jì)算。
創(chuàng)建比特幣地址、;
SHA-256哈希函數(shù)用于哈希比特幣公鑰以生成公共地址。哈希密鑰為身份認(rèn)證增加了一層額外的保護(hù)。此外,哈希地址的長度僅比存儲(chǔ)更好的比特幣公鑰更短。
SHA-256運(yùn)行實(shí)例:
輸入:Hi
輸出:98EA6E4F216F2FB4B69FFF9B3A44842C38686CA685F3F55DC48C5D3FB1107BE4
SHA-3
如上所述,這種算法以前被稱為keccak,并被以太坊使用。它是在non-NSA設(shè)計(jì)師的公開競賽之后創(chuàng)建的。SHA-3使用“海綿(sponge)機(jī)制”。
什么是海綿機(jī)制?
圖片來源:維基百科
海綿功能是具有有限內(nèi)部狀態(tài)的一類算法,其獲取任意長度的輸入比特流并產(chǎn)生預(yù)定長度的輸出比特流。
在繼續(xù)之前,我們需要定義一些術(shù)語:
我們知道,在海綿功能中,數(shù)據(jù)被“吸收”到海綿中,然后將結(jié)果“擠出”。
所以有一個(gè)“吸收”階段和一個(gè)“擠壓”階段。
SHA-3舉例:
輸入:Hi
輸出:154013cb8140c753f0ac358da6110fe237481b26c75c3ddc1b59eaf9dd7b46a0a3aeb2cef164b3c82d65b38a4e26ea9930b7b2cb3c01da4ba331c95e62ccb9c3
RIPEMD-160哈希函數(shù)
RIPEMD是由比利時(shí)魯汶的Hans Dobbertin,Antoon Bosselaers和Bart Preneel在魯汶Katholieke大學(xué)的COSIC研究小組開發(fā)的一系列加密哈希函數(shù),并于1996年首次發(fā)布。
雖然RIPEMD基于MD4的設(shè)計(jì)原則,但其性能與SHA-1非常相似。RIPEMD-160是這種哈希函數(shù)的160位版本,通常用于生成比特幣地址。
比特幣公鑰首先通過SHA-256哈希函數(shù)運(yùn)行,然后通過RIPEMD-160運(yùn)行。這樣做的原因是因?yàn)?60位的輸出比256位小很多,這有助于節(jié)省空間。
除此之外,RIPEMD-160是唯一性哈希函數(shù),可以產(chǎn)生最短哈希,其唯一性仍然得到充分保證。
圖片來源:維基百科
上面的圖像顯示了RIPEMD-160哈希算法壓縮函數(shù)的子塊快照。
RIPEMD -160實(shí)例:
輸入:Hi
輸出:242485ab6bfd3502bcb3442ea2e211687b8e4d89
CryptoNight哈希函數(shù)
現(xiàn)在我們擁有由Monero使用的CryptoNight哈希函數(shù)。與比特幣不同,Monero希望他們的采礦盡可能地不利于GPU。他們可以做到這一點(diǎn)的唯一方法是讓他們的哈希算法難以記憶。
輸入CryptoNight
CryptoNight是一種內(nèi)存硬件哈希函數(shù)。它被設(shè)計(jì)為在GPU,FPGA和ASIC體系結(jié)構(gòu)上無法有效計(jì)算。CryptoNight的工作原理如下:
該算法首先用偽隨機(jī)數(shù)據(jù)初始化一個(gè)大暫存器。
之后,大量的讀/寫操作發(fā)生在偽隨機(jī)地址上
包含在便簽簿中。
最后,整個(gè)暫存器被哈希以產(chǎn)生最終值。
下圖顯示了CryptoNight哈希算法的示意圖。
CryptoNight哈希算法的示意圖。
圖片來源:Dave’s Data
CryptoNight實(shí)例:
輸入:This is a test
輸出:a084f01d1437a09c6985401b60d43554ae105802c5f5d8a9b3253649c0be6605
結(jié)論
加密貨幣中最常用的四種哈希算法基本都在這里了。對(duì)他們的工作方式有一個(gè)基本的認(rèn)知將讓我們更好的理解各類數(shù)字貨幣的區(qū)別(比如采礦)。
-
哈希函數(shù)
+關(guān)注
關(guān)注
0文章
43瀏覽量
9685 -
比特幣
+關(guān)注
關(guān)注
57文章
7008瀏覽量
144373 -
數(shù)字貨幣
+關(guān)注
關(guān)注
36文章
3135瀏覽量
50402
原文標(biāo)題:全面解析區(qū)塊鏈數(shù)字貨幣4種哈希算法原理與差異
文章出處:【微信號(hào):iotbanks,微信公眾號(hào):iotbanks】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
英偉達(dá)GPU慘遭專業(yè)礦機(jī)碾壓,黃仁勛宣布砍掉加密貨幣業(yè)務(wù)!
Labview實(shí)現(xiàn)哈希MD5加密
什么是加密貨幣_加密貨幣劫持暴增的原因及防范
加密貨幣投資的五個(gè)風(fēng)險(xiǎn)解析
加密貨幣檢視系統(tǒng)“Algory”有超過100種方式來分析加密貨幣的火熱度
加密貨幣促進(jìn)傳統(tǒng)業(yè)務(wù)發(fā)展的六種方式
如何解決加密貨幣礦業(yè)中面臨的各種困難挑戰(zhàn)
英偉達(dá)重磅推出加密貨幣挖礦處理器
基于可編程哈希函數(shù)的HIBE加密方案
四種最常用的環(huán)路補(bǔ)償網(wǎng)絡(luò)對(duì)比

評(píng)論