密碼學(xué)在區(qū)塊鏈中的應(yīng)用:哈希算法與加密解密算法

商用區(qū)塊鏈技術(shù)與實(shí)踐
商用區(qū)塊鏈技術(shù)與實(shí)踐
密碼學(xué)哈希算法的主要特性就是單向性,即在算法上,只能從輸入值計(jì)算得到輸出值,而從輸出值計(jì)算得到輸入值是不可行的。因?yàn)楣K惴ǖ妮敵鲋凳枪潭ㄩL(zhǎng)度的,所以哈希算法存在一個(gè)碰撞的問(wèn)題,即哈希算法的輸出值的長(zhǎng)度為n比特,那么,任取2n+1個(gè)不同的輸入值,就一定存在兩個(gè)不同的輸入值會(huì)得到相同的輸出值。

QQ截圖20200828092910.png

安全性是實(shí)現(xiàn)區(qū)塊鏈系統(tǒng)功能的基礎(chǔ),也是目前阻礙區(qū)塊鏈應(yīng)用推廣的因素之一。密碼學(xué)是信息安全的基石,以很小的代價(jià)給信息提供一種強(qiáng)有力的安全保護(hù),廣泛應(yīng)用于政治、經(jīng)濟(jì)、軍事、外交和情報(bào)等重要領(lǐng)域。隨著近年來(lái)計(jì)算機(jī)網(wǎng)絡(luò)和通信技術(shù)迅猛發(fā)展,密碼學(xué)得到了前所未有的重視并迅速普及,同時(shí)應(yīng)用領(lǐng)域也廣為拓展。本文主要講解密碼學(xué)在區(qū)塊鏈中的應(yīng)用。

哈希算法

哈希算法(Hash Algorithms)也稱(chēng)為散列算法、雜湊算法或數(shù)字指紋,是可以將任意長(zhǎng)度的消息壓縮為一個(gè)固定長(zhǎng)度的消息的算法。哈希算法是區(qū)塊鏈技術(shù)體系的重要組成部分,也是現(xiàn)代密碼學(xué)領(lǐng)域的重要分支,在身份認(rèn)證、數(shù)字簽名等諸多領(lǐng)域有著廣泛的應(yīng)用。深刻理解哈希算法原理,對(duì)于區(qū)塊鏈系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)有著至關(guān)重要的作用。

定義

哈希算法可以在極短的時(shí)間內(nèi),將任意長(zhǎng)度的二進(jìn)制字符串映射為固定長(zhǎng)度的二進(jìn)制字符串,輸出值稱(chēng)為哈希值(Hash Value)或者數(shù)字摘要(Digital Digest)。一般而言,哈希函數(shù)的數(shù)學(xué)表達(dá)形式如下:

QQ截圖20200828092910.png

式中,為固定長(zhǎng)度的輸出值;為任意長(zhǎng)度的輸入值。任意輸入值(Message)的二進(jìn)制編碼經(jīng)過(guò)哈希函數(shù)計(jì)算后,可以得出n比特的一個(gè)0、1字符串的哈希值,在不同算法中n的取值可能不同,例如128、160、192、256、384或512等。哈希算法在區(qū)塊鏈技術(shù)中得到了廣泛的應(yīng)用,各個(gè)區(qū)塊之間通過(guò)哈希指針連接形成區(qū)塊鏈,每個(gè)區(qū)塊的完整性檢驗(yàn)將以哈希運(yùn)算的方式進(jìn)行。

密碼學(xué)哈希算法的主要特性就是單向性,即在算法上,只能從輸入值計(jì)算得到輸出值,而從輸出值計(jì)算得到輸入值是不可行的。因?yàn)楣K惴ǖ妮敵鲋凳枪潭ㄩL(zhǎng)度的,所以哈希算法存在一個(gè)碰撞的問(wèn)題,即哈希算法的輸出值的長(zhǎng)度為n比特,那么,任取2n+1個(gè)不同的輸入值,就一定存在兩個(gè)不同的輸入值會(huì)得到相同的輸出值。因此,在一定數(shù)量的輸入值情況下,輸出值越長(zhǎng)的哈希算法,其碰撞的概率會(huì)越小。

