散列函數的應用及安全性算法
目錄:瀏覽器
1、散列函數的具體應用;安全
2、散列函數的安全性以及目前安全散列函數的發展;網絡
3、md5算法來驗證軟件完整性時可能出現的問題。函數
1、散列函數的具體應用:測試
密碼學中,Hash函數被普遍應用於各類不一樣的安全應用和網絡協議中。網站
1. 消息認證google
消息認證是用來驗證消息完整性的一種機制和服務。消息認證確保收到的消息和發送時的同樣的(即沒有修改、插入、刪除或重放)。一般還要求消息認證機制確保發送方聲稱的身份是真實有效的,當Hash函數用於提供消息認證功能時,被稱爲消息摘要。加密
應用消息認證時,發送者根據待發送的消息使用該函數計算一組Hash值,而後將Hash值和消息一塊兒發送過去。接收者收到後對於消息執行一樣Hash計算,並將結果與收到的Hash值進行對比。若是不匹配,則接收者推斷出消息(或Hash值)遭到了篡改。可是假如hash值和消息同時遭到了篡改,接收者是不知情的。這要求咱們要以安全的方式傳輸hash值。spa
2. 數字簽名
數字簽名的操做與MAC類似,在進行數字簽名過程當中使用用戶的私鑰加密消息的Hash值,其餘人任何知道該用戶公鑰的人都可以經過數字簽名來驗證消息的完整性。數字簽名的應用比消息認證更爲普遍。
3. 文件校驗
譬如奇偶校驗和CRC校驗,這2種校驗並無抗數據篡改的能力,它們必定程度上能檢測並糾正數據傳輸中的信道誤碼,但卻不能防止對數據的惡意破壞。
4. 鑑權協議
須要鑑權的一方,向被鑑權的一方發送隨機串(「挑戰」),被鑑權方將該隨機串和本身的鑑權口令字一塊兒進行 Hash 運算後,返還鑑權方,鑑權方將收到的Hash值與在己端用該隨機串和對方的鑑權口令字進行 Hash 運算的結果相比較(「認證」),如相同,則可在統計上認爲對方擁有該口令字,即經過鑑權。
5. 郵件相關
保密加強郵件 PEM(Privacy Enhanced Mail),因特網保密性加強郵件標準,提供的消息完整性檢查中的鑑別使用的單項散列函數MD2和MD5;郵件加密軟件PGP 中2.6.3版本中使用的單項散列函數是MD5。
6. 產生單向口令文件。操做系統存儲口令的Hash值而不是口令自己,當用戶輸入口令時,操做系統將比對輸入口令的Hash值和存儲在口令文件中的Hash值(大多操做系統的口令保護機制)。
2、結合生日攻擊、以及200四、2005年王曉雲教授有關MD5安全性和2017年google公司SHA-1的安全性,說明散列函數的安全性以及目前安全散列函數的發展。
1.生日攻擊
(是利用機率論中的生日問題,找到衝突的Hash值,僞造報文,使身份驗證算法失效。
什麼是生日問題呢?在一個教室中最少只需有23個多少學生就可使至少有兩個學生的生日在同一天的機率不小於1/2。
同理,對應到散列函數中,不多的輸入值就會有很大的可能使兩個輸出值徹底相同。這無疑是不安全的。
2. 防範方法
3. MD5安全性和SHA-1的安全性
Van Oorschot和Wiener曾經提出,花費1000萬美圓涉及一個被專門用來搜索MD5算法碰撞的機器,則平均24天內就能夠找到一個碰撞。2004年8月中國密碼學家王小云教授等首次公佈了提出一種尋找MD5碰撞的新方法。目前利用該方法用普通微機幾分鐘內便可找到MD5的碰撞。MD5已經被完全攻破。
在2017年,Google公司宣佈實現了對SHA-1算法的攻擊。SHA-1算法宣告攻破。
4. 散列函數的安全性
(1)經過對於生日攻擊的瞭解,散列函數的安全性是有待提升的。生日攻擊並無利用任何HASH函數的性質,是對任何HASH都適用的普適的攻擊方法,應對方法也很簡單,增長HASH的長度,可是很難完成。
(2)有兩種方法能夠攻擊安全散列函數:密碼分析法和暴力攻擊法。散列函數抵抗暴力攻擊的強度徹底依賴於算法生成的散列碼長度。
5.目前安全散列函數的發展
MD系列
(1)MD2 Rivest在1989年開發出MD2算法。在這個算法中,首先對信息進行數據補位,使信息的字節長度是16的倍數。而後,以一個16位的檢驗和追加到信息末尾。而且根據這個新產生的信息計算出散列值。
(2)MD4 MD4是麻省理工學院教授Ronald Rivest於1990年設計的一種信息摘要算法。它是一種用來測試信息完整性的密碼散列函數的實行。經過三圈的操做將任意長度的消息變換成128位的哈希值。
(3)MD5 Rivest於1991年對MD4的改進版本。運用了四輪變換,而且每輪加上前一輪的結果。
(4)HAVAL 爲MD5的改進版本。輪數能夠爲三、4或5,輸出長度分別爲12八、160、192或224位。
SHA系列
2005年MD5的攻破彷佛宣告了SHA或許爲僅存的安全散列算法。
(1)SHA-0:SHA由美國標準與技術研究所(NIST)設計並於1993年發表,該版本稱爲SHA-0,因爲很快被發現存在安全隱患,
(2)SHA-1:1995年發佈了SHA-1。
(3)SHA-2:2002年,NIST分別發佈了SHA-25六、SHA-38四、SHA-512,這些算法統稱SHA-2。2008年又新增了SHA-224。
(4)因爲2017年SHA-1算法的攻破,目前已經有多家科技企業宣佈逐步放棄SHA-1算法,微軟已經肯定會放棄在Edge以及IE瀏覽器上繼續使用SHA-1算法的TLS證書,Google的Chrome在56版以後也會提示SHA-1加密的HTTPS網頁並不安全,Mozilla則肯定在今年7月開始中止SHA-1的支持。目前SHA-2各版本已成爲主流。
三.結合md5算法中的選擇前綴碰撞以及第二個連接中的helloworld.exe和goodbyworld.exe兩個可執行文件的md5消息摘要值和兩個文件的執行結果說明md5算法來驗證軟件完整性時可能出現的問題。
1. MD5和SHA-1:
MD5和SHA-1算法的核心是哈希函數。密碼學哈希函數(Cryptography Hash Function,簡稱爲哈希函數)又稱雜湊函數,是在信息安全領域有普遍和重要應用的密碼算法,主要做用是數據完整性驗證和消息認證。它有一種相似於指紋的應用,因此有時候咱們也把它叫作「數字指紋」。由於它具備如下特性:原始信息只要改變一點點,哪怕是幾比特,對應的消息摘要也會改變很大。
MD5算法的做用是讓大容量信息在用數字簽名軟件簽署私人密鑰前被"壓縮"成一種保密的格式(就是把一個任意長度的字節串變換成必定長的十六進制數字串)。
SHA-1已經被公衆密碼社羣作了很是嚴密的檢驗而還沒發現到有不安全的地方,它在一段時間被認爲是安全的,直到2017年,Google宣佈攻破SHA-1。
幾位密碼學家使用 「構造前綴碰撞法」(chosen-prefix collisions)來進行攻擊(是王小云所使用的攻擊方法的改進版本),他們所使用的計算機是一臺Sony PS3,且僅用了不到兩天。若是僅僅是想要生成MD5 相同而內容不一樣的文件的話,在任何主流配置的電腦上用幾秒鐘就能夠完成。
結論:MD5 算法不該再被用於任何軟件完整性檢查或代碼簽名的用途。
2. 選擇前綴碰撞及第二個連接中的實驗
構造前綴碰撞法可製做兩個內容不一樣但具備相同MD5驗證碼的文件,這是王小云教授所使用的攻擊方法的改進版本
如今,若是僅僅是想要生成 MD5 相同而內容不一樣的文件的話,在任何主流配置的電腦上用幾秒鐘就能夠完成了。
3. MD5驗證軟件完整性時可能出現的問題
(1)當軟件過大時,在驗證過程當中所需的時間也會大大增長,對於第三方而言,攻擊的成功機率也會增長。
(2)不能經過校驗MD5知道網站是否被入侵篡改,是否曾被惡意植入病毒或木馬/後門。
(3)若是有第三方在驗證軟件完整性時截取軟件代碼,使用快速MD5碰撞生成器,在短期內僞造一份相同的MD5,並惡意篡改軟件,那麼安全性將會大大降低。