摘要:認為要從的結果中取得原文才算破解,本身就是對摘要算法的誤解。摘要算法與上面兩種完全不同,前面兩種密碼是用于防止信息被竊取,而摘要算法的目標是用于證明原文的完整性,也就是說用于防止信息被篡改。當進行摘要算法后,信息就丟失了。
轉載請注明出處 http://www.paraller.com
原文排版地址 http://www.paraller.com/2016/05/22/%5B%E8%BD%AC%5DMD5%282%29-%E7%A0%B4%E8%A7%A3MD5%E4%B9%8B%E6%88%91%E8%A7%81/
轉載:http://blog.csdn.net/raptor/article/details/97270 對原文做了修改
關于王小云破解MD5之我見MD5是一種摘要算法,所以理論上是不可能從簽名取得原文(見下面說明)。認為要從MD5的結果中取得原文才算破解,本身就是對摘要算法的誤解。它通常應用于數字簽名中,用于標識原文的原始性--即在簽名后未作任何的修改。用不同的原文可以產生相同的簽名,這也就意味著簽名可能失效,就已經可以證明這種摘要算法的不安全。
王小云的發現證明了有方法可以產生碰撞,但正如GIGIX那邊一位匿名兄所說,這只是非特定碰撞,而要偽造簽名則必須能產生特定碰撞。所以說MD5并未被完全攻破,但也已經是一個重大的突破了。
首先要說的是為什么需要使用密碼?因為我們通常的通信環境是不安全的。
那什么是不安全的通信環境呢?不安全至少表現在兩個方面:
通信的內容可能被竊取;
二是通信的內容可能被篡改。
通常的密碼使用就是為這解決這兩方面的問題。
而如果有方法使某種密碼的作用失效,就可以說這種密碼被破解了。
常用的密碼有很多種類,其中最常用的是這三種:
摘要算法
非對稱密碼
摘要
特點是:加密與解密用相同的密鑰,甚至可能用相同的算法。比如從最簡單的異或,到常用的DES、BLOWFISH、IDEA等。它們通常的用途是這樣的:
發送方將源文(M)用密鑰(K)加密:E=ENC(M,K)
然后將E通過不安全網絡傳給接收方,接收方用相同的密鑰(K)解密:M=DEC(E,K)
只要算法足夠好,并且保管好密鑰(K),就可以保證這種通信是安全的,因為別人即使知道了密文(E)和算法ENC/DEC,也無法知道明文(M)。
對于這種密碼來說,如果有方法可以從密文(E)和算法ENC/DEC中導到密鑰(K)或明文(M),則意味這種密碼被破解。比如簡單異或算法就可以用統計分析法簡單地破解掉。但即使是現在被認為不夠安全的DES算法(已經有近三十年歷史了),也需要有大量的明文/密文對(2的數十次方對),并需要大量的計算時間才能求得其密鑰(K)。
因為在對稱密碼中,通信雙方需要約定一個共同的密鑰(K),如果這個約定過程也不安全,就可能出現密鑰的泄露,而對于對稱算法來說,密鑰一旦泄露,之后的通信過程也就不攻自破了。
通常的非對稱密碼就是所謂的公鑰密碼算法,比如現在最常用的RSA(由R. L. Rivest和A. Shamir等人基于大數的因數分解極為困難的原理而創建),或是最近更為時髦的“橢圓曲線”,因為我的數學水平太差,具體算法也說不清楚,只知道大致是這樣的:
顧名思義,它所用的算法特點在于加密與解密用的密鑰是不一樣的。
而其中雙方都不需要知道對方的私鑰,這就避免了約定密鑰導致的不安全。
非對稱密碼的算法本身又決定了用私鑰加密的內容必須用公鑰才能解,反之亦然,并且算法還保證僅知道公鑰和密文無法導出私鑰,由此決定了通信的安全。
當然,如果有方法可以從公鑰導出私鑰來,則這種算法即告被破解。但至少目前RSA還是安全的,因為從現在的數學理論上可以證明RSA的算法是一類NPC(NP完備)類問題,只要密鑰足夠長(RSA要求至少是10的100次方以上,實際使用時更要大得多),以現在最先進的計算機來算,其時間成本也是不可能達到的。
與上面兩種完全不同,前面兩種密碼是用于防止信息被竊取,而摘要算法的目標是用于證明原文的完整性,也就是說用于防止信息被篡改。通常也被稱為:HASH算法、雜湊算法、簽名算法。它的特點是:從不定長的原文中產生一個固定長度(如MD5是128位)的結果,稱為“簽名”(S),這個簽名必須對原文非常敏感,即原文即使是有少量的變化,也會導致這個簽名面目全非。比如傳統的CRC或是現在要說的MD5、SHA等都是這類算法。
摘要算法的用途通常是這樣的:
如Linux或一些論壇用的方法,用戶設置密碼時,服務端只記錄這個密碼的MD5,而不記錄密碼本身,以后驗證用戶身份時,只需要將用戶輸入的密碼再次做一下MD5后,與記錄的MD5作一個比較即可驗證其密碼的合法性。
比如發布一個程序,為了防止別人在你的程序里插入病毒或木馬,你可以在發布這個程序的同時,公開這個程序文件的MD5碼,這樣別人只需要在任何地方下載這個程序后做一次MD5,然后跟公開的這個MD5作一個比較就知道這個程序是否被第三方修改過。
一個安全的摘要算法在設計時必須滿足兩個要求:
尋找兩個輸入得到相同的輸出值在計算上是不可行的,這就是我們通常所說的抗碰撞的;
找一個輸出,能得到給定的輸入在計算上是不可行的,即不可從結果推導出它的初始狀態。
反之,如果某種摘要算法不能同時滿足上面兩個條件,則它就是不安全的。其實主要還是前一個條件,因為從理論上很容易證明后面一個條件基本上都是可以滿足的:
摘要算法對任意長的原文產生定長的簽名,按照香農的信息論,當原文的長度超過一定的程度的時候,簽名中就無法記錄原文中的所有信息,這意味著存在著信息的丟失,所以我說理論上不可能從簽名中恢復原文。
為什么說理論上呢?就是說當這種摘要算法被完全攻破時,也就是說可以從簽名恢復出任意原文,注意:是任意原文,因為所有的摘要算法的特點就是存在著一個無窮大的碰撞原文的集合。而真正的原文只是其中一份。對應這個無窮大的集合來說,這就是一個無窮小,便是我曾經說過的:
可能性為零,不表示不可能。
解釋得具體一點是這樣:假設原文含有信息量(I),而簽名的長度有限(如MD5的128位),則它的信息量只有(i),因為通常 i < I (除非原文非常短),所以可以這么說:I=i+i"。因為I沒有限制,而i有限制,則 i" 也是一個沒有限制的量。當進行摘要算法后,i" 信息就丟失了。
反過來,如果現在這種摘要算法被攻破了,可以從 i 反推回去,但因為 i" 信息已經丟失,意味著 i + I" (其中 I" 為任意信息)都可能是 I (碰撞)。但 I" 是一個無窮集合,并且 i" 屬于 I"。這說明:理論上可以從 I" 中找到 i" 從而恢復出原文 I ,但是可能性為零(1/∞=0)。
但要做到前面一點就不容易了。因為絕對無碰撞的算法不可能是一個摘要算法,而只能是一個無損壓縮算法。它必須包含原文的所有信息,也就意味著它一但被攻破,可以唯一地恢復出原文。并且它的結果肯定是不定長的,因為它需要包含原文的所有信息,當然會根據原文的長度而變。僅這兩點就決定了,它不可能是一個好的簽名算法。
最主要的一點是:摘要算法的用途決定了,它只要能找到碰撞就足以讓它失效,并不需要找到原文。
以前面的兩個例子來說:·
比如Linux的用戶安全機制,只要得到用戶密碼文件(其中記錄了密碼的MD5),然后隨便生成一個碰撞的原文(不一定要跟原密碼相同),就可以用這個密碼登錄了。
但后面的程序發布的例子就要難得多,因為它必須能生成特定的碰撞,即在程序中插入病毒或木馬后再填充一些數據使之生成與原來相同的MD5。
不過我昨天仔細想了一下,以MD5為例,要產生特定的碰撞應該還是不太可能的,因為MD5的128位信息量已經有點大了,如果要產生特定碰撞,需要填充的數據可能非常之大,導致偽造的原文比真實的原文大得多,可能達到若干個數量級的差別,這樣的偽造就已經失去意義了。
我舉的例子來說明一下。比如昨天我說的,假如有兩個人的指紋完全相同,而且我可以很快的找出這兩個人,那么,在法律角度來說,我們就不能把指紋作為一個有效證據。雖然這兩個同指紋的人并沒有互相冒充的意思。
同樣的,現在刻意去偽造文件并產生相同的MD5碼還做不到,但是,如果可以在短時間內找到兩份相同的檔案,他們的MD5碼相同,那么,MD5作為數字簽名的“法律意義”便失去了。而數字簽名是用來干嗎的?就是讓一個電子文檔具有法律意義的。所以,我說,這個發現是動搖了數字簽名的根基。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/11307.html
摘要:沒錯,年的破解就是證明了在碰撞上面不可靠,也就是可以通過某種方式快速的找到具有相同散列值的另一個信息。好,第二個不安全的誤區來了上述破解過程對于絕大多數散列函數來說,基本上都是一個道理。 轉載請注明出處 http://www.paraller.com 原文排版地址 點擊獲取更好閱讀體驗 轉載: http://blog.sina.com.cn/s/blog_77e8d1350100w...
摘要:真正要做高性能的系統,不僅需要在數據結構與算法層面深入,更要從硬件操作系統文件系統底層原理等多個領域做更多的研究例如阿里云自研的系統使用了裸盤技術。 《CDN之我見》共由三個篇章組成,分為原理篇、詳解篇和隕坑篇。本篇章適合那些從未接觸過、或僅了解一些 CDN 專業術語,想深入了解和感受 CDN 究竟是什么的同學。本次由白金老師繼續為大家分享《CDN之我見》系列二,主要講解緩存是什么、工...
摘要:真正要做高性能的系統,不僅需要在數據結構與算法層面深入,更要從硬件操作系統文件系統底層原理等多個領域做更多的研究例如阿里云自研的系統使用了裸盤技術。 《CDN之我見》共由三個篇章組成,分為原理篇、詳解篇和隕坑篇。本篇章適合那些從未接觸過、或僅了解一些 CDN 專業術語,想深入了解和感受 CDN 究竟是什么的同學。本次由白金老師繼續為大家分享《CDN之我見》系列二,主要講解緩存是什么、工...
摘要:的作用是讓大容量信息在用數字簽名軟件簽署私人密鑰前被壓縮成一種保密的格式就是把一個任意長度的字節串變換成一定長的十六進制數字串。獲取由位隨機大小寫字母數字組成的值每次從中隨機取一位獲取原始密碼的值原始密碼隨機生成位加密后的密碼 MD5是什么 下面的概念是百度百科的: Message Digest Algorithm MD5(中文名為消息摘要算法第五版)為計算機安全領域廣泛使用的一種散列...
閱讀 2889·2021-11-17 09:33
閱讀 3662·2021-11-16 11:42
閱讀 3488·2021-10-26 09:50
閱讀 1318·2021-09-22 15:49
閱讀 3046·2021-08-10 09:44
閱讀 3670·2019-08-29 18:36
閱讀 3925·2019-08-29 16:43
閱讀 2208·2019-08-29 14:10