密碼學中,Hash函數被普遍應用於各類不一樣的安全應用和網絡協議中。如下是散列函數的一些具體應用。html
1.消息認證算法
(1)消息認證概念:消息認證是用來驗證消息完整性的一種機制和服務。消息認證確保收到的消息和發送時是同樣的,同時確保發送方聲稱的身份是真實有效的,當Hash函數用於提供消息認證功能時,被稱爲消息摘要。安全
(2)使用Hash函數的本質:發送者根據待發送的消息使用該函數計算一組Hash值,而後將Hash值和消息一塊兒發送過去。接收者收到後對於消息執行一樣Hash計算,並將結果與收到的Hash值進行對比。若是不匹配,則接收者推斷出消息(或Hash值)遭到了篡改。網絡
(3)Hash碼可以經過以下不一樣方法提供消息認證:函數
a.使用對稱密碼算法加密消息和Hash碼。工具
b.使用對稱密碼算法只對Hash碼進行加密。測試
c.不使用加密算法,僅使用Hash函數實現消息認證。(假設通訊雙方共享私密值S)網站
d.經過將整個消息和Hash值加密,可以在c的基礎上提供保密性。雲計算
(4)通常狀況,消息認證是經過MAC實現的。通訊雙方基於共享的同一密鑰來認證彼此之間交互的信息時,就會使用MAC。MAC是Hash函數和加密函數操做的結合。而且提供了安全保護,用以抵抗不知道密鑰的攻擊者的攻擊。加密
2.數字簽名
(1)數字簽名簡述:數字簽名的操做與MAC類似,在進行數字簽名過程當中使用用戶的私鑰加密消息的Hash值,其餘人任何知道該用戶公鑰的人都可以經過數字簽名來驗證消息的完整性。數字簽名的應用比消息認證更爲普遍。
(2)Hash碼用於提供數字簽名的方案:
a.使用發送方的私鑰,利用公鑰密碼算法僅對Hash碼進行加密。
b.先用發送方私鑰對Hash碼加密,再用對稱密碼中的密鑰對消息和公鑰算法加密結果加密。
3.其餘應用
(1)產生單向口令文件。當用戶輸入口令時,操做系統將比對輸入口令的Hash值和存儲在口令文件中的Hash值。
(2)入侵檢測和病毒檢測。將每一個文件的Hash值H(F)存儲在安全系統中,隨後就可以經過從新計算H(F)來判斷文件是否被修改過。
(3)密碼學Hash函數可以用於構建隨機函數PRF或用做僞隨機數發生器。基於Hash函數的PRF可用於對稱密碼中的密鑰產生。
1.生日攻擊
(1)生日悖論是指,若是一個房間裏有23個或23個以上的人,那麼至少有兩我的的生日相同的機率要大於50%。咱們能夠將生日悖論用在碰撞,獲得不一樣Message有着相同tag。
(2)生日攻擊步驟:
2.MD5安全性和SHA-1的安全性
2004年8月中國密碼學家王小云教授等首次公佈了提出一種尋找MD5碰撞的新方法。目前利用該方法用普通微機幾分鐘內便可找到MD5的碰撞。MD5已經被完全攻破。在2017年,Google公司宣佈實現了對SHA-1算法的攻擊。SHA-1算法宣告攻破。不過須要注意的是,此次SHA-1算法破解的計算量至關於單個CPU計算6500年和單個GPU計算110年,所以就目前的PC硬件來看,依靠一臺電腦完成破解是不現實的。然而密碼學家認爲,若是利用雲計算技術來破解的話,這件事情將簡單不少,可能只須要17萬美圓的預算便可完成,所以儘快改用安全性更高的SHA-2或SHA-3算法纔是正確的作法。
3.散列函數安全性
(1)有兩種方法能夠攻擊安全散列函數:密碼分析法和暴力攻擊法。散列函數抵抗暴力攻擊的強度徹底依賴於算法生成的散列碼長度。
(2)安全散列函數結構:由於所需的安全散列長度愈來愈長,所以咱們可使用有限定義域上的散列函數(俗稱壓縮函數)經過迭代方式拓展爲具備無限定義域的散列函數。而最爲表明性的就Merkle-Damgard結構。
Merkle-Damgard結構:
4.散列函數的發展
(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位。
(5)SHA系列 SHA (Secure Hash Algorithm,譯做安全散列算法) 是美國國家安全局 (NSA) 設計,美國國家標準與技術研究院 (NIST) 發佈的一系列密碼散列函數,經歷了SHA-0,SHA-1,SHA-2,SHA-3系列發展。2002年,NIST分別發佈了SHA-25六、SHA-38四、SHA-512,這些算法統稱SHA-2。2008年又新增了SHA-224。NSA於2007年正式宣佈在全球範圍內徵集新新一代(SHA-3)算法設計,2012年公佈評選結果, Keccak算法最終獲勝成爲惟一官方標準SHA-3算法,但還有四種算法同時進入了第三輪評選,分別是:BLAKE, GrøSTL, JH和SKEIN,這些算法其實也很是安全,並且經受審查,被各類競爭幣頻繁使用。
1.選擇前綴碰撞
(1)早期的碰撞樣本,主要採用「前綴構造法」。前綴構造法碰撞後的兩個樣本只有尾部少許字節不一樣,而程序代碼是相同的。經過判斷尾部數據的差別,兩個樣本能夠執行不一樣的程序流程。因爲這種碰撞手法是經過同一前綴程序碰撞生成的兩個樣本,若是其中有惡意代碼流程則兩個樣本均包含惡意代碼,因此比較容易被安全軟件識別,隱蔽性較差。
(2)「選擇前綴碰撞法」(Chosen-prefix collsion[[1]])實現原理:
經過選擇不一樣的前綴,計算生日數和碰撞塊添加到文件尾部,便可獲得兩個具備相同的MD5的文件。不過,要計算出這些尾部數據並不容易,直接使用hashclash[[1]]的工具須要至關大的時間成本,可是碰撞做者對該工具進行改進後已經可以高效完成大量正常程序與惡意程序的碰撞了。
2.兩個可執行文件的MD5消息摘要值和兩個文件的執行結果
HelloWorld.exe
GoodbyeWorld.exe
這兩個程序會在屏幕上打印出不一樣的字符,可是它們的MD5都是一致的。這幾位密碼學家使用的是「構造前綴碰撞法」(chosen-prefix collisions)來進行這次攻擊。
3.MD5驗證軟件完整性時可能出現的問題
(1)兩個不一樣的程序,MD5多是相同的。
(2)不能經過校驗MD5知道網站是否被黑客入侵篡改,是否曾被惡意植入病毒或木馬。
(3)當軟件過大時,在驗證過程當中所需的時間也會大大增長,對於第三方而言,攻擊的成功機率也會增長。
(4)若是有第三方在驗證軟件完整性時截取軟件代碼,使用快速MD5碰撞生成器,在短期內僞造一份相同的MD5,並惡意篡改軟件,那麼安全性將會大大降低。
參考博客:
https://blog.csdn.net/jerry81333/article/details/52763070 抗碰撞性、生日攻擊及安全散列函數結構解析
https://blog.csdn.net/hherima/article/details/36879321 網絡安全-安全散列函數,信息摘要SHA-1,MD5原理
http://www.freebuf.com/articles/93780.html MD5碰撞的演化之路