转:Hash, MAC,HMAC说明
from: http://www.cnblogs.com/songhan/archive/2012/07/29/2613898.html
?
Hash, MAC,HMAC
Hash-MD5, SHA-1, integrity
MAC- keyed hash, integrity & authenticity. HMAC 長(zhǎng)度和其所用的hash長(zhǎng)度一樣
?
Hash
是一種從任何一種數(shù)據(jù)中創(chuàng)建小的數(shù)字“指紋”的方法。散列函數(shù)把消息或數(shù)據(jù)壓縮成摘要,使得數(shù)據(jù)量變小,將數(shù)據(jù)的格式固定下來。
如果兩個(gè)散列值是不相同的(根據(jù)同一函數(shù)),那么這兩個(gè)散列值的原始輸入也是不相同的。
這個(gè)特性是散列函數(shù)具有確定性的結(jié)果,具有這種性質(zhì)的散列函數(shù)稱為單向散列函數(shù)。
但另一方面,散列函數(shù)的輸入和輸出不是唯一對(duì)應(yīng)關(guān)係的,如果兩個(gè)散列值相同,兩個(gè)輸入值很可能是相同的。
但也可能不同,這種情況稱為「碰撞」,這通常是兩個(gè)不同長(zhǎng)度的散列值,刻意計(jì)算出相同的輸出值。
Hash,一般翻譯做“散列”,也有直接音譯為"哈希"的,就是把任意長(zhǎng)度的輸入(又叫做預(yù)映射, pre-image),通過散列算法,變換成固定長(zhǎng)度的輸出,該輸出就是散列值。這種轉(zhuǎn)換是一種壓縮映射,也就是,散列值的空間通常遠(yuǎn)小于輸入的空間,不同的輸入可能會(huì)散列成相同的輸出,而不可能從散列值來唯一的確定輸入值。
簡(jiǎn)單的說就是一種將任意長(zhǎng)度的消息壓縮到某一固定長(zhǎng)度的消息摘要的函數(shù)。
HASH主要用于信息安全領(lǐng)域中加密算法,他把一些不同長(zhǎng)度的信息轉(zhuǎn)化成雜亂的128位的編碼里,叫做HASH值. 也可以說,hash就是找到一種數(shù)據(jù)內(nèi)容和數(shù)據(jù)存放地址之間的映射關(guān)系
了解了hash基本定義,就不能不提到一些著名的hash算法,MD5 和 SHA1 可以說是目前應(yīng)用最廣泛的Hash算法。
?
MD5(RFC1321) 是 Rivest 于 1991 年對(duì) MD4 的改進(jìn)版本,將任意長(zhǎng)的明文 hash 成?128 bit?的雜湊值。
MD5是一種不可逆的加密算法,目前是最牢靠的加密算法之一,尚沒有能夠逆運(yùn)算的程序被開發(fā)出來,它對(duì)應(yīng)任何字符串都可以加密成一段唯一的固定長(zhǎng)度的代碼。
那么它有什么用呢?很簡(jiǎn)單,通過它可以判斷原始值是否正確(是否被更改過)。一般用于密碼的加密。而我們所提供的MD5校驗(yàn)碼就是針對(duì)安裝程序的唯一對(duì)應(yīng)的一段代碼。你可以使用任何MD5運(yùn)算器對(duì)下載的文件進(jìn)行運(yùn)算,運(yùn)算出來的結(jié)果如果完全符合我們提供的MD5校驗(yàn)碼,那么說明你下載的這個(gè)程序沒有被中途修改過。
這個(gè)特征碼有如下特性,首先它不可逆,例如我有一段秘密的文字如:"My Secret Words",經(jīng)算法變換后得到MD5碼(b9944e9367d2e40dd1f0c4040d4daaf7),把這個(gè)碼告訴其他人,他們根據(jù)這個(gè)MD5碼是沒有系統(tǒng)的方法可以知道你原來的文字是什么的。?
其次,這個(gè)碼具有高度的離散性,也就是說,原信息的一點(diǎn)點(diǎn)變化就會(huì)導(dǎo)致MD5的巨大變化,例如"ABC" MD5(902fbdd2b1df0c4f70b4a5d23525e932)和"ABC "(多了一空格)MD5(12c774468f981a9487c30773d8093561)差別非常大,而且之間沒有任何關(guān)系,也就是說產(chǎn)生的MD5碼是不可預(yù)測(cè)的。?
最后由于這個(gè)碼有128位那么長(zhǎng),所以任意信息之間具有相同MD5碼的可能性非常之低,通常被認(rèn)為是不可能的。?
所以一般認(rèn)為MD5碼可以唯一地代表原信息的特征,通常用于密碼的加密存儲(chǔ),數(shù)字簽名,文件完整性驗(yàn)證等。
?
SHA1 是由 NIST NSA 設(shè)計(jì)為同 DSA 一起使用的,sha 是 Secure Hash algorithm 的縮寫;它對(duì)長(zhǎng)度小于 2^64 的輸入,產(chǎn)生長(zhǎng)度為?160bit?的散列值;?SHA-1 設(shè)計(jì)時(shí)基于和 MD4 相同原理,并且模仿了該算法。
SHA1是由NIST NSA設(shè)計(jì)為同DSA一起使用的,它對(duì)長(zhǎng)度小于264的輸入,產(chǎn)生長(zhǎng)度為160bit的散列值,因此抗窮舉(brute-force)性更好。SHA-1 設(shè)計(jì)時(shí)基于和MD4相同原理,并且模仿了該算法。SHA-1是由美國(guó)標(biāo)準(zhǔn)技術(shù)局(NIST)頒布的國(guó)家標(biāo)準(zhǔn),是一種應(yīng)用最為廣泛的hash函數(shù)算法,也是目前最先進(jìn)的加密技術(shù),被政府部門和私營(yíng)業(yè)主用來處理敏感的信息。而SHA-1基于MD5,MD5又基于MD4。
?
?
?
?http://blog.csdn.net/showfray/article/details/2067362
http://blog.csdn.net/miaouu/article/details/6058126
?
?
MAC
消息認(rèn)證碼(帶密鑰的Hash函數(shù)):密碼學(xué)中,通信實(shí)體雙方使用的一種驗(yàn)證機(jī)制,保證消息數(shù)據(jù)完整性的一種工具。
安全性依賴于Hash函數(shù),故也稱帶密鑰的Hash函數(shù)。消息認(rèn)證碼是基于密鑰和消息摘要【hash】所獲得的一個(gè)值,可用于數(shù)據(jù)源發(fā)認(rèn)證和完整性校驗(yàn)。
?
1. 發(fā)送者通過MAC算法計(jì)算出消息的MAC值,并和消息一起發(fā)給收信者
2. 收信者用同樣的MAC算法計(jì)算收到的消息的MAC值,并對(duì)比兩者。
?
HMAC
介紹:
Hash-based message authentication code,利用哈希算法,以一個(gè)密鑰和一個(gè)消息為輸入,生成一個(gè)消息摘要作為輸出。
a specific construction for calculating a?message authentication code?(MAC) involving a?cryptographic hash function?in combination with a secret?cryptographic key. As with any MAC, it may be used to simultaneously verify both the?data integrity?and theauthenticity?of a?message.【主要是為了能讓人對(duì)對(duì)方身份正確性和消息有效性進(jìn)行驗(yàn)證,與消息摘要的最大不同,就是有簽名密鑰!】
方法:
HMAC(K,m) = H((K ⊕ opad) ∥ H((K ⊕ ipad) ∥ m))
?
【opad重復(fù)0x36,ipad重復(fù)0x5C】
通過兩次hash兩個(gè)不同的key來生成。 還沒有發(fā)現(xiàn)有任何的方法來產(chǎn)生碰撞。
步驟:
First-Hash: H(Ko XOR Ipad || (data to auth))
Second-Hash: H(Ko XOR Opad || First-Hash)
1. 字符含義
H 代表所采用的HASH算法(如SHA-256)?
K 代表認(rèn)證密碼
B 代表H中所處理的塊大小,這個(gè)大小是處理塊大小,而不是輸出hash的大小 【SHA-1和SHA-256 B = 64,SHA-384和SHA-512 B = 128 】
Ko 代表HASH算法的密文 【在密鑰K后面添加0來創(chuàng)建一個(gè)字長(zhǎng)為B的字符串。(例如,如果K的字長(zhǎng)是20字節(jié),B=64字節(jié),則K后會(huì)加入44個(gè)零字節(jié)0x00)?
Opad 用0x5a重復(fù)B次?
Ipad 用0x36重復(fù)B次
2. Ko與ipad做異或運(yùn)算。
3.?將數(shù)據(jù)流text填充至第2步的結(jié)果字符串中
4.?用H作用于第3步生成的數(shù)據(jù)流。?
5. Ko與opad做異或運(yùn)算。
6.?再將第4步的結(jié)果填充進(jìn)第5步的結(jié)果中。?
7.?用H作用于第6步生成的數(shù)據(jù)流,輸出最終結(jié)果?
?
應(yīng)用:
HMAC的一個(gè)典型應(yīng)用是用在“挑戰(zhàn)/響應(yīng)”(Challenge/Response)身份認(rèn)證中
?
?
1.?客戶端向服務(wù)器發(fā)出一個(gè)驗(yàn)證請(qǐng)求
2.?服務(wù)器接到此請(qǐng)求后生成一個(gè)隨機(jī)數(shù)并通過網(wǎng)絡(luò)傳輸給客戶端(此為挑戰(zhàn))
3.?客戶端將收到的隨機(jī)數(shù)提供給ePass,由ePass使用該隨機(jī)數(shù)與存儲(chǔ)在ePass中的密鑰進(jìn)行HMAC-MD5運(yùn)算并得到一個(gè)結(jié)果作為認(rèn)證證據(jù)傳給服務(wù)器(此為響應(yīng))。
4.?與此同時(shí),服務(wù)器也使用該隨機(jī)數(shù)與存儲(chǔ)在服務(wù)器數(shù)據(jù)庫(kù)中的該客戶密鑰進(jìn)行HMAC-MD5運(yùn)算,如果服務(wù)器的運(yùn)算結(jié)果與客戶端傳回的響應(yīng)結(jié)果相同,則認(rèn)為客戶端是一個(gè)合法用戶?
?
安全性:
HMAC算法更象是一種加密算法,它引入了密鑰,其安全性已經(jīng)不完全依賴于所使用的HASH算法
?
1.?使用的密鑰是雙方事先約定的,第三方不可能知道。能夠得到的信息只有作為“挑戰(zhàn)”的隨機(jī)數(shù)和作為“響應(yīng)”的HMAC結(jié)果,無(wú)法根據(jù)這兩個(gè)數(shù)據(jù)推算出密鑰。由于不知道密鑰,所以無(wú)法仿造出一致的響應(yīng)。
2.?HMAC與一般的加密重要的區(qū)別在于它具有“瞬時(shí)”性,即認(rèn)證只在當(dāng)時(shí)有效
?
http://stamen.iteye.com/blog/1558255
http://baike.baidu.com/view/1136366.htm
?
轉(zhuǎn)載于:https://www.cnblogs.com/jhj117/p/5945866.html
與50位技術(shù)專家面對(duì)面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的转:Hash, MAC,HMAC说明的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Dom4j使用Xpath语法读取xml节
- 下一篇: HDU 3534 Tree (经典树形d