下面是对明文4096个D加密后得到的密文文件密文D.txt的截图:
以下引用武金木教授在博客中的原文,以对排列码机制进行说明:
2.排列码简介
2.1 n=4的排列码演示程序设计说明:[6]
①排列码表见表1,这样的表共有24!个。
我们任意地建立其中的256个。
表中第5行4 0 3 1 2表示当Key=4时,明文第0位的2进制数送第0位做密文, 明文第1位的2进制数送第3位做密文, 明文第2位的2进制数送第1位做密文, 明文第3位的2进制数送第2位做密文。
为了节省存储空间,0用2进制数00表示, 1用2进制数01表示,2用2进制数10表示, 3用2进制数11表示, Key 用存储地址来表示。这样1个排列码表占24个字节。
表1 排列码表
Key 0 1 2 3
0 0 1 2 3
1 1
2
3 0
2 2
3 0 1
3 3 0 1 2
4 0 3 1 2
5 0 3 2 1
……..
23 3 2 1 0
②关于密钥的设计,用1个字节作整数,它表示的范围是0~255。根据他的值就可以确定一个排列码表。
在这个排列码表中,再进行模24运算。得到一个0~23的整数,恰好对应排列码表中的Key 值,确定bit的交换顺序。
③关于求非的运算,为了进一步增加破密的难度,我们在交换顺序的同时,在某些交换路径上求反。因为n=4,0点有可能有4个路径,1、2、3点都有可能有4个路径,所以可能的路径总数共有16条,每一bit 对应一条路径,使用16bit或者说2个字节控制哪个路径上是否加非。用0表示不加非,用1表示加非,或者反之。
④综合以上密钥的长度为24bit。
⑤为了进一步增加加密强度,第二个分组的密钥选取,密钥是在原密钥的基础上加上前一个密钥的一定规律的变换,只要加密密钥和解密密钥的规律相同则解密不成问题,但密码分析者虽然可以从程序知道密钥是如何变换的,因它的原始密钥的输入密码分析者是不知道的,因此知道的仅是密钥的一部分;密码设计在每下一个分组再加3个字节的明文,输入都是已知,所以方法可行。密码分析者相当于用未知数求未知数,因此无规律可寻。
⑥这样一来每个分组的密钥都是一个伪随机数。但必定有明文的特征。可是产生的密文随机性特别强。
⑦以上过程连续做多遍,每遍都用不同的24bit的密钥。
⑧为了提高速度,并不是一遍加密结束后再进行下一遍,而是一个分组连续进行多遍加密,这种做法理论上进行4遍,按目前的密码分析水平加密强度可能已经达到2^96,远远超过了DES,几乎是目前破密难度的极限。因为加密强度是关于n的函数,f(n)的常数为1。所以当n稍微大一点的时候,函数的值都相当大,可以说是2的n次方的高阶无穷大。如果n=4你都不能破密,那想破密n=64还不是天方夜谈。
这里我们给出的是查表法;实际上128!排列码表是无法用查表法实现的,但是可以用计算法实现。使用计算法n可以是任意的正整数。
2.2 n=4排列码的一些结果
因为加密强度是关于n的函数,为了读者体会加密强度,验证较小的n,比验证较大的n要容易的多,所以我们给出n=4时,密钥是16进制的000000时,排列码程序仅仅对每个字节的最低4位进行运算的结果。为了使感兴趣的人能验证我们的数据,产生此结果的程序我们放在附件中,以使你们验证数据的真实性。下面是说明问题的数据。
①
明文是:00000000000000000000000000000000000000000000000000000000000000000
密文是:;84228:0103;>>6;97?>5=2?83;6>826872:9787273894>11<;4630<<1>=8>14188
密文是:0000000000000000000000000000000000000000000000000000000000000000
明文是:71;1=<660689504=0<805934>:2880239>0882>573=3969;=>8603:<:8:9332978
③明文是(为了说明目前的多种密码分析法失效,我们把0123456789:;<=>?重复了4096遍):0123456789:;<=>?0123456789:;<=>?0123456789:;<=>?0123456789:;<=>?0123456789:;<=>?
密文是(这里是与上面明文一一对应的密文,因为计算机处理时给每个2进制数都自然地带上了两个下标,人们看到的相同符号,计算机都区分成了不同的符号):
;063?9242>;7=01996;419;52:7=;0?;<:;4?2>9;=;32781=<9293:7<093=6<7?5=61;96=7377:
④密文是:0123456789:;<=>?0123456789:;<=>?0123456789:;<=>?0123456789:;<=>?
明文是:792=:7;61556:1=7;837355:8==89:>34?;44>24=>26<<>;5:6;=?5>8=;7?8