版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Network Working Group R. GlennRequest for Comments: 2104 NISTCategory: Standards Track S. Kent BBN Corp November 1998HMAC:鍵入-散列法用于信息身份驗(yàn)證(RFC2104-HMAC: Keyed-Hashing for Message Authentication)本備忘錄的狀態(tài)本文檔講述了一種Internet社區(qū)的Internet標(biāo)準(zhǔn)跟蹤協(xié)議,它需要進(jìn)一步進(jìn)行討論和建議以得到改進(jìn)。請(qǐng)參考最新版的“Internet正式協(xié)議標(biāo)準(zhǔn)” (STD1)來獲得本協(xié)議的標(biāo)準(zhǔn)化程度和狀態(tài)。本備
2、忘錄的發(fā)布不受任何限制。版權(quán)聲明 Copyright (C) The Internet Society (1998). All Rights Reserved.摘要:本文檔闡述了一種使用散列函數(shù)加密的消息驗(yàn)證機(jī)制散列消息鑒別碼HMAC。HMAC通過捆綁一個(gè)共享密鑰可以使用任何迭代的可用于加密的散列函數(shù)。例如:MD5, SHA1。這種加密機(jī)制的強(qiáng)度取決于所用散列函數(shù)的特性。1. 簡(jiǎn)介22. HMAC的定義。23. 密鑰。34. 注意事項(xiàng)45. 刪節(jié)輸出結(jié)果46. 安全4注釋:5附錄:5致謝:8參考書目:81. 簡(jiǎn)介 在開放的計(jì)算與通訊世界中,提供一種途徑去檢測(cè)通過不可靠媒介傳輸或存儲(chǔ)的信息完整性
3、是非常重要的。提供這種完整性檢測(cè)的機(jī)制基于一種通常被稱作消息鑒別碼的密鑰MAC。一般的,消息鑒別碼用于驗(yàn)證傳輸于兩個(gè)共同享有一個(gè)密鑰的單位之間的消息。在本文檔中,我們將描述一種基于散列函數(shù)的消息鑒別碼機(jī)制。這種機(jī)制被稱為散列消息鑒別碼HMAC。它是基于BCK1的作者所做的工作,他說明并就加密性能分析了HMAC的結(jié)構(gòu)。我們?cè)谥v述HMAC的基本原理和安全性分析時(shí)會(huì)提到這些結(jié)果,并且還要與其他鍵入式散列方法做對(duì)比。 HMAC可以與任何迭代散列函數(shù)捆綁使用。MD5和SHA1就是這種散列函數(shù)HMAC還可以使用一個(gè)用于計(jì)算和確認(rèn)消息鑒別值的密鑰。 這種結(jié)構(gòu)的主要作用是:?不用修改就可以使用適合的散列函數(shù)。
4、而且散列函數(shù)在軟件方面表現(xiàn)的很好。并且源碼是公開和通用的。?可以保持散列函數(shù)原有的性能而不致使其退化。?可以使得基于合理的關(guān)于底層散列函數(shù)假設(shè)的消息鑒別機(jī)制的加密強(qiáng)度分析便于理解。?當(dāng)發(fā)現(xiàn)或需要運(yùn)算速度更快或更安全的散列函數(shù)時(shí),可以很容易的實(shí)現(xiàn)底層散列函數(shù)的替換。 本文檔詳細(xì)描述了HMAC使用一種抽象的散列函數(shù)(用H表示)。具體的HMAC需要定義一個(gè)具體的散列函數(shù)。目前,可供選擇的散列函數(shù)有SHA1SHA,MD5,RIPEMD128/160RIPEMD。這些不同的HMAC實(shí)現(xiàn)被表示為,HMACSHA1,HMACMD5,HMACRIPEMD,等等。 注釋: 在寫本文檔時(shí),MD5和SHA1是使用最
5、廣泛的加密用散列函數(shù)。MD5最近已被證明對(duì)于Dobb的攻擊存在缺陷。這種攻擊方法和其他目前已知的MD5的缺陷不允許在HMAC中按本文的方法使用MD5(細(xì)節(jié)請(qǐng)見Dobb)。然而,SHA1似乎是一種更強(qiáng)壯的函數(shù)。目前,MD5 可以被考慮用于HMAC來為應(yīng)用程序提供出眾的執(zhí)行效率的觀點(diǎn)受到批評(píng)。無論如何,執(zhí)行者與用戶都需要了解關(guān)于加密用散列函數(shù)被破解可能性的最新進(jìn)展,并可能會(huì)需要替換底層的散列函數(shù)。(關(guān)于HMAC安全性的更多信息參見第六部分)2. HMAC的定義。 定義HMAC需要一個(gè)加密用散列函數(shù)(表示為H)和一個(gè)密鑰K。我們假設(shè)H是一個(gè)將數(shù)據(jù)塊用一個(gè)基本的迭代壓縮函數(shù)來加密的散列函數(shù)。我們用B來
6、表示數(shù)據(jù)塊的字長(zhǎng)。(以上說提到的散列函數(shù)的分割數(shù)據(jù)塊字長(zhǎng)B=64),用L來表示散列函數(shù)的輸出數(shù)據(jù)字長(zhǎng)(MD5中L=16,SHA1中L=20)。鑒別密鑰的長(zhǎng)度可以是小于等于數(shù)據(jù)塊字長(zhǎng)的任何正整數(shù)值。應(yīng)用程序中使用的密鑰長(zhǎng)度若是比B大,則首先用使用散列函數(shù)H作用于它,然后用H輸出的L長(zhǎng)度字符串作為在HMAC中實(shí)際使用的密鑰。一般情況下,推薦的最小密鑰K長(zhǎng)度是L個(gè)字長(zhǎng)。(與H的輸出數(shù)據(jù)長(zhǎng)度相等)。更詳細(xì)的信息參見第三部分。 我們將定義兩個(gè)固定且不同的字符串ipad,opad:(i','o'標(biāo)志內(nèi)部與外部) ipad = the byte 0x36 repeated B tim
7、es opad = the byte 0x5C repeated B times.計(jì)算text'的HMAC: H( K XOR opad, H(K XOR ipad, text)即為以下步驟:(1)在密鑰K后面添加0來創(chuàng)建一個(gè)子長(zhǎng)為B的字符串。(例如,如果K的字長(zhǎng)是20字節(jié),B60字節(jié),則K后會(huì)加入44個(gè)零字節(jié)0x00)(2)將上一步生成的B字長(zhǎng)的字符串與ipad做異或運(yùn)算。(3)將數(shù)據(jù)流text填充至第二步的結(jié)果字符串中。(4)用H作用于第三步生成的數(shù)據(jù)流。(5)將第一步生成的B字長(zhǎng)字符串與opad做異或運(yùn)算。(6)再將第四步的結(jié)果填充進(jìn)第五步的結(jié)果中。(7)用H作用于第六步生成的數(shù)
8、據(jù)流,輸出最終結(jié)果 基于MD5的相關(guān)代碼將作為附錄提供3. 密鑰。用于HMAC的密鑰可以是任意長(zhǎng)度(比B長(zhǎng)的密鑰將首先被H處理)。但當(dāng)密鑰長(zhǎng)度小于L時(shí)的情況時(shí)非常令人失望的,因?yàn)檫@樣將降低函數(shù)的安全強(qiáng)度。長(zhǎng)度大于L的密鑰是可以接受的,但是額外的長(zhǎng)度并不能顯著的提高函數(shù)的安全強(qiáng)度。(如果一個(gè)隨機(jī)的密鑰被認(rèn)為是不可靠的,那么選擇一個(gè)較長(zhǎng)的密鑰是明智的)。 密鑰必須隨機(jī)選取(或使用強(qiáng)大的基于隨機(jī)種子的偽隨機(jī)生成方法),并且要周期性的更新。(目前的攻擊沒有指出一個(gè)有效的更換密鑰的頻率,因?yàn)槟切┕魧?shí)際上并不可行。然而,周期性更新密鑰是一個(gè)對(duì)付函數(shù)和密鑰所存在的潛在缺陷的基本的安全措施,并可以降低泄漏密
9、鑰帶來的危害。)4. 注意事項(xiàng)HMAC是按底層散列函數(shù)可以不修改源碼就可使用這種方式定義的。尤其是它在使用H函數(shù)時(shí)還要依賴于預(yù)定義的初始化值IV(一個(gè)定值,由每個(gè)迭代散列函數(shù)在初始化它的壓縮函數(shù)時(shí)指定).然而,如果你愿意的話,可以修改H函數(shù)的源碼來支持可變的初始化值Ivs. 這個(gè)想法是這樣的:壓縮函數(shù)作用于B字長(zhǎng)數(shù)據(jù)塊(K XOR opad)和(K XOR ipad)所產(chǎn)生的中間結(jié)果可以在密鑰剛剛生成時(shí)就預(yù)先計(jì)算好的。先將這些中間結(jié)果存儲(chǔ),然后在每次有消息需要驗(yàn)證時(shí)來生成H函數(shù)的初始化值IV。這種方法為每個(gè)要鑒別的消息保存了H 的壓縮函數(shù)對(duì)于兩個(gè)B字長(zhǎng)數(shù)據(jù)塊(K XOR opad)和(K XO
10、R ipad)的應(yīng)用。當(dāng)鑒別短數(shù)據(jù)流,保存這樣的信息是重要的。我們要強(qiáng)調(diào)的是:對(duì)待這些中間結(jié)果要象對(duì)待密鑰一樣,并且要同樣的進(jìn)行保密。 上述的選擇實(shí)現(xiàn)HMAC的方法是本地執(zhí)行的結(jié)果,對(duì)內(nèi)部操作性沒有影響。5. 刪節(jié)輸出結(jié)果 一個(gè)著名的消息鑒別方法是刪節(jié)消息鑒別碼的輸出,而只輸出部分結(jié)果。Preneel 與Van Oorschotpv給出了一些散列消息鑒別碼刪節(jié)后的輸出結(jié)果的優(yōu)勢(shì)分析。在這 一領(lǐng)域的成果并不是絕對(duì)的說刪節(jié)輸出結(jié)果有全面的安全優(yōu)勢(shì)。它有優(yōu)勢(shì)的一面(對(duì)一 個(gè)攻擊者來說可用的散列函數(shù)結(jié)果信息將更少),也有劣勢(shì)的一面(攻擊者要預(yù)測(cè)的字長(zhǎng)更短)。基于HMAC的應(yīng)用程序可以只輸出HMAC計(jì)算
11、結(jié)果的最左的t個(gè)字節(jié)(也就是說,計(jì)算將按第二部分定義的方式執(zhí)行,但輸出結(jié)果將刪節(jié)至t個(gè)字節(jié))。我們推薦的輸出長(zhǎng)度t不小于散列函數(shù)輸出長(zhǎng)度的一半(匹配生日攻擊的限度)且不能少于80字節(jié)(一個(gè)適合的速度限制的字節(jié)數(shù)使得攻擊者難以去預(yù)測(cè))。我們建議使用HMAC-H-t來表示基于輸出長(zhǎng)度為t的散列函數(shù)的HMAC的實(shí)現(xiàn)。例如,HMACSHA180表示HMAC使用SHA1函數(shù)并且輸出被刪節(jié)至80字節(jié)。(如果沒有聲明這項(xiàng)參數(shù),則假定不刪節(jié)輸出結(jié)果。)6. 安全 這里將說明消息鑒別機(jī)制的安全性取決于所采用的散列函數(shù)的加密特性:1??箾_突攻擊能力(只限于初始化值是隨機(jī)且秘密的,且函數(shù)的輸出對(duì)攻擊者來說是不可用的
12、情況)2。當(dāng)作用于單數(shù)據(jù)塊時(shí)H的壓縮函數(shù)的的消息鑒別屬性(在HMAC中這些數(shù)據(jù)塊是 部分未知得,當(dāng)攻擊者自制內(nèi)部H函數(shù)計(jì)算結(jié)果,并且攻擊者是不能充分的選擇得) HMAC中使用的散列函數(shù)一般都具有以上或更強(qiáng)的屬性。實(shí)際上,如果一個(gè)散列函數(shù)不具有以上的屬性那么它對(duì)于大多數(shù)的加密應(yīng)用程序是不適用的,包括基于該函數(shù)的選擇消息鑒別方案。(對(duì)HMAC函數(shù)原理詳細(xì)闡述和完整的分析參見BCK1) 只要得到關(guān)于候選散列函數(shù)的加密強(qiáng)度有限的信任,那么觀察它用于消息鑒別的安全性及以下HMAC結(jié)構(gòu)的兩種屬性是很重要的。1這種結(jié)構(gòu)是獨(dú)立于具體所使用的散列函數(shù)并且后者是可以被任何其它安全加密散列函數(shù)替代2消息鑒別相對(duì)于加
13、密來說是一種“瞬時(shí)”影響。公開的對(duì)一種消息鑒別方案的破壞會(huì)導(dǎo)致該方案被替換,但是其對(duì)已鑒別過的信息卻無能為力,。這就與加密形成鮮明對(duì)比。如果其加密算法被破解的話。今天加密的的數(shù)據(jù),在未來都會(huì)受到被破解的威脅, 對(duì)HMAC已知最有力的攻擊是基于散列函數(shù)的沖突頻率。(“生日攻擊法”)PV,BCK2,但完全不適用于最小有理散列函數(shù)。 例如:如果我們考慮一個(gè)類似MD5的散列函數(shù),其輸出結(jié)果長(zhǎng)度為L(zhǎng)=16字節(jié)(128比特),攻擊者需要獲得正確的消息鑒別標(biāo)志(使用相同的密鑰K!)計(jì)算大約2*64已知明文。這樣至少要使用H處理2*64數(shù)據(jù)塊,這是一個(gè)不可能完成的任務(wù)(一個(gè)數(shù)據(jù)塊的長(zhǎng)度為64字節(jié),在連續(xù)的1G
14、bps link的條件下需要250,000年,并且在整個(gè)過程中不能更換密鑰!)這樣的攻擊只有在函數(shù)H的沖突行為的嚴(yán)重缺陷被發(fā)現(xiàn)才有可能成為現(xiàn)實(shí)(沖突在處理2*30后會(huì)存在)。這樣的發(fā)現(xiàn)會(huì)導(dǎo)致立即更換現(xiàn)有的函數(shù)H(這種故障產(chǎn)生的影響遠(yuǎn)遠(yuǎn)大于傳統(tǒng)的在上下文環(huán)境數(shù)字簽名與公開密鑰中使用的散列函數(shù)故障。)注釋: 這種攻擊與在無相關(guān)密鑰、2*64離線并行計(jì)算可以發(fā)現(xiàn)沖突的環(huán)境中針對(duì)加密散列函數(shù)的規(guī)則沖突攻擊形成鮮明對(duì)比。在現(xiàn)在的條件下生日攻擊已基本不可行, 而后者可行性卻很高。(在以上的例子中,如果使用的散列函數(shù)的輸出是160字節(jié),則 2*64應(yīng)改為2*80) 正確的實(shí)施以上的結(jié)構(gòu)時(shí)需要注意:選擇隨機(jī)(
15、或加密的偽隨機(jī))密鑰、一個(gè)安全的密鑰交換機(jī)制,頻繁的更新密鑰,對(duì)密鑰的良好的安全防護(hù)。以上這些都是維護(hù)HMAC完整的鑒別機(jī)制安全的基本要素。 附錄: 例程源碼為了更好的說明該機(jī)制,我們提供了實(shí)現(xiàn)HMAC-MD5的源碼,并且還提供了 一些相應(yīng)的測(cè)試向量。(代碼是基于MD5中的MD5的源碼) /* Function: hmac_md5*/voidhmac_md5(text, text_len, key, key_len, digest)unsigned char* text; /* pointer to data stream */int text_len; /* length of data s
16、tream */unsigned char* key; /* pointer to authentication key */int key_len; /* length of authentication key */caddr_t digest; /* caller digest to be filled in */ MD5_CTX context; unsigned char k_ipad65; /* inner padding - * key XORd with ipad */ unsigned char k_opad65; /* outer padding - * key XORd
17、with opad */ unsigned char tk16; int i; /* if key is longer than 64 bytes reset it to key=MD5(key) */ if (key_len > 64) MD5_CTX tctx; MD5Init(&tctx); MD5Update(&tctx, key, key_len); MD5Final(tk, &tctx); key = tk; key_len = 16; /* * the HMAC_MD5 transform looks like: * * MD5(K XOR opad
18、, MD5(K XOR ipad, text) * * where K is an n byte key * ipad is the byte 0x36 repeated 64 times * opad is the byte 0x5c repeated 64 times * and text is the data being protected */ /* start out by storing key in pads */ bzero( k_ipad, sizeof k_ipad); bzero( k_opad, sizeof k_opad); bcopy( key, k_ipad,
19、key_len); bcopy( key, k_opad, key_len); /* XOR key with ipad and opad values */ for (i=0; i<64; i+) k_ipadi = 0x36; k_opadi = 0x5c; /* * perform inner MD5 */ MD5Init(&context); /* init context for 1st * pass */ MD5Update(&context, k_ipad, 64) /* start with inner pad */ MD5Update(&cont
20、ext, text, text_len); /* then text of datagram */ MD5Final(digest, &context); /* finish up 1st pass */ /* * perform outer MD5 */ MD5Init(&context); /* init context for 2nd * pass */ MD5Update(&context, k_opad, 64); /* start with outer pad */ MD5Update(&context, digest, 16); /* then r
21、esults of 1st * hash */ MD5Final(digest, &context); /* finish up 2nd pass */Test Vectors (Trailing '0' of a character string not included in test): key = 0x0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b key_len = 16 bytes data = "Hi There" data_len = 8 bytes digest = 0x9294727a3638bb1c13f48e
22、f8158bfc9d key = "Jefe" data = "what do ya want for nothing?" data_len = 28 bytes digest = 0x750c783e6ab0b503eaa86e310a5db738 key = 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA key_len 16 bytes data = 0xDDDDDDDDDDDDDDDDDDDD. .DDDDDDDDDDDDDDDDDDDD. .DDDDDDDDDDDDDDDDDDDD. .DDDDDDDDDDDDDDDDDD
23、DD. .DDDDDDDDDDDDDDDDDDDD data_len = 50 bytes digest = 0x56be34521d144c88dbb8c733f0e8b3f6致謝: Pau-Chen Cheng, Jeff Kraemer, and Michael Oehler, have provided useful comments on early drafts, and ran the first interoperability tests of this specification. Jeff and Pau-Chen kindly provided the sample c
24、ode and test vectors that appear in the appendix. Burt Kaliski, Bart Preneel, Matt Robshaw, Adi Shamir, and Paul van Oorschot have provided useful comments and suggestions during the investigation of the HMAC construction. 參考書目: ANSI ANSI X9.9, "American National Standard for Financial Institut
25、ion Message Authentication (Wholesale)," American Bankers Association, 1981. Revised 1986. Atk Atkinson, R., "IP Authentication Header", RFC 1826, August 1995. BCK1 M. Bellare, R. Canetti, and H. Krawczyk, "Keyed Hash Functions and Message Authentication", Proceedings of Cry
26、pto'96, LNCS 1109, pp. 1-15. ( BCK2 M. Bellare, R. Canetti, and H. Krawczyk, "Pseudorandom Functions Revisited: The Cascade Construction", Proceedings of FOCS'96. Dobb H. Dobbertin, "The Status of MD5 After a Recent Attack", RSA Labs' CryptoBytes, Vol. 2 No. 2, Summer
27、 1996. PV B. Preneel and P. van Oorschot, "Building fast MACs from hash functions", Advances in Cryptology - CRYPTO'95 Proceedings, Lecture Notes in Computer Science, Springer-Verlag Vol.963,MD5 Rivest, R., "The MD5 Message-Digest Algorithm", RFC 1321, April 1992.MM Meyer, S.
28、 and Matyas, S.M., Cryptography, New York Wiley, 1982. RIPEMD H. Dobbertin, A. Bosselaers, and B. Preneel, "RIPEMD-160: A strengthened version of RIPEMD", Fast Software Encryption, LNCS Vol 1039, pp. 71-82. ftp:/ftp.esat.kuleuven.ac.be/pub/COSIC/bosselae/ripemd/. SHA NIST, FIPS PUB 180-1: Secure Hash Standard, April 1995. Tsu G. Tsudik, "Message authentication
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年南京市公安局六合分局公開招聘警務(wù)輔助人員43人備考題庫(kù)帶答案詳解
- 2026年伊犁州公安局面向社會(huì)公開招聘警務(wù)輔助人員備考題庫(kù)及一套參考答案詳解
- 2026年廣西巷賢鎮(zhèn)人民政府招聘?jìng)淇碱}庫(kù)及完整答案詳解一套
- 2026年中國(guó)建筑第六工程局有限公司華南分公司招聘?jìng)淇碱}庫(kù)完整參考答案詳解
- 2026年中國(guó)共產(chǎn)黨南寧市興寧區(qū)紀(jì)律檢查委員會(huì)招聘工作人員備考題庫(kù)及1套完整答案詳解
- 2026年中國(guó)科學(xué)院軟件研究所天基綜合備考題庫(kù)系統(tǒng)全國(guó)重點(diǎn)實(shí)驗(yàn)室招聘?jìng)淇碱}庫(kù)及參考答案詳解一套
- 2026年如東縣公安局招聘警務(wù)輔助人員44人備考題庫(kù)及1套完整答案詳解
- 2026年中國(guó)農(nóng)業(yè)銀行研發(fā)中心社會(huì)招聘7人備考題庫(kù)及一套答案詳解
- 2026年中國(guó)人民大學(xué)國(guó)家發(fā)展與戰(zhàn)略研究院現(xiàn)面向社會(huì)公開招聘非事業(yè)編制工作人員備考題庫(kù)及答案詳解一套
- 吐哈油田分公司招聘筆試題庫(kù)2026
- T/CSBME 065-2023醫(yī)用敷料材料聚氨酯泡沫卷材
- T/CECS 10310-2023水性聚氨酯防水涂料
- T/CCT 007-2024煤化工廢水處理運(yùn)營(yíng)能力評(píng)價(jià)
- GB/T 45554-2025種豬生產(chǎn)性能測(cè)定技術(shù)規(guī)范
- 食品居間合同協(xié)議
- 2022學(xué)年上海復(fù)旦附中高一(上)期末信息技術(shù)試題及答案
- 廣東省廣州市白云區(qū)2024-2025學(xué)年六年級(jí)(上)期末語文試卷(有答案)
- 心內(nèi)科護(hù)理帶教工作總結(jié)
- 知行合一實(shí)踐出真知主題班會(huì)
- GB/T 45166-2024無損檢測(cè)紅外熱成像檢測(cè)總則
- 山東省菏澤市東明縣2024-2025學(xué)年七年級(jí)上學(xué)期考試生物試題
評(píng)論
0/150
提交評(píng)論