1、消息摘要概述
??數(shù)據(jù)摘要算法是密碼學(xué)算法中非常重要的一個分支,它通過對所有數(shù)據(jù)提取指紋信息以實(shí)現(xiàn)數(shù)據(jù)簽名、數(shù)據(jù)完整性校驗(yàn)等功能,由于其不可逆性,有時候會被用做敏感信息的加密。
2、消息摘要算法特點(diǎn)
2.1 變成輸入、定長輸出
無論輸入的消息有多長,計(jì)算出來的消息摘要的長度總是固定的。例如應(yīng)用MD5算法摘要的消息有128個比特位,用SHA-1算法摘要的消息最終有160比特位的輸出。
2.2 輸入不同、摘要不同,輸入相同、摘要相同
只要輸入的消息不同,對其進(jìn)行摘要以后產(chǎn)生的摘要消息也必不相同;但相同的輸入必會產(chǎn)生相同的輸出。這正是好的消息摘要算法所具有的性質(zhì):輸入改變了,輸出也就改變了;兩條相似的消息的摘要確不相近,甚至?xí)笙鄰酵?。從理論上來說,不管使用什么樣的摘要算法,必然存在2個不同的消息,對應(yīng)同樣的摘要。因?yàn)檩斎胧且粋€無窮集合,而輸出是一個有限集合,所以從數(shù)學(xué)上來說,必然存在多對一的關(guān)系。但是實(shí)際上,很難或者說根本不可能人為的造出具有同樣摘要的2個不同消息。
2.3 單向、不可逆、散列值不同、原始值不同
消息摘要是單向、不可逆的。只能進(jìn)行正向的信息摘要,而無法從摘要中恢復(fù)出任何的原始消息,甚至根本就找不到任何與原信息相關(guān)的信息。當(dāng)然,可以采用強(qiáng)力攻擊的方法,即嘗試每一個可能的信息,計(jì)算其摘要,看看是否與已有的摘要相同,如果這樣做,最終肯定會恢復(fù)出摘要的消息。但實(shí)際上,要得到的信息可能是無窮個消息之一,所以這種強(qiáng)力攻擊幾乎是無效的。
2.4 “碰撞” 難找到
好的摘要算法,沒有人能從中找到“碰撞”,雖然“碰撞”是肯定存在的。即無法找到兩條不同消息,但是它們的摘要相同。
3、消息摘要的分類
(1)MD(Message Digest) 消息摘要算法
(2)SHA(Secure Hash Algorithm) 安全散列算法
(3)MAC(Message Authentication Code) 消息認(rèn)證碼算法
4、消息摘要用途
4.1、檢查軟件與數(shù)據(jù)是否被篡改
檢查我們下載的軟件是否被篡改過。很多軟件,都會將軟件通過單向散列值函數(shù)計(jì)算,將散列值公布自己在官網(wǎng)上。網(wǎng)盤4G文件秒傳也是應(yīng)用的次特性。
4.2、基于口令的加密
單向散列函數(shù)也被用于基于口令加密(Password Base Encryption PBE)
PBE的原理是將口令和鹽(salt,通過隨機(jī)數(shù)生成器生成)混合后計(jì)算其散列值。防御口令字典的攻擊。
4.3、消息認(rèn)證碼
消息認(rèn)證碼是將“發(fā)送者和接收者直接的共享的密鑰”和“消息” 進(jìn)行混合后計(jì)算出散列值。使用消息認(rèn)證碼可以防止消息的錯誤、篡改、偽裝。
4.4、數(shù)據(jù)簽名
數(shù)據(jù)簽名非常耗時,一般會對消息先進(jìn)行摘要處理,處理后直接對象消息摘要信息進(jìn)行述職簽名。
4.5、偽隨機(jī)數(shù)
密碼技術(shù)中,所使用的隨機(jī)數(shù)需要“不能根據(jù)過去的隨機(jī)數(shù)數(shù)列,預(yù)測未來的隨機(jī)數(shù)數(shù)列”這樣的性質(zhì),可以利用單向哈希函數(shù)的性質(zhì)。
4.6、一次性口令
使用單向哈希函數(shù),可以構(gòu)造一次性口令。一次性口令常被用于服務(wù)器和客戶端的合法認(rèn)證,在這種方式中,通過單向散列函數(shù)可以保證,口令只在通訊鏈路上傳遞一次,因此即使竊聽者獲取,也無法使用。
5. 散列算法破解
(1) 算法破解
已知數(shù)據(jù)A和消息的散列值,找到另外一個數(shù)據(jù)B和A的散列值相同。例如2005年2月,王小云破解SHA-1 算法。

(2) 假破解
根據(jù)數(shù)據(jù)庫查詢散列值,查詢數(shù)據(jù)對應(yīng)的明文。數(shù)據(jù)樹數(shù)據(jù)越多破解的概率越大,例如密碼使用md5加密,因?yàn)槊艽a長度一般都是1-8位的,所以數(shù)據(jù)庫可以窮舉這些值,提供逆向查詢。
如果讀完覺得有收獲的話,歡迎點(diǎn)贊、關(guān)注、加公眾號【小工匠技術(shù)圈】
個人公眾號,歡迎關(guān)注,查閱更多精彩歷史!