引言
在開放的通信和計(jì)算機(jī)系統(tǒng)中,建立安全可靠的電子商務(wù)平臺是十分重要的,。通常需要通過加密的方法對客戶的有關(guān)信息,,如密碼、合同等加以保護(hù),,使之不被盜取或篡改,。當(dāng)客戶提出服務(wù)申請時(shí),必須對客戶身份的合法性,、報(bào)文的完整性進(jìn)行確認(rèn),。
HMAC(Keyed-Hashing for Message Authentication)是一個(gè)公開的協(xié)議。它是一種基于密鑰的報(bào)文完整性的驗(yàn)證方法,,其安全性是建立在Hash算法基礎(chǔ)上的,。它要求通信雙方共享密鑰、約定算法,、對報(bào)文進(jìn)行Hash運(yùn)算,,如MD5、SHA,、RIPEMD等,,形成固定長度的認(rèn)證碼。通信雙方通過認(rèn)證碼的校驗(yàn)來確定報(bào)文的合法性,。這個(gè)協(xié)議可以用來作加密,、數(shù)字簽名、報(bào)文驗(yàn)證等。
利用HMAC協(xié)議可以建立一個(gè)身份認(rèn)證的電子商務(wù)平臺,,客戶和服務(wù)端雙方需要預(yù)先約定唯一的公鑰和加密算法,;客戶單方面保留自己密碼作為密鑰,服務(wù)端只保留公鑰和認(rèn)證碼,。這個(gè)認(rèn)證碼是密鑰經(jīng)HMAC協(xié)議加密得到定長碼字,。當(dāng)客戶提出服務(wù)申請時(shí),應(yīng)提交鑰和密鑰的認(rèn)證碼,。服務(wù)端通過公鑰確認(rèn)客戶的基本身份,,再檢驗(yàn)認(rèn)證碼確定客戶的合法性。這樣,,客戶的私密信息在服務(wù)端,、傳輸媒介中都是加密隱藏的。
我們利用服務(wù)器建立了服務(wù)端的模擬用戶數(shù)據(jù)庫,,單片機(jī)實(shí)現(xiàn)客戶端的加密算法,,電話線作為傳輸介質(zhì),實(shí)現(xiàn)了HMAC協(xié)議在IP電話計(jì)費(fèi)系統(tǒng)中的應(yīng)用,。
1 HMAC的算法原理
1.1 HMAC算法定義
用公式表示如下:
HMAC=H(key xor opad,H(key xor ipad,text))
H(X,,Y)代表對X+Y的消息進(jìn)行一種Hash運(yùn)算;
ipad代表重復(fù)B次的單字節(jié)十六進(jìn)制常數(shù)0x36,;
opad代表重復(fù)B次的單字節(jié)十六進(jìn)行常數(shù)0x5c,;
key代表64字節(jié)的字符串,由密鑰組成,,不足的補(bǔ)0,;
text代表任意長度文本。
密鑰≥L字節(jié),。當(dāng)大于B時(shí),,先經(jīng)Hash計(jì)算形成L字節(jié)的秘鑰(B是Hash算法中一次迭代運(yùn)算的數(shù)據(jù)塊字節(jié)數(shù);L是Hash算法形成報(bào)文摘要的字節(jié)數(shù)),。
HMAC協(xié)議定義了迭代兩次的Hash加密算法,,最終形成報(bào)文摘要(DIGEST)值就是認(rèn)證碼?;谒惴ǖ目煽啃?、安全性和易于計(jì)算機(jī)實(shí)現(xiàn)特性,先用Hash中的MD5算法實(shí)現(xiàn)HMAC,,其B=64,L=16,。
1.2 MD5算法定義
MD5算法以對任意長度消息多次循環(huán)迭代的散列運(yùn)算,最終形成16 Byte報(bào)文摘要,。這個(gè)摘要對文本具有唯一性,,可作為認(rèn)證碼,。在目標(biāo)計(jì)算機(jī)的計(jì)算速度下,這個(gè)摘要是難于破解的,。
(1)報(bào)文填充
MD5算法要求對任意長度報(bào)文進(jìn)行填充,,構(gòu)成N×64 Byte消息分組,,N為整數(shù)。其中每一分組又劃分為16個(gè)4字節(jié)子分組,。
填充數(shù)據(jù)分2步,。首先,填充使得數(shù)據(jù)位長度恰好為(N×64-8)Byte的數(shù),,即在報(bào)文有效數(shù)據(jù)后補(bǔ)1個(gè)0x1,,其它補(bǔ)0x0至滿足上述要求。然后,,再后補(bǔ)上8字節(jié)(64位)的報(bào)文數(shù)據(jù)長度(填充前字節(jié)數(shù)),。這樣,數(shù)據(jù)就被填充為64Byte(512bit)的整數(shù)倍,。
?。?)初始化MD5參數(shù)
4個(gè)4字節(jié)位變量(A、B,、C,、D)用來作為報(bào)文摘要的初始值:
A=0x01234567
B=0x89abcdef
C=0xfedcba98
D=0x76543210
(3)算法
MD5算法是對消息分組依次迭代算法。第1次運(yùn)算的初始值為ABCD,,以后每一次迭代運(yùn)算的結(jié)果都替換ABCD作為下一次的初始值,,共經(jīng)過N次的迭代運(yùn)算,就得到該消息的報(bào)文摘要,,如圖1所示,。
對每一消息分組的運(yùn)算方法是相同的。首先把初始值A(chǔ)BCD放入變量abcd,,然后進(jìn)行4輪相似的運(yùn)算變換,,每輪包含16次操作。每次操作對其中的3個(gè)變量(4字節(jié))bcd做1次非線性運(yùn)算,,將其結(jié)果加上變量a,一個(gè)消息子分組Mi,,一個(gè)常數(shù)Ti;將所得結(jié)果向環(huán)移一個(gè)不定的數(shù)Si,再加變量b,,然后用該結(jié)果取代變量a,變換abcd<=dabc,,進(jìn)入下一次運(yùn)算,共16次,,如圖2所示,。4輪運(yùn)算結(jié)束后,把變量abcd與初始ABCD進(jìn)行“異或”運(yùn)算,結(jié)果作為下一分組的初始值,。
計(jì)算公式如下:
第1輪:SUB_FF(a,b,c,d,Mi,Si,Ti):a<=b+((a+F(b,c,d)+Mi+Ti)<<
第2輪:SUB_GG(a,b,c,d,Mi,Si,Ti):a<=b+((a+G(b,c,d)+Mi+Ti)<<
第3輪:SUB_HH(a,b,c,d,Mi,Si,Ti):a<=b+((a+H(b,c,d)+Mi+Ti)<<
第4輪:SUB_II(a,b,c,d,Mi,Si,Ti):a<=b+((a+I(b,c,d)+Mi+Ti)<<
數(shù)據(jù)交換規(guī)則:a,b,c,d→d,a,b,c→c,d,a,b, →b,c,d,a
最終:ABCD<=ABCD+abcd
其中:Mi為16個(gè)信息子包,,每個(gè)4字節(jié);Ti為4字節(jié)常數(shù);Si為左移位數(shù),;abcd為32位變量,;初始值為ABCD。
函數(shù):F(X,,Y,,Z)=X&Y|NOT(X)&Z
G(X,Y,Z)=X&Z|Y¬(Z)
H(X,Y,Z)=XxorYxorZ
I(X,Y,Z)=Yxor(X|not(Z))
2 HMAC在IP電話計(jì)費(fèi)上的應(yīng)用
利用HMAC的認(rèn)證功能,可對用戶的IP儲值卡中的金額進(jìn)行保護(hù),。在試驗(yàn)系統(tǒng)中,,智能終端相當(dāng)于認(rèn)證系統(tǒng)的客戶端,如圖3所示,。
當(dāng)用戶使用時(shí),,用戶只須直接撥入所叫的電話號碼即可。智能終端則自動撥向IP服務(wù)商,,待響應(yīng)后,,反終端序列號、主叫電話號碼,、認(rèn)證碼一同發(fā)給服務(wù)商,。智能終端序列號相當(dāng)于公鑰,用戶的密碼就是密鑰,。智能終端對密鑰進(jìn)行HMAC協(xié)議的加密運(yùn)算自動生成認(rèn)證碼,。
服務(wù)曾幾何時(shí)接收數(shù)據(jù)碼流,根據(jù)終端序列號確定用戶的基本信息,,再通過數(shù)據(jù)庫中存儲的認(rèn)證碼與接收到認(rèn)證碼的比較,,確認(rèn)用戶的合法身份。如身份無誤,,則接通話路,,計(jì)時(shí)收費(fèi)。
其中第3步認(rèn)證碼的格式如表1所列,。
表1 認(rèn)證碼格式
16Byte認(rèn)證碼,,是經(jīng)由HMAC加密得到的,其中的KEY值,、TEXT值都可以作為用戶密碼,。由于認(rèn)證碼高4bit為為0,所以不可以直接發(fā)送DTMF,,要把4bit校驗(yàn)碼排在認(rèn)證碼之后,,共組成132bit數(shù)據(jù),,一起經(jīng)過串行左移轉(zhuǎn)化,每3bit構(gòu)成1組,,最后形成44個(gè)DTMF,。
智能終端由單片機(jī)、DTMF撥號電話機(jī),、液晶顯示等芯片構(gòu)成,。MCU不但要承擔(dān)主控任務(wù),還要實(shí)現(xiàn)HMAC的運(yùn)算,。
3 HMAC的單片機(jī)實(shí)現(xiàn)
(1)ZQ032SA單片機(jī)簡介
ZQ032SA 是北京中慶公司具有獨(dú)立知識產(chǎn)權(quán)的Flash型MCU,,與Motorola 6805系列單片機(jī)功能相似,,指令兼容。其采用CMOS工藝,,工作穩(wěn)定,、功耗低、采用小型表貼封裝(SOP28),,適合民用設(shè)備使用,。
主要特性有:
*8位MCU,兼容增強(qiáng)型6502指令集,;
*4MHz主頻,,典型取指周期0.5μs。
*16Kbyte片內(nèi)Flash存儲器,。
*352Byte片內(nèi)用戶RAM,,其中包括64Byte的堆棧區(qū);
*1個(gè)13位的多功能計(jì)數(shù)器和1個(gè)看門狗WDT
*20個(gè)通用I/O接口,;
*1個(gè)載波調(diào)制發(fā)生器CMT,;
*Flash保護(hù)機(jī)制;
*Flash在線程序下載,;
*2種節(jié)電模式,。
引腳排列和內(nèi)部模塊可參見本刊網(wǎng)絡(luò)補(bǔ)充版。(http://www.dpj.com.cn),。
?。?)HMAC算法的實(shí)現(xiàn)
基于單片機(jī)內(nèi)部可用RAM的大小及實(shí)際使用時(shí)可能的密碼長度,在認(rèn)證系統(tǒng)中規(guī)定了消息長度,,key≤64B,text≤58B,。這樣在本例中,MD5運(yùn)算的消息分組N=2,。在單片機(jī)4MHz主頻時(shí),,經(jīng)過程序優(yōu)化,,完成HMAC的運(yùn)算所需時(shí)間小于3ms。詳細(xì)程序網(wǎng)絡(luò)補(bǔ)充版(http://www.dpj.com.cn),。
下面列出主要流程圖,。
其中:MD5_MAIN是MD5運(yùn)算主程序;
MD5_ONE子程序是MD5的一個(gè)分組運(yùn)算,;
SUB-FF,、FBCD、GBCD,、HBCD,、IBCD分別是MD5運(yùn)算中相應(yīng)函數(shù)的子程序;
SHIFT子程序完成<
EXCH子程序完成地址4組數(shù)據(jù)的交換;
常數(shù)Ti列表于MEM_C,,移位Si列表于TABLE_S,;
消息子分組順序列表于TABLE_M;
KEY鍵盤程序讀入存于MEM_M,,TEXT存于MEM_MB,。
標(biāo)號MEM1-4的RAM用于中間計(jì)算。
HMAC流程如圖4所示,。
MD5算法中的一個(gè)消息分組的計(jì)算程序流程如圖6所示,。
HMAC作為一種認(rèn)證的協(xié)議,可以用于那么需要數(shù)字簽名,、身份認(rèn)證或報(bào)文完整性檢驗(yàn)等領(lǐng)域,。在家用電子市場、安防,、電子商務(wù)方面,,都有廣泛的用途。
在單片機(jī)可實(shí)現(xiàn)HMAC認(rèn)證的基礎(chǔ)上,,可以進(jìn)一步把ZQ032SA的IP核與其它外圍邏輯構(gòu)成ASIC,,用于智能卡,將有應(yīng)用前景,。
在HMAC協(xié)議的基礎(chǔ)上,,加入其它成熟的加密算法,如DES,,可以進(jìn)一步提高認(rèn)證的安全性,。