一种面向字节的密钥流生成方法及加密方法

文档序号:7749361阅读:143来源:国知局

专利名称::一种面向字节的密钥流生成方法及加密方法
技术领域
:本发明主要应用于信息安全传输领域,具体涉及一种用于产生加密用密钥流序列的密钥流生成方法及加密方法。
背景技术
:密码技术历史悠久,最初用于保护军事和外交通信安全。但是,随着通信网络和计算机网络的普及,现代密码学的应用不再局限于政治、军事和外交,其商业价值和社会价值得到了广泛的认同。保密是密码学的核心,而加密是获得信息保密的实用工具。现代加密技术就是一些数学变换(算法),在加密者拥有的秘密信息(加密密钥)控制下,将要加密的信息(明文)变换成难于理解和与随机信息难于区分的信息(密文),通过不安全的信道传送给接收者。而解密操作,就是在接收者拥有的秘密信息(解密密钥)的控制下,将密文恢复成明文。根据加、解密者拥有的密钥是否相同,可以把加密算法分为公钥密码算法和私钥密码算法。公钥密码算法的加、解密密钥不同,加密密钥一般是公开的,解密密钥为消息接收者私有。私钥密码算法的加、解密密钥一般是相同的,均是保密的。而且加、解密的变换一般也是相同或相似的。私钥密码算法又分为分组密码算法和流密码算法。分组密码算法一般对消息进行分块加密,算法运行一次加密一个较大的消息块。流密码算法一般用一个短的密钥,用特定的密钥流生成算法,生成与要加密的消息长度相当的密钥流序列,将密钥流序列与明文按位异或达到加密的目的。而解密方生成同样的密钥流序列,与密文异或,即可得到明文。所以,流密码算法的关键是设计安全快速的密钥流生成算法。流密码一直是各国争相研究的热门课题。因为它具有实现简单,加密速度快(比分组密码快5到10倍)、无或只有有限的错误传播等特点。随着通信网络和计算机网络的高速发展,传统的运行一次生成一个比特的密钥流生成方法已经不能满足实现速度上的需要,尤其是软件实现方面,一些面向字的密钥流生成方法逐渐被设计出来,即运行一次生成若干比特的密钥字,由密钥字组成密钥流序列。例如SNOW3G算法、Rabbit算法。在此背景下,需要一种面向字,尤其是面向字节的密钥流生成方法及加密的方法,适合软硬件实现并且安全性高。本发明的目的在于提供一种面向单字节(8比特)的密钥流生成方法,以初始密钥和初始向量作为输入,产生一定长度的密钥流序列。本方法能够在软、硬件上快速实现,生成的密钥流序列有良好的随机性和非线性性。本发明的另一目的在于提供一种加密方法,利用本发明提供的密钥流生成方法产生的密钥流序列对消息进行加密。为了达到上述发明目的,本发明的技术方案概述如下一种面向字节的密钥流生成方法,包括以下步骤,1)生成步骤,利用线性反馈移位寄存器生成一个源序列;2)混淆步骤,采用非线性函数F和B0MM函数两部分顺序构成,所述非线性函数F将源序列中的若干字节进行非线性压缩变换,产生一个字节的输出,所述B0MM函数接收非线性函数F的输出作为输入;3)输出步骤,B0MM的输出和源序列的一个字节按位异或得到密钥流。所述非线性函数F部分,输入为源序列的4个字节,输出为一个字节,包含一个32比特的记忆单元,具体步骤为A、计算F函数输出取32比特记忆单元的8位作为F函数的输出;B、更新记忆单元将源序列的4个字节并置成一个32比特的字,与记忆单元的值异或,异或后的32比特输入4个并列的8进8出的S盒,4个S盒的输出进入一个线性变换,线性变换的输出更新寄存器的值;B0MM函数部分,输入、输出均为一个8比特字节。此处将F函数的输出作为B0MM的输入。B0MM函数结构包含16个记忆单元,每个记忆单元存放一个字节,还包含2个8进8出的S盒,具体步骤为A、计算B0MM输出取输入字节的高4比特的值作为h,用第h个(从零开始计数)记忆单元的内容与输入字节异或后作为B0MM的输出;B、更新记忆单元取输入字节的低4比特值作为1,将输入字节经过S盒运算后的结果与第1个记忆单元的值异或,用于更新第1个记忆单元的值;将已更新过的第1个记忆单元的值经过S盒的变换后与第h个记忆单元的值异或,用于更新第h个记忆单元的值;所述生成步骤采用有限域」。上的本原多项式作为线性反馈移位寄存器的反馈多项式。为了达到上述另一发明目的,本发明的技术方案概述如下一种加密方法,其步骤包括1)将加密密钥和初始向量利用密钥扩展算法装入线性反馈移位寄存器,并进行初始化操作;2)生成一个字节的密钥流,方法如下2-1)运行非线性函数F,具体包括A、取32比特记忆单元的8比特作为F函数的输出;B、将源序列的4个字节并置成一个32比特的字,与记忆单元的值异或;C、异或后的32比特输入4个并列的8进8出的S盒;D、4个S盒的输出进入一个线性变换,线性变换的输出更新记忆单元的值;2-2)运行B0MM函数,以F函数的输出作为输入,具体包括A、取输入字节的高4比特的值作为h,用第h个记忆单元的的内容与输入字节异或后作为B0MM的输出;B、取输入字节的低4比特值作为1,将输入一经过S盒运算后的结果与第1个记忆单元的值异或,用于更新第1个记忆单元的值;C、将已更新过的第1个记忆单元的值经过S盒的变换后与第h个记忆单元的值异或后用于更新第h个记忆单元的值;2-3)输出步骤,B0MM的输出和源序列的一个字节按位异或得到密钥流。2-4)对线性反馈移位寄存器状态进行更新。3)产生的密钥流字节与要加密的消息的一个字节按位异或,实现对这个消息字节的加密;4)重复步骤2)、3)实现对所有原始消息的加密,并将加密消息发送到消息接收方;5)消息接收方拥有与加密密钥相同的解密密钥和初始向量,利用步骤1)对所有寄存器赋初值。6)利用步骤2)生成密钥流的方法,得到一个字节的密钥流;7)产生的密钥流与加密消息的一个字节按位异或,实现对这个加密消息字节的解密;8)重复步骤6)、7)实现对加密消息的解密,得到原始消息。所述步骤1)利用密钥扩展算法将加密密钥和初始向量装入线性反馈移位寄存器。生成密钥流之前初始化操作为重复执行以下步骤若干次步骤2-1),步骤2-2),步骤2-4)并将BOMM的输出参与寄存器更新;本发明的有益效果本发明生成的密钥流序列,具有良好的随机性和非线性性,并且适合软硬件快速实现。利用本发明生成的密钥流进行加密的方法具有更好的安全性。图1为本发明密钥流生成方法基本步骤示意图。图2为本发明密钥流生成方法F函数结构图。图3为本发明密钥流生成方法BOMM函数结构图。图4为本发明密钥流生成方法具体实施例整体结构图。具体实施例方式下面结合附图和具体实施方式对本发明作进一步详细描述图1是本发明密钥流生成方法的基本步骤示意图,包括各个步骤及各步骤间的输入输出关系。其中,生成步骤产生随机性好、周期长的源序列。混淆步骤分为非线性函数F和BOMM函数两部分。F将源序列中的一些字节进行非线性压缩变换,产生一个字节的输出。BOMM接收F函数的输出字节作为输入,根据16个记忆单元的值产生输出并更新记忆单元的值。输出步骤将混淆步骤的输出和源序列一个字节异或得到密钥字。图2是本发明密钥流生成方法的F函数结构图。F函数包括一个32比特的记忆单元,4个并置的8进8出S盒,一个线性变换,具体运行步骤为A、取32比特记忆单元的8比特作为F函数的输出;B、将源序列的4个字节并置成一个32比特的字,与记忆单元的值异或;C、异或后的32比特输入4个并列的8进8出的S盒;D、4个S盒的输出进入一个线性变换,线性变换的输出更新记忆单元的值;图3是本发明密钥流生成方法的BOMM函数结构图。BOMM结构,输入、输出均为一个8比特字节。BOMM结构包含16个记忆单元,每个记忆单元存放一个字节。包含2个8进8出的S盒。具体步骤为A、取输入字节的高4比特的值作为h,用第h个记忆单元的的内容与输入字节异或后作为B0MM的输出;B、取输入字节的低4比特值作为1,将第1个记忆单元的值与输入字节经过S盒运算后的结果异或,用于更新第1个记忆单元的值;C、将已更新过的第1个记忆单元的值经过S盒的变换后与第h个记忆单元的值异或后用于更新第h个记忆单元的值;本发明密钥流生成方法的实施由密钥流生成器完成,密钥流生成器主要由以下三个模块构成(1)生成模块,密钥流生成器的驱动部分。(2)混淆模块,即非线性压缩运算。(3)输出模块,组合变换输出密钥流。为了更好的理解本发明,下面结合具体实施方式对本发明进行更为详细的描述。图4为本发明密钥流生成方法具体实施框图。此实施方式即为一个密钥流生成器。首先,对本发明中出现的符号做如下约定=整数的赋值0按位异或运算a||b子串a和b的连接运算a<<<c将a循环左移c位a—b赋值,表示将a的值赋给b下面,依次介绍密钥流生成器的3个模块与密钥流序列生成流程。如图4所示(1)生成模块执行生成步骤,此模块是密钥流生成器的驱动部分。目的是提供周期长、随机性质良好的源序列。一般由线性反馈移位寄存器实现。本实施例线性反馈移位寄存器(LFSR)定义在有限域F28上,共包含32个字节寄存器单元Si,0<i<31。其特征多项式为<formula>formulaseeoriginaldocumentpage7</formula>其中a为二元域F2上多项式x8+x7+x5+x3+l的根。设<formula>formulaseeoriginaldocumentpage7</formula>为f(x)生成的有限域&上的序列。则对任意t≥0,有<formula>formulaseeoriginaldocumentpage7</formula>(2)混淆模块对源序列进行非线性压缩运算,分为F函数和B0MM函数两部分。A、非线性函数F非线性函数F是一个从32比特到8比特的压缩函数,其内部包含一个32比特的记忆单元R。非线性函数F的32比特的输入为LFSR的4个寄存器单元s31,s26,s20,s7的取值,输出一个字节《。参见附图2。其中Si是一个8X8的S盒置换,见表1是由并置而成;0是一个线性变换,其与分组密码算法SMS4的扩散层变换相同,定义如下<formula>formulaseeoriginaldocumentpage7</formula>其中B和C均是32比特的串,<<<为32比特循环移位运算;T是一个截取函数,表示从当前输入中截取最左边8比特的组成的字节。表IS盒Sl<table>tableseeoriginaldocumentpage8</column></row><table>注上述S1盒表数据采用十六进制算法。设t时刻非线性函数的输入为st+31,st+26,st+20,st+7,其分别对应着LFSR寄存器单元S31,S26,S20,S7在t时刻的取值。设记忆单元R的取值为Rt,更新为Rt+1,输出为Wt。记Xt=st+311Ist+261Ist+201Ist+7。则有R,+l=OiriRtΦXt))tWt=T(Rt)。B、BOMM函数BOMM是一个8进8出的有限状态机,输入一个8比特的字节x,为非线性函数F的输出,输出为一个8比特的字节y。此外BOMM还包含16个8比特的字节记忆单元yi;0≤i≤150B0MM计算过程如下BOMM(x){1.x=h||1,h为x的高4比特,1为x的低4比特;2.y=yhx-,3.y,^y,S2(x);4.yh=yhs2(yi)-,}其中,&为8X8的S盒置换,定义见表2。表2S盒S2<table>tableseeoriginaldocumentpage9</column></row><table>注上述S2盒表数据采用十六进制算法。(3)输出模块,设t时刻生成的密钥字为zt,其是一个8比特的字节。则有zt=utst其中ut和st分别为B0MM和LFSR在t时刻的输出。在生成密钥流序列之前,首先要将加密密钥和初始向量装入寄存器。设128比特的初始密钥IK和128比特的初始向量IV分别为IK=IK||IK[1]||IK[2]||...||IK[15]禾口IV=IV|IV[1]|IV[2]|IV[15]其中IK[i]和IV[i]分别为字节,0彡i彡15。设LFSR和BOMM的内部初始状态分别为(SQ,S1,S2,-,s31)和(yc^yph,…,y15)。则有Si=IK[i]sM6=imlV\i]=IV[i]这里0≤i≤15。算法的运行过程分为2步初始化过程和密钥产生过程。首先将128比特的初始密钥IK和128比特的初始向量IV按上述方法,填充到LFSR和B0MM相应的内部记忆单元,并将非线性函数F的32比特记忆单元R置全0。然后重复执行下列过程64次1)执行非线性函数F—次,并同时更新F的记忆单元R。记F的输出为X,即x=F0。2)将非线性函数F的输出x作为B0MM的输入,执行B0MM操作一次,并同时更新B0MM的内部状态。记B0MM的输出为y,即y=BOMM(x)。3)运行LFSR—拍,将B0MM的输出为y参入到LFSR的反馈输出,即sn=LFSRQy。并用(Sl,s2,…,s31,s32)更新LFSR的内部状态。算法经过初始化过程后将进入密钥产生过程。在该过程中,算法每执行下列过程一次,输出一个密钥字节z。1)执行非线性函数F—次,并同时更新F的记忆单元R。记F的输出为X,即x=F0。2)将非线性函数F的输出x作为B0MM的输入,执行B0MM操作一次,并同时更新B0MM的内部状态。记B0MM的输出为y,即y=BOMM(x)。3)输出密钥字节z=y十&,这里\是LFSR在t时刻的输出。4)运行LFSR—次,并更新LFSR的内部状态。算法每个节拍生成一个8比特的密钥字,运行若干节拍,可以得到密钥流序列。利用本发明的密钥流生成方法对消息进行加密,消息发送方根据加密密钥和初始向量,运用本发明的密钥流生成方法,将所得的密钥流序列与消息序列按位异或,即可实现对原始消息进行加密的目的。消息接收方拥有与加密密钥相同的解密密钥和初始向量,运用本发明的密钥流生成方法,将所得的密钥流序列与接收到的加密消息按位异或,即可实现对消息进行解密的目的,得到原始消息。具体的方法如下1、密钥装入将密钥和初始向量按照实施例中的方法装入LFSR和记忆单元。2、初始化初始化方式运行算法若干轮。所谓的初始化方式,即在密钥流生成方法中,不进行输出步骤,把混淆步骤的输出参与到线性反馈移位寄存器的反馈。3、加密阶段1)运行密钥流生成方法一次,产生一个字节的密钥流。2)将步骤1)产生的密钥流与要加密的消息的一个字节按位异或,实现对这个消息字节的加密。3)重复步骤1)2)实现对所有消息的加密。4、解密阶段消息接收方拥有与加密密钥相同的解密密钥和初始向量,1)运行密钥流生成方法一次,产生一个字节的密钥流。2)产生的密钥流与要加密消息的一个字节按位异或,实现对这个加密消息字节的解密;3)重复步骤1)2)实现对加密消息的解密,得到原始消息。权利要求一种面向字节的密钥流生成方法,包括以下步骤,1)生成步骤,利用线性反馈移位寄存器生成一个源序列;2)混淆步骤,采用非线性函数F和BOMM函数两部分顺序构成,所述非线性函数F将源序列中的若干字节进行非线性压缩变换,产生一个字节的输出,所述BOMM函数接收非线性函数F的输出作为输入;3)输出步骤,BOMM的输出和源序列的一个字节按位异或得到密钥流。2.如权利要求1所述的方法,其特征在于,所述步骤1)采用有限域巧8上的本原多项式作为线性反馈移位寄存器的反馈多项式。3.如权利要求1所述的方法,其特征在于,所述步骤2)中非线性函数F部分包含一个32比特的记忆单元,输入为源序列的4个字节,输出为一个字节,具体运行步骤为A、计算F函数输出取32比特记忆单元的8位作为F函数的输出;B、更新记忆单元将源序列的4个字节并置成一个32比特的字,与记忆单元的值异或,异或后的32比特输入4个并列的8进8出的S盒,4个S盒的输出进入一个线性变换,线性变换的输出更新记忆单元的值。4.如权利要求1所述的方法,其特征在于,所述步骤2)中B0MM函数部分,包含16个记忆单元,每个记忆单元存放一个字节,具体运行步骤为A、计算B0MM输出取输入字节的高4比特的值作为h,用第h个记忆单元的内容与输入字节异或后作为B0MM的输出;B、更新记忆单元取输入字节的低4比特值作为1,将输入字节经过S盒运算后的结果与第1个记忆单元的值异或,用于更新第1个记忆单元的值;C、将已更新过的第1个记忆单元的值经过S盒的变换后与第h个记忆单元的值异或,用于更新第h个记忆单元的值;所述记忆单元从零开始计数。5.一种加密方法,其步骤包括1)将密钥和初始向量利用密钥扩展算法装入线性反馈移位寄存器,并进行初始化操作;2)生成一个字节的密钥流,方法如下2-1)运行非线性函数F,具体包括A、取32比特记忆单元的8比特作为F函数的输出;B、将源序列的4个字节并置成一个32比特的字,与记忆单元的值异或;C、异或后的32比特输入4个并列的8进8出的S盒;D、4个S盒的输出进入一个线性变换,线性变换的输出更新记忆单元的值;2-2)运行B0MM函数,以F函数的输出作为输入,具体包括A、取输入字节的高4比特的值作为h,用第h个记忆单元的的内容与输入字节异或后作为B0MM的输出;B、取输入字节的低4比特值作为1,将输入字节经过S盒运算后的结果与第1个记忆单元的值异或,用于更新第1个记忆单元的值;C、将已更新过的第1个记忆单元的值经过S盒的变换后与第h个记忆单元的值异或后用于更新第h个记忆单元的值;2-3)输出步骤,B0MM的输出和源序列的一个字节按位异或得到密钥流;2-4)对线性反馈移位寄存器状态进行更新;3)产生的密钥流字节与要加密的消息的一个字节按位异或,实现对这个消息字节的加密;4)重复步骤2)、3)实现对所有原始消息的加密,并将加密消息发送到消息接收方;5)消息接收方拥有与加密密钥相同的解密密钥和初始向量,利用步骤1)对所有寄存器赋初值;6)利用步骤2)生成密钥流的方法,得到一个字节的密钥流;7)产生的密钥流与加密消息的一个字节按位异或,实现对这个加密消息字节的解密;8)重复步骤6)、7)实现对加密消息的解密,得到原始消息。6.如权利要求5所述的方法,其特征在于,所述步骤1)利用密钥扩展算法将加密密钥和初始向量装入线性反馈移位寄存器。7.如权利要求5所述的方法,其特征在于,生成密钥流之前初始化操作为重复执行以下步骤若干次步骤2-1),步骤2-2),步骤2-4)并将B0MM的输出参与寄存器更新。全文摘要本发明公开了一种面向字节的密钥流生成方法及加密方法,密钥流生成方法包括利用线性反馈移位寄存器生成一个源序列;采用非线性函数F将源序列中的若干字节进行非线性压缩变换,产生一个字节的输出,作为BOMM函数的输入;BOMM的输出和源序列的一个字节按位异或得到密钥流。本发明生成的密钥流序列,具有良好的随机性和非线性性,并且适合软硬件快速实现;利用本发明生成的密钥流进行加密的方法具有更好的安全性。文档编号H04L9/06GK101826959SQ20101017796公开日2010年9月8日申请日期2010年5月14日优先权日2010年5月14日发明者冯登国,冯秀涛,张文涛,武传坤,范修斌申请人:中国科学院软件研究所
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1