Hash MD5 SHA-1 HMAC HMAC-SHA-1

轉自:http://blog.csdn.net/lvxiangan/article/details/42195429


1. Hash,一般翻譯做“散列”,也有直接音譯爲”哈希”的,就是把任意長度的輸入(又叫做預映射,pre-image),通過散列算法,變換成固定長度的輸出,該輸出就是散列值。這種轉換是一種壓縮映射,也就是,散列值的空間通常遠小於輸入的空間,不同的輸入可能會散列成相同的輸出,而不可能從散列值來唯一的確定輸入值。簡單的說就是一種將任意長度的消息壓縮到某一固定長度的消息摘要的函數。

HASH主要用於信息安全領域中加密算法,他把一些不同長度的信息轉化成雜亂的128位的編碼裏,叫做HASH值.也可以說,hash就是找到一種數據內容和數據存放地址之間的映射關係

 2. 瞭解了hash基本定義,就不能不提到一些著名的hash算法,MD5和SHA1可以說是目前應用最廣泛的Hash算法,而它們都是以MD4爲基礎設計的。那麼他們都是什麼意思呢?
1)MD4
 MD4(RFC1320)是MIT的RonaldL.Rivest在1990年設計的,MD是MessageDigest的縮寫。它適用在32位字長的處理器上用高速軟件實現--它是基於32位操作數的位操作來實現的。

 2)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碼可以唯一地代表原信息的特徵,通常用於密碼的加密存儲,數字簽名,文件完整性驗證等。

 3)SHA1及其他
安全哈希算法(Secure Hash Algorithm)主要適用於數字簽名標準 (Digital Signature Standard DSS)裏面定義的數字簽名算法(Digital Signature Algorithm DSA)。對於長度小於2^64位的消息,SHA1會產生一個160位的消息摘要。當接收到消息的時候,這個消息摘要可以用來驗證數據的完整性。在傳輸的過程中,數據很可能會發生變化,那麼這時候就會產生不同的消息摘要。 SHA1有如下特性:不可以從消息摘要中復原信息;兩個不同的消息不會產生同樣的消息摘要,(但會有1x10 ^ 48分之一的機率出現相同的消息摘要,一般使用時忽略)。

安全散列算法SHA (Secure Hash Algorithm)是美國國家標準和技術局發佈的國家標準FIPS PUB 180-1,一般稱爲SHA-1。其對長度不超過264二進制位的消息產生160位的消息摘要輸出,按512比特塊處理其輸入。
SHA是一種數據加密算法,該算法經過加密專家多年來的發展和改進已日益完善,現在已成爲公認的最安全的散列算法之一,並被廣泛使用。該算法的思想是接收一段明文,然後以一種不可逆的方式將它轉換成一段(通常更小)密文,也可以簡單的理解爲取一串輸入碼(稱爲預映射或信息),並把它們轉化爲長度較短、位數固定的輸出序列即散列值(也稱爲信息摘要或信息認證代碼)的過程。散列函數值可以說時對明文的一種“指紋”或是“摘要”所以對散列值的數字簽名就可以視爲對此明文的數字簽名。

4)HMAC是密鑰相關的哈希運算消息認證碼(Hash-based Message Authentication Code),HMAC運算利用哈希算法,以一個密鑰和一個消息爲輸入,生成一個消息摘要作爲輸出。

根據RFC 2316(Report of the IAB,April 1998),HMAC(散列消息身份驗證碼: Hashed Message Authentication Code)以及IPSec被認爲是Interact安全的關鍵性核心協議。它不是散列函數,而是採用了將MD5或SHA1散列函數與共享機密密鑰(與公鑰/私鑰對不同)一起使用的消息身份驗證機制。基本來說,消息與密鑰組合並運行散列函數。然後運行結果與密鑰組合並再次運行散列函數。這個128位的結果被截斷成96位,成爲MAC.
hmac主要應用在身份驗證中,它的使用方法是這樣的:
1. 客戶端發出登錄請求(假設是瀏覽器的GET請求)
2. 服務器返回一個隨機值,並在會話中記錄這個隨機值
3. 客戶端將該隨機值作爲密鑰,用戶密碼進行hmac運算,然後提交給服務器
4. 服務器讀取用戶數據庫中的用戶密碼和步驟2中發送的隨機值做與客戶端一樣的hmac運算,然後與用戶發送的結果比較,如果結果一致則驗證用戶合法
在這個過程中,可能遭到安全攻擊的是服務器發送的隨機值和用戶發送的hmac結果,而對於截獲了這兩個值的黑客而言這兩個值是沒有意義的,絕無獲取用戶密碼的可能性,隨機值的引入使hmac只在當前會話中有效,大大增強了安全性和實用性。大多數的語言都實現了hmac算法,比如php的mhash、python的hmac.py、java的MessageDigest類,在web驗證中使用hmac也是可行的,用js進行md5運算的速度也是比較快的。
5)HMAC_SHA1
HMAC_SHA1(Hashed Message Authentication Code, Secure Hash Algorithm)是一種安全的基於加密hash函數和共享密鑰的消息認證協議。它可以有效地防止數據在傳輸過程中被截獲和篡改,維護了數據的完整性、可靠性和安全性。HMAC_SHA1消息認證機制的成功在於一個加密的hash函數、一個加密的隨機密鑰和一個安全的密鑰交換機制。
HMAC_SHA1 其實還是一種散列算法,只不過是用密鑰來求取摘要值的散列算法。
HMAC_SHA1算法在身份驗證和數據完整性方面可以得到很好的應用,在目前網絡安全也得到較好的實現。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章