HMAC與MAC演算法在密碼學的區別?

mac是一種有秘鑰的摘要演算法,hmac也是,好像要兩次摘要?整個過程看的好亂啊,希望有人能幫我梳理下,謝謝,看的我還是不太理解hmac與mac的主要區別及hmac優勢


首先是回顧一下什麼是MAC, 以下定義引用自Introduction to modern cryptography, by Y. Lindell and J.Katz

DEFINITION 4.1 (message authentication code syntax): A message authentication code or MAC is a tuple of probabilistic polynomial-time algorithms(Gen; Mac; Vrfy) fullling the following:
1. Upon input 1n, the algorithm Gen outputs a uniformly distributed key k of length n;

kleftarrow   Gen(1^n).
2. The algorithm Mac receives for input some k in {0,1}^n and m in {0,1}^*,and outputs some t in {0,1}^*The value t is called the MAC tag.
3. The algorithm Vrfy receives for input some k in {0,1}^n, m in {0,1}^*, t in {0,1}^*and outputs a bit b in {0,1}.
4. For every n, everyk in {0,1}^nand everym in {0,1}^* it holds that
Vrfy_k(m, Mac_k(m)) = 1.
If there exists a function l(.) such that Mac_k(.)is defined only over messages
of length l(n) and Vrfyk(m, t) outputs 0 for every m that is not of length l(n),
then we say that (Gen; Mac; Vrfy) is a fixed length MAC with length parameter l(.).

MAC實際上就是 M 	imes K 	o T的一個映射,此映射要求能滿足 Vrfy_k(m, Mac_k(m)) = 1

從不限長度的m到不限長度的t,這個就是最廣義的mac。最後一段給了個特殊情況,m為固定長度時,滿足上述條件的mac被稱為有長度參數l(.)的mac.

與Hash的最大區別是k的引入,這就使得在安全的情況下,mac只可被持有k的角色來認證。


HMAC是構建MAC的一種方式, H代表使用在整個構建裡面的Hash Function

下圖引用自Boneh在coursera上開設的密碼學課程Coursera

課件http://spark-university.s3.amazonaws.com/stanford-crypto/slides/06-collision-resistance-v2-annotated.pdf

結合圖看就能比較容易地看懂密鑰k是怎麼起作用的。試著從圖出發,寫出最後一步時HMAC的公式,就可以和定義對照了。

更正一下昨天的答案:

先看上面的一堆block,第一個h輸出的是k1 = h_{koplus ipad}(IV),作為後續h的key作用於m, 結果可以寫成 H_{k1}(m)。這個部分成為最後一個h的上面的message輸入,

下面的block, 第一個h輸出的key是k2 = h_{koplus opad}(IV),成為最後一個h計算時用的key。

因此,最後一個h的輸出可以寫成h_{k2}(H_{k1}(m)),這個可以視為只有一個Block的H的特例,所以可以寫成H_{k2}(H_{k1}(m)),這就是定義的形式了。


mac函數可以用hash函數來構造,就叫做hmac,也可以使用對稱加密函數來構造。
對hash函數的研究比對稱加密演算法的研究要晚一些,早期的時候就有使用對稱加密演算法來構造單向散列函數的,比如在unix系統的口令認證裡面,它把用戶口令加鹽之後作為密鑰,對一個固定的64比特值重複使用DES加密25次,把結果作為散列值。這起到的作用與hash函數是類似的。
後來hash演算法研究成熟之後就趨向使用hash來構造mac函數了,一方面是由於hash函數計算比對稱密碼演算法快一些,另一方面,在一些國家對稱密碼演算法限制出口,但hash演算法沒有這方面的限制,所以人們更趨向用hash來構造mac函數。


hmac和mac雖然都可以帶有key,但是安全性是hamc好,因為傳統的hash(message+key)是會被長度擴展攻擊的
哈希長度擴展攻擊解析
科普哈希長度擴展攻擊(Hash Length Extension Attacks)_百度安全論壇


MAC是帶密鑰的雜湊(hash),可以通過分組演算法或雜湊函數構造,HMAC是使用雜湊函數構造的MAC的一種方法


推薦閱讀:

指紋支付為什麼沒有推廣?
iPhone 5s 的 Touch ID 指紋信息存儲在什麼地方?足夠安全嗎?
我國信息安全的國字型大小部門和研究機構有哪些?
據稱和稜鏡門同期暴露的藏寶圖計劃和怪獸心靈計劃是什麼?
是否有合適的工具(隨身攜帶)快速抹除快遞單等包含敏感信息?

TAG:信息安全 | 密碼學 | CHAP挑戰握手認證協議 |