学海荡舟手机网

主页 > 实用文摘 > 教育文摘_09 > > 详细内容

HMAC认证协议的单片机实现_单片机论文

摘要:hmac是一种基于密钥的hash算法的认证协议,可以应用于电子商务领域。我们通过国有自主知识产权的单片机zq032sa,实现了以md5算法为核心的hmac协议,并把它调用于ip电话计费认证系统。

    关键词:hmac zq032sa(6805) md5 ip电话

引言

在开放的通信和计算机系统中,建立安全可靠的电子商务平台是十分重要的。通常需要通过加密的方法对客户的有关,如密码、合同等加以保护,使之不被盗取或篡改。当客户提出服务申请时,必须对客户身份的合法性、报文的完整性进行确认。

hmac(keyed-hashing for message authentication)是一个公开的协议。它是一种基于密钥的报文完整性的验证方法,其安全性是建立在hash算法基础上的。它要求通信双方共享密钥、约定算法、对报文进行hash运算,如md5、sha、ripemd等,形成固定长度的认证码。通信双方通过认证码的校验来确定报文的合法性。这个协议可以用来作加密、数字签名、报文验证等。

    利用hmac协议可以建立一个身份认证的电子商务平台,客户和服务端双方需要预先约定唯一的公钥和加密算法;客户单方面保留自己密码作为密钥,服务端只保留公钥和认证码。这个认证码是密钥经hmac协议加密得到定长码字。当客户提出服务申请时,应提交钥和密钥的认证码。服务端通过公钥确认客户的基本身份,再检验认证码确定客户的合法性。这样,客户的私密在服务端、传输媒介中都是加密隐藏的。

我们利用服务器建立了服务端的模拟用户数据库,单片机实现客户端的加密算法,电话线作为传输介质,实现了hmac协议在ip电话计费系统中的应用。

1 hmac的算法原理

1.1 hmac算法定义

用公式表示如下:

hmac=h(key xor opad,h(key xor ipad,text))

h(x,y)代表对x+y的消息进行一种hash运算;

ipad代表重复b次的单字节十六进制常数0x36;

opad代表重复b次的单字节十六进行常数0x5c;

key代表64字节的字符串,由密钥组成,不足的补0;

text代表任意长度文本。

密钥≥l字节。当大于b时,先经hash计算形成l字节的秘钥(b是hash算法中一次迭代运算的数据块字节数;l是hash算法形成报文摘要的字节数)。

hmac协议定义了迭代两次的hash加密算法,最终形成报文摘要(digest)值就是认证码。基于算法的可靠性、安全性和易于计算机实现特性,先用hash中的md5算法实现hmac,其b=64,l=16。

1.2 md5算法定义

md5算法以对任意长度消息多次循环迭代的散列运算,最终形成16 byte报文摘要。这个摘要对文本具有唯一性,可作为认证码。在目标计算机的计算速度下,这个摘要是难于破解的。

(1)报文填充

md5算法要求对任意长度报文进行填充,构成n×64 byte消息分组,n为整数。其中每一分组又划分为16个4字节子分组。

填充数据分2步。首先,填充使得数据位长度恰好为(n×64-8)byte的数,即在报文有效数据后补1个0x1,其它补0x0至满足上述要求。然后,再后补上8字节(64位)的报文数据长度(填充前字节数)。这样,数据就被填充为64byte(512bit)的整数倍。

(2)初始化md5参数

4个4字节位变量(a、b、c、d)用来作为报文摘要的初始值:

a=0x01234567

b=0x89abcdef

c=0xfedcba98

d=0x76543210

(3)算法

md5算法是对消息分组依次迭代算法。第1次运算的初始值为abcd,以后每一次迭代运算的结果都替换abcd作为下一次的初始值,共经过n次的迭代运算,就得到该消息的报文摘要,如图1所示。

对每一消息分组的运算方法是相同的。首先把初始值abcd放入变量abcd,然后进行4轮相似的运算变换,每轮包含16次操作。每次操作对其中的3个变量(4字节)bcd做1次非线性运算,将其结果加上变量a,一个消息子分组mi,一个常数ti;将所得结果向环移一个不定的数si,再加变量b,然后用该结果取代变量a,变换abcd<=dabc,进入下一次运算,共16次,如图2所示。4轮运算结束后,把变量abcd与初始abcd进行“异或”运算,结果作为下一分组的初始值。

计算公式如下:

第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个子包,每个4字节;ti为4字节常数;si为左移位数;abcd为32位变量;初始值为abcd。

函数:f(x,y,z)=x&y|not(x)&z

g(x,y,z)=x&z|y&not(z)

h(x,y,z)=xxoryxorz

i(x,y,z)=yxor(x|not(z))

2 hmac在ip电话计费上的应用

利用hmac的认证功能,可对用户的ip储值卡中的金额进行保护。在试验系统中,智能终端相当于认证系统的客户端,如图3所示。

当用户使用时,用户只须直接拨入所叫的电话号码即可。智能终端则自动拨向ip服务商,待响应后,反终端序列号、主叫电话号码、认证码一同发给服务商。智能终端序列号相当于公钥,用户的密码就是密钥。智能终端对密钥进行hmac协议的加密运算自动生成认证码。

服务曾几何时接收数据码流,根据终端序列号确定用户的基本,再通过数据库中存储的认证码与接收到认证码的比较,确认用户的合法身份。如身份无误,则接通话路,计时收费。

其中第3步认证码的格式如表1所列。

表1 认证码格式

引导符终端序列号电话号码*随机数hmac认证码校验码
*10byte21byte16byte0.5byte
32byte,高位为0,可直接发送dtmf不可直接发送,要转化 

16byte认证码,是经由hmac加密得到的,其中的key值、text值都可以作为用户密码。由于认证码高4bit为为0,所以不可以直接发送dtmf,要把4bit校验码排在认证码之后,共组成132bit数据,一起经过串行左移转化,每3bit构成1组,最后形成44个dtmf。

智能终端由单片机、dtmf拨号电话机、液晶显示等芯片构成。mcu不但要承担主控任务,还要实现hmac的运算。

3 hmac的单片机实现

(1)zq032sa单片机简介

zq032sa 是北京中庆公司具有独立知识产权的flash型mcu,与motorola 6805系列单片机功能相似,指令兼容。其采用cmos工艺,工作稳定、功耗低、采用小型表贴封装(sop28),适合民用设备使用。

主要特性有:

*8位mcu,兼容增强型6502指令集;

*4mhz主频,典型取指周期0.5μs。

*16kbyte片内flash存储器。

*352byte片内用户ram,其中包括64byte的堆栈区;

*1个13位的多功能计数器和1个看门狗wdt

*20个通用i/o接口;

*1个载波调制发生器cmt;

*flash保护机制;

*flash在线程序下载;

*2种节电模式。

引脚排列和内部模块可参见本刊网络补充版。(//www.dpj.com.cn)。

(2)hmac算法的实现

基于单片机内部可用ram的大小及实际使用时可能的密码长度,在认证系统中规定了消息长度,key≤64b,text≤58b。这样在本例中,md5运算的消息分组n=2。在单片机4mhz主频时,经过程序优化,完成hmac的运算所需时间小于3ms。详细程序网络补充版(//www.dpj.com.cn)。

下面列出主要流程图。

其中:md5_main是md5运算主程序;

md5_one子程序是md5的一个分组运算;

sub-ff、fbcd、gbcd、hbcd、ibcd分别是md5运算中相应函数的子程序;

shift子程序完成<<si的功能;

exch子程序完成地址4组数据的交换;

常数ti列表于mem_c,移位si列表于table_s;

消息子分组顺序列表于table_m;

key键盘程序读入存于mem_m,text存于mem_mb。

标号mem1-4的ram用于中间计算。

hmac流程如图4所示。

md5算法中的一个消息分组的计算程序流程如图6所示。

    hmac作为一种认证的协议,可以用于那么需要数字签名、身份认证或报文完整性检验等领域。在家用电子市场、安防、电子商务方面,都有广泛的用途。

在单片机可实现hmac认证的基础上,可以进一步把zq032sa的ip核与其它外围逻辑构成asic,用于智能卡,将有应用前景。

在hmac协议的基础上,加入其它成熟的加密算法,如des,可以进一步提高认证的安全性。