1. 程式人生 > >MD5 SHA1 HMAC HMAC_SHA1區別(轉載網上大牛)個人備忘和加註了

MD5 SHA1 HMAC HMAC_SHA1區別(轉載網上大牛)個人備忘和加註了

MD5 SHA1 HMAC HMAC_SHA1區別

    什麼是MD5,什麼是SHA1,如何校驗這些Hash。還有拿單個apk檔案的MD5,SHA1訊問是不是原版的問題,在這裡,讓我們先來了解一些基本知識,瞭解Hash。

    Hash,一般翻譯做“雜湊”,也有直接音譯為”雜湊”的,就是把任意長度的輸入(又叫做預對映,pre-image),通過雜湊演算法,變換成固定長度的輸出,該輸出就是雜湊值。這種轉換是一種壓縮對映,也就是,雜湊值的空間通常遠小於輸入的空間,不同的輸入可能會雜湊成相同的輸出,而不可能從雜湊值來唯一地確定輸入值。

    簡單的說就是一種將任意長度的訊息壓縮到某一固定長度的訊息摘要的函式。

    Hash主要用於資訊保安領域中加密演算法,他把一些不同長度的資訊轉化成雜亂的128位的編碼裡,叫做Hash值.也可以說,Hash就是找到一種資料內容和資料存放地址之間的對映關係。

    瞭解了Hash基本定義,就不能不提到一些著名的Hash演算法,MD5和SHA1可以說是目前應用最廣泛的Hash演算法,而它們都是以MD4為基礎設計的。

MD4

    MD4(RFC1320)是MIT的RonaldL.Rivest在1990年設計的,MD是MessageDigest的縮寫。它適用在32位字長的處理器上用高速軟體實現--它是基於32位運算元的位操作來實現的。

MD5

    MD5(RFC1321)是Rivest於1991年對MD4的改進版本。它對輸入仍以512位分組,其輸出是4個32位字的級聯,與MD4相同。MD5比MD4來得複雜,並且速度較之要慢一點,但更安全,在抗分析和抗差分方面表現更好。

    MD5是一種不可逆的加密演算法,目前是最牢靠的加密演算法之一,尚沒有能夠逆運算的程式被開發出來,它對應任何字串都可以加密成一段唯一的固定長度的程式碼。

    那麼它有什麼用呢?很簡單,通過它可以判斷原始值是否正確(是否被更改過)。一般用於密碼的加密。而我們所提供的MD5校驗碼就是針對安裝程式的唯一對應的一段程式碼。你可以使用任何MD5運算器對下載的檔案進行運算,運算出來的結果如果完全符合我們提供的MD5校驗碼,那麼說明你下載的這個程式沒有被中途修改過。

    這個特徵碼有如下特性,首先它不可逆,例如我有一段祕密的文字如:”MySecretWords”,經演算法變換後得到MD5碼(b9944e9367d2e40dd1f0c4040d4daaf7),把這個碼告訴其他人,他們根據這個MD5碼是沒有系統的方法可以知道你原來的文字是什麼的。

    其次,這個碼具有高度的離散性,也就是說,原資訊的一點點變化就會導致MD5的巨大變化,例如,”ABC”MD5(902fbdd2b1df0c4f70b4a5d23525e932)和”ABC”(多了一空格)MD5(12c774468f981a9487c30773d8093561)差別非常大,而且之間沒有任何關係,也就是說產生的MD5碼是不可預測的。

    最後由於這個碼有128位那麼長,所以任意資訊之間具有相同MD5碼的可能性非常之低,通常被認為是不可能的。

    所以一般認為MD5碼可以唯一地代表原資訊的特徵,通常用於密碼的加密儲存,數字簽名,檔案完整性驗證等。

    檢視某檔案的md5值,dos命令列如下

certutil -hashfile D:\your.txt MD5

