新型含密钥消息完整性认证码的生成方法与流程

文档序号:15566953发布日期:2018-09-29 03:34阅读:409来源:国知局

本发明属于密码学技术领域,特别是涉及一种新型含密钥消息完整性认证码的生成方法。



背景技术:

消息完整性是信息安全的一项基本要求,它可以防止数据未经授权被篡改。随着网络技术的不断进步,尤其是电子商务的不断发展,保证信息的完整性变得越来越重要,特别是双方在一个不安全的信道上通信时,就需要有一种方法保证一方所发送的数据能够被另一方验证是正确的、未经篡改的。含密钥的消息完整性认证函数的提出就是专门解决此类问题的。

最著名的消息完整性认证算法是cbc-mac,同时它也是一个ansi标准(x9.17)。cbc-mac实际上就是对消息使用cbc模式进行加密,取密文的最后一块作为认证码,参见图1。

cbc-mac模式全程使用的是同一个密钥控制下的分组密码算法ek(这里的要素有两个,一是分组密码算法,用e表示,另一个要素是下标k,表示该分组密码使用的密钥,我们下面记这个分组密码算法的明文分组规模为b比特),具体步骤是:

(1)对原始消息数据做填充,使其长度构成b比特的整数倍,为表述方便,记为填充后的消息数据长度为nb比特;

(2)选择b比特随机数c0;

(3)将填充后的消息数据按照每b比特进行切分,切分之后的数据为

(m1,m2,m3,m4,…,mn);

(4)将第一块的明文数据m1和预先选好的随机数c0做逐位异或操作,并将异或之后的数据通过由密钥控制下的分组密码算法ek,得到当前时刻的密文数据c1;

(5)让第i(2≤i≤n)块的明文数据mi和上一时刻生成的密文ci-1做逐位异或操作,并将异或之后的数据通过由密钥控制下的分组密码算法ek,得到当前时刻的密文数据ci;

(6)输出最后一块密文数据cn作为消息完整性认证码。

cbc-mac对于固定长度的消息(即每次消息的长度都是一定的)处理时具备理论上的安全性。但是在消息长度可变的前提下很容易受到攻击。因此出现了hmac、pmac、omac等多个变种和改进,安全性有一定程度的提升。

不论是cbc-mac还是其后续的改进,这些消息认证码技术的本质都是将安全性寄托在内部分组密码ek之上。一旦该分组密码算法被破解,上述的消息认证码技术将全部不安全。因此,如何进一步增强消息认证码生成函数的强度,使之不完全依赖单一密码算法的安全性,是一个值得解决的问题。



技术实现要素:

针对现有技术中存在的问题,本发明提供一种新型含密钥消息完整性认证码的生成方法,能够用于数据完整性检验,将传统cbc-mac模式及其各种变形中只调用一个分组密码算法改进成同时调用两个分组密码算法,使消息完整性认证码更安全。

为了实现上述目的,本发明采用以下的技术方案:

本发明提供一种新型含密钥消息完整性认证码的生成方法,包括以下步骤:

步骤1,预处理分别得到分组密码算法e1,k1、e2,k2;

步骤2,对待处理的消息进行填充,选择随机数c0,对填充之后的消息按分组密码算法单次处理长度做切分,切分为(m1,m2,m3,m4,…,mn);

步骤3,利用公式对(m1,m2,m3,m4,…,mn)进行处理,得到中间数据cn,其中1≤i≤n;

步骤4,利用公式mac=e1,k1(e2,k2(cn))对中间数据cn进行处理,得到(m1,m2,m3,m4,…,mn)对应的消息认证码mac。

进一步地,所述步骤1的具体实现过程如下:

步骤101,选择两个分组规模为b比特的分组密码加密变换e1,e2;

步骤102,将密钥k1注入e1中,得到分组密码算法e1,k1;

步骤103,将密钥k2注入e2中,得到分组密码算法e2,k2。

进一步地,所述步骤2中对待处理的消息进行填充的具体步骤如下:

