• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            君子性非異也,善假于物也。

            如有恒,何須三更起,半夜眠;最怕莫,三天打魚(yú)兩天曬網(wǎng),竹籃打水一場(chǎng)空!
            posts - 31, comments - 23, trackbacks - 0, articles - 30
              C++博客 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

            初識(shí)MD5算法

            Posted on 2006-11-09 20:51 neter 閱讀(367) 評(píng)論(0)  編輯 收藏 引用 所屬分類(lèi): 程序設(shè)計(jì)
            MD5的全稱(chēng)是message-digest algorithm 5(信息-摘要算法),在90年代初由mit laboratory for computer sciencersa data security incronald l. rivest開(kāi)發(fā)出來(lái),經(jīng)md2md3md4發(fā)展而來(lái)。它的作用是讓大容量信息在用數(shù)字簽名軟件簽署私人密匙前被"壓縮"成一種保密的格式(就是把一個(gè)任意長(zhǎng)度的字節(jié)串變換成一定長(zhǎng)的大整數(shù))。不管是md2md4還是md5,它們都需要獲得一個(gè)隨機(jī)長(zhǎng)度的信息并產(chǎn)生一個(gè)128位的信息摘要。雖然這些算法的結(jié)構(gòu)或多或少有些相似,但md2的設(shè)計(jì)與md4md5完全不同,那是因?yàn)?/span>md2是為8位機(jī)器做過(guò)設(shè)計(jì)優(yōu)化的,而md4md5卻是面向32位的電腦。這三個(gè)算法的描述和c語(yǔ)言源代碼在internet rfcs 1321中有詳細(xì)的描述(http://www.ietf.org/rfc/rfc1321.txt),這是一份最權(quán)威的文檔,由ronald l. rivest19928月向ieft提交。

              rivest1989年開(kāi)發(fā)出md2算法。在這個(gè)算法中,首先對(duì)信息進(jìn)行數(shù)據(jù)補(bǔ)位,使信息的字節(jié)長(zhǎng)度是16的倍數(shù)。然后,以一個(gè)16位的檢驗(yàn)和追加到信息末尾。并且根據(jù)這個(gè)新產(chǎn)生的信息計(jì)算出散列值。后來(lái),rogierchauvaud發(fā)現(xiàn)如果忽略了檢驗(yàn)和將產(chǎn)生md2沖突。md2算法的加密后結(jié)果是唯一的--既沒(méi)有重復(fù)。

              為了加強(qiáng)算法的安全性,rivest1990年又開(kāi)發(fā)出md4算法。md4算法同樣需要填補(bǔ)信息以確保信息的字節(jié)長(zhǎng)度加上448后能被512整除(信息字節(jié)長(zhǎng)度mod 512 = 448)。然后,一個(gè)以64位二進(jìn)制表示的信息的最初長(zhǎng)度被添加進(jìn)來(lái)。信息被處理成512damg?rd/merkle迭代結(jié)構(gòu)的區(qū)塊,而且每個(gè)區(qū)塊要通過(guò)三個(gè)不同步驟的處理。den boerbosselaers以及其他人很快的發(fā)現(xiàn)了攻擊md4版本中第一步和第三步的漏洞。dobbertin向大家演示了如何利用一部普通的個(gè)人電腦在幾分鐘內(nèi)找到md4完整版本中的沖突(這個(gè)沖突實(shí)際上是一種漏洞,它將導(dǎo)致對(duì)不同的內(nèi)容進(jìn)行加密卻可能得到相同的加密后結(jié)果)。毫無(wú)疑問(wèn),md4就此被淘汰掉了。

              盡管md4算法在安全上有個(gè)這么大的漏洞,但它對(duì)在其后才被開(kāi)發(fā)出來(lái)的好幾種信息安全加密算法的出現(xiàn)卻有著不可忽視的引導(dǎo)作用。除了md5以外,其中比較有名的還有sha-1ripe-md以及haval等。

              一年以后,即1991年,rivest開(kāi)發(fā)出技術(shù)上更為趨近成熟的md5算法。它在md4的基礎(chǔ)上增加了"安全-帶子"safety-belts)的概念。雖然md5md4稍微慢一些,但卻更為安全。這個(gè)算法很明顯的由四個(gè)和md4設(shè)計(jì)有少許不同的步驟組成。在md5算法中,信息-摘要的大小和填充的必要條件與md4完全相同。den boerbosselaers曾發(fā)現(xiàn)md5算法中的假?zèng)_突(pseudo-collisions),但除此之外就沒(méi)有其他被發(fā)現(xiàn)的加密后結(jié)果了。

              van oorschotwiener曾經(jīng)考慮過(guò)一個(gè)在散列中暴力搜尋沖突的函數(shù)(brute-force hash function),而且他們猜測(cè)一個(gè)被設(shè)計(jì)專(zhuān)門(mén)用來(lái)搜索md5沖突的機(jī)器(這臺(tái)機(jī)器在1994年的制造成本大約是一百萬(wàn)美元)可以平均每24天就找到一個(gè)沖突。但單從1991年到2001年這10年間,竟沒(méi)有出現(xiàn)替代md5算法的md6或被叫做其他什么名字的新算法這一點(diǎn),我們就可以看出這個(gè)瑕疵并沒(méi)有太多的影響md5的安全性。上面所有這些都不足以成為md5的在實(shí)際應(yīng)用中的問(wèn)題。并且,由于md5算法的使用不需要支付任何版權(quán)費(fèi)用的,所以在一般的情況下(非絕密應(yīng)用領(lǐng)域。但即便是應(yīng)用在絕密領(lǐng)域內(nèi),md5也不失為一種非常優(yōu)秀的中間技術(shù)),md5怎么都應(yīng)該算得上是非常安全的了。

            ?????? MD5是一個(gè)在國(guó)內(nèi)外有著廣泛的應(yīng)用的雜湊函數(shù)算法,它曾一度被認(rèn)為是非常安全的。HASH函數(shù),又稱(chēng)雜湊函數(shù),是在信息安全領(lǐng)域有廣泛和重要應(yīng)用的密碼算法,它有一種類(lèi)似于指紋的應(yīng)用。在網(wǎng)絡(luò)安全協(xié)議中,雜湊函數(shù)用來(lái)處理電子簽名,將冗長(zhǎng)的簽名文件壓縮為一段獨(dú)特的數(shù)字信息,像指紋鑒別身份一樣保證原來(lái)數(shù)字簽名文件的合法性和安全性。在前面提到的SHA-1MD5都是目前最常用的雜湊函數(shù)。經(jīng)過(guò)這些算法的處理,原始信息即使只更動(dòng)一個(gè)字母,對(duì)應(yīng)的壓縮信息也會(huì)變?yōu)榻厝徊煌摹爸讣y”,這就保證了經(jīng)過(guò)處理信息的唯一性。為電子商務(wù)等提供了數(shù)字認(rèn)證的可能性。

            ???? 安全的雜湊函數(shù)在設(shè)計(jì)時(shí)必須滿足兩個(gè)要求:其一是尋找兩個(gè)輸入得到相同的輸出值在計(jì)算上是不可行的,這就是我們通常所說(shuō)的抗碰撞的;其二是找一個(gè)輸入,能得到給定的輸出在計(jì)算上是不可行的,即不可從結(jié)果推導(dǎo)出它的初始狀態(tài)。現(xiàn)在使用的重要計(jì)算機(jī)安全協(xié)議,如SSLPGP都用雜湊函數(shù)來(lái)進(jìn)行簽名,一旦找到兩個(gè)文件可以產(chǎn)生相同的壓縮值,就可以偽造簽名,給網(wǎng)絡(luò)安全領(lǐng)域帶來(lái)巨大隱患。

              算法的應(yīng)用

              md5的典型應(yīng)用是對(duì)一段信息(message)產(chǎn)生信息摘要(message-digest),以防止被篡改。比如,在unix下有很多軟件在下載的時(shí)候都有一個(gè)文件名相同,文件擴(kuò)展名為.md5的文件,在這個(gè)文件中通常只有一行文本,大致結(jié)構(gòu)如:

               md5 (tanajiya.tar.gz) = 0ca175b9c0f726a831d895e269332461

              這就是tanajiya.tar.gz文件的數(shù)字簽名。md5將整個(gè)文件當(dāng)作一個(gè)大文本信息,通過(guò)其不可逆的字符串變換算法,產(chǎn)生了這個(gè)唯一的md5信息摘要。如果在以后傳播這個(gè)文件的過(guò)程中,無(wú)論文件的內(nèi)容發(fā)生了任何形式的改變(包括人為修改或者下載過(guò)程中線路不穩(wěn)定引起的傳輸錯(cuò)誤等),只要你對(duì)這個(gè)文件重新計(jì)算md5時(shí)就會(huì)發(fā)現(xiàn)信息摘要不相同,由此可以確定你得到的只是一個(gè)不正確的文件。如果再有一個(gè)第三方的認(rèn)證機(jī)構(gòu),用md5還可以防止文件作者的"抵賴(lài)",這就是所謂的數(shù)字簽名應(yīng)用。

              md5還廣泛用于加密和解密技術(shù)上。比如在unix系統(tǒng)中用戶的密碼就是以md5(或其它類(lèi)似的算法)經(jīng)加密后存儲(chǔ)在文件系統(tǒng)中。當(dāng)用戶登錄的時(shí)候,系統(tǒng)把用戶輸入的密碼計(jì)算成md5值,然后再去和保存在文件系統(tǒng)中的md5值進(jìn)行比較,進(jìn)而確定輸入的密碼是否正確。通過(guò)這樣的步驟,系統(tǒng)在并不知道用戶密碼的明碼的情況下就可以確定用戶登錄系統(tǒng)的合法性。這不但可以避免用戶的密碼被具有系統(tǒng)管理員權(quán)限的用戶知道,而且還在一定程度上增加了密碼被破解的難度。

              正是因?yàn)檫@個(gè)原因,現(xiàn)在被黑客使用最多的一種破譯密碼的方法就是一種被稱(chēng)為"跑字典"的方法。有兩種方法得到字典,一種是日常搜集的用做密碼的字符串表,另一種是用排列組合方法生成的,先用md5程序計(jì)算出這些字典項(xiàng)的md5值,然后再用目標(biāo)的md5值在這個(gè)字典中檢索。我們假設(shè)密碼的最大長(zhǎng)度為8位字節(jié)(8 bytes),同時(shí)密碼只能是字母和數(shù)字,共26+26+10=62個(gè)字符,排列組合出的字典的項(xiàng)數(shù)則是p(62,1)+p(62,2).+p(62,8),那也已經(jīng)是一個(gè)很天文的數(shù)字了,存儲(chǔ)這個(gè)字典就需要tb級(jí)的磁盤(pán)陣列,而且這種方法還有一個(gè)前提,就是能獲得目標(biāo)賬戶的密碼md5值的情況下才可以。這種加密技術(shù)被廣泛的應(yīng)用于unix系統(tǒng)中,這也是為什么unix系統(tǒng)比一般操作系統(tǒng)更為堅(jiān)固一個(gè)重要原因。

              算法描述

              對(duì)md5算法簡(jiǎn)要的敘述可以為:md5512位分組來(lái)處理輸入的信息,且每一分組又被劃分為16個(gè)32位子分組,經(jīng)過(guò)了一系列的處理后,算法的輸出由四個(gè)32位分組組成,將這四個(gè)32位分組級(jí)聯(lián)后將生成一個(gè)128位散列值。

              在MD5算法中,首先需要對(duì)信息進(jìn)行填充,使其字節(jié)長(zhǎng)度對(duì)512求余的結(jié)果等于448。因此,信息的字節(jié)長(zhǎng)度(bits length)將被擴(kuò)展至n*512+448,即n*64+56個(gè)字節(jié)(bytes),n為一個(gè)正整數(shù)。填充的方法如下,在信息的后面填充一個(gè)1和無(wú)數(shù)個(gè)0,直到滿足上面的條件時(shí)才停止用0對(duì)信息的填充。然后,在在這個(gè)結(jié)果后面附加一個(gè)以64位二進(jìn)制表示的填充前信息長(zhǎng)度。經(jīng)過(guò)這兩步的處理,現(xiàn)在的信息字節(jié)長(zhǎng)度=n*512+448+64=(n+1)*512,即長(zhǎng)度恰好是512的整數(shù)倍。這樣做的原因是為滿足后面處理中對(duì)信息長(zhǎng)度的要求。

              MD5中有四個(gè)32位被稱(chēng)作鏈接變量(chaining variable)的整數(shù)參數(shù),他們分別為:a=0x01234567b=0x89abcdefc=0xfedcba98d=0x76543210?

              當(dāng)設(shè)置好這四個(gè)鏈接變量后,就開(kāi)始進(jìn)入算法的四輪循環(huán)運(yùn)算。循環(huán)的次數(shù)是信息中512位信息分組的數(shù)目。

              將上面四個(gè)鏈接變量復(fù)制到另外四個(gè)變量中:aabbccdd

              主循環(huán)有四輪(md4只有三輪),每輪循環(huán)都很相似。第一輪進(jìn)行16次操作。每次操作對(duì)abcd中的其中三個(gè)作一次非線性函數(shù)運(yùn)算,然后將所得結(jié)果加上第四個(gè)變量,文本的一個(gè)子分組和一個(gè)常數(shù)。再將所得結(jié)果向右環(huán)移一個(gè)不定的數(shù),并加上abcd中之一。最后用該結(jié)果取代abcd中之一。

            以一下是每次操作中用到的四個(gè)非線性函數(shù)(每輪一個(gè))。

               f(x,y,z) =(x&y)|((~x)&z)

               g(x,y,z) =(x&z)|(y&(~z))

               h(x,y,z) =x^y^z

               i(x,y,z)=y^(x|(~z))

               (&是與,|是或,~是非,^是異或)

              這四個(gè)函數(shù)的說(shuō)明:如果xyz的對(duì)應(yīng)位是獨(dú)立和均勻的,那么結(jié)果的每一位也應(yīng)是獨(dú)立和均勻的。

            f是一個(gè)逐位運(yùn)算的函數(shù)。即,如果x,那么y,否則z。函數(shù)h是逐位奇偶操作符。

              假設(shè)mj表示消息的第j個(gè)子分組(從015),

            ?????? ff(a,b,c,d,mj,s,ti)表示a=b+((a+(f(b,c,d)+mj+ti)

            ?????? gg(a,b,c,d,mj,s,ti)表示a=b+((a+(g(b,c,d)+mj+ti)

            ?????? hh(a,b,c,d,mj,s,ti)表示a=b+((a+(h(b,c,d)+mj+ti)

            ?????? ii(a,b,c,d,mj,s,ti)表示a=b+((a+(i(b,c,d)+mj+ti)

              這四輪(64步)是:

              第一輪

               ff(a,b,c,d,m0,7,0xd76aa478)

               ff(d,a,b,c,m1,12,0xe8c7b756)

               ff(c,d,a,b,m2,17,0x242070db)

            ff(b,c,d,a,m3,22,0xc1bdceee)

               ff(a,b,c,d,m4,7,0xf57c0faf)

               ff(d,a,b,c,m5,12,0x4787c62a)

               ff(c,d,a,b,m6,17,0xa8304613)

               ff(b,c,d,a,m7,22,0xfd469501)

               ff(a,b,c,d,m8,7,0x698098d8)

               ff(d,a,b,c,m9,12,0x8b44f7af)

               ff(c,d,a,b,m10,17,0xffff5bb1)

               ff(b,c,d,a,m11,22,0x895cd7be)

               ff(a,b,c,d,m12,7,0x6b901122)

               ff(d,a,b,c,m13,12,0xfd987193)

               ff(c,d,a,b,m14,17,0xa679438e)

               ff(b,c,d,a,m15,22,0x49b40821)

              第二輪

               gg(a,b,c,d,m1,5,0xf61e2562)

               gg(d,a,b,c,m6,9,0xc040b340)

               gg(c,d,a,b,m11,14,0x265e5a51)

               gg(b,c,d,a,m0,20,0xe9b6c7aa)

               gg(a,b,c,d,m5,5,0xd62f105d)

               gg(d,a,b,c,m10,9,0x02441453)

               gg(c,d,a,b,m15,14,0xd8a1e681)

               gg(b,c,d,a,m4,20,0xe7d3fbc8)

               gg(a,b,c,d,m9,5,0x21e1cde6)

               gg(d,a,b,c,m14,9,0xc33707d6)

               gg(c,d,a,b,m3,14,0xf4d50d87)

               gg(b,c,d,a,m8,20,0x455a14ed)

               gg(a,b,c,d,m13,5,0xa9e3e905)

               gg(d,a,b,c,m2,9,0xfcefa3f8)

               gg(c,d,a,b,m7,14,0x676f02d9)

               gg(b,c,d,a,m12,20,0x8d2a4c8a)

              第三輪

               hh(a,b,c,d,m5,4,0xfffa3942)

               hh(d,a,b,c,m8,11,0x8771f681)

               hh(c,d,a,b,m11,16,0x6d9d6122)

               hh(b,c,d,a,m14,23,0xfde5380c)

               hh(a,b,c,d,m1,4,0xa4beea44)

            久久精品人人做人人爽电影| 好久久免费视频高清| 久久国产影院| 一个色综合久久| 久久无码人妻一区二区三区 | 精品久久久久香蕉网| 成人国内精品久久久久影院| 99久久免费只有精品国产| 欧美与黑人午夜性猛交久久久| 精品久久久久久中文字幕大豆网| 久久久久国产精品熟女影院 | 一本大道加勒比久久综合| 久久丝袜精品中文字幕| av色综合久久天堂av色综合在| 久久免费高清视频| 亚洲欧洲精品成人久久曰影片| 久久久久亚洲av无码专区喷水| 久久人搡人人玩人妻精品首页| 精品永久久福利一区二区| 伊人久久五月天| 久久久噜噜噜久久| 一本久久久久久久| 久久青青草原亚洲av无码app| 无夜精品久久久久久| 亚洲一本综合久久| 激情伊人五月天久久综合| 日本五月天婷久久网站| 麻豆精品久久久一区二区| 亚洲国产欧洲综合997久久| 欧美日韩成人精品久久久免费看 | 久久这里有精品| 久久国产精品视频| 亚洲国产精品久久久久久| 久久这里只有精品18| 久久久久亚洲精品日久生情| 色8激情欧美成人久久综合电| 国产成人精品久久一区二区三区av | 久久久久亚洲国产| 欧美亚洲国产精品久久| 久久中文字幕视频、最近更新| 国产AⅤ精品一区二区三区久久|