【OK思享匯】區(qū)塊鏈技術(shù)里的密碼學(xué):哈希函數(shù)區(qū)塊鏈
Hash函數(shù)是密碼學(xué)的基本工具,hash函數(shù)可以用在數(shù)字簽名中,通過后面的介紹我們可以知道數(shù)字簽名使用的是橢圓曲線,計算復(fù)雜度十分高,在簽名之前,我們通常都將要簽名的文件或者信息經(jīng)過hash函數(shù)壓縮之后再進行簽名。
在OK區(qū)塊鏈工程院技術(shù)交流活動上,我們邀請了清華大學(xué)密碼學(xué)研究中心吳彥冰博士前來討論,并整理了其中一些精彩觀點,以饗讀者。
Hash函數(shù)是密碼學(xué)的基本工具,hash函數(shù)可以用在數(shù)字簽名中,通過后面的介紹我們可以知道數(shù)字簽名使用的是橢圓曲線,計算復(fù)雜度十分高,在簽名之前,我們通常都將要簽名的文件或者信息經(jīng)過hash函數(shù)壓縮之后再進行簽名。
哈希函數(shù)還可以用在數(shù)據(jù)完整性的檢測當中,例如說我們經(jīng)常會看到網(wǎng)站上下載軟件時會在旁邊給出hash值,這個hash值就是用來判斷文件是否完整,是否在下載時被別人篡改了。我們從網(wǎng)站上下載了一個文件,我們怎么判斷我們下載的文件是完整的呢?我們可以將文件經(jīng)過hash函數(shù)之后得到的值與網(wǎng)站上的進行對比,看是否相同,相同則代表文件網(wǎng)站,不相同則代表不網(wǎng)站或者被篡改。
Hash函數(shù)還可以用于可證明安全密碼體制當中,這個之后我們會講到。其次hsah函數(shù)還可以檢測傳輸中消息是否被篡改,防止偽造電子簽名和消息認證碼,作為安全組件設(shè)計多種密碼體制和安全通信協(xié)議,比特幣和區(qū)塊鏈的核心技術(shù)。
Hash函數(shù)又稱雜湊函數(shù)、散列函數(shù)、數(shù)字指紋等,將任意長的消息壓縮為一個固定長度的摘要。如下圖,我們可以看到hash函數(shù)可以將任意大小的文件壓縮成n比特的一個01串,n可以是128、160、192、256、384或512。
我們可以看到hash函數(shù)的數(shù)學(xué)表達式是Y=H(M) , {0,1}*?{0,1}n,H代表一個hash函數(shù),M代表一個輸入信息,Y是一個輸出,可以看到,hash函數(shù)的輸入可以是任意位數(shù)的,但是輸出是定長位數(shù)的,為n。計算機中使用的hash表主要用于存儲和查找,是源于1953年IBM的歷史性討論所得到的。
密碼學(xué)中的hash函數(shù)與計算機中使用的hash函數(shù)略有不同,密碼學(xué)中使用的hash函數(shù)具有特定的安全屬性。之后我們會具體介紹它的安全屬性。
我們之前介紹的hash函數(shù)是不帶密鑰的,直接對消息進行壓縮。我們可以在hash函數(shù)中引入密鑰,使它變成可以進行身份驗證的MAC算法。我們可以看到下圖的表示,是把密鑰和消息同時作為hash函數(shù)的輸入。MAC函數(shù)具有消息完整性檢測和通信雙方的身份認證功能。--hash函數(shù)廣泛應(yīng)用于各類Internet協(xié)議,如IPsec、SSL/TLS、SSH、SNMP等,還有金融安全:銀行,電子錢幣等。
再來說一下hash函數(shù)的5大安全特性。首先,hash函數(shù)具有抗原像攻擊的安全屬性。抗原像攻擊是指給定任意Hash值Y,恢復(fù)消息M 是困難的。抗第二原像攻擊和抗碰撞性是相似的,抗第二原像攻擊指的是對于給定的消息M1 ,計算另一個消息M2 使H(M1)=H(M2)是困難的。
而抗碰撞性則是指找到不同的消息(M1, M2) 有相同的指紋,即H(M1)=H(M2)是困難的。這兩個安全屬性的不同點在于一個是給定M1,一個是M1可以自己選擇。
抗長度擴展攻擊指的是給定消息M的長度和H(M),不知道M的情況下,計算H(M||M’)是困難的。抗二次碰撞攻擊:給定一對碰撞消息M和M’,對于任意消息N,消息M||N和M’||N也形成碰撞。
Hash函數(shù)主要有6種,分別是MD5,SHA-1,SHA-2,SHA-3,Whirlpool,SHA-3,SM3。MD5已經(jīng)是很傳統(tǒng)的hash函數(shù)了,是在1992年由Rivest設(shè)計提出的,輸出長度為128比特。Rivest也是公鑰加密算法RSA的設(shè)計者之一,是其中的R,Rivest在2002年的時候得到了圖靈獎。
我的導(dǎo)師王小云教授在Crypto 2004上提出一種能成功攻破MD5的算法。SHA-1是1995年由NIST(美國國家標準與技術(shù)研究院)提出,輸出長度160比特。SHA-2是2002年由NIST提出,輸出長度256,384,512比特。Whirlpool是2000年由Rijmen等設(shè)計,輸出長度512比特。KECCAK在SHA-3標準競賽中勝出,成為SHA-3標準算法,是2007年由Daemen等設(shè)計,輸出長度256,384,512比特。Hash函數(shù)也有由中國人自己設(shè)計實現(xiàn)的算法,SM3,是在2010年由我的導(dǎo)師王小云院士等設(shè)計,輸出長度256比特。
其次王老師還攻破過SHA-1,SHA-2。王老師最推薦看的一本密碼學(xué)入門書籍是《碼書》。我是通過看《欺騙的藝術(shù)》說到MD5時有標注,MD5已被中國科學(xué)家王小云破解了解到王老師的,之后對王老師十分敬佩,并且成為她的研究生。
Hash可以應(yīng)用在登陸認證中。用戶提供用戶名和密碼,服務(wù)器在數(shù)據(jù)庫中查找用戶名,獲取salt值,計算Hash(salt password)與數(shù)據(jù)庫中比對,相同則通過認證。這樣可以防止密碼直接存在數(shù)據(jù)庫中,黑客/管理員可以直接查看到用戶密碼。加salt的目的是防止兩個用戶密碼相同在服務(wù)器中可以直接查看到。
Hash可以用在密鑰衍生中。我們可以看到銀行使用的U盾所產(chǎn)生的隨機數(shù)就是通過hash函數(shù)產(chǎn)生的。其次hash函數(shù)也廣泛應(yīng)用于RFID、衛(wèi)星通訊等密碼系統(tǒng)中。
hash函數(shù)也在數(shù)字簽名中有應(yīng)用。如果學(xué)習完下一節(jié)的知識之后,我們就會知道,數(shù)字簽名使用的是橢圓曲線簽名,在計算上十分慢,要簽的數(shù)據(jù)量越大簽名速度就會越慢,所以一般采用的辦法是,在簽名前先將要簽名的信息進行Hash壓縮,得到一個很短的比特串,之后再進行簽名運算。我們看下圖是一個金融安全的模型。
hash函數(shù)還在比特幣以及區(qū)塊鏈中有很好的應(yīng)用。比特幣挖礦,其實就是在找一個隨機數(shù)n,使得n拼接上交易信息的hash值前m位為零。前m位為零,代表的是挖礦的計算復(fù)雜度,假設(shè)要尋找前60比特為0的hash值,那么他的計算復(fù)雜度就是260次運算。電子貨幣:一種代替貨幣的電子簽名,通過用戶的公鑰(數(shù)字證書)可驗證貨幣的合法性。
1.TMT觀察網(wǎng)遵循行業(yè)規(guī)范,任何轉(zhuǎn)載的稿件都會明確標注作者和來源;
2.TMT觀察網(wǎng)的原創(chuàng)文章,請轉(zhuǎn)載時務(wù)必注明文章作者和"來源:TMT觀察網(wǎng)",不尊重原創(chuàng)的行為TMT觀察網(wǎng)或?qū)⒆肪控熑危?br>
3.作者投稿可能會經(jīng)TMT觀察網(wǎng)編輯修改或補充。