步骤201,设原始消息长度为len,计算lenmodb的取值t,即len除以b之后的余数为t;

步骤202,当t值小于64时,先在原始消息之后添加1,再添加b+t-64个0,然后在其后添加原始消息的比特长度值len的64位表示,len不足64位的在其高位补0;

步骤203,当t值等于64时,直接在原始消息之后添加原始消息的比特长度值len的64位表示,len不足64位的在其高位补0;

步骤204,当t值大于64时,先在原始消息之后添加1,再添加t-64个0,然后在其后添加原始消息的比特长度值len的64位表示,len不足64位的在其高位补0。

进一步地,所述步骤3和步骤4的具体实现过程如下:

步骤301,将第一块的明文数据m1和预先选好的随机数c0做逐位异或操作;

步骤302,将步骤301异或之后的数据通过由密钥控制下的分组密码算法e1,k1;

步骤303,将e1,k1的输出作为e2,k2的输入,得到当前时刻的中间数据c1;

步骤304,对i从2增至n,将第i块的明文数据mi和上一时刻生成的中间数据ci-1做逐位异或操作,并将异或之后的数据通过由密钥控制下的分组密码算法e1,k1,将e1,k1的输出作为e2,k2的输入,得到当前时刻的中间数据ci;

步骤305,对cn依次用e2,k2和e1,k1作用,得到b比特消息认证码mac。

与现有技术相比,本发明具有以下优点:

利用单一分组密码的cbc-mac,其最大的缺点在于:算法的安全性完全取决于被调用的分组密码算法的强度,一旦该密码算法不安全,则整个消息完整性认证码生成系统就会崩溃。这个问题出现的根本在于cbc-mac的工作过程仅仅调用了一个分组密码算法。

本发明提出的一种新型含密钥消息完整性认证码的生成方法,本质上是一种更先进、更安全、更有效的消息完整性认证码。原因如下:(1)单一分组密码算法被破解的风险是存在的,但是同一时期内,两个著名分组密码算法同时被成功攻击的可能性微乎其微。由于我们的消息认证码方案调用了两个分组密码算法,因此只有在两个分组密码算法同时被攻破的前提下,整个消息认证码系统才会被破解,其中的任何一个分组密码算法被破译,本发明仍然能够保证消息认证码系统的安全性。(2)与cbc-mac相比,我们的方案能够用于变长消息的认证码生成。

附图说明

为了更清楚地说明本发明实施例中的技术方案,下面将对现有技术和实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是cbc-mac的消息完整性认证码生成的流程示意图;

图2是本发明的一种新型含密钥消息完整性认证码的生成方法的流程示意图。

具体实施方式

为了便于理解,对本发明中出现的部分名词作以下解释说明:

消息完整性认证码:又称消息摘要或者消息指纹。由消息完整性认证函数生成。该函数的输入是任意长的二进制数据,输出是固定长度的二进制数据(一般不低于128bit长度,称为消息完整性认证码)。一般而言,只要消息不同,消息摘要的取值就不同。根据消息完整性认证函数的结构是否受到密钥控制,可以将其分为含密钥的消息完整性认证函数(mac)和不含密钥的消息完整性认证函数(mdc)。

实施例一,参见图2,本实施例提供一种新型含密钥消息完整性认证码的生成方法,包括以下步骤:

步骤s101,选择两个分组规模为b比特的分组密码加密变换e1,e2;

步骤s102,将密钥k1注入e1中,得到分组密码算法e1,k1;

步骤s103,将密钥k2注入e2中,得到分组密码算法e2,k2;

对待处理的消息进行填充,按照如下步骤s104至步骤s107。

步骤s104,设原始消息长度为len,计算lenmodb的取值t,即len除以b之后的余数为t;

步骤s105,当t值小于64时,先在原始消息之后添加1,再添加b+t-64个0,然后在其后添加原始消息的比特长度值len的64位表示,len不足64位的在其高位补0;

步骤s106,当t值等于64时,直接在原始消息之后添加原始消息的比特长度值len的64位表示,len不足64位的在其高位补0;

