一种基于Sponge结构的轻量级哈希函数构造方法与流程

文档序号:13882218阅读:568来源:国知局
一种基于Sponge结构的轻量级哈希函数构造方法与流程
本发明属于信息安全
技术领域
,涉及一种基于sponge结构的轻量级哈希函数构造方法。
背景技术
:随着物联网技术(internetofthings,iot)的高速发展,其存在的安全隐私问题也越发受到人们重视。作为应对安全威胁及进行身份识别、鉴定消息完整性的hash函数在射频识别系统(radiofrequencyidentification,rfid),无线传感器网络(wirelesssensornetwork,wsn)等资源受限场景下也面临着新的要求与挑战。资源受限环境下的硬件只有很小的存储空间和有限的计算能力,这就要求应用其中的hash算法除了提供一定的安全保证外还需要满足轻量化需求。hash函数的轻量化可以是设计全新的hash函数也可以是对现有hash的轻量化改进,其中将轻量化加密算法应用到hash函数的设计中也是密码学领域中的一个重要方向。技术实现要素:本发明的目的是提供一种基于sponge结构的轻量级哈希函数构造方法,所构造的哈希函数既有安全保证又满足轻量化需求。本发明所采用的技术方案是,一种基于sponge结构的轻量级哈希函数构造方法,该sponge结构为迭代结构,其内部操作为压缩函数,具体方法为:将预处理后的消息通过多轮压缩函数迭代完成吸收操作,即将不定长的消息变为定长的中间状态;再将中间状态通过多轮压缩函数迭代,每轮输出一个子串,拼接成定长的消息摘要。本发明的特征还在于,sponge结构的具体参数设置为:吞吐率r=8bit,容量c=56bit,置换长度b=64bit,消息摘要长度为64bit,拥有64bit的内存状态。具体方法按照以下步骤实施:步骤1、消息预处理首先将输入的文本消息转换为对应的ascii码,再将对应的ascii码转换为对应的二进制数据,然后进行填充操作:在消息后面填充一个1,然后填充若干个0,使消息长度为r的最小整数倍,并将内存状态的初始值设为0;步骤2、消息吸收处理将经步骤1预处理后的消息通过压缩函数的多轮迭代完成吸收,具体为:步骤2.1、首先将预处理后的消息分为r=8bit一组,共s组,第一个分组的r=8bit位数据与初始内存状态的前r=8bit位0进行异或运算,与剩下初始内存状态的c=56bit位0拼接在一起通过压缩函数运算得到64bit中间状态;步骤2.2、将中间状态的前8位与预处理消息的第二个分组进行异或运算,与剩下中间状态的56bit数据拼接在一起再次通过压缩函数进行运算,依次进行计算直到s组预处理消息运算完毕,完成吸收操作,将不定长的消息变为定长的中间状态;步骤3、压缩函数处理每轮压缩处理时首先将输入的定长的中间状态与产生的轮密钥进行轮密钥加substitution(·)操作,再通过非线性置换层substitution(·)进行非线性置换,然后进行移位操作rotatenibbles(·),再通过线性置换层permutation(·)进行线性置换,最后将轮密钥与本轮轮数通过密钥生成算法进行轮密钥的更新,本轮处理结束,进入下轮迭代,依次迭代i轮,i表示轮数,完成压缩函数处理,得到经压缩函数处理的中间状态。步骤4、消息挤压处理将经过步骤2消息吸收处理后的定长的中间状态取前r=8bit数据为第一个子串h0,然后将经过步骤3处理得到的经压缩函数处理的中间状态再次取前8bit数据为第二个子串h1,依次进行处理得到8个子串,拼接到一起即为最后的64bit消息摘要。步骤3中的轮密钥的生成算法采用典型的feistel结构,将迭代轮数nr作为变量参与运算,密钥更新流程如下:ski+1[0]=ski[5];ski+1[1]=ski[6];ski+1[2]=ski[7]⊕nr;ski+1[3]=ski[4];ski+1[4]=ski[1]⊕ski[5];ski+1[5]=sbox[ski[2]⊕ski[6]];ski+1[6]=sbox[ski[3]⊕ski[7]];ski+1[7]=ski[0]⊕ski[4];其中,ski[n]表示第i轮密钥的第n个字节,⊕表示异或运算,sbox[·]表示用s盒对数据进行非线性变换。轮密钥加后的定长的中间状态通过substitution(·)层进行非线性置换,substitution(·)层采用16个并行相同的s盒,s盒为klein中的4位s盒。rotatenibbles(·)操作是将通过substitution(·)层的数据左移16bit。permutation(·)层使用位排列置换。本发明的有益效果是,本发明基于sponge结构的轻量级哈希函数构造方法,基于sponge结构,并将改进的klein算法应用到轮迭代的压缩函数中,并做了面向字节优化,在兼顾算法安全性的同时拥有更好的软硬件实现效率,更适合资源受限环境的特殊需求。附图说明图1是sponge结构框图;图2是基于sponge结构的轻量级哈希函数结构框图;图3是压缩函数结构框图。具体实施方式下面结合具体实施方式对本发明进行详细说明。本发明一种基于sponge结构的轻量级哈希函数构造方法,该sponge结构为迭代结构,其内部操作为压缩函数,具体方法为:将预处理后的消息通过多轮压缩函数迭代完成吸收操作,即将不定长的消息变为定长的中间状态;再将中间状态通过多轮压缩函数迭代,每轮输出一个子串,拼接成定长的消息摘要。sponge结构的具体参数设置为:吞吐率r=8bit,容量c=56bit,置换长度b=64bit,消息摘要长度为64bit,拥有64bit的内存状态。具体方法按照以下步骤实施:步骤1、消息预处理首先将输入的文本消息转换为对应的ascii码,再将对应的ascii码转换为对应的二进制数据,然后进行填充操作:在消息后面填充一个1,然后填充若干个0,使消息长度为r的最小整数倍,并将内存状态的初始值设为0;例如当消息长度length对r取余值为1时,填充的值为“100000000”。步骤2、消息吸收处理将经步骤1预处理后的消息通过压缩函数的多轮迭代完成吸收,具体为:步骤2.1、首先将预处理后的消息分为r=8bit一组,共s组,第一个分组的r=8bit位数据与初始内存状态的前r=8bit位0进行异或运算,与剩下初始内存状态的c=56bit位0拼接在一起通过压缩函数运算得到64bit中间状态;步骤2.2、将中间状态的前8位与预处理消息的第二个分组进行异或运算,与剩下中间状态的56bit数据拼接在一起再次通过压缩函数进行运算,依次进行计算直到s组预处理消息运算完毕,完成吸收操作,将不定长的消息变为定长的中间状态;步骤3、压缩函数处理压缩函数的设计借鉴了klein算法的思想,并对其进行优化,使之更契合“轻量化”的设计目标,主流程可描述为:fori=1tonrdoaddroundkey(state,ski);substitution(state);rotatenibbles(state);permutation(state);ski+1=keyschedule(ski,i);其中i表示轮数,state表示中间状态,ski表示轮密钥,nr为迭代轮数。每轮压缩处理时首先将输入的定长的中间状态与产生的轮密钥进行轮密钥加substitution(·)操作,再通过非线性置换层substitution(·)进行非线性置换,然后进行移位操作rotatenibbles(·),再通过线性置换层permutation(·)进行线性置换,最后将轮密钥与本轮轮数通过密钥生成算法进行轮密钥的更新,本轮处理结束,进入下轮迭代,依次迭代i轮,i表示轮数,完成压缩函数处理,得到经压缩函数处理的中间状态。轮密钥的生成算法采用典型的feistel结构,将迭代轮数nr作为变量参与运算,密钥更新流程如下:ski+1[0]=ski[5];ski+1[1]=ski[6];ski+1[2]=ski[7]⊕nr;ski+1[3]=ski[4];ski+1[4]=ski[1]⊕ski[5];ski+1[5]=sbox[ski[2]⊕ski[6]];ski+1[6]=sbox[ski[3]⊕ski[7]];ski+1[7]=ski[0]⊕ski[4];其中,ski[n]表示第i轮密钥的第n个字节,⊕表示异或运算,sbox[·]表示用s盒对数据进行非线性变换。轮密钥加后的定长的中间状态通过substitution(·)层进行非线性置换,substitution(·)层采用16个并行相同的s盒,s盒为klein中的4位s盒,可以将4位输入非线性变换为4位输出,如表1所示:表1输入0123456789abcdef输出74a91fb0c3268ed5rotatenibbles(·)操作是将通过substitution(·)层的数据左移16bit。permutation(·)层使用位排列置换,permutation层置换表如表2所示:表2081624191725210182631119274122028513212961422307152331步骤4、消息挤压处理将经过步骤2消息吸收处理后的定长的中间状态取前r=8bit数据为第一个子串h0,然后将经过步骤3处理得到的经压缩函数处理的中间状态再次取前8bit数据为第二个子串h1,依次进行处理得到8个子串,拼接到一起即为最后的64bit消息摘要。本发明主要针对的是资源受限环境,硬件环境多为8位处理器。为了在8位处理器下有较高效率,对算法做了按字节优化。将吞吐率设为r=8bit,容量c=56bit,那么置换长度b=64bit。消息摘要长度为64bit,拥有64bit的内存状态。更适合资源受限环境下处理较短的消息,需要较快的处理速度的要求。一种基于sponge结构的轻量级哈希函数构造方法,采用如图1所示结构,主要由两部分处理组成:吸收和压缩,具体结构如图2所示,将预处理后的消息通过多轮压缩函数迭代完成吸收操作,即将不定长的消息变为定长的中间状态。再将中间状态通过多轮压缩函数迭代,每轮输出一个子串,拼接成定长的消息摘要。其中压缩函数为改进的klein算法,将原有的非线性置换改为位排列置换,并作了按字节优化,每轮处理主要由如图3所示的轮密钥加操作,s盒的非线性限置换,移位,permutation层的线性置换构成,一共迭代12轮。实施例:本发明一种基于sponge结构的轻量级哈希函数的构造方法,具体按照以下步骤实施:步骤1、消息预处理首先将输入的文本消息转换为对应的ascii码,再将对应的ascii码转换为对应的二进制数据,例如输入的消息为example,则对应的ascii码为4578616d706c65,对应的二进制为01000101011110000110000101101101011100000110110001100101,再对转换后的二进制数进行填充操作:在消息后面填充一个1,然后填充若干个0,使之长度为r的最小整数倍。例如当消息长度length对r取余值为1时,填充的值为“100000000”。并将内存状态的初始值设为0。步骤2、消息吸收处理预处理后的消息要通过压缩函数的多轮迭代完成吸收。首先将预处理后的消息分为r=8bit一组共s组,第一个分组的r=8bit位数据与初始内存状态的前r=8bit位0进行异或运算,与剩下初始内存状态的c=56bit位0拼接在一起通过压缩函数运算得到64bit中间状态。然后将中间状态的前8位与预处理消息的第二个分组进行异或运算,与剩下中间状态的56bit数据拼接在一起再次通过压缩函数进行运算,依次进行计算直到s组预处理消息运算完毕,完成吸收操作,将不定长的消息变为定长的中间状态。步骤3、压缩函数处理压缩函数的设计借鉴了klein算法的思想,并对其进行优化,使之更契合“轻量化”的设计目标。主流程可描述为:fori=1tonrdoaddroundkey(state,ski);substitution(state);rotatenibbles(state);permutation(state);ski+1=keyschedule(ski,i);其中i表示轮数,state表示中间状态,ski表示轮密钥。每轮压缩处理时首先将输入的定长的中间状态与产生的轮密钥ski进行轮密钥加substitution(·)操作,再将中间状态通过非线性置换层substitution(·),然后进行移位操作rotatenibbles(·),得到的中间状态再通过线性置换层permutation(·)进行线性置换,最后是将轮密钥与本轮轮数通过密钥生成算法进行轮密钥的更新,本轮处理结束,进入下轮迭代,依次迭代i轮,完成压缩函数处理。每轮压缩函数处理开始时的轮密钥加操作,也就是异或运算,轮密钥生成算法采用典型的feistel结构,将迭代轮数nr作为变量参与运算,密钥更新流程如下所示,其中ski[n]表示第i轮密钥的第n个字节,⊕表示异或运算,sbox[·]表示用s盒(sbox)对数据进行非线性变换:ski+1[0]=ski[5];ski+1[1]=ski[6];ski+1[2]=ski[7]⊕nr;ski+1[3]=ski[4];ski+1[4]=ski[1]⊕ski[5];ski+1[5]=sbox[ski[2]⊕ski[6]];ski+1[6]=sbox[ski[3]⊕ski[7]];ski+1[7]=ski[0]⊕ski[4];轮密钥加后的中间状态state通过substitution层进行非线性置换,substitution层采用16个并行相同的s盒,s盒为klein中的4位s盒,可以将4位输入非线性变换为4位输出。对s盒进行面向字节优化可产生一个容量为256的线性置换表,通过面向字节的查表操作即可完成非线性变化,substitution层中64bit中间状态的非线性变换只需要8次查表操作。例如输入字节为0x09,通过查表3可得输出为0x73。表3非线性置换表rotatenibbles操作将通过substitution层的数据左移16bit。然后通过permutation层进行线性置换,最后进行轮密钥更新,这样依次迭代12轮完成压缩函数的运算。permutation层使用位排列置换,这样可以有更好的硬件实现性能,置换表如表2所示。即将输入的第1位数据放在第1位上,第9位数据放在第2位上,依次类推,完成32位数据重排。例如当输入的二进制数据为11010010001100001101010111010010则通过p置换后的数据为10111011010011110000001010100100。表4p置换表081624191725210182631119274122028513212961422307152331步骤4、消息挤压处理经过消息吸收处理后的中间状态取前r=8bit数据为第一个子串h0,然后将中间状态再次通过压缩函数处理得到中间状态再次取前8bit数据为第二个子串h1,依次进行处理得到8个子串,拼接到一起即为最后的64bit消息摘要。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1