密码技术概述及单表代替密码:
http://bbs.ikaka.com/showtopic-9012354.aspx今天我们进入第二部分:置换密码和多表代替密码的讲解。
注:带蓝色*的是较难的扩展内容,请根据自身基础选择是否扩展阅读。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~置换密码:所谓置换密码,就是把明文中的字母或数字重新排列,字母或数字本身不变,但其位置发生了改变,这样所编成的密码称为置换密码。
相信看到这里你也明白了,没错,置换密码很简单,比单表代替密码还简单。因为本身是不变的,只是位置变了,所以很容易穷举法破译——穷举法可不管你的顺序怎么样。
单表代替密码分为加法、乘法等加密方法,同样置换密码也分了几种。
举个例子,例如:
明文:zhe shi zhi huan mi ma
密文:ami mna uhi hzih se hz
可以看出,倒序的置换密码显然是很弱的,所以有了另一种置换密码,这种是把明文按某一顺序排成一个矩阵,然后按另一顺序选出矩阵中的字母以形成密文,最后截成固定长度的字母作为密文。
例如明文:zhe shi zhi huan mi ma
矩阵:
zhes
hizh
ihua
nmim
a
选出顺序:按列
那么密文:zhi nah ihm ezui eh am
由此可以看出,改变矩阵的大小和选出顺序可以得到不同形式的密码,其中有一种巧妙的方法。先选出一个词语作为密钥,去掉重复字母然后按字典顺序给密钥字母一个编号,于是可以得到一组与密钥对应的数字序列,最后根据此序列按列选出密文。
同样我们定义明文:zhe shi zhi huan mi ma
密钥:mi ma xue
根据上述的定义,我们可以得到数字序列:431652
矩阵:
zheshi
zhihua
nmima
根据数字顺序,很容易得到密文:shm eii zzn iahu ah hm
其实这种置换密码仅仅是通过变换矩阵大小选出顺序,而密钥仅仅是便于记忆。
所以来说,置换密码比较简单,经不起穷举攻击(穷举攻击无视顺序),但是值得注意,如果把它与其它密码技术相结合(算法复合),可以得到有用且高效的密码。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~多表代替密码:因为单表代替密码很容易被破解,原因就是只使用了一个密文字母表,从而使得明文中的字母只能用唯一的密文字母代替,即是单对单映射。
提高密码强度的一种方法,就是采取多个密文字母表,使得明文中字母可以有多个字母来代替,构成单对多映射。这就是多表代替密码的起源。
由于加密用到多个字母表,故称为多表代替密码。
那么,我们构造d个密文字母表:
B1={bj0,bj1……,bjn-1} j=0,1,……,d-1
同样定义d个映射:
fj>bj
fj(ai)=bji
最后设明文空间M=(m0,m1,……,md-1,md,……) 密文空间C=(f0(m0),f1(m1),……,fd-1(md=1),fd(md),……)
由上可知,多表代替密码的密钥就是这组应设函数或密文字母表。
* Vigenre方阵:
在多表代替密码里,最著名的是法国密码学者Vigenre使用过的密码……所以叫Vigenre密码,你懂得。Vigenre密码使用26个密文字母表,有点儿类似加法密码,他们是依次把明文字母表循环左移0,1,2,……,25位的结果。
Vigenre密码的代替规则就是用明文字母在Vigenre方阵中的列和密钥字母在Vigenre方阵中的行的交点处的字母来代替该明文字母(如果你看不懂,那么我告诉你就是密保卡的矩阵方式,了解了么?密保卡的行列就是参照了Vigenre方阵)。
另外,必须要保证密钥长度跟明文等长。
同样我们举个例子:
定义明文:zhe shi duo biao dai ti mi ma
密钥:zhe jiu shi wo xiang yao shuo de
那么根据Vigenre方阵可以得到密文:yoi …………
我偷懒就不去全部对出了,前三个字母已经给出来了,配合定义你们自己下去对一下,光听我的不行。Vigenre矩阵在附录里,自己去下载。根据矩阵和明文很容易对出密文。
附录:置换密码C语言程序以及Vigenre方阵
这里是本次课程的尾页
by 晓雾を忆凝(HUC ID:馨钥依梦)
用户系统信息:Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3)