SHA1及其他

    SHA1是由NISTNSA設計為同DSA一起使用的,它對長度小於264的輸入,產生長度為160bit的雜湊值,因此抗窮舉(brute-force)性更好。SHA-1設計時基於和MD4相同原理,並且模仿了該演算法。SHA-1是由美國標準技術局(NIST)頒佈的國家標準,是一種應用最為廣泛的Hash函式演算法,也是目前最先進的加密技術,被政府部門和私營業主用來處理敏感的資訊。而SHA-1基於MD5,MD5又基於MD4。

    論壇裡提供的系統映象檔案的Hash也就是微軟官方提供的SHA-1值,下載後和此值對應,就說明你下載過程中檔案沒有被更改,屬於原版。

    檢視某檔案的SHA1值,dos命令如下:

certutil -hashfile D:\your.txt SHA1

HMAC_SHA1

    一直以為HMAC_SHA1和SHA1沒有任何區別,直到現在才發現它倆不是完全一樣的。

    HMAC的百度百科解釋:

    “HMAC是金鑰相關的雜湊運算訊息認證碼(Hash-based Message Authentication Code),HMAC運算利用雜湊演算法,以一個金鑰和一個訊息為輸入,生成一個訊息摘要作為輸出。”

    可以看出,HMAC是需要一個金鑰的。所以,HMAC_SHA1也是需要一個金鑰的,而SHA1不需要。






回到目錄

什麼是CRC

    CRC的全稱為CyclicRedundancyCheck,中文名稱為迴圈冗餘校驗。它是一類重要的線性分組碼,編碼和解碼方法簡單,檢錯和糾錯能力強,在通訊領域廣泛地用於實現差錯控制。實際上,除資料通訊外,CRC在其它很多領域也是大有用武之地的。例如我們讀軟盤上的檔案,以及解壓一個ZIP檔案時,偶爾會碰到“BadCRC”錯誤,由此它在資料儲存方面的應用可略見一斑。






回到目錄

這些Hash演算法到底有什麼用呢?

    Hash演算法在資訊保安方面的應用主要體現在以下的3個方面:

    1)檔案校驗

    我們比較熟悉的校驗演算法有奇偶校驗和CRC校驗,這2種校驗並沒有抗資料篡改的能力,它們一定程度上能檢測並糾正資料傳輸中的通道誤碼,但卻不能防止對資料的惡意破壞。

    MD5Hash演算法的”數字指紋”特性,使它成為目前應用最廣泛的一種檔案完整性校驗和(Checksum)演算法,不少Unix系統有提供計算md5checksum的命令。

    2)數字簽名

    Hash演算法也是現代密碼體系中的一個重要組成部分。由於非對稱演算法的運算速度較慢,所以在數字簽名協議中,單向雜湊函式扮演了一個重要的角色。對Hash值,又稱”數字摘要”進行數字簽名,在統計上可以認為與對檔案本身進行數字簽名是等效的。而且這樣的協議還有其他的優點。

    3)鑑權協議

    如下的鑑權協議又被稱作”挑戰--認證模式:在傳輸通道是可被偵聽,但不可被篡改的情況下,這是一種簡單而安全的方法。

    當然,hash函式並不是完全可靠,不同檔案產生相同MD5和SHA1的機率還是有的,只是不高,在我們論壇裡提供的系統光碟,你想對這麼幾個檔案存在相同HASH的不同檔案根本是不可能的。

    論壇MSDN版塊,提供的就是微軟釋出MSDN提供給程式設計師研究的Windows系統的映象的HASH值——SHA-1,不提供MD5因為微軟只提供了SHA1。而論壇釋出區釋出的映象是和這些值對應的映象,你校驗自己的映象的HASH和MSDN資訊區相應版本的SHA-1對應的上,說明你手中的光碟是微軟通過MSDN釋出的原盤。對不上還存在屬於零售或通過銷售渠道釋出的映象的可能。畢竟MSDN只是微軟釋出系統光碟的一個途徑,MSDN只是給程式開發人員研究用的。

    尋求原版的證實,對應SHA-1和MD5外,CRC的認證也是一個很重要的因素,CRC同樣是校驗檔案的完整性,還有CDIMGE的封裝版本。

    微軟出品的映象都能通過CRC驗證,當然也有人使用CRC自己進行製作可以得到通過CRC的映象,那麼這時候你需要對應映象的SHA-1等了,所以,驗證一個映象的原盤可以通過對應多個數值來完成。