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