MD5与SHA1
一、MD5
MD5消息摘要算法(英語(yǔ):MD5 Message-Digest Algorithm),一種被廣泛使用的密碼散列函數(shù),可以產(chǎn)生出一個(gè)128位(16字節(jié))的散列值(hash value),用于確保信息傳輸完整一致。MD5由美國(guó)密碼學(xué)家羅納德·李維斯特(Ronald Linn Rivest)設(shè)計(jì),于1992年公開(kāi),用以取代MD4算法。
MD5算法是不可逆的,不能通過(guò)摘要信息得到原始數(shù)據(jù)。
MD5應(yīng)用
一致性驗(yàn)證
MD5的典型應(yīng)用是對(duì)一段信息(Message)產(chǎn)生信息摘要(Message-Digest),以防止被篡改。比如,在Unix下有很多軟件在下載的時(shí)候都有一個(gè)文件名相同,文件擴(kuò)展名為.md5的文件,在這個(gè)文件中通常只有一行文本,大致結(jié)構(gòu)如:?[1]? MD5 (tanajiya.tar.gz) = 38b8c2c1093dd0fec383a9d9ac940515 這就是tanajiya.tar.gz文件的數(shù)字簽名。MD5將整個(gè)文件當(dāng)作一個(gè)大文本信息,通過(guò)其不可逆的字符串變換算法,產(chǎn)生了這個(gè)唯一的MD5信息摘要。為了讓讀者朋友對(duì)MD5的應(yīng)用有個(gè)直觀的認(rèn)識(shí),筆者以一個(gè)比方和一個(gè)實(shí)例來(lái)簡(jiǎn)要描述一下其工作過(guò)程: 大家都知道,地球上任何人都有自己獨(dú)一無(wú)二的指紋,這常常成為司法機(jī)關(guān)鑒別罪犯身份最值得信賴的方法;與之類似,MD5就可以為任何文件(不管其大小、格式、數(shù)量)產(chǎn)生一個(gè)同樣獨(dú)一無(wú)二的“數(shù)字指紋”,如果任何人對(duì)文件做了任何改動(dòng),其MD5值也就是對(duì)應(yīng)的“數(shù)字指紋”都會(huì)發(fā)生變化。 我們常常在某些軟件下載站點(diǎn)的某軟件信息中看到其MD5值,它的作用就在于我們可以在下載該軟件后,對(duì)下載回來(lái)的文件用專門的軟件(如Windows MD5 Check等)做一次MD5校驗(yàn),以確保我們獲得的文件與該站點(diǎn)提供的文件為同一文件。 具體來(lái)說(shuō)文件的MD5值就像是這個(gè)文件的“數(shù)字指紋”。每個(gè)文件的MD5值是不同的,如果任何人對(duì)文件做了任何改動(dòng),其MD5值也就是對(duì)應(yīng)的“數(shù)字指紋”就會(huì)發(fā)生變化。比如下載服務(wù)器針對(duì)一個(gè)文件預(yù)先提供一個(gè)MD5值,用戶下載完該文件后,用我這個(gè)算法重新計(jì)算下載文件的MD5值,通過(guò)比較這兩個(gè)值是否相同,就能判斷下載的文件是否出錯(cuò),或者說(shuō)下載的文件是否被篡改了。MD5實(shí)際上一種有損壓縮技術(shù),壓縮前文件一樣MD5值一定一樣,反之MD5值一樣并不能保證壓縮前的數(shù)據(jù)是一樣的。在密碼學(xué)上發(fā)生這樣的概率是很小的,所以MD5在密碼加密領(lǐng)域有一席之地。但是專業(yè)的黑客甚至普通黑客也可以利用MD5值實(shí)際是有損壓縮技術(shù)這一原理,將MD5的逆運(yùn)算的值作為一張表俗稱彩虹表的散列表來(lái)破解密碼。 利用MD5算法來(lái)進(jìn)行文件校驗(yàn)的方案被大量應(yīng)用到軟件下載站、論壇數(shù)據(jù)庫(kù)、系統(tǒng)文件安全等方面。數(shù)字簽名
MD5的典型應(yīng)用是對(duì)一段Message(字節(jié)串)產(chǎn)生fingerprint(指紋),以防止被“篡改”。舉個(gè)例子,你將一段話寫在一個(gè)叫 readme.txt文件中,并對(duì)這個(gè)readme.txt產(chǎn)生一個(gè)MD5的值并記錄在案,然后你可以傳播這個(gè)文件給別人,別人如果修改了文件中的任何內(nèi)容,你對(duì)這個(gè)文件重新計(jì)算MD5時(shí)就會(huì)發(fā)現(xiàn)(兩個(gè)MD5值不相同)。如果再有一個(gè)第三方的認(rèn)證機(jī)構(gòu),用MD5還可以防止文件作者的“抵賴”,這就是所謂的數(shù)字簽名應(yīng)用。安全訪問(wèn)認(rèn)證
MD5還廣泛用于操作系統(tǒng)的登陸認(rèn)證上,如Unix、各類BSD系統(tǒng)登錄密碼、數(shù)字簽名等諸多方面。如在Unix系統(tǒng)中用戶的密碼是以MD5(或其它類似的算法)經(jīng)Hash運(yùn)算后存儲(chǔ)在文件系統(tǒng)中。當(dāng)用戶登錄的時(shí)候,系統(tǒng)把用戶輸入的密碼進(jìn)行MD5 Hash運(yùn)算,然后再去和保存在文件系統(tǒng)中的MD5值進(jìn)行比較,進(jìn)而確定輸入的密碼是否正確。通過(guò)這樣的步驟,系統(tǒng)在并不知道用戶密碼的明碼的情況下就可以確定用戶登錄系統(tǒng)的合法性。這可以避免用戶的密碼被具有系統(tǒng)管理員權(quán)限的用戶知道。MD5將任意長(zhǎng)度的“字節(jié)串”映射為一個(gè)128bit的大整數(shù),并且是通過(guò)該128bit反推原始字符串是困難的,換句話說(shuō)就是,即使你看到源程序和算法描述,也無(wú)法將一個(gè)MD5的值變換回原始的字符串,從數(shù)學(xué)原理上說(shuō),是因?yàn)樵嫉淖址袩o(wú)窮多個(gè),這有點(diǎn)象不存在反函數(shù)的數(shù)學(xué)函數(shù)。所以,要遇到了md5密碼的問(wèn)題,比較好的辦法是:你可以用這個(gè)系統(tǒng)中的md5()函數(shù)重新設(shè)一個(gè)密碼,如admin,把生成的一串密碼的Hash值覆蓋原來(lái)的Hash值就行了。 正是因?yàn)檫@個(gè)原因,現(xiàn)在被黑客使用最多的一種破譯密碼的方法就是一種被稱為"跑字典"的方法。有兩種方法得到字典,一種是日常搜集的用做密碼的字符串表,另一種是用排列組合方法生成的,先用MD5程序計(jì)算出這些字典項(xiàng)的MD5值,然后再用目標(biāo)的MD5值在這個(gè)字典中檢索。我們假設(shè)密碼的最大長(zhǎng)度為8位字節(jié)(8 Bytes),同時(shí)密碼只能是字母和數(shù)字,共26+26+10=62個(gè)字節(jié),排列組合出的字典的項(xiàng)數(shù)則是P(62,1)+P(62,2)….+P(62,8),那也已經(jīng)是一個(gè)很天文的數(shù)字了,存儲(chǔ)這個(gè)字典就需要TB級(jí)的磁盤陣列,而且這種方法還有一個(gè)前提,就是能獲得目標(biāo)賬戶的密碼MD5值的情況下才可以。這種加密技術(shù)被廣泛的應(yīng)用于Unix系統(tǒng)中,這也是為什么Unix系統(tǒng)比一般操作系統(tǒng)更為堅(jiān)固一個(gè)重要原因。 二、SHA概述
安全散列算法(SHA,Secure Hash)是一種常用的數(shù)據(jù)加密算法。它由美國(guó)國(guó)家標(biāo)準(zhǔn)與技術(shù)局(NIST)于1993年作為聯(lián)邦信息處理標(biāo)準(zhǔn)公布(即第一代SHA算法SHA-0)。在1995年,其改進(jìn)版本SHA一1也正式公布(SHA一1具有比SHA—0更高的安全性)。SHA-1算法是目前最常用的安全散列算法和最先進(jìn)的加密技術(shù)。SHA-1算法的思想是接收一段明文,然后以一種不可逆的方式將它轉(zhuǎn)換成一段(通常更小)密文,也可以簡(jiǎn)單地理解為取一串輸入碼,把它們轉(zhuǎn)化為長(zhǎng)度較短、位數(shù)固定的輸出序列即散列值(稱為信息摘要)的過(guò)程。該算法對(duì)長(zhǎng)度不超過(guò)2的64次方的消息產(chǎn)生160位的消息摘要輸出,輸入按512位的分組進(jìn)行處理。 SHA-1算法在加密學(xué)中扮演著極其重要的角色,可以用于實(shí)現(xiàn)數(shù)據(jù)保密、防止數(shù)據(jù)更改和身份驗(yàn)證等功能。一個(gè)典型的應(yīng)用是從數(shù)字消息、IP信息包、磁盤文件等數(shù)據(jù)抽取散列值(稱為消息摘要),井與對(duì)稱或非對(duì)稱加密技術(shù)一起來(lái)完成對(duì)原始數(shù)據(jù)的認(rèn)證和完整性檢查。另外,SHA-1算法是當(dāng)今眾多流行加密思想核心,幾乎無(wú)處不在。它在許多安全協(xié)議中廣為使用,如:數(shù)字簽名標(biāo)準(zhǔn)(DSS)、傳輸層安全(TLS)、安全電子交易(SET),互聯(lián)網(wǎng)協(xié)議安全(IPSec)、無(wú)線局域網(wǎng)(WLANs)安全、隨機(jī)數(shù)生成算法和密碼存儲(chǔ)機(jī)制等。?[2]?特性
SHA-1算法具有兩個(gè)重要特性:單向性和抗碰撞性。 單向性即由原始消息計(jì)算出信息摘要很容易,而由消息摘要計(jì)算出原始消息在計(jì)算上則幾乎是不可行的。 而所謂的抗碰撞性是指,要找到兩個(gè)不同的原始消息生成同一個(gè)信息摘要在計(jì)算上也是不可行的。?[2]?算法安全性
SHA-1算法是由MDS算法演變而來(lái)的,它們之間最大的區(qū)別在于前者產(chǎn)生的摘要長(zhǎng)度比后者長(zhǎng)32bit。SHA-1對(duì)于強(qiáng)行攻擊,產(chǎn)生任何一個(gè)報(bào)文使之摘要等于給定報(bào)文摘要的難度為2160數(shù)量級(jí)的操作,較MDS的2128數(shù)量級(jí)操作要難。因此,SHA-1算法對(duì)抵抗強(qiáng)行攻擊的強(qiáng)度很高。同時(shí),因?yàn)镾HA-1算法的循環(huán)步驟有80次,比MDS算法的64次要多,所以其運(yùn)行速度也較慢。 從目前密碼學(xué)研究的最新進(jìn)展來(lái)看,SHA-1雖然被發(fā)現(xiàn)存在缺陷(碰撞),但在近幾年內(nèi),仍然可以大量使用SHA-1算法。同時(shí),專家們認(rèn)為王小云等人發(fā)現(xiàn)當(dāng)前所用的散列算法存在的問(wèn)題,必將幫助新的散列算法設(shè)計(jì)者考慮到這方面的問(wèn)題,使得新的散列算法具有更好的安全性。美國(guó)政府的大多數(shù)應(yīng)用被要求在今年年底以前改用SHA-2散列函數(shù)系列,早期的應(yīng)用也要盡可能地進(jìn)行升級(jí)。SHA-2算法跟 SHA一1基本上相似,至今尚末出現(xiàn)對(duì)SHA-2算法的攻擊。 三、MD5和SHA1對(duì)比由于MD5 與SHA-1均是從MD4 發(fā)展而來(lái),它們的結(jié)構(gòu)和強(qiáng)度等特性有很多相似之處,表(1)是對(duì)MD5 與SHA-1的結(jié)構(gòu)比較。SHA-1與MD5 的最大區(qū)別在于其摘要比MD5 摘要長(zhǎng) 32bit。對(duì)于強(qiáng)行攻擊,產(chǎn)生任何一個(gè)報(bào)文使之摘要等于給定報(bào)文摘要的難度:MD5 是2128 數(shù)量級(jí)的操作,SHA-1 是2160數(shù)量級(jí)的操作。產(chǎn)生具有相同摘要的兩個(gè)報(bào)文的難度:MD5是 264 是數(shù)量級(jí)的操作,SHA-1 是280 數(shù)量級(jí)的操作。因而,SHA-1對(duì)強(qiáng)行攻擊的強(qiáng)度更大。但由于SHA-1 的循環(huán)步驟比MD5 多(80:64)且要處理的緩存大(160 比特:128 比特),SHA-1的運(yùn)行速度比MD5 慢
MD5 和SHA-1 是單項(xiàng)散列函數(shù)的典型代表,它們廣泛地應(yīng)用在信息安全和數(shù)字簽名等各個(gè)領(lǐng)域。從而有效地抗擊了信息的主動(dòng)式攻擊,本文基于AVR單片機(jī)實(shí)現(xiàn)了這兩種算法,并結(jié)合匯編語(yǔ)言盡心了優(yōu)化,取得了較好的效果。根據(jù)信息安全的要求的不同層次可以靈活選擇這兩種算法從而達(dá)到實(shí)際目的。
轉(zhuǎn)載于:https://www.cnblogs.com/ostin/p/10382056.html
總結(jié)
- 上一篇: 梦到鸭子水里游来游去代表什么
- 下一篇: 梦到新坟墓预示着什么