常用的哈希算法

常用的哈希算法包括MD系列算法和SHA系列算法,其中MD系列算法有MD2、MD4、MD5、RIPEMD算法等,SHA系列算法有SHA0、SHA1、SHA2、SHA3算法等。在哈希算法中,MD5算法和SHA1算法是應(yīng)用最廣泛的,兩者的原理相差不大,但MD5算法加密后的輸出值的長(zhǎng)度為128比特,SHA1算法加密后的輸出值的長(zhǎng)度為160比特。在2004年的國(guó)際密碼學(xué)大會(huì)上,王小云教授介紹了對(duì)一系列哈希算法尋找實(shí)際碰撞的方法,并當(dāng)場(chǎng)破解了包括MD4、MD5、HAVAL128算法在內(nèi)的多種哈希算法。2005年,王小云教授進(jìn)一步優(yōu)化了方案,對(duì)SHA0、SHA1算法也成功地給出了碰撞攻擊。這些攻擊技術(shù)對(duì)當(dāng)時(shí)哈希算法的安全性造成了很大威脅,但同時(shí)也促進(jìn)了新的哈希算法的設(shè)計(jì)與研究。

1.MD系列算法

MD系列算法是一個(gè)應(yīng)用非常廣泛的算法集,最出名的MD5算法由RSA公司的羅納德·林·李維斯特(Ronald L.Rivest)在1992年提出,目前被廣泛應(yīng)用于數(shù)據(jù)完整性校驗(yàn)、消息摘要、消息認(rèn)證等。MD2算法的運(yùn)算速度較慢但相對(duì)安全,MD4算法的運(yùn)算速度很快,但安全性下降,MD5算法比MD4算法更安全、運(yùn)算速度更快。雖然這些算法的安全性逐漸提高,但均被王小云教授證明是不夠安全的。MD5算法被破解后,Ronald L.Rivest在2008年提出了更完善的MD6算法,但MD6算法并未得到廣泛使用。

MD5算法的設(shè)計(jì)采用了密碼學(xué)領(lǐng)域的Merkle-Damgard構(gòu)造法,這是一類(lèi)采用抗碰撞的單向壓縮函數(shù)來(lái)構(gòu)造哈希函數(shù)的通用方法。MD5算法的基本原理是將數(shù)據(jù)信息壓縮成128比特來(lái)作為信息摘要,首先將數(shù)據(jù)填充至512比特的整數(shù)倍,并將填充后的數(shù)據(jù)進(jìn)行分組,然后將每一分組劃分為16個(gè)32比特的子分組,該子分組經(jīng)過(guò)特定算法計(jì)算后,輸出結(jié)果是4個(gè)32比特的分組數(shù)據(jù),最后將這4個(gè)32比特的分組數(shù)據(jù)級(jí)聯(lián),生成一個(gè)128比特的散列值,即最終計(jì)算的結(jié)果。

2.SHA系列算法

SHA(Secure Hash Algorithm,安全哈希算法)是美國(guó)國(guó)家標(biāo)準(zhǔn)技術(shù)研究所發(fā)布的國(guó)家標(biāo)準(zhǔn),規(guī)定了SHA1、SHA224、SHA256、SHA384和SHA512單向哈希算法。SHA1、SHA224和SHA256算法適用于長(zhǎng)度不超過(guò)264比特的消息。SHA384和SHA512算法適用于長(zhǎng)度不超過(guò)2128比特的消息。SHA系列算法主要適用于數(shù)字簽名標(biāo)準(zhǔn)(Digital Signature Standard,DSS)里面定義的數(shù)字簽名算法(Digital Signature Algorithm,DSA)。對(duì)于長(zhǎng)度小于264比特的消息,SHA1算法會(huì)產(chǎn)生一個(gè)160比特的消息摘要。然而,SHA1算法已被證明不具備“強(qiáng)抗碰撞性”。2005年,王小云教授破解了SHA1算法,證明了160比特的SHA1算法只需要大約269次計(jì)算就可以找到碰撞。

為了提高安全性,美國(guó)國(guó)家標(biāo)準(zhǔn)與技術(shù)研究院(National Institute of Standards and Technology,NIST)陸續(xù)發(fā)布了SHA256、SHA384、SHA512以及SHA224算法,統(tǒng)稱(chēng)為SHA2算法。這些算法都是按照輸出哈希值的長(zhǎng)度命名的,例如SHA256算法可將數(shù)據(jù)轉(zhuǎn)換成長(zhǎng)度為256比特的哈希值。雖然這些算法的設(shè)計(jì)原理與SHA1算法相似,但是至今尚未出現(xiàn)針對(duì)SHA2算法的有效攻擊。因此,比特幣在設(shè)計(jì)之初即選擇采用了當(dāng)時(shí)被公認(rèn)為最安全和最先進(jìn)的SHA256算法,除了在生成比特幣地址的流程中有一個(gè)環(huán)節(jié)采用了RIPEMD160算法,其他需要做哈希運(yùn)算的地方均采用了SHA256算法或雙重SHA256算法,例如計(jì)算區(qū)塊ID、計(jì)算交易ID、創(chuàng)建地址、PoW共識(shí)過(guò)程等。

SHA256算法

在比特幣和以太坊的區(qū)塊鏈系統(tǒng)中,SHA256算法是工作量證明算法的基礎(chǔ),具體的工作量證明算法在后面的章節(jié)中詳細(xì)闡述。在比特幣系統(tǒng)中,工作量證明算法只計(jì)算一次SHA256算法,而在以太坊系統(tǒng)中,工作量證明算法則嵌套計(jì)算兩次SHA256算法。

常用的哈希算法的過(guò)程參數(shù)見(jiàn)表3-1。

QQ截圖20200828092910.png

內(nèi)部狀態(tài)值的長(zhǎng)度直接影響最終的輸出值的長(zhǎng)度,隨著哈希算法不斷演進(jìn),內(nèi)部狀態(tài)值的長(zhǎng)度不斷增加,對(duì)應(yīng)的輸出值的長(zhǎng)度也在不斷增加。只有不斷增加輸出值的長(zhǎng)度,才能在算法上增加破解的難度。隨著對(duì)哈希算法不斷深入地研究,慢慢會(huì)找到一些更加低廉的破解方案,這也促使我們不斷改進(jìn)哈希算法的內(nèi)部細(xì)節(jié)。我們已經(jīng)發(fā)現(xiàn)了降低破解MD5、SHA1算法難度的方案,所以目前MD5算法與SHA1算法的安全性大大降低了,已經(jīng)不再推薦使用,現(xiàn)在更多的是用在文件的校驗(yàn)方面。目前,SHA256算法還是比較安全的,但是也不排除在不遠(yuǎn)的將來(lái),我們會(huì)發(fā)現(xiàn)新的破解方案。

加密和解密算法

哈希算法只是一種單向密碼體制,即它是一個(gè)從消息到摘要的不可逆映射,只有正向過(guò)程,沒(méi)有逆向過(guò)程。在區(qū)塊鏈系統(tǒng)中,區(qū)塊鏈賬戶(hù)地址的生成、數(shù)據(jù)傳輸還會(huì)用到支持加密和解密的密碼體制。密碼體制分為對(duì)稱(chēng)密碼體制和非對(duì)稱(chēng)密碼體制。傳統(tǒng)的密碼學(xué)主要研究對(duì)稱(chēng)加密,即在加密和解密的過(guò)程中使用相同的密鑰或規(guī)則,其優(yōu)勢(shì)在于算法公開(kāi)、計(jì)算量小、加密速度快。然而,對(duì)稱(chēng)加密需要發(fā)送方和接收方共享同一把密鑰,因而難以實(shí)現(xiàn)有效的密鑰分發(fā)和安全存儲(chǔ)是其最大的缺點(diǎn)。同時(shí),每一對(duì)發(fā)送方和接收方都需要使用同一把密鑰,這在大規(guī)模通信中將會(huì)產(chǎn)生大量密鑰,從而增加用戶(hù)在密鑰管理方面的負(fù)擔(dān)。

對(duì)稱(chēng)密碼體制

對(duì)稱(chēng)加密是對(duì)明文的數(shù)據(jù)按某種算法處理,讓數(shù)據(jù)轉(zhuǎn)換為不可讀的數(shù)據(jù)(稱(chēng)為“密文”),從而達(dá)到數(shù)據(jù)不被竊取和閱讀的目的。解密則相反,是將密文轉(zhuǎn)化為明文的過(guò)程。

一個(gè)密碼系統(tǒng)由密碼算法和密鑰兩個(gè)基本組件構(gòu)成。密鑰是隱私數(shù)據(jù),由用戶(hù)自行保管,而算法是公開(kāi)的,任何人都使用同一種算法。對(duì)稱(chēng)加密的原理如圖3-1所示。對(duì)稱(chēng)加密是一種變換,用戶(hù)A向用戶(hù)B發(fā)送一份經(jīng)過(guò)加密的消息,傳輸給用戶(hù)B,用戶(hù)B收到消息并逆向解密出原始的信息。

QQ截圖20200828092910.png

在對(duì)稱(chēng)密碼算法早期的實(shí)際應(yīng)用中,其密鑰分發(fā)曾經(jīng)是一個(gè)難題。1976年,惠特菲爾德·迪菲(Whitfield Diffie)和馬丁·赫爾曼(Martin Hellman)的論文《密碼學(xué)的新方向》(New Directions in Cryptography)提出了Diffie-Hellman密鑰交換算法,解決了對(duì)稱(chēng)密碼算法密鑰分發(fā)的問(wèn)題。該論文同時(shí)指出,加密和解密可以使用不同的密鑰和規(guī)則,從而第一次使沒(méi)有共享密鑰的雙方能夠安全地通信。這項(xiàng)劃時(shí)代的工作奠定了非對(duì)稱(chēng)密碼體制的基礎(chǔ)。密碼學(xué)的研究熱潮使得利用密碼學(xué)來(lái)保護(hù)個(gè)人隱私和自由的觀念深入人心。同時(shí),數(shù)字加密貨幣的初期研究也借勢(shì)蓬勃發(fā)展,誕生了密碼學(xué)匿名現(xiàn)金系統(tǒng)eCash、分布式電子加密貨幣B-money、哈?,F(xiàn)金HashCash等數(shù)字加密貨幣的雛形,為后期比特幣的誕生提供了實(shí)踐上的指導(dǎo)。

非對(duì)稱(chēng)密碼體制

非對(duì)稱(chēng)密碼體制的密鑰成對(duì)出現(xiàn),分為公鑰和私鑰兩個(gè)部分,公鑰PK用于加密或驗(yàn)證簽名,私鑰SK用于解密或簽名,只有解密者知道。兩個(gè)密鑰之間不能從公鑰推算出私鑰,用公鑰加密的數(shù)據(jù)只能使用對(duì)應(yīng)的私鑰解密,用私鑰簽名的數(shù)據(jù)只能使用對(duì)應(yīng)的公鑰驗(yàn)證。非對(duì)稱(chēng)加密的原理如圖3-2所示。用戶(hù)A使用用戶(hù)B的公鑰PK對(duì)明文P進(jìn)行加密得到密文C,用戶(hù)B用自己的私鑰SK對(duì)密文C解密得到明文P。非對(duì)稱(chēng)密碼系統(tǒng)與對(duì)稱(chēng)密碼系統(tǒng)相比,不僅具有保密功能,同時(shí)也能實(shí)現(xiàn)密鑰分發(fā)和身份認(rèn)證?;跀?shù)字簽名的身份認(rèn)證是非對(duì)稱(chēng)密碼系統(tǒng)的典型應(yīng)用。在這個(gè)過(guò)程中,用戶(hù)A先用自己的私鑰SK對(duì)消息M進(jìn)行簽名得到S,隨后用戶(hù)B使用用戶(hù)A的公鑰PK對(duì)M、S進(jìn)行驗(yàn)證,來(lái)判斷S是否為用戶(hù)A對(duì)M的簽名。在一個(gè)典型的通信系統(tǒng)中,消息M是用戶(hù)B發(fā)給用戶(hù)A的一個(gè)隨機(jī)數(shù),如果用戶(hù)A能夠用M和自己的私鑰SK計(jì)算出正確的簽名S,并通過(guò)用戶(hù)B的驗(yàn)證,則用戶(hù)B可以確認(rèn)用戶(hù)A的身份,否則用戶(hù)B將拒絕與用戶(hù)A進(jìn)行后續(xù)的通信。

QQ截圖20200828092910.png

非對(duì)稱(chēng)密碼體制將加密和解密能力分開(kāi):多用戶(hù)加密的結(jié)果由一個(gè)用戶(hù)解密,可用于在公共網(wǎng)絡(luò)中實(shí)現(xiàn)保密通信;單用戶(hù)簽名的信息可由多用戶(hù)驗(yàn)證,可用于實(shí)現(xiàn)對(duì)用戶(hù)的身份認(rèn)證。

ED25519算法

ED25519算法是由科學(xué)家、密碼學(xué)家丹尼爾·朱利葉斯·伯恩斯坦(Daniel Julius Bernstein)在2006年設(shè)計(jì)的與現(xiàn)有的任何橢圓曲線(xiàn)算法都完全不同的橢圓曲線(xiàn)簽名算法,可用于區(qū)塊鏈簽名。簽名過(guò)程不依賴(lài)隨機(jī)數(shù)生成器,不依賴(lài)哈希函數(shù)的抗碰撞性,沒(méi)有時(shí)間通道攻擊的問(wèn)題。

ED25519算法屬于EDDSA算法家族,使用Curve25519橢圓曲線(xiàn)參數(shù),其簽名和驗(yàn)證的性能都極高。在比特幣和以太坊系統(tǒng)中,簽名算法使用的是ECDSA家族的Secp256k1橢圓曲線(xiàn)參數(shù),表3-2為這兩個(gè)橢圓曲線(xiàn)算法的特點(diǎn)對(duì)比。

QQ截圖20200828092910.png

從表3-2基本數(shù)據(jù)的對(duì)比中可以看出,使用Secp256k1實(shí)現(xiàn)的ECDSA算法和使用Curve25519實(shí)現(xiàn)的ED25519算法的差別比較小。不同之處在于,ED25519算法的重點(diǎn)放在了安全性上,其簽名的過(guò)程不依賴(lài)隨機(jī)函數(shù),具備防哈希碰撞特性,也沒(méi)有時(shí)間通道攻擊的危險(xiǎn)。

區(qū)塊鏈技術(shù)經(jīng)過(guò)11年的發(fā)展,已經(jīng)逐漸走出數(shù)字貨幣等傳統(tǒng)應(yīng)用范圍,逐漸向數(shù)字金融、物聯(lián)網(wǎng)、智能制造、供應(yīng)鏈管理等商業(yè)領(lǐng)域擴(kuò)展。

目前,區(qū)塊鏈技術(shù)正處于大規(guī)模商業(yè)應(yīng)用的前夜,我們非常有必要探討商用區(qū)塊鏈技術(shù)的技術(shù)進(jìn)展和發(fā)展趨勢(shì)。

THEEND

最新評(píng)論(評(píng)論僅代表用戶(hù)觀點(diǎn))

更多
暫無(wú)評(píng)論