1、散列函數在信息安全方面的具體應用html
一、散列函數定義算法
Hash,通常翻譯作"散列",也有直接音譯爲"哈希"的,就是把任意長度的輸入(又叫作預映射),經過散列算法,變換成固定長度的輸出,該輸出就是散列值。這種轉換是一種壓縮映射,也就是,散列值的空間一般遠小於輸入的空間,不一樣的輸入可能會散列成相同的輸出,而不可能從散列值來惟一的肯定輸入值。簡單的說就是一種將任意長度的消息壓縮到某一固定長度的消息摘要的函數。MD5 和 SHA1 能夠說是目前應用最普遍的Hash算法,而它們都是以 MD4 爲基礎設計的。數據庫
二、散列函數的具體應用
(1)文件校驗
咱們比較熟悉的校驗算法有奇偶校驗和CRC校驗,這2種校驗並無抗數 據篡改的能力,它們必定程度上能檢測並糾正數據傳輸中的信道誤碼,但卻不能防止對數據的惡意破壞。
MD5 Hash算法的"數字指紋"特性,使它成爲目前應用最普遍的一種文件完整性校驗和(Checksum)算法,很多Unix系統有提供計算md5 checksum的命令。
(2)數字簽名
Hash 算法也是現代密碼體系中的一個重要組成部分。因爲非對稱算法的運算速度較慢,因此在數字簽名協議中,單向散列函數扮演了一個重要的角色。對 Hash 值,又稱"數字摘要"進行數字簽名,在統計上能夠認爲與對文件自己進行數字簽名是等效的。
(3)鑑權協議
以下的鑑權協議又被稱做"挑戰--認證模式:在傳輸信道是可被偵聽,但不可被篡改的狀況下,這是一種簡單而安全的方法。瀏覽器
三、正確的應用場景
(1)數據校驗
HASH函數有相似數據冗餘校驗相似的功能,可是它比簡單的冗餘校驗碰撞的機率要小得多,故而在現代密碼學中老是用HASH來作關鍵數據的驗證。
(2)單向性的運用
利用HASH函數的這個特色,咱們可以實現口令,密碼等安全數據的安全存儲。密碼等不少關鍵數據咱們須要在數據庫中存儲,可是在實際運用的過程當中,只是作比較操做,故而咱們能夠比較HASH結果。
(3)碰撞約束以及有限固定摘要長度
數字簽名正是運用了這些特色來提升效率的。咱們知道非對稱加密算法速度較低,經過HASH處理咱們可使其僅僅做用於HASH摘要上,從而提升效率。
(4)能夠運用HASH到隨機數的生成和密碼,salt值等的衍生中
由於HASH算法可以最大限度的保證其惟一性,故而能夠運用到關鍵數據的衍生中(從一個隨機的種子數產生,而且不暴露種子自己祕密)。安全
2、結合生日攻擊、以及200四、2005年王曉雲教授有關MD5安全性和2017年Google公司SHA-1的安全性,說明散列函數的安全性以及目前安全散列函數的發展網絡
生日攻擊是利用機率論中的生日問題,找到衝突的Hash值,僞造報文,使身份驗證算法失效。函數
生日悖論是指,若是一個房間裏有23個或23個以上的人,那麼至少有兩我的的生日相同的機率要大於50%。這就意味着在一個典型的標準小學班級(30人)中,存在兩人生日相同的可能性更高。對於60或者更多的人,這種機率要大於99%。從引發邏輯矛盾的角度來講生日悖論並非一種悖論,從這個數學事實與通常直覺相抵觸的意義上,它才稱得上是一個悖論。大多數人會認爲,23人中有2人生日相同的機率應該遠遠小於50%。工具
二、200四、2005年王曉雲教授有關MD5安全性測試
MD5是一種不可逆的加密算法,md5的全稱是message-digest algorithm 5。在90年代初開發出來,經md二、md3和md4發展而來。它的做用是讓大容量信息在用數字簽名軟件簽署私人密匙前被"壓縮"成一種保密的格式(就是把一個任意長度的字節串變換成必定長的大整數)。網站
MD5是一個較爲古老的算法,一度被普遍應用於安全領域。好比在UNIX系統中用戶的密碼就是以MD5(或其它相似的算法)經加密後存儲在文件系統中。當用戶登陸的時候,系統把用戶輸入的密碼計算成MD5值,而後再去和保存在文件系統中的MD5值進行比較,進而肯定輸入的密碼是否正確。
在用戶密碼的處理方面,MD5總的來看還算是安全的,至少比明文保存密碼要好的多,目前破解MD5主要依靠大型字典的方法,將經常使用密碼進行MD5後創建數據庫,而後和MD5數值進行對比,經過這樣的方法來「破解」MD5,所以,一般直接將密碼進行MD5處理的話,一些弱密碼很容易能夠經過這種手段「破解」出來。
不過,若是在散列的過程當中,加入足夠長的salt(即干擾字符串),而且salt加入一些動態信息,例如username、隨機碼等,這樣生成的MD5仍是很難被破解的,由於僅僅從數據庫沒法看到MD5具體的處理過程,必須同時看處處理時的源代碼才能夠,這就給破解MD5帶來至關大的難度。
王曉雲教授證實了MD5碰撞的存在,跟破解自己沒多大關係。以前人們廣泛認爲用MD5加密產生的密文至關多,不可能重複,可是王曉雲教授可以找到不一樣的明文可是它們加密後產生了相同的密文。2004年8月17日在美國加州聖巴巴拉舉行了一次國際密碼學學術年會(Crypto’2004),當晚來自中國山東大學的王小云教授作了關於破譯 MD五、HAVAL-12八、 MD4和RIPEMD算法的報告。
三、2017年Google公司SHA-1的安全性
Google 的安全團隊剛剛創造了計算機加密學在 2017 年的第一個里程碑:他們攻破了SHA-1安全加密算法。
SHA-1 是什麼?
SHA-1(全稱 Secure Hash Algorithm-1)是一種安全加密算法,最主要的用途是數字簽名。
這是由於,使用相似於 SHA-一、MD5 這樣的哈希算法,對任何文件,不管文本文檔、表格、音樂mp三、PDF、可執行文件等進行計算後,都會得出像上圖中這樣的字段(哈希值)。在過去只要文件不一樣,對應的哈希值都絕對不同,就像是給每一個文件都加上了數字的簽名。
對於下載者來講,原文件的哈希值很重要:當你下載了一個軟件,用文件校驗工具查看它的 SHA-1/MD5 值,若是和原文件的不同,你就得當心了,由於文件顯然被修改過了,而裏面可能包含了病毒或其餘惡意代碼。
SHA-1 和 MD5 是目前世界上最爲經常使用的文件校驗加密算法。其中,SHA-1 已經誕生 10 年之久,在過去一直被認爲是比較安全和可靠的算法——直到今天。
此次攻破被命名爲 SHAttered attack。研究者提供了兩張內容大相徑庭,在顏色上存在明顯差別,但 SHA-1 哈希值卻徹底相同的 PDF 文件做爲證實:
哈希碰撞(hash collision,即兩個不一樣文件哈希值一致,也有譯做哈希衝突)原本不該該發生。但實際上,當哈希算法存在漏洞時,一個有足夠實力的攻擊者可以製造出碰撞。進而,攻擊者能夠用去攻擊那些依靠哈希值來校驗文件的系統,植入錯誤的文件形成惡果。
四、散列函數的安全性
生日攻擊:生日攻擊方法沒有利用Hash函數的結構和任何代數弱性質,它只依賴於消息摘要的長度,即Hash值的長度。是對任何HASH都適用的普適的攻擊方法,應對方法也很簡單,增長HASH的長度,可是很難完成。
SHA-1算法:而早在 2014 年,Google 就宣佈了逐漸放棄 SHA-1 的決定。去年開始,Google 的 Chrome 瀏覽器已經再也不支持 SHA-1 證書,會將其標記爲不安全。當證書過時以後,瀏覽器將沒法訪問這些網站。Google 方面也推薦 IT 人士採用 SHA-256 等更安全的算法。
MD5:2004年8月中國密碼學家王曉雲教授等首次公佈了提出一種尋找MD5碰撞的新方法。目前利用該方法用普通微機幾分鐘內便可找到MD5的碰撞。MD5已經被完全攻破。
五、安全散列函數的發展
由於所需的安全散列長度愈來愈長,所以咱們可使用有限定義域上的散列函數(俗稱壓縮函數)經過迭代方式拓展爲具備無限定義域的散列函數。而最爲表明性的就Merkle-Damgard結構。
(2)Merkle-Damgard結構:
這個結構的好處是,若是壓縮函數是抗碰撞的,那通過此結構處理後的散列函數也是抗碰撞的。HMAC就是基於這種結構,由於Merkle-Damgard結構並不能抵抗擴展攻擊,所以HMAC引入了Key。
(3)散列函數發展:
安全Hash算法SHA(secure hash algorithm) 由美國標準與技術研究所(NIST)設計並1993年做爲聯邦信息處理標準(FIPS 180)發佈,修改版於1995年發佈,一般稱之爲SHA1,該標準稱爲安全Hash函數。
MD4是麻省理工學院教授Ronald Rivest於1990 年設計的一種信息摘要算法。它是一種用來測試信息完整性的密碼散列函數的實行。其摘要長度爲128位。這個算法影響了後來的算法如MD五、SHA 家族和RIPEMD等。MD5算法是1991年發佈的一項數字簽名加密算法,它當時解決了MD4算法的安全性缺陷,成爲應用很是普遍的一種算法。
MD5多年前被設計用於安全用途,是一種計算方便,碰撞機率極低的Hash算法,不過如今已經不安全了。
3、結合md5算法中的選擇前綴碰撞以及第二個連接中的helloworld.exe和goodbyworld.exe兩個可執行文件的md5消息摘要值和兩個文件的執行結果說明md5算法來驗證軟件完整性時可能出現的問題
一、md5中的選擇前綴碰撞
MD5就是這樣一個在國內外有着普遍的應用的雜湊函數算法,它曾一度被認爲是很是安全的。然而,王小云教授發現,能夠很快的找到MD5的「碰撞」,就是兩個文件能夠產生相同的「指紋」。構造前綴碰撞能夠生成兩個不一樣的文件,而這兩文件的md5倒是同樣的。這意味着,當你在網絡上使用電子簽名簽署一份合同後,還可能找到另一份具備相同簽名但內容迥異的合同,這樣兩份合同的真僞性便無從辨別。王小云教授的研究成果證明了利用MD5算法的碰撞能夠嚴重威脅信息系統安全,這一發現使目前電子簽名的法律效力和技術體系受到挑戰。
選擇前綴攻擊是構造兩個不一樣的消息s1和s2,他們沒必要有共同的前綴,可是通過在尾部附加不一樣的「碰撞塊」後,兩個消息的散列值相同。
二、可能出現的問題
這兩個不一樣功能的程序會在屏幕上打印出不一樣的字符,(圖中爲其中一個的執行結果)可是它們的MD5都是一致的。不一樣內容不一樣功能的可執行文件能夠僞造MD5碼,若是僅僅是想要生成 MD5 相同而內容不一樣的文件的話,在任何主流配置的電腦上用幾秒鐘就能夠完成了。MD5 算法不該再被用於任何軟件完整性檢查或代碼簽名的用途。即md5算法已經不安全,即便驗證成功,文件也已經有可能被篡改或者加入木馬病毒,則以上體現出的安全問題已經十分嚴重,便可能出現的問題。
參考連接:
http://www.williamlong.info/archives/3229.html
http://security.ctocio.com.cn/securitynews/371/8197871.shtml