- 相關(guān)推薦
HMAC認(rèn)證協(xié)議的單片機(jī)實(shí)現(xiàn)
摘要:HMAC是一種基于密鑰的Hash算法的認(rèn)證協(xié)議,可以應(yīng)用于電子商務(wù)領(lǐng)域。我們通過(guò)國(guó)有自主知識(shí)產(chǎn)權(quán)的單片機(jī)ZQ032SA,實(shí)現(xiàn)了以MD5算法為核心的HMAC協(xié)議,并把它調(diào)用于IP電話計(jì)費(fèi)認(rèn)證系統(tǒng)。引言
在開(kāi)放的通信和計(jì)算機(jī)系統(tǒng)中,建立安全可靠的電子商務(wù)平臺(tái)是十分重要的。通常需要通過(guò)加密的方法對(duì)客戶的有關(guān)信息,如密碼、合同等加以保護(hù),使之不被盜取或篡改。當(dāng)客戶提出服務(wù)申請(qǐng)時(shí),必須對(duì)客戶身份的合法性、報(bào)文的完整性進(jìn)行確認(rèn)。
HMAC(Keyed-Hashing for Message Authentication)是一個(gè)公開(kāi)的協(xié)議。它是一種基于密鑰的報(bào)文完整性的驗(yàn)證方法,其安全性是建立在Hash算法基礎(chǔ)上的。它要求通信雙方共享密鑰、約定算法、對(duì)報(bào)文進(jìn)行Hash運(yùn)算,如MD5、SHA、RIPEMD等,形成固定長(zhǎng)度的認(rèn)證碼。通信雙方通過(guò)認(rèn)證碼的校驗(yàn)來(lái)確定報(bào)文的合法性。這個(gè)協(xié)議可以用來(lái)作加密、數(shù)字簽名、報(bào)文驗(yàn)證等。
利用HMAC協(xié)議可以建立一個(gè)身份認(rèn)證的電子商務(wù)平臺(tái),客戶和服務(wù)端雙方需要預(yù)先約定唯一的公鑰和加密算法;客戶單方面保留自己密碼作為密鑰,服務(wù)端只保留公鑰和認(rèn)證碼。這個(gè)認(rèn)證碼是密鑰經(jīng)HMAC協(xié)議加密得到定長(zhǎng)碼字。當(dāng)客戶提出服務(wù)申請(qǐng)時(shí),應(yīng)提交鑰和密鑰的認(rèn)證碼。服務(wù)端通過(guò)公鑰確認(rèn)客戶的基本身份,再檢驗(yàn)認(rèn)證碼確定客戶的合法性。這樣,客戶的私密信息在服務(wù)端、傳輸媒介中都是加密隱藏的。
我們利用服務(wù)器建立了服務(wù)端的模擬用戶數(shù)據(jù)庫(kù),單片機(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)代表對(duì)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代表任意長(zhǎng)度文本。
密鑰≥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算法以對(duì)任意長(zhǎng)度消息多次循環(huán)迭代的散列運(yùn)算,最終形成16 Byte報(bào)文摘要。這個(gè)摘要對(duì)文本具有唯一性,可作為認(rèn)證碼。在目標(biāo)計(jì)算機(jī)的計(jì)算速度下,這個(gè)摘要是難于破解的。
(1)報(bào)文填充
MD5算法要求對(duì)任意長(zhǎng)度報(bào)文進(jìn)行填充,構(gòu)成N×64 Byte消息分組,N為整數(shù)。其中每一分組又劃分為16個(gè)4字節(jié)子分組。
填充數(shù)據(jù)分2步。首先,填充使得數(shù)據(jù)位長(zhǎng)度恰好為(N×64-8)Byte的數(shù),即在報(bào)文有效數(shù)據(jù)后補(bǔ)1個(gè)0x1,其它補(bǔ)0x0至滿足上述要求。然后,再后補(bǔ)上8字節(jié)(64位)的報(bào)文數(shù)據(jù)長(zhǎng)度(填充前字節(jié)數(shù))。這樣,數(shù)據(jù)就被填充為64Byte(512bit)的整數(shù)倍。
(2)初始化MD5參數(shù)
4個(gè)4字節(jié)位變量(A、B、C、D)用來(lái)作為報(bào)文摘要的初始值:
A=0x01234567
B=0x89abcdef
C=0xfedcba98
D=0x76543210
(3)算法
MD5算法是對(duì)消息分組依次迭代算法。第1次運(yùn)算的初始值為ABCD,以后每一次迭代運(yùn)算的結(jié)果都替換ABCD作為下一次的初始值,共經(jīng)過(guò)N次的迭代運(yùn)算,就得到該消息的報(bào)文摘要,如圖1所示。
對(duì)每一消息分組的運(yùn)算方法是相同的。首先把初始值A(chǔ)BCD放入變量abcd,然后進(jìn)行4輪相似的運(yùn)算變換,每輪包含16次操作。每次操作對(duì)其中的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
【HMAC認(rèn)證協(xié)議的單片機(jī)實(shí)現(xiàn)】相關(guān)文章:
單片機(jī)實(shí)現(xiàn)對(duì)CF卡的讀寫(xiě)03-18
用CPLD實(shí)現(xiàn)單片機(jī)讀寫(xiě)模塊03-20
用OPENSSL實(shí)現(xiàn)電子商務(wù)中的CA認(rèn)證03-18
利用VB實(shí)現(xiàn)PC機(jī)與多單片機(jī)通訊03-18
電子車(chē)速里程表的單片機(jī)實(shí)現(xiàn)方案03-21
用單片機(jī)實(shí)現(xiàn)SRAM工藝FPGA的加密應(yīng)用03-19
基于Web的單片機(jī)遠(yuǎn)程監(jiān)控系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)03-07