一种动态矩阵排列加密方法 【技术领域】
本发明涉及加密技术领域,特别涉及用密匙控制进行数据加密与解密相关技术领域。
背景技术
在现代的电子时代中,通过在公共电信信道上交换的数据处理日常的商务、公务及私人事务与日俱增。敏感的数据常常是存储在不保密的存储器中。通过公共电信信道交换的数据或存储在存储器中的数据容易被他人在未经许可的情况下存取,因而就不能保其机密性。
数据加密就是防止数据在存储器中或在公共电信信道上传输时被非授权存取的一种方法。加密就是把明文转换为不可理解的密文的一种计算型式。解密就是把无法理解的密文恢复为明文的加密的逆计算。
在实践中,数据首先由加密者把明文加密成密文后才用公共电信信道传输或存储起来。当收到或检索这些数据时,再把密文解密成明文。
数据文件加密现有技术的主流是DES和IDEA加密方法。DES“数据加密标准”,有美国国家标准局于1977年在联邦信息标准(FIPS)出版物第46号上公布。自那以后,DES就被确定为一个标准的公共加密方法。DES的加密和解密是按块进行的,每块为64位(bit)。基本的算法包括一系列预定排列的16次迭代值。
在过去10年中DES被正式作为标准采用,但这种加密方法有以下以知的缺点。一个是:56位的密匙太短。它仅能产生大约10
17个密匙。从现代高速或并行计算机来看,在此密匙长度的密匙数量的穷举在计算上是可能的(即尝试每个可能的密匙,看是否能解密该密文)。另一个缺点是基本设计原理,列如各种不同排列的选择、置换和所需的迭代次数都没有清楚的说明。对有关该系统中有“陷阱”(trapdoor)的可能性一直都存在争论。因此,如果用户不能精确地鉴定该系统的实际安全性,它就不能是一个真正的公共加密系统。
技术内容
本发明的目的是针对以上现有技术的不足,设计一种基本原理公开、清楚、易懂、安全性高、通用性强的动态矩阵排列加密方法。
本发明的目的是通过以下技术方案实现
A、选取明文(plaintext)P为32768比特的数据,如果长度不足32768比特则填充随机数据使它满足32768比特。
B、设密匙K为65536比特,如果长度不足65536比特,则把密匙K加长为65536比特。
把65536比特的K分成32768个子块,每一个子块2比特,令这32769个子块为密匙流的表示方法:KXi=KX1,KX2,KX3,KX4……KX32767,KX32768,KX32769;
C、IP矩阵排列:
把32768比特的明文数据按每比特、每个位置的顺序排入32纵32行32列的正方型的矩阵中。
从每个纵中的32行32列的矩阵中提取出1024个不同行和列的值的矩阵。
开始加密:
a首先定义,利用KXi中的值来确定每个矩阵中的不同排列方式.密匙的值为(0、1、2、3)表格中的排列分别为,当值为0时排列不变。当值为1时排列矩阵按顺时针的方向转动一下,即原来的行变成列,原来的列变成行。当值为2时排列矩阵按顺时针的方向转动两下,即上行变成下行,右列变成左列。当值为3时排列矩阵按逆时针的方向转动一下,即原来的列变成行,原来的行变成列。
b、把正方型的矩阵的六个面都定义一个值,分别用(A)、(B)、(C)、(D)、(E)、(F)来表示,如图(a)
从密匙K中指定的位置提取12个比特的数据,把这12比特分成6组每组2比特,再把(A)、(B)、(C)、(D)、(E)、(F)排成3行2列的表格形式如图(b),再用这6组密匙对这个表格,把表格分成(A)、(B)、(C)、(D)和(C)、(D)、(E)、(F)两个交叉的表格然后再进行6次排列运算运算方法用a的方法进行排列,输出正方型的阵矩的六个面的顺序表。
(1)对正方型的矩阵排列运算,从顺序表中的第一个面开始。
(2)把该面32乘32的矩阵分成32乘32、16乘16、8乘8、4乘4、2乘2的各种表格,并把密匙流分成32段,每个纵用一段,每次对不同的纵的排列密匙流都不同。
①、用该段地第1个密匙的值对32乘32的表格用a的方法进行排列。
②、用该段的第2到该段的第10个密匙的值对16乘16的表格用a的方法进行排列,32乘32的表格分成9个16乘16的表格。
③、用该段的第11到该段的第75个密匙的值对8乘8的表格用a的方法进行排列,32乘32的表格分成64个8乘8的表格。
④、用该段的第76到该段的第300个密匙的值对4乘4的表格用a的方法进行排列,32乘32的表格分成224个4乘4的表格。
⑤、用该段的第300到……个密匙的值对2乘2的表格用a的方法进行排列,32乘32的表格分成960个2乘2的表格。
(3)跳回(2)继续对下一个纵值进行排列,每次推进下一个纵。
(4)当32个纵向中的表格都排列完毕时跳回(1)继续对下一个面进行排列,并把密匙流从最高位向最低位移动6分之1,把移出的6分之1补到高位处。如果6个面都完成了就结束IP矩阵排列。
D、把排列完的明文P数据分组:
分组:32768比特的明文数据块分成1024个子块,每一子块32比特,令这1024个子块为明文子块Pxi,其表示:PXi=PX1,PX2,PX3,PX4……PX1022,PX1023,PX1024;
E、子密匙分组:把65536比特的Ki分成两个不同的组,每组为1024个子块,每一子块32比特,令这1024个子块为第1组:K1Xi=K1X1,K1X2,K1X3,K1X4……K1X1022,K1X1023,K1X1024;
第2组:K2Xi=K2X1,K2X2,K2X3,K2X4 … …K2X1022,K2X1023,K2X1024;
F、用第一组密匙K1Xi与排列后的明文子块PXi进行异或运算(^)运算,一共1024组运算。
G、把经过F步骤加密后的明文子块PX1与经过F步骤加密后的明文子块PX2进行异或运算(^),经过F步骤加密后的明文子块PX3与经过F步骤加密后的明文子块PX4进行异或运算(^)……经过F步骤加密后的明文子块PX1023与经过F步骤加密后的明文子块PX1024进行异或运算(^),一共512组运算。
H、下面的明文子块..全部为经过g步骤后的值:
明文子块PX1与明文子块PX2进行异或运算(^)运算其值去替换原本明文子块PX1的值,
明文子块PX2与明文子块PX3进行异或运算(^)运算其值去替换原本明文子块PX2的值,
明文子块PX3与明文子块PX4进行异或运算(^)运算其值去替换原本明文子块PX3的值,
明文子块PX1021与明文子块PX1022进行异或运算(^)运算其值去替换原本明文子块PX1021的值,
明文子块PX1022与明文子块PX1023进行异或运算(^)运算其值去替换原本明文子块PX1022的值,
明文子块PX1023与明文子块PX1024进行异或运算(^)运算其值去替换原本明文子块PX1023的值。
I、用第二组密匙K2Xi与经过H步骤后明文子块PXi进行异或运算(^)运算,一共1024。
J、下面的明文子块..全部为经过I步骤后的值:
明文子块PX1与明文子块PX1024进行异或运算(^)运算产生一个值P1,
明文子块PX2与值P1进行异或运算(^)运算产生一个值P2,
明文子块PX3与值P2进行异或运算(^)运算产生一个值P3,
明文子块PX1021与值1020进行异或运算(^)运算产生一个值P1021,
明文子块PX1022与值1021进行异或运算(^)运算产生一个值P1022,
明文子块PX1023与值1022进行异或运算(^)运算产生一个值P1023。
最后把明文子块PX1024的值替换为P1023的值。
K、再次调用(c)矩阵排列算法,把密匙流并把密匙流从最高位向最低位移动2分之1,把移出的2分之1补到高位处,再用该密匙流对经过J步骤后明文子块PXi进行排列运算。
L、把第2组的密匙与第1组的密匙之间做子异或(^)运算,把值再用矩阵排列算法,密匙流用上面同样的值进行排列运,再用它的值与经过J步骤后明文子块PXi进行异或(^)运算。
M、输出密文(ciphertext)为32768比特的数据,加密结束。
本发明技术进步在于,本方法密匙长,基本原理公开、清楚、易懂,安全性高,通用性强。
【附图说明】
图1为本发明的流程框图;
图2为本发明把正方形的矩阵的六个面定义为(A)、(B)、(C)、(D)、(E)、(F)示意图;
图3为本发明把(A)、(B)、(C)、(D)、(E)、(F)排列成3行2列表格形成图。
具体实施方法
加密方法包括:矩阵排列;分组排列;异或运算。
加密技术的实现方法,如附图1是该加密方法的流程图。
这是一种对称分组加密算法,该加密算法的明文(plaintext)P的长度为32,768比特。
Pi=P1 P2 P3 P4 P5 P5……P32764 P32765 P32766 P32767 P32768
Pi为明文的数据。
密匙(keys)K的长度为65,536比特
Ki=K1 K2 K3 K4 K5 K6……K65531 K65532 K65534 K65535 K65536
Ki为密匙的数据。
注:Pi、Ki=0或1。
加密过程可以表达如下:
C=Ipi*X32*X31*X30…(ek)…*X3*X2*X1*Ipi
解密过程可以表达如下:
P=IP-i*X1*X2*X3…(dk)…*X30*X31*X32*IP-I
加密的具体方法如下:
A、选取明文(plaintext)P为32768比特的数据,如果长度不足32768比特则填充随机数据使它满足32768比特。
B、设密匙K为65536比特,如果长度不足65536比特,则把密匙K加长为65536比特。
把65536比特的K分成32768个子块,每一个子块2比特,令这32769个子块为
密匙流的表示方法:KXi=KX1,KX2,KX3,KX4 ……KX32767,KX32768,KX32769;
C、IP矩阵排列:
把32768比特的明文数据按每比特、每个位置的顺序排入32纵32行32列的正方型的矩阵中。
从每个纵中的32行32列的矩阵中提取出1024个不同行和列的值的阵矩。
开始加密:
a首先定义,利用KXi中的值来确定每个矩阵中的不同排列方式。密匙的值为(0、1、2、3)表格中的排列分别为,当值为0时排列不变。当值为1时排列矩阵按顺时针的方向转动一下,即原来的行变成列,原来的列变成行。当值为2时排列矩阵按顺时针的方向转动两下,即上行变成下行,右列变成左列。当值为3时排列矩阵按逆时针的方向转动一下,即原来的列变成行,原来的行变成列。
把正方形的矩阵的六个面都定义一个值,分别用(A)、(B)、(C)、(D)、(E)、(F)来表示,如图2所示。
从密匙K中指定的位置提取12个比特的数据,把这12比特分成6组每组2比特,再把(A)、(B)、(C)、(D)、(E)、(F)排成3行2列的表格形式如图3,再用这6组密匙对这个表格,把表格分成(A)、(B)、(C)、(D)和(C)、(D)、(E)、(F)两个交叉的表格然后再进行6次排列运算运算方法用a的方法进行排列,输出正方型的矩阵的六个面的顺序表。
(1)对正方形的矩阵排列运算,从顺序表中的第一个面开始。
(2)把该面32乘32的矩阵分成32乘32、16乘16、8乘8、4乘4、2乘2的各种表格,并把密匙流分成32段,每个纵用一段,每次对不同的纵的排列密匙流都不同。
①、用该段的第1个密匙的值对32乘32的表格用a的方法进行排列。
②、用该段的第2到该段的第10个密匙的值对16乘16的表格用a的方法进行排列,32乘32的表格分成9个16乘16的表格。
③、用该段的第11到该段的第75个密匙的值对8乘8的表格用a的方法进行排列,32乘32的表格分成64个8乘8的表格。
④、用该段的第76到该段的第300个密匙的值对4乘4的表格用a的方法进行排列,32乘32的表格分成224个4乘4的表格。
⑤、用该段的第300到……个密匙的值对2乘2的表格用a的方法进行排列,32乘32的表格分成960个2乘2的表格。
(3)跳回(2)继续对下一个纵值进行排列,每次推进下一个纵。
(4)当32个纵向中的表格都排列完毕时跳回(1)继续对下一个面进行排列,并把密匙流从最高位向最低位移动6分之1,把移出的6分之1补到高位处。如果6个面都完成了就结束IP矩阵排列。
D、把排列完的明文P数据分组:
分组:32768比特的明文数据块分成1024个子块,每一子块32比特,令这1024个子块为
明文子块表示为:PXi=PX1,PX2,PX3,PX4 ……PX1022,PX1023,PX1024;
E、子密匙分组:把65536比特的Ki分成两个不同的组,每组为1024个子块,每一子块32比特,令这1024个子块为第1组:K1Xi=K1X1,K1X2,K1X3,K1X4……K1X1022,K1X1023,K1X1024;
第2组:K2Xi=K2X1,K2X2,K2X3,K2X4 … …K2X1022,K2X1023,K2X1024;
F、用第一组密匙K1Xi与排列后的明文子块PXi进行异或运算(^)运算,一共1024组运算。
G、把经过F步骤加密后的明文子块PX1与经过F步骤加密后的明文子块PX2进行异或运算(^),经过F步骤加密后的明文子块PX3与经过F步骤加密后的明文子块PX4进行异或运算(^)……经过F步骤加密后的明文子块Px1023与经过F步骤加密后的明文子块PX1024进行异或运算(^),一共512组运算。
H、下面的明文子块..全部为经过G步骤后的值:
明文子块PX1与明文子块PX2进行异或运算(^)运算其值去替换原本明文子块PX1的值,
明文子块PX2与明文子块PX3进行异或运算(^)运算其值去替换原本明文子块PX2的值,
明文子块PX3与明文子块PX4进行异或运算(^)运算其值去替换原本明文子块PX3的值,
明文子块PX1021与明文子块PX1022进行异或运算(^)运算其值去替换原本明文子块PX1021的值,
明文子块PX1022与明文子块PX1023进行异或运算(^)运算其值去替换原本明文子块PX1022的值,
明文子块PX1023与明文子块PX1024进行异或运算(^)运算其值去替换原本明文子块PX1023的值。
I、用第二组密匙K2Xi与经过H步骤后明文子块PXi进行异或运算(^)运算,一共1024组。
J、下面的明文子块..全部为经过I步骤后的值:
明文子块PX1与明文子块PX1024进行异或运算(^)运算产生一个值P1,
明文子块PX2与值P1进行异或运算(^)运算产生一个值P2,
明文子块PX3与值P2进行异或运算(^)运算产生一个值P3,
明文子块PX1021与值1020进行异或运算(^)运算产生一个值P1021,
明文子块PX1022与值1021进行异或运算(^)运算产生一个值P1022,
明文子块PX1023与值1022进行异或运算(^)运算产生一个值P1023。
最后把明文子块PX1024的值替换为P1023的值。
K、再次调用(c)矩阵排列算法,把密匙流并把密匙流从最高位向最低位移动2分之1,把移出的2分之1补到高位处,再用该密匙流对经过J步骤后明文子块PXi进行排列运算。
L、把第2组的密匙与第1组的密匙之间做子异或(^)运算,把值再用矩阵排列算法,密匙流用上面同样的值进行排列运,再用它的值与经过j步骤后明文子块PXi进行异或(^)运算。
M、加密结束,输出密文(ciphertext)为32768比特的数据。
解密的具体运算为:
A、取得加密过的密文(ciphertext)C为32768比特的数据。
B、设密匙K为65536比特,如果长度不足65536比特,则把密匙K加长为65536比特。
把65536比特的K分成32768个子块,每一个子块2比特,令这32769个子块为
密匙流的表示方法:KXi=KX1,KX2,KX3,KX4… …KX32767,KX32768,KX32768;
C、子密匙分组:把65536比特的Ki分成两个不同的组,每组为1024个子块,每一子块32比特,令这1024个子块为第1组:K1Xi=K1X1,K1X2,K1X3,K1X4……K1X1022,K1X1023,K1X1024;
第2组:K2Xi=K2X1,K2X2,K2X3,K2X4 … …K2X1022,K2X1023,K2X1024;
D、把密文C数据分组:
分组:32768比特的密文数据块分成1024个子块,每一子块32比特,令这1024个子块为
密文子块表示为:CXi=CX1,CX2,CX3,CX4 … …CX1022,CX1023,CX1024;
E、把第2组的密匙与第1组的密匙之间做子异或(^)运算,把值再用矩阵排列算法G步骤进行运算,密匙流的值不变,再进行排列运,再用它的值与密文子块CXi进行异或(^)运算。
F、把密匙流从最高位向最低位移动2分之1,把移出的2分之1补到高位处,再用该密匙流对经过E步骤后密文子块CXi进行排列运算:
G、IP矩阵排列:
把32768比特的密文数据按每比特、每个位置的顺序排入32纵32行32列的正方型的矩阵中。
从每个纵中的32行32列的矩阵中提取出1024个不同行和列的值的阵矩。
开始解密:
(a)首先定义,利用KXi中的值来确定每个矩阵中的不同排列方式。密匙的值为(0、1、2、3)表格中的排列分别为,当值为0时排列不变。当值为1时排列矩阵按顺时针的方向转动一下,即原来的行变成列,原来的列变成行。当值为2时排列矩阵按顺时针的方向转动两下,即上行变成下行,右列变成左列。当值为3时排列矩阵按逆时针的方向转动一下,即原来的列变成行,原来的行变成列。
把正方型的阵矩的六个面都定义一个值,分别用(A)、(B)、(C)、(D)、(E)、(F)来表示。如图
从密匙K中指定的位置提取12个比特的数据,把这12比特分成6组每组2比特,再把(A)、(B)、(C)、(D)、(E)、(F)排成3行2列的表格形式如图3,再用这6组密匙对这个表格,把表格分成(A)、(B)、(C)、(D)和(C)、(D)、(E)、(F)两个交叉的表格然后再进行6次排列运算运算方法用(a)的方法进行排列,输出正方型的阵矩的六个面的顺序表,在把该顺序表做一个逆转(即把原来的顺序完全倒过来)。
(1)对正方型的矩阵排列运算,从顺序表中的第一个面开始。
(2)把密匙流从最低位向最高位移动6分之一,把移出的6分之1补到低位处。
(3)把该面32乘32的矩阵分成32乘32、16乘16、8乘8、4乘4、2乘2的各种表格,并把密匙流分成32段,每个纵用一段,每次对不同的纵的排列密匙流都不同。
①、用该段的第300到……个密匙的值对2乘2的表格用a的方法进行排列,32乘32的表格分成960个2乘2的表格。
②、用该段的第76到该段的第300个密匙的值对4乘4的表格用a的方法进行排列,32乘32的表格分成224个4乘4的表格。
③、用该段的第11到该段的第75个密匙的值对8乘8的表格用a的方法进行排列,32乘32的表格分成64个8乘8的表格。
④、用该段的第2到该段的第10个密匙的值对16乘16的表格用a的方法进行排列,32乘32的表格分成9个16乘16的表格。
⑤、用该段的第1个密匙的值对32乘32的表格用a的方法进行排列。
(3)跳回(2)继续对下一个纵值进行排列,每次推进下一个纵。
(4)当32个纵向中的表格都排列完毕时跳回(1)继续对下一个面进行排列,并把密匙流从最低位向最高位移动6分之1,把移出的6分之1补到低位处。如果6个面都完成了就结束IP矩阵排列。
H、下面的密文子块..全部为经过g步骤后在用d的方法排列过的值:
密文子块CX1023与值1022进行异或运算(^)运算产生一个值C1023。
密文子块CX1022与值1021进行异或运算(^)运算产生一个值C1022,
密文子块CX1021与值1020进行异或运算(^)运算产生一个值C1021,
密文子块CX3与值C进行异或运算(^)运算产生一个值C3,
密文子块CX2与值C1进行异或运算(^)运算产生一个值C2,
密文子块CX1与密文子块CX1024进行异或运算(^)运算产生一个值C1,
最后把密文子块CX1024的值替换为C1中的值。
G、用第二组密匙K2Xi与经过h步骤后密文子块CXi进行异或运算(^)运算,一共1024组。
I、下面的密文子块..全部为经过G步骤后的值:
密文子块CX1023与密文子块CX1024进行异或运算(^)运算其值去替换原本密文子块CX1023的值,
密文子块CX1022与密文子块CX1023进行异或运算(^)运算其值去替换原本密文子块CX1022的值,
密文子块CX1021与密文子块CX1022进行异或运算(^)运算其值去替换原本密文子块CX1021的值,
密文子块CX3与密文子块CX4进行异或运算(^)运算其值去替换原本密文子块CX3的值,
密文子块CX2与密文子块CX3进行异或运算(^)运算其值去替换原本密文子块CX2的值,
密文子块CX1与密文子块CX2进行异或运算(^)运算其值去替换原本密文子块CX1的值。
J、把经过I步骤加密后的密文子块CX1与经过I步骤加密后的密明文子块CX2进行异或运算(^),经过I步骤运算后的密文子块CX3与经过I步骤运算后的密文子块CX4进行异或运算(^)……经过I步骤运算后的密文子块CX1023与经过I步骤运算后的密文子块CX1024进行异或运算(^),一共512组运算。
K、用第一组密匙K1Xi与经过j步骤后的密文子块CXi进行异或运算(^)加密运算,一共1024组运算。
L、用原密匙流用G的方法对经过k步骤的子密匙进行排列运算。
M、解密结束输出明文(plaintext)32768比特的数据。