前言:
爲了方便查看博客,特意申請了一個公衆號,附上二維碼,有興趣的朋友可以關注,和我一起討論學習,一起享受技術,一起成長。
1. 簡介
2. 摘要算法
2.1 定義
摘要算法: 摘要算法是一種對“信息”進行【摘要化】處理的算法。(好比一篇論文的摘要部分。通過了解文章的【摘要】,簡要了解下文章的主要內容)數據摘要算法也被稱爲哈希(Hash)算法或散列算法。
2.2 特點
(1)無論輸入的消息有多長,計算出來的消息摘要的長度總是固定的。例如:應用 MD5 算法摘要的消息有 128 個比特位,用SHA-1 算法摘要的消息最終有 160 個比特位的輸出,SHA256 可以產生 256 個比特位的消息摘要。一般摘要的最終輸出越長,該摘要算法就越安全。變長輸入,定長輸出。
(2)只要輸入的消息不同,對其進行摘要以後產生的摘要消息也必不相同;但相同的輸入必會產生相同的輸出。如果輸入改變了,輸出也改變。
(3)消息摘要是單向、不可逆的。只能進行正向的信息摘要,即無法從摘要中恢復出任何的原始消息,甚至根本就找不到任何與原信息相關的信息。當然,可以採用強力攻擊的方法,即嘗試每一個可能的信息,計算其摘要,看看是否與已有的摘要相同,如果這樣做,最終肯定會恢復出摘要的消息。但實際上,要得到的信息可能是無窮個消息之一,所以這種強力攻擊幾乎是無效的。
(4)好的摘要算法,沒有人能從中找到“碰撞”,雖然“碰撞”是肯定存在的。即無法找到兩條不同消息,使它們的摘要相同。從理論上來說,不管使用什麼樣的摘要算法,必然存在 2 個不同的消息對應同樣的摘要。因爲輸入是一個無窮集合,而輸出是一個有限集合,所以從數學上來說,必然存在多對一的關係。但是實際上,很難或者說根本不可能人爲的造出具有同樣摘要的 2 個不同消息。
2.3 作用
(1)消息摘要保證了消息的完整性。接收者在事先知道消息的原始摘要的前提下,如果發送者發送的消息,在傳輸過程中被篡改,那麼接收者收到消息後,同樣的摘要算法計算其摘要,如果新摘要與發送者原始摘要不同,那麼接收者就知道消息被篡改了。
(2)使用摘要算法作爲數字簽名算法。通過數字簽名還能實現對信源的身份識別(認證),即確定“信源”是否是信宿意定的通信夥伴。 數字簽名應該具有唯一性,不可僞造性,不可逆性。
2.4 種類
常見的信息摘要算法有:MD2/4/5;SHA1/SHA224/SHA256/SHA384/SHA512;SM3算法;MAC算法等。
2.4.1 MD(Message Digest)——消息摘要
MD 算法在網絡應用上也比較常見,比如:在某個網站上下載一個文件,通常它會標識該文件的 MD5 值,當下載者完成下載文件到本地之後,使用工具對下載的文件執行 MD5 計算,求出一個 MD5 摘要值,與網站上給出的參考 MD5 值進行對比;如果兩者相等,則表示下載的文件是可靠的,沒有被篡改過的;反之,如果 MD5 值對不上,則表明下載的文件是被篡改過的,可能是網絡攻擊者投放的病毒攜帶文件或者是在下載的過程中文件出現了損壞等情況,此時應該對文件進行刪除操作。
如上圖:可計算一個壓縮文件的 MD5 值。
MD 系列的算法主要有 MD2、MD4、MD5,數字值越大表示 MD 算法的版本越高,從安全性上說:MD5 > MD4 > MD2。
MD系列的信息摘要算法,輸出的信息摘要長度都是固定的 128bits(16字節),當不同的信息輸入時,產生的信息摘要也不相同;反之,當信息摘要相同,可以認爲信息的明文是相同的。
2.4.2 SHA(Secure Hash Algorithm)——安全散列
SHA系列的算法從版本上劃分有 SHA-1 和 SHA-2。它們兩者之間在構造上和簽名的位數上都有不同和簽名的位長。
SHA-1 就是我們常見到的 SHA1;SHA-2 主要有 SHA224、SHA256、SHA384、SHA512等,不同的數字代表信息摘要輸出的位數。與 MD 系列算法類似,數字值越高表示摘要算法的安全性越高,計算的複雜性也越大;但不同於 MD 算法,SHA 算法每個算法輸出的信息摘要長度是不一樣的。
2.4.3 SM(Shangyong Mima)——國密算法(商用密碼)
國密即國家密碼局認定的國產密碼算法,即商用密碼。 在國密算法的列表中,SM3 算法就是實現了類似 MD 算法和 SHA 算法的信息摘要算法。它和其他 2 種摘要算法一樣,都是不同長度的信息輸入,產生固定長度的摘要輸出。不同的是,它輸出的信息摘要長度固定爲 256bits,即 32 字節。在實際使用過程中,SM3 算法比較少會單獨使用,而是配合SM2【非對稱加密算法】配合使用,實現數字驗籤和消息驗籤的應用。
2.4.4 MAC(Message Authentication Code):消息認證碼
MAC 算法是帶密鑰的 Hash 函數:消息的散列值由只有通信雙方纔知道的祕密密鑰 Key 來控制。
MAC 算法是一個統稱,它很多種實現,在 POS 行業,常用的 MAC 算法有 CUP 模式、EMV2000 模式、或者自定義形式的MAC 算法。MAC 算法的核心是如何將輸入數據分組,利用 MAC KEY 做一些 XOR、移位、加密等操作,使得輸入數據散列化,最後再利用 MAC KEY 執行加密操作(通常爲對稱加密)得到 MAC 值。
2.5 各種摘要算法的比較
信息摘要算法 | 信息輸入長度 | 摘要輸出長度 | 密鑰 | 安全性 |
---|---|---|---|---|
MD5 | * | 128bits(16字節) | 無 | 低,有被碰撞的可能性 |
SHA1 | <2^64 | 160bits(20字節) | 無 | 低,有被碰撞的可能性 |
SHA224 | <2^64 | 224bits(28字節) | 無 | 較高 |
SHA256 | <2^64 | 256bits(32字節) | 無 | 高,推薦使用,最長使用 |
SHA384 | <2^128 | 384bits(48字節) | 無 | 高,推薦使用 |
SHA512 | <2^128 | 512bits(64字節) | 無 | 高,高安全性場景下推薦使用 |
SM3 | * | 256bits(32字節) | 無 | 高,推薦使用 |
MAC | * | 不同的MAC算法不同,有的是8字節,有的是16字節 | 有 | 高,除非密鑰被破解 |