本发明涉及一种用于分组加解密算法的子密钥的生成方法。
背景技术:
随着信息技术的发展,信息安全性的问题却愈来愈显得突出,保证信息安全的一个重要技术就是密码学。密码学在信息安全技术中扮演着基础的角色,是攻击者最难攻破的模块。而分组密码又是密码学中最常用的算法,是信息安全中的主力,通常称为信息安全中的驿马。目前学术界对分组密码的设计和研究已经相当成熟,每年都有很多新的加密算法推出。由于硬件速度的提高以及计算机内存的逐步增大,人们发现传统的加密算法会带来越来越多的问题,因此,对高安全性的分组密码算法的设计已经成了学术界关注的热点。
分组密码是密码学中的基础算法,它是很多上层信息安全协议的基础。分组密码的设计包括两个方面,一个组件是设计基本的轮函数,另一个组件是设计基本的密钥调度算法。所谓的密钥调度算法是基于一个主密钥生成很多轮的子密钥,而每轮子密钥都被使用在轮函数中。对于一个分组密码的安全性而言,子密钥生成算法的安全性尤为重要。目前出现的多种对流行分组密码最好的攻击,诸如对AES和IDEA算法的攻击都是利用其密钥生成算法弱点而进行的攻击的。
现有的分组加密算法由于密钥生成都是比较简单,普通的高级加密算法AES的密钥生成算法只使用简单的移位寄存器加上简单的S盒置换,并不能达到流密码的安全性。
技术实现要素:
本发明要解决的技术问题是:提高分组加密算法的安全性。
为了解决上述技术问题,本发明的技术方案是提供了一种基于流密码算法的子密钥生成方法,其特征在于,包括以下步骤:
根据具体的分组加密算法,确认加密轮数r,并生成主密钥K及初始化向量IV,初始化向量IV与主密钥K的比特数相同,将主密钥K及初始化向量IV装载入流密码算法的内部寄存器,运行流密码算法r次,从而得到r个子密钥,r个子密钥分别参与到分组加密算法的r轮轮函数的计算过程中。
目前对于流密码算法的安全性分析主要集中在其密钥流生成器上,而当前设计良好的流密码都可以被看作为一个伪随机数生成器,例如Salsa20流密码算法,当前还没有找到低于穷举攻击的方法,所以可以假设安全的流密码算法的密钥流生成器是单向且伪随机的。这样,使用主密钥生成的各轮子密钥就可以看作是彼此独立且随机的,这比当前的任何分组加密算法的子密钥调度方法都更加安全,因为本发明的方法的子密钥的安全性是建立在流密码生成器的单向可靠性上,而其他的分组密码则无此安全特性。
综上分析,采用本发明提供的方法生成的子密码进行分组加密的安全性非常高,本发明对于安全性要求很高,而对于效率不是很重要的应用场景很适用。
附图说明
图1为本发明提供的一种基于流密码算法的子密钥生成方法的流程图。
具体实施方式
下面结合具体实施例,进一步阐述本发明。应理解,这些实施例仅用于说明本发明而不用于限制本发明的范围。此外应理解,在阅读了本发明讲授的内容之后,本领域技术人员可以对本发明作各种改动或修改,这些等价形式同样落于本申请所附权利要求书所限定的范围。
结合图1,设分组加密算法采用AES-128,则针对该分组加密算法,本发明提供的一种基于流密码算法的子密钥生成方法包括以下步骤:
AES-128需要11轮的子密码。则生成一个128比特的初始化向量IV及128比特的AES-128的主密钥K。将128比特的初始化向量IV及128比特的AES-128的主密钥K装载入流密码算法的内部寄存器中(流密码算法可以使用流行的流密码算法,如RC4、Salsa20等)。然后运行该流密码算法11次,得到11个子密码,每个子密码为128比特。子密码的具体生成步骤为:先生成11*128=1408比特的密钥流,再将该密钥流分成11个子密钥,每个子密钥为128比特。然后每个子密码参与到分组加密算法相应轮数的轮函数的计算过程中。分组加密算法使用11个子密钥与相应的轮函数进行一系列运算,其过程为:
给定128比特的明文分组,使用AES-128加密算法的轮函数和相对应的子密钥进行变换。第1轮使用第1个子密钥和轮函数对分组密码的输入值,也称为状态进行变换,第2轮使用第2个子密钥和轮函数对内部状态进行变换,以此类推,直到第11轮使用第11个子密钥和轮函数对状态进行更新变换,最终得到密文。
本发明重新设计了一种分组加密算法的子密钥生成方法,此子密钥的生成是基于流密码来生成的。该子密钥生成方法的安全性取决于流密码的单向安全性。若流密码生成算法是单向安全的,则此子密钥生成算法也是安全的。