本发明涉及数据安全技术领域,尤其涉及基于多密钥流密码的顺序加密方法。
背景技术:
随着以计算机技术和网络通信技术为代表的信息技术不断发展,数据安全技术领域对加密技术的需求也在不断升温。
流密码(streamcipher)。也称之为序列密码。现有流密码的研究状态,由于流密码的分析和设计往往用于一个国家的军事和外交通信。所以,流密码的研发和设计基本上都是在保密的状态下进行,各个国家研发流密码的学者和专家为了保密几乎没有过多的这方面的公开的论著。各国都将流密码技术和产品,作为军工产品而限制出口。由于它具有许多其他密码不可比拟的优点,所以,它是当今最为通用的密码系统之一。
现在的流密码学的研究方向,都是以数学模型为基础,使用复杂的代数运算、布尔代数运算、伪随机数、移位寄存器、线性反馈等。完成流密码的加密和解密。在这方面比较成功的方法有a5方法,s盒方法,rc4方法,k2方法等。这些方法已经是不公开的秘密,经过多年的研究,对其加密和解密已经具有了一定的成熟手段。现在已有很多学者研究攻击和破译上述方法加密的密文。这就使得使用以上的方法进行加密的密文,其安全性受到极大的挑战。
目前流密码的设计方案,主要采用系统论的方法,密钥流序列的生成主要是利用线性反馈移位寄存器产生伪随机序列。生成伪随机数列的方法如下:反馈移位寄存器序列;线性移位寄存器加非线性前馈函数产生前馈序列;钟控序列;组合网络序列;进位移位寄存器;元胞自动机;混沌理论等。其中,混沌系统以其对初始条件敏感、结构高度复杂、长期不可预测性、快速衰减的自相关性等优良特性,天然适用于保密通信和密码学的基本要求。
引证文献:
[1]何克晶rc4流密码与微软office文档安全分析[j].计算机工程2009.1235(23)p130-p135
[2]陈杰对流密码中代数攻击的研究西安电子科技大学硕士学位论文2005.01
[3]王化中张桂香邵勇基于logistic映射的混沌流密码设计[j]计算机工程2007.533(10)p164-p168
[4]罗松江朱路平基于分段非线性混沌映射的流密码加密方案[j]计算机应用30(11)p3038-p3043
[5]罗卫华基于流密码的代数攻击及代数免疫性研究国防科技大学硕士学位论文2006.11
[6]周建涛基于同步的时空确定性随机流密码及密钥交换研究东南大学硕士学位论文2005.3
[7]赵立杰基于线性反馈移位寄存器的流密码的研究及设计硕西南交通大学士学位论文2006.4
[8]李媛基于字的流密码算法dragon的研究西安电子科技大学硕士学位论文2008.1
[9]李顺波胡予濮王艳流密码sosemanuk的区分攻击哈尔滨工程大学学报2012.233(2)p259-p262
[10]刘琼流密码的快速相关攻击研究西安电子科技大学硕士学位论文2010.1
[11]王建明流密码的设计与分析北京工业大学工程硕士学位论文2006.6
[12]罗启彬张建流密码的现状和发展[j]信息与电子工程2006.24(1)p75-p80
[13]朱莉艳流密码复杂性研究扬州大学硕士学位论文2008.5
[14]魏仕民流密码及其复杂度分析西安电子科技大学博士学位论文2001.1
[15]胡能发流密码密钥序列的类演化生成华中科技大学硕士学位论文2005.4
[16]黄融图文混沌加密传送用流密码的研究和实现华南理工大学硕士学位论文2005.5
[17]董斌辉周建勇一种混沌流密码算法设计与实现[j]计算机工程与应用2009,45(35)p120-p150
[18]蔡颖张家树一种基于参数切换的高维混沌流密码设计[j]铁道学报2003.1225(6)p61-p65
[19]仵丽花一种新型流密码结构的区分攻击研究,西安电子科技大学硕士学位论文2008
[20]李顺波胡予濮王艳针对流密码hc-256′的区分攻击[j]电子与信息学报2012.434(4)p807-p811
[21]刘树凯关杰常亚勤针对流密码k2算法的猜测决定攻击计算机工程2011.437(7)p168-p170
[22]常亚勤金辰辉针对流密码mag算法的已知明文攻击计算机工程2010.1036(20)p159-p172
技术实现要素:
本发明采用了混沌流(此混沌流的产生,不同于以往的混沌流,本专利技术提出的混沌流可以是任意的文件模式,而不是由函数或信号发生器产生的混沌流,也可称本混沌流为真随机序列,而不是伪随机序列)动态寄生法,本方法即使被猜到,由于混沌流是一个无序的序列,所以,要想破译,几乎不可能实现。用穷举法,在数学上几乎不可能实现,在计算机上也几乎不可能实现。穷举的次数为明文的字节数(n)8倍的二次幂,即:28n。
本发明采用的技术方案为提供了一种基于多密钥流密码的顺序加密方法,包括以下步骤:获取明文数据,将获取的明文数据以循环链表的形式存储;将多个密钥序列分别以循环链表的形式存储;分别按照指定的起始位,对各密钥序列之间进行位运算,以生成流随机序列;根据流随机序列,对明文数据进行重构,以生成加密后的密文数据。
优选地,在获取明文数据,将获取的明文数据以循环链表的形式存储的步骤中,还包括子步骤:s11、读取明文数据的字节数,根据该字节数在存储器内建立连续的存储空间;s12、将明文数据顺序存储入该存储空间,并在该存储空间的尾字节创建指向存储在该存储空间的明文数据的首字节地址的指针,以建立单向的循环链表。
优选地,在将多个密钥序列分别以循环链表的形式存储的步骤中,还包括子步骤:s21、分别读取各密钥序列的字节数,并根据读取的字节数在存储器内分别建立对应各密钥序列的连续的存储空间;s22、将各密钥序列分别存储入对应的各存储空间,并在对应的各存储空间的尾字节创建指向存储在该存储空间的密钥序列的首字节地址的指针,以建立单向的循环链表。
优选地,在分别按照指定的起始位,使各密钥序列之间进行位运算,以生成流随机序列的步骤中,位运算为循环按位异或运算:
优选地,在根据流随机序列,对明文数据进行重构,以生成加密后的密文数据的步骤中,还包括子步骤;s41、以二进制字符串的形式逐位读取流随机序列;s42、根据逐位读取流随机序列的各位的值,从指定的起始位起分别对明文数据的各位值的位置进行重构;s43、将重构后明文数据作为加密后的密文数据以存储或输出。
优选地,多个密钥序列的长度分别不相等。
优选地,多个密钥序列数为2个。
本发明的有益效果为:根据上述的加密方法,得到的密文数据c的长度与明文数据m相同,不产生冗余,便于预测和控制密文数据的大小;可完全消除了明文数据m的统计学特征,不易被破解;加解密方法简单,破译极难;采取逐位(比特)的方式加密,便于通过计算机实现,无需辅助的硬件设备,加解密速度快;根据混沌流序列对明文数据进行逐位重构,生成的密文扩散特性强,防截获性能好;由多个密钥之间的循环位运算,获得复杂的流随机序列,降低密钥的复杂度和长度;各密钥采用循环链表的方式存储,加密时分别选取不同的位作为起始位,可以以较短的密钥实现较长的流随机序列,生成的流随机序列随机性好,可保证每次加密时生成流随机序列都不重复,遵循了一密一钥的原则;采用多密钥加密,可仅更换部分密钥,更换密钥方便,各密钥可以存放在不同人手中,从而保证明文更加安全。
附图说明
图1所示为根据本发明实施例的加密过程的流程图。
具体实施方式
以下将结合实施例和附图对本发明的构思、具体结构及产生的技术效果进行清楚、完整的描述,以充分地理解本发明的目的、方案和效果。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。
参照图1,本发明的实施例提供了一种基于多密钥流密码的顺序加密方法,包括以下步骤:
获取明文数据,将获取的明文数据以循环链表的形式存储;其中,明文数据可以是一段完整的数据,也可以是从流数据中截取的定长度或者不定长度的数据段。此处的循环链表指的是凡是广义的符合首尾节点相接、可以从任意一个节点出发遍历所有有效的节点对应数据的所有的链式存贮结构,而并非仅指在物理上连续的存储空间。
具体而言,首先读取明文数据的字节数,根据该字节数在存储器内建立连续的存储空间;存储空间的大小等于或者大于该明文数据的大小,此处的连续既可以是物理地址的连续,也可以是映射的连续(即根据存储空间内的一个存储地址,可以获取至少一个其他的存储地址。从一个存储地址开始,可以遍历整个存储空间,例如单向链表)。然后,将明文数据顺序以二进制或者单字节字符等的形式存储入该存储空间,并在该存储空间的尾字节创建指向存储在该存储空间的明文数据的首字节地址的指针,以建立单向的循环链表。将多个密钥序列分别以循环链表的形式存储;分别按照指定的起始位,对各密钥序列之间进行循环位运算,以生成流随机序列;根据流随机序列,对明文数据进行重构,以生成加密后的密文数据。以下为根据本发明的加密过程和解密过程的具体实施例。
加密过程:
在本实施例中,以2个密钥为例,但是应当知悉,结合本文公开的内容和,本领域技术人员可以采用2个以上的密钥。m、p0、p1和a分别表示明文数据、第一密钥、第二密钥和密文数据的集合,明文数据、第一密钥、第二密钥的取值参照表1。
表1
其中m={“中国”}表示明文数据,即要加密的文本,(0xd6d00xb9fa)是“中国”两个汉字的机内码,为待加密的输入序列。p0={“玫瑰”}表示第一密钥,(0xc3b50xb9e5)是“玫瑰”两个汉字的机内码。p1={“牡丹”}表示第二密钥,(c4b5b5a4)是“牡丹”两个汉字的机内码。c={"霟"}表示加密后生成的密文数据,(0xeb9f0xa686)是将密文c的机内码。
首先读取明文文件m,统计得明文文件m的字节数为n,每个字节为8个位(比特)。在存储器(例如计算机的内存)中分别为明文数据、第一密钥、第一密钥和密文数据分配存储空间,参考c语言的伪代码如下:
p_str_m=(char*)malloc(n*sizeof(char));
p_str_p0=(char*)malloc(n*sizeof(char));
p_str_p1=(char*)malloc(n*sizeof(char));
p_str_c=(char*)malloc(n*sizeof(char))。
其中,第一密钥p0和第二密钥p1的长度可以不相同,但也可以相同。当第一密钥p0和第二密钥p1的长度不同时,经循环位运算后生成的流随机序列可远长与第一密钥p0和第二密钥p1。为了计算方便,采用等长的第一密钥p0和第二密钥p1,第一密钥p0按照循环链表的方式,用初值“4”作为p0的起始位,以建立新的序列;第二密钥p1按照循环链表的方式,用初值“6”作为p1的起始位,以建立新的序列。*r、*q分别表示指向第一密钥和第二密钥的当前选取的字节的指针,从第一密钥和第二密钥的起始位起开始选取,对选取的字节进行异或计算,即计算*r&&*q。将计算得结果作为用于加密的流随机序列(参照表1的“真值表”)。
根据获得的流随机序列各位(比特)的取值,对明文数据各位上的数值进行位置上的重构(各位上的数值通常为{0,1}。另外不一定是每一位的数值都要移位)。
例如,以每一位为单位,分别对明文数据进行两次循环加密。
具体而言,进行第一次循环时,根据流随机序列为1的位,对明文数据的部分位的数值的地址进行重构。
例如,指针p_str_m,指向x5位所在字节;指针p_str_p0,指向y04位所在字节;指针p_str_p1,指向y16位所在字节;指针p_str_c,指向z2位所在字节。当遇到尾标志,回指首字节。该过程的参考伪代码如下:
进行第二次循环时,根据流随机序列为0的位,对明文数据的其余位的数值的地址进行重构;该过程的参考伪代码如下:
最后,将p_str_c指向分配的密文存储空间首地址,将该空间的n个字节写入到密文文件c中。获得密文数据,c={“霟”}={0xe9670x633d}=(11011000010101100100110110111110)。最终将密文数据c存储在指定的内存、硬盘等存储媒介或者输出在显示器、打印机等外置输出设备上。上述过程及对应关系可靠参照表1所示。明文数据m和密文数据c都是从初值开始向右读取和写入。当取到或写入至右侧的最后一位时,再从左侧开始继续读取或写入。本领域技术人员可以理解,根据采取在物理上不连续存储的链表存储上述数据。也可以采取任意顺序读取和写入明文数据m或密文数据c。
根据上述的加密方法,得到的密文数据c的长度与明文数据m相同,不产生冗余,便于预测和控制密文数据的大小。可完全消除了明文数据m的统计学特征,不易被破解。根据混沌流序列对明文数据进行逐位重构,生成的密文扩散特性强,防截获性能好。利用较为简单的多个密钥序列即可生成复杂多变的流随机序列。各密钥序列也可以是双向循环链表乃至多重循环链表,链表的方向和起始位可以作为例如时间等变量的函数或者密钥的一部分,进一步增加加密的复杂性。基于链表和位运算的操作适应计算机的物理结构,计算效率高。优选地,可对明文数据进行分段,根据各段的分段号对每个分段采取不同的对应的密钥序列起始位进行加密,使得每一段明文数据的用于加密的流随机序列亦不同,例如明文数据的第一分段对应第一密钥序列p0的起始位为1(分段号)+3(偏移值)=5(起始位);对应第二密钥序列p1的起始位为1(分段号)-3(偏移值)+32(第二密钥序列的总位数)=30,进一步增加了破解的复杂性。另外,也可以将各密钥序列的每次加密时选取的起始位保存作为一个独立的密钥序列(例如第三密钥序列{5,30,……})。
解密过程:
解密过程是加密过程的逆运算。在本例中,将对经上文加密过程处理后的密文数据进行解密。
m、p0、p1和a分别表示明文数据、第一密钥、第二密钥和密文数据,明文数据、第一密钥、第二密钥的取值参照表2。
表2
其中c={“霟”}表示加密后生成的密文数据,(0xeb9f0xa686)是将密文c的机内码,为待加密的输入序列。p0={“玫瑰”}表示第一密钥,(0xc3b50xb9e5)是“玫瑰”两个汉字的机内码。p1={“牡丹”}表示第二密钥,(c4b5b5a4)是“牡丹”两个汉字的机内码。m={“中国”}表示明文数据,即要加密的文本,(0xd6d00xb9fa)是“中国”两个汉字的机内码。
读取密文文件c,统计得明文文件c的字节数为m,每个字节为8个位(比特)。在存储器(例如计算机的内存)中分别为密文数据、第一密钥、第一密钥和明文数据分配存储空间,具体方法同加密过程,在此不再赘言。
用初值“4”作为第一密钥p0的循环链表的起始位;第二密钥p1按照循环链表的方式,用初值“6”作为第二密钥p1的循环链表的起始位。*r、*q分别表示指向第一密钥和第二密钥的当前选取的字节的指针,从第一密钥和第二密钥的起始位起开始选取,对选取的字节进行异或计算,即计算*r&&*q。将计算得结果作为用于解密的流随机序列(参照表2的“真值表”)。
从密文数据z2的位置开始逐位取值,根据所述流随机序列的每一位的值(0或1),向明文数据m的存储空间回填。回填的开始位置为x5。
具体而言,根据获得的流随机序列各位(比特)的取值,分别对密文数据进行两次循环解密。
进行第一次循环时,根据流随机序列为1的位,对密文数据的部分位的地址进行复原。该过程的参考伪代码为:
进行第二次循环时,根据流随机序列为0的位,对密文数据的部分位的地址进行复原。该过程的参考伪代码为:
最后,将p_str_m指向分配的明文存储空间首地址,将该空间的n个字节写入到密文文件c中。获得明文数据,m={“中国”}={0xd60xd00xb90xfa}=(11010110110100001011100011111010)。上述过程及对应关系可靠参照表2所示。明文数据m和密文数据c都是从初值开始向右读取和写入。当取到或写入至右侧的最后一位时,再从左侧开始继续读取或写入。
定义说明:
加密体制四元组(m,c,p,a)中的m、c、p、a集合具有如下特性:
1.集合内的信息{0,1}是由二进制码元组成的字节符集。适用ascii码。
2.明文集合m具有n个字节,其码元个数记作:sum(m)=8n,具有sum(m)mod8=0;
3.密文集合c的元素个数是将m集合作为初值,经过r次迭代得到c1,c2,c3,…,cr。对于cj(j=1,2,3,…,r)子集码元个数记作:sum(cj),具有sum(cj)mod8=0;假设cj的字节数为m,则有:
●当m<n,压缩加密。
●当m=n,称之为一对一加密,或称之为等密度加密。
●当m>n,称之为冗余加密。
4.密钥集合p的码元个数。记作:sum(p),具有sum(p)mod8=0;假设p集合内字节数为m,有m≤n。初步定义p集合内的字节数为1字节。加密、解密共享密钥集合p。该集合中不含有码。
5.本定义中的算法具有,可行性、确切性、有穷性、有唯一输入、有唯一输出。
6.算法集合a是由计算机可执行的代码集合。也称为函数的集合。集合a中的元素个数记作sum(a),具有sum(a)mod2=0。
算法集合特性:
若存在算法a,使得ci加密成cj,则必存在算法b,使得cj还原成ci。即存在逆算法。或还原算法。
另外,本发明涉及的技术方案还具有以下优点:
1.方法简单,破译极难;
2.使用计算机算法与编程,实现容易;
3.明文加密、发送、接受,解密实行三分离原则,使得保密系统更加安全;
4.本加密方法不是传统的一对一,一对多。而是无序加密;
5.可在现有的、公开的通信信道进行传输;
6.不需要任何的辅助硬件设备,完全用软件实现;
7.本技术遵循了shannon提出的一次一密的密码体制;
8.密钥字节可以是任意长度,随着密钥字节长度的增加,其加密复杂度也随之增加。
以上所述,只是本发明的较佳实施例而已,本发明并不局限于上述实施方式,只要其以相同的手段达到本发明的技术效果,都应属于本发明的保护范围。在本发明的保护范围内其技术方案和/或实施方式可以有各种不同的修改和变化。此外,在本公开使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本公开。在本公开和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。