一种生成消息认证码的方法技术

技术编号:3484965 阅读:316 留言:0更新日期:2012-04-11 18:40
本发明专利技术公开了一种生成消息认证码的方法,属于密钥算法领域。所述方法包括:对缓冲区和字变量进行初始化,通过多次循环计算中间量和字变量,并根据中间量和字变量得到消息认证码。本发明专利技术不需要在密钥生成设备内部单独分配RAM,用于全局缓存密钥的填充、数据流的补位、补长度等操作,不需要在整个散列函数运算中全局缓存,大大降低了在运算过程中所需的RAM资源,能够广泛应用于RAM资源很少的低成本密钥生成设备中,有利地降低设备成本,提高了设备应用的竞争力。

【技术实现步骤摘要】

本专利技术涉及密钥算法领域,具体说是一种使用密钥生成设备生成消息认证码的方法。技术背景在现有信息加密技术中,常见的信息保护手段大致可以分为保密和认证两大类。目前的 认证技术有对用户的认证和对消息的认证两种方式,用户认证用于鉴别用户的身份是否是合 法用户;消息认证就是验证所收到的消息确实是来自真正的发送方且未被修改的消息,也可 以验证消息的顺序和及时性。消息认证实际上是对消息本身产生一个冗余的信息 一MAC(Message Authentication Code,消息认证码),消息认证码是利用密钥对要认证的消息 产生新的数据块,并对数据块加密生成的。它对于要保护的信息来说是唯一和一一对应的。 因此可以有效地保护消息的完整性,以及实现发送方消息的不可抵赖和不能伪造。消息认证码的安全性取决于两点l)采用的加密算法生成数字签名;2)待加密数据块的生成方法。用消息认证码实现消息认证可通过消息摘要方案来实现。消息摘要方案是利用目前广泛应用的单向散列函数来生成HMAC-SHA1值作为认证码。HMAC (Keyed-hash message authentication code,基于哈希的消息认证码)是指由关键字 和加密算法一起计算出来的消息加密码,能够同时验证消息真实性和数据完整性。HMAC是 一种基于散列函数的消息鉴别码。它可用来检测通过不可靠媒介传输或存储的信息完整性。 一般的,消息鉴别码用于验证传输于两个共同享有一个密钥的单位之间的消息。HMAC可以 与任何迭代散列函数捆绑使用,MD5和SHA1就是这种散列函数。HMAC还可以使用一个用 于计算和确认消息鉴别值的密钥。目前,可供选择的散列函数有SHAl, MD5, RIPEMD—128/160。这些 不同的HMAC实现被表示为,HMAC—SHA1, HMAC—MD5, HMAC—RIPEMD等等。定义HMAC需要一个用于加密的散列函数(表示为H), 一个密钥K和一个数据流text。 H可以是SHA1或MD5等,它是一个将数据块用一个基本的迭代压縮函数来加密的散列函数。 用B来表示数据块的字长(以上提到的散列函数的分割数据块字长B=64)。用L来表示散列 函数的输出数据字长(MD5中L-16, SHA—1中L=20)。鉴别密钥的长度可以是小于等于数据块字长的任何正整数值。应用程序中使用的密钥长度若是比B大,则首先使用散列函数H 作用于它,然后用H输出的L长度字符串作为在HMAC中实际使用的密钥。 一般情况下, 推荐的最小密钥K长度是L个字长。(与H的输出数据长度相等)。将定义两个固定且不同的 字符串ipad, opad: ('i', 'o'标志内部与外部)ipad = the byte 0x36 repeated B times opad = the byte 0x5 C repeated B times 。 计算'text'的HMAC:H(KXORopad, H(KXORipad, text)) 即为以下步骤-1) 在密钥K后面添加O来创建一个字长为B的字符串(例如,如果K的字长是20字节, B二64字节,则K后会加入44个零字节0x00);2) 辨上一步生成的B字长的字符串与ipad做异或运算;3) 将数据流text填充至第二步的结果字符串中;4) 用H作用于第三步生成的数据流;5) 将第一步生成的B字长字符串与opad做异或运算;6) 再将第四步的结果填充进第五步的结果中;7) 用H作用于第六步生成的数据流,输出最终结果。安全哈希算法(SHA, Secure Hash Algorithm)主要适用于数字签名标准(DSS, Digital Signature Standard)里面定义的数字签名算法(DSA, Digital Signature Algorithm)。对于长度 小于264位的消息,SHA1会产生一个160位的消息摘要。当接收到消息的时候,这个消息摘 要可以用来验证数据的完整性。在传输的过程中,数据很可能会发生变化,那么这时候就会 产生不同的消息摘要。SHA1有如下特性不可以从消息摘要中复原信息;两个不同的消息不会产生同样的消 息摘要。SHA1始终把消息当成一个位(bit)字符串来处理。本文中, 一个"字"(Word)是 32位,而一个"字节"(Byte)是8位。比如,字符串"abc"可以被转换成一个位字符串 01100001 01100010 01100011,它也可以被表示成16进制字符串0x616263。SHA1中循环左移位操作符Sn(X),其中,X是一个字,n是一个整数,0<=n<=32, Sn(X) =(X n)OR(X 32-n)。X n定义如下抛弃最左边的n位数字,将其余各个位依次向左移动n位,然后用0 填补右边的n位(最后结果还是32位)。乂》!1是抛弃右边的11位,将其余各个位依次向右移动n位,然后在左边的n位填0。 在SHA1算法中,必须把原始消息(字符串,文件等)转换成位字符串。SHA1算法只接 受位作为输入,假设对字符串"abc"产生消息摘要。首先,将它转换成位字符串如下-01100001 01100010 01100011'a,=97 'b,=98 V=99这个位字符串的长度为24位,需要5个步骤来计算SHA1:1) 补位消息必须进行补位,以使其长度在对512取模以后的余数是448。也就是说,(补 位后的消息长度)%512 = 448,即使长度已经满足对512取模后余数是448,补位也必须要进 行。补位是这样进行的先补一个l,然后再补0,直到长度满足对512取模后余数是448, 总而言之,补位是至少补一位,最多补512位,还是以前面的"abc"为例显示补位的过程原始信息01100001 01100010 01100011补位第一步oiiooooioiioooiooiioooiii 首先补一个"r,补位第二步01100001 01100010 01100011 10... 0 然后补423个"0" 可以把最后补位完成后的数据用16进制写成下面的样子 61626380 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000现在,数据的长度是448,可以进行下一步操作;2) 补长度所谓的补长度是将原始数据的长度补到已经进行了补位操作的消息后面,通常用一个64 位的数据^表示原始消息的长度,如果消息长度不大于264,那么第一个字就是O,在进行了 补长度的操作以后,整个消息就变成下面这样了(16进制格式)61626380 00000000 00000000 0000000000000000 00000000 00000000 0000000000000000 00000000 00000000 0000000000000000 00000000 00000000 00000018如果原始的消息长度超过了 512,需要将它补成512的倍数,然后把整个消息分成多个 长度为512位的数据块(16个字的数据块M1, M2, ..., Mn),分别处理每一个数据块M本文档来自技高网...

【技术保护点】
一种生成消息认证码的方法,其特征在于,所述方法包括:步骤A1:把数据流存入中间数据流缓冲区,用预先规定的常量分别初始化字变量1、字变量2、字变量3、字变量4和字变量5;步骤A2:将所述字变量1、字变量2、字变量3、字变量4和字变量5分别赋给预先设定的字变量6、字变量7、字变量8、字变量9和字变量10;步骤A3:对于计数变量取值0到79,循环计算中间量、字变量6、字变量7、字变量8、字变量9和字变量10;其中,所述计数变量的初始值为0,每循环计算一次,所述计数变量加1;每循环一次,根据当前中间量按照预设规则修改所述字变量6、字变量7、字变量8、字变量9和字变量10;所述中间量分如下两步计算:1)如果所述计数变量取值0到15,根据预设共享密钥、所述共享密钥的长度、预设常数1和所述计数变量,运用预先规定的算法计算所述中间量;2)如果所述计数变量取值16到79,根据待计算的当前中间量的前16个中间量,运用另一个预先规定的算法计算所述当前中间量;步骤A4:所述计数变量等于80时,根据如下公式:字变量1=字变量1+字变量6,字变量2=字变量2+字变量7,字变量3=字变量3+字变量8,字变量4=字变量4+字变量9,字变量5=字变量5+字变量10;计算当前字变量1、字变量2、字变量3、字变量4和字变量5,并将所述计数变量归0;步骤A5:将当前的字变量1、字变量2、字变量3、字变量4和字变量5分别赋给所述字变量6、字变量7、字变量8、字变量9和字变量10;步骤A6:对于计数变量取值0到79,循环计算中间量、字变量6、字变量7、字变量8、字变量9和字变量10;其中,所述中间量分如下两步计算:1)如果所述计数变量取值0到15,根据所述中间数据流缓冲区中的中间数据流、所述中间数据流的长度和所述计数变量,运用预先规定的算法计算所述中间量;2)如果所述计数变量取值16到79,根据待计算的当前中间量的前16个中间量,运用另一个预先规定的算法计算所述当前中间量;步骤A7:所述计数变量等于80时,根据原字变量1、字变量2、字变量3、字变量4和字变量5,以及所述步骤A6中计算出的字变量6、字变量7、字变量8、字变量9和字变量10,计算当前字变量1、字变量2、字变量3、字变量4和字变量5;并将所述计数变量归0;步骤A8:将当前的字变量1、字变量2、字变量3、字变量4和字变量5分别装载到所述中间数据流缓冲区,用所述预先规定的常量分别初始化当前的字变量...

【技术特征摘要】

【专利技术属性】
技术研发人员:陆舟于华章
申请(专利权)人:北京飞天诚信科技有限公司
类型:发明
国别省市:11[]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1