步骤s107,当t值大于64时,先在原始消息之后添加1,再添加t-64个0,然后在其后添加原始消息的比特长度值len的64位表示,len不足64位的在其高位补0;

将步骤s104至步骤s107的输出称为填充之后的消息。

步骤s108,选择b比特随机数c0,存储并通过公开方式发送给接收方;

步骤s109,对填充之后的消息按分组密码算法单次处理长度做切分,切分之后的数据为(m1,m2,m3,m4,…,mn),即每个mi的长度都是b比特;

步骤s110,将第一块的明文数据m1和预先选好的随机数c0做逐位异或操作;

步骤s111,将步骤s110异或之后的数据通过由密钥控制下的分组密码算法e1,k1;

步骤s112,将e1,k1的输出作为e2,k2的输入,得到当前时刻的中间数据c1;

步骤s113,对i从2增至n,将第i块的明文数据mi和上一时刻生成的中间数据ci-1做逐位异或操作,并将异或之后的数据通过由密钥控制下的分组密码算法e1,k1,将e1,k1的输出作为e2,k2的输入,得到当前时刻的中间数据ci;

步骤s114,对cn依次用e2,k2和e1,k1作用,得到b比特消息认证码mac;

步骤s115,输出mac码的值,流程结束。

步骤s109至步骤s113用公式可表述为:

对i从1增至n,依次执行

步骤s114用公式可表述为:

mac=e1,k1(e2,k2(cn))。

下面结合一个具体实施例对本发明进一步详细描述:

实施例二,高级加密标准aes和中国的分组密码算法加密标准sm4是两个著名的分组密码算法,它们的分组规模均为128比特,下面通过实例来说明,如何利用这两个分组密码算法来搭建本发明的一种新型含密钥消息完整性认证码的生成方法。

步骤s201,生成两组128比特的密钥,分别为k1和k2;

步骤s202,选择两个加密算法分别为aes和sm4加密算法,记作aes和sm4;

步骤s203,将k1和k2分别注入到aes和sm4的加密函数之中,得到加密算法aesk1,sm4k2;

对待处理的消息进行填充,按照如下步骤s204至步骤s207。

步骤s204,设原始消息长度为len,计算lenmod128的取值t,即len除以128之后的余数为t;

步骤s205,当t值小于64时,先在原始消息之后添加1,再添加64+t个0,然后在其后添加原始消息的比特长度值len的64位表示,len不足64位的在其高位补0;

步骤s206,当t值等于64时,直接在原始消息之后添加原始消息的比特长度值len的64位表示,len不足64位的在其高位补0;

步骤s207,当t值大于64时,先在原始消息之后添加1,再添加t-64个0,然后在其后添加原始消息的比特长度值len的64位表示,len不足64位的在其高位补0;

将步骤s204至步骤s207的输出称为填充之后的消息。

步骤s208,选择128比特随机数c0,存储并通过公开方式发给接收方;

步骤s209,对填充之后的消息按分组密码分组长度128做切分,切分之后的数据为(m1,m2,m3,m4,…,mn);

步骤s210,将第一块的明文数据m1和预先选好的随机数c0做逐位异或操作;

步骤s211,将步骤s210异或之后的数据通过由密钥控制下的分组密码算法aesk1;

步骤s212,将aesk1的输出作为sm4k2的输入,得到当前时刻的中间数据c1;

步骤s213,对i从2增至n,将第i块的明文数据mi和上一时刻生成的中间数据ci-1做逐位异或操作,并将异或之后的数据通过由密钥控制下的分组密码算法aesk1;将aesk1的输出作为sm4k2的输入,得到当前时刻的中间数据ci;

步骤s214,对cn依次用sm4k2和aesk1作用,得出128比特消息认证码mac;

步骤s215,输出mac码的值,流程结束。

本发明将传统cbc-mac模式及其各种变形中只调用一个分组密码算法改进成同时调用两个分组密码算法,保持了传统cbc-mac模式的其余部分不变,使消息完整性认证码更安全。

对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来讲是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其他实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1