本備忘錄的狀態
本文檔講述了一種Internet社區的Internet標準跟蹤協議,它需要進一步進行討論和建
議以得到改進。請參考最新版的“Internet正式協議標準”(STD1)來獲得本協議的標準化程
度和狀態。本備忘錄的發布不受任何限制。
版權聲明
Copyright(C)TheInternetSociety(1998).AllRightsReserved.
摘要:
本文檔闡述了一種使用散列函數加密的消息驗證機制——散列消息鑒別碼
HMAC。HMAC通過捆綁一個共享密鑰可以使用任何迭代的可用于加密的散列
函數。例如:md5,SHA—1。這種加密機制的強度取決于所用散列函數的特性。
1.簡介 2
2.HMAC的定義。 2
3.密鑰。 3
4.注重事項 4
5.刪節輸出結果 4
6.安全 4
注釋: 5
附錄: 5
致謝: 8
參考書目: 8
1.簡介
在開放的計算與通訊世界中,提供一種途徑去檢測通過不可靠媒介傳輸或
存儲的信息完整性是非常重要的。提供這種完整性檢測的機制基于一種通常
被稱作消息鑒別碼的密鑰MAC。一般的,消息鑒別碼用于驗證傳輸于兩個共
同享有一個密鑰的單位之間的消息。在本文檔中,我們將描述一種基于散列函數
的消息鑒別碼機制。這種機制被稱為散列消息鑒別碼HMAC。它是基于[BCK1]
的作者所做的工作,他說明并就加密性能分析了HMAC的結構。我們在講述H
MAC的基本原理和安全性分析時會提到這些結果,并且還要與其他鍵入式散列方
法做對比。
HMAC可以與任何迭代散列函數捆綁使用。MD5和SHA—1就是這種散列函數
HMAC還可以使用一個用于計算和確認消息鑒別值的密鑰。
這種結構的主要作用是:
? 不用修改就可以使用適合的散列函數。而且散列函數在軟件方面表現的很好。
并且源碼是公開和通用的。
? 可以保持散列函數原有的性能而不致使其退化。
? 可以使得基于合理的關于底層散列函數假設的消息鑒別機制的加密強度分析
便于理解。
? 當發現或需要運算速度更快或更安全的散列函數時,可以很輕易的實現底層
散列函數的替換。
本文檔具體描述了HMAC使用一種抽象的散列函數(用H表示)。具體的HMAC
需要定義一個具體的散列函數。目前,可供選擇的散列函數有SHA—1[SHA],MD5,
RipEMD—128/160[RIPEMD]。這些不同的HMAC實現被表示為,HMAC—SHA1,
HMAC—MD5,HMAC—RIPEMD,等等。
注釋:
在寫本文檔時,MD5和SHA—1是使用最廣泛的加密用散列函數。MD5最近已被
證實對于[Dobb]的攻擊存在缺陷。這種攻擊方法和其他目前已知的MD5的缺陷不答應
在HMAC中按本文的方法使用MD5(細節請見[Dobb])。然而,SHA—1似乎是一種
更強壯的函數。目前,MD5可以被考慮用于HMAC來為應用程序提供出眾的執行效
率的觀點受到批評。無論如何,執行者與用戶都需要了解關于加密用散列函數被破解
可能性的最新進展,并可能會需要替換底層的散列函數。(關于HMAC安全性的更多
信息參見第六部分)
2.HMAC的定義。
定義HMAC需要一個加密用散列函數(表示為H)和一個密鑰K。我們假設H是
一個將數據塊用一個基本的迭代壓縮函數來加密的散列函數。我們用B來表示數據塊
的字長。(以上說提到的散列函數的分割數據塊字長B=64),用L來表示散列函數的
輸出數據字長(MD5中L=16,SHA—1中L=20)。鑒別密鑰的長度可以是小于等于數
據塊字長的任何正整數值。應用程序中使用的密鑰長度若是比B大,則首先用使用散列
函數H作用于它,然后用H輸出的L長度字符串作為在HMAC中實際使用的密鑰。
一般情況下,推薦的最小密鑰K長度是L個字長。(與H的輸出數據長度相等)。更詳
細的信息參見第三部分。
我們將定義兩個固定且不同的字符串ipad,opad:
(‘i','o'標志內部與外部)
ipad=thebyte0x36repeatedBTimes
opad=thebyte0x5CrepeatedBtimes.
計算‘text'的HMAC:
H(KXORopad,H(KXORipad,text))
即為以下步驟:
(1) 在密鑰K后面添加0來創建一個子長為B的字符串。(例如,假如K的字長是20
字節,B=60字節,則K后會加入44個零字節0x00)
(2) 將上一步生成的B字長的字符串與ipad做異或運算。
(3) 將數據流text填充至第二步的結果字符串中。
(4) 用H作用于第三步生成的數據流。
(5) 將第一步生成的B字長字符串與opad做異或運算。
(6) 再將第四步的結果填充進第五步的結果中。
(7) 用H作用于第六步生成的數據流,輸出最終結果
基于MD5的相關代碼將作為附錄提供
3.密鑰。
用于HMAC的密鑰可以是任意長度(比B長的密鑰將首先被H處理)。但當密鑰
長度小于L時的情況時非常令人失望的,因為這樣將降低函數的安全強度。長度大于
L的密鑰是可以接受的,但是額外的長度并不能顯著的提高函數的安全強度。(假如一
個隨機的密鑰被認為是不可靠的,那么選擇一個較長的密鑰是明智的)。
密鑰必須隨機選取(或使用強大的基于隨機種子的偽隨機生成方法),并且要周期
性的更新。(目前的攻擊沒有指出一個有效的更換密鑰的頻率,因為那些攻擊實際上并
不可行。然而,周期性更新密鑰是一個對付函數和密鑰所存在的潛在缺陷的基本
的安全措施,并可以降低泄漏密鑰帶來的危害。)
4.注重事項
HMAC是按底層散列函數可以不修改源碼就可使用這種方式定義的。尤其是它在使用
H函數時還要依靠于預定義的初始化值IV(一個定值,由每個迭代散列函數在初始化它
的壓縮函數時指定).然而,假如你愿意的話,可以修改H函數的源碼來支持可變的初始
化值Ivs.
這個想法是這樣的:壓縮函數作用于B字長數據塊(KXORopad)和(KXORipad)
所產生的中間結果可以在密鑰剛剛生成時就預先計算好的。先將這些中間結果存儲,然
后在每次有消息需要驗證時來生成H函數的初始化值IV。這種方法為每個要鑒別的消息
保存了H的壓縮函數對于兩個B字長數據塊(KXORopad)和(KXORipad)的應用。
當鑒別短數據流,保存這樣的信息是重要的。我們要強調的是:對待這些中間結果要象
對待密鑰一樣,并且要同樣的進行保密。
上述的選擇實現HMAC的方法是本地執行的結果,對內部操作性沒有影響。
5.刪節輸出結果
一個聞名的消息鑒別方法是刪節消息鑒別碼的輸出,而只輸出部分結果。PReneel
與VanOorschot[pv]給出了一些散列消息鑒別碼刪節后的輸出結果的優勢分析。在這
一領域的成果并不是絕對的說刪節輸出結果有全面的安全優勢。它有優勢的一面(對一
個攻擊者來說可用的散列函數結果信息將更少),也有劣勢的一面(攻擊者要猜測的字長
更短)。基于HMAC的應用程序可以只輸出HMAC計算結果的最左的t個字節(也就是說
,計算將按第二部分定義的方式執行,但輸出結果將刪節至t個字節)。我們推薦的輸
出長度t不小于散列函數輸出長度的一半(匹配生日攻擊的限度)且不能少于80字節
(一個適合的速度限制的字節數使得攻擊者難以去猜測)。我們建議使用HMAC-H-t來表
示基于輸出長度為t的散列函數的HMAC的實現。例如,HMAC-SHA1-80表示HMAC使用
SHA-1函數并且輸出被刪節至80字節。(假如沒有聲明這項參數,則假定不刪節輸出結
果。)
6.安全
這里將說明消息鑒別機制的安全性取決于所采用的散列函數的加密特性:1。抗沖突
攻擊能力(只限于初始化值是隨機且秘密的,且函數的輸出對攻擊者來說是不可用的情
況)2。當作用于單數據塊時H的壓縮函數的的消息鑒別屬性(在HMAC中這些數據塊是
部分未知得,當攻擊者自制內部H函數計算結果,并且攻擊者是不能充分的選擇得)
HMAC中使用的散列函數一般都具有以上或更強的屬性。實際上,假如一個散列函數
不具有以上的屬性那么它對于大多數的加密應用程序是不適用的,包括基于該函數的選
擇消息鑒別方案。(對HMAC函數原理具體闡述和完整的分析參見[BCK1])
只要得到關于候選散列函數的加密強度有限的信任,那么觀察它用于消息鑒別的安
全性及以下HMAC結構的兩種屬性是很重要的。
1. 這種結構是獨立于具體所使用的散列函數并且后者是可以被任何其它安全加
密散列函數替代
2. 消息鑒別相對于加密來說是一種“瞬時”影響。公開的對一種消息鑒別方案
的破壞會導致該方案被替換,但是其對已鑒別過的信息卻無能為力,。這就與
加密形成鮮明對比。假如其加密算法被破解的話。今天加密的的數據,在未
來都會受到被破解的威脅,
對HMAC已知最有力的攻擊是基于散列函數的沖突頻率。(“生日攻擊法”)[PV,BCK2],
但完全不適用于最小有理散列函數。
例如:假如我們考慮一個類似MD5的散列函數,其輸出結果長度為L=16字節(128
比特),攻擊者需要獲得正確的消息鑒別標志(使用相同的密鑰K!!)計算大約2**64已
知明文。這樣至少要使用H處理2**64數據塊,這是一個不可能完成的任務(一個數據
塊的長度為64字節,在連續的1Gbpslink的條件下需要250,000年,并且在整個過程
中不能更換密鑰!)這樣的攻擊只有在函數H的沖突行為的嚴重缺陷被發現才有可能成為
現實(沖突在處理2**30后會存在)。這樣的發現會導致立即更換現有的函數H(這種故
障產生的影響遠遠大于傳統的在上下文環境數字簽名與公開密鑰中使用的散列函數故
障。)
注釋:
這種攻擊與在無相關密鑰、2**64離線并行計算可以發現沖突的環境中針對加密散
列函數的規則沖突攻擊形成鮮明對比。在現在的條件下生日攻擊已基本不可行,而
后者可行性卻很高。(在以上的例子中,假如使用的散列函數的輸出是160字節,則
2**64應改為2**80)
正確的實施以上的結構時需要注重:選擇隨機(或加密的偽隨機)密鑰、一個安全
的密鑰交換機制,頻繁的更新密鑰,對密鑰的良好的安全防護。以上這些都是維護HMAC
完整的鑒別機制安全的基本要素。
附錄:
例程源碼
為了更好的說明該機制,我們提供了實現HMAC-MD5的源碼,并且還提供了
一些相應的測試向量。(代碼是基于[MD5]中的MD5的源碼)
/*
**Function:hmac_md5
*/
void
hmac_md5(text,text_len,key,key_len,digest)
unsignedchar*text;/*pointertodatastream*/
inttext_len;/*lengthofdatastream*/
unsignedchar*key;/*pointertoauthenticationkey*/
intkey_len;/*lengthofauthenticationkey*/
caddr_tdigest;/*callerdigesttobefilledin*/
{
MD5_CTXcontext;
unsignedchark_ipad[65];/*innerpadding-
*keyXORdwithipad
*/
unsignedchark_opad[65];/*outerpadding-
*keyXORdwithopad
*/
unsignedchartk[16];
inti;
/*ifkeyislongerthan64bytesresetittokey=MD5(key)*/
if(key_len>64){
MD5_CTXtctx;
MD5Init(&tctx);
MD5Update(&tctx,key,key_len);
MD5Final(tk,&tctx);
key=tk;
key_len=16;
}
/*
*theHMAC_MD5transformlookslike:
*
*MD5(KXORopad,MD5(KXORipad,text))
*
*whereKisannbytekey
*ipadisthebyte0x36repeated64times
*opadisthebyte0x5crepeated64times
*andtextisthedatabeingprotected
*/
/*startoutbystoringkeyinpads*/
bzero(k_ipad,sizeofk_ipad);
bzero(k_opad,sizeofk_opad);
bcopy(key,k_ipad,key_len);
bcopy(key,k_opad,key_len);
/*XORkeywithipadandopadvalues*/
for(i=0;i<64;i++){
k_ipad[i]^=0x36;
k_opad[i]^=0x5c;
}
/*
*performinnerMD5
*/
MD5Init(&context);/*initcontextfor1st
*pass*/
MD5Update(&context,k_ipad,64)/*startwithinnerpad*/
MD5Update(&context,text,text_len);/*thentextofdatagram*/
MD5Final(digest,&context);/*finishup1stpass*/
/*
*performouterMD5
*/
MD5Init(&context);/*initcontextfor2nd
*pass*/
MD5Update(&context,k_opad,64);/*startwithouterpad*/
MD5Update(&context,digest,16);/*thenresultsof1st
*hash*/
MD5Final(digest,&context);/*finishup2ndpass*/
}
TestVectors(Trailing'/0'ofacharacterstringnotincludedintest):
key=0x0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b
key_len=16bytes
data="HiThere"
data_len=8bytes
digest=0x9294727a3638bb1c13f48ef8158bfc9d
key="Jefe"
data="whatdoyawantfornothing?"
data_len=28bytes
digest=0x750c783e6ab0b503eaa86e310a5db738
key=0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
key_len16bytes
data=0xDDDDDDDDDDDDDDDDDDDD...
..DDDDDDDDDDDDDDDDDDDD...
..DDDDDDDDDDDDDDDDDDDD...
..DDDDDDDDDDDDDDDDDDDD...
..DDDDDDDDDDDDDDDDDDDD
data_len=50bytes
digest=0x56be34521d144c88dbb8c733f0e8b3f6
致謝:
Pau-ChenCheng,JeffKraemer,andMichaelOehler,haveprovided
usefulcommentsonearlydrafts,andranthefirstinterOperability
testsofthisspecification.JeffandPau-Chenkindlyprovidedthe
samplecodeandtestvectorsthatappearintheappendix.Burt
Kaliski,BartPreneel,MattRobshaw,AdiShamir,andPaulvan
Oorschothaveprovidedusefulcommentsandsuggestionsduringthe
investigationoftheHMACconstrUCtion.
參考書目:
[ANSI]ANSIX9.9,"AmericanNationalStandardforFinancial
InstitutionMessageAuthentication(Wholesale),"American
BankersAssociation,1981.Revised1986.
[Atk]Atkinson,R.,"IPAuthenticationHeader",RFC1826,August
1995.
[BCK1]M.Bellare,R.Canetti,andH.Krawczyk,
"KeyedHashFunctionsandMessageAuthentication",
ProceedingsofCrypto'96,LNCS1109,pp.1-15.
(http://www.research.ibm.com/security/keyed-md5.Html)
[BCK2]M.Bellare,R.Canetti,andH.Krawczyk,
"PseudorandomFunctionsRevisited:TheCascadeConstruction",
ProceedingsofFOCS'96.
[Dobb]H.Dobbertin,"TheStatusofMD5AfteraRecentAttack",
RSALabs'CryptoBytes,Vol.2No.2,Summer1996.
http://www.rsa.com/rsalabs/pubs/cryptobytes.html
[PV]B.PreneelandP.vanOorschot,"BuildingfastMACsfromhash
functions",AdvancesinCryptology--CRYPTO'95Proceedings,
LectureNotesinComputerScience,Springer-VerlagVol.963,
[MD5]Rivest,R.,"TheMD5Message-DigestAlgorithm",
RFC1321,April1992.
[MM]Meyer,S.andMatyas,S.M.,Cryptography,NewYorkWiley,
1982.
[RIPEMD]H.Dobbertin,A.Bosselaers,andB.Preneel,"RIPEMD-160:A
strengthenedversionofRIPEMD",FastSoftwareEncryption,
LNCSVol1039,pp.71-82.
FTP://ftp.esat.kuleuven.ac.be/pub/COSIC/bosselae/ripemd/.
[SHA]NIST,FIPSPUB180-1:SecureHashStandard,April1995.
[Tsu]G.Tsudik,"Messageauthenticationwithone-wayhash
functions",InProceedingsofInfocom'92,May1992.
(Alsoin"accessControlandPolicyEnforcementin
Internetworks",Ph.D.Dissertation,ComputerScience
Department,UniversityofsouthernCalifornia,April1991.)
[VW]P.vanOorschotandM.Wiener,"ParallelCollision
SearchwithapplicationstoHashFunctionsandDiscrete
Logarithms",Proceedingsofthe2ndACMConf.Computerand
CommunicationsSecurity,Fairfax,VA,November1994.
作者地址:
HugoKrawczyk
IBMT.J.WatsonResearchCenter
P.O.Box704
YorktownHeights,NY10598
EMail:hugo@watson.ibm.com
MihirBellare
DeptofComputerScienceandEngineering
MailCode0114
UniversityofCaliforniaatSanDiego
9500GilmanDrive
LaJolla,CA92093
EMail:mihir@cs.ucsd.edu
RanCanetti
IBMT.J.WatsonResearchCenter
P.O.Box704
YorktownHeights,NY10598
EMail:canetti@watson.ibm.com
新聞熱點
疑難解答