换字式密码、多表替代密码和转制式密码
让编程改变世界
Change the world by program
换字式密码
上节课我们提到凯撒密码之所以闻名天下,除了名字十分潮之外,就是它的思维十分现代化,并且适合进行不断演变和进化! 接下来给大家介绍换字式密码,事实上是对凯撒密码进行复杂变换:将每个字符及后移字符都进行变换。 多说不如实干:将”ILOVEFISHC”按照以下规则变换 [caption id="attachment_485" align="aligncenter" width="300"] 换字式密码[/caption] [caption id="attachment_486" align="aligncenter" width="300"] 换字式密码[/caption] 密文是: AWMQSBANGD 由于上述变换规则(加密密匙)σ 是毫无规律的,所以破解起来的难度就比一般的凯撒加密要大得多!多表替代密码
这个也是凯撒密码的扩展版本,加密方法是将明文内容按照 n 个字符一组的长度分组,并在各组分别使用不同的变换规则。 还是用栗子演示给大家看,加密的依旧是: ILOVEFISHC变换规则 σ(密匙):
n = 5
第一组移动 5 个字母
第二组移动 7 个字母
[caption id="attachment_487" align="aligncenter" width="300"] 多表替代密码[/caption] 于是我们又成功得到密文: NQTAJMPZOJ转置式密码
转置式密码:将明文按照 n 个字符的长度进行分组,并将各组内的字符的顺序进行替换。 这个栗子依旧是: ILOVEFISHC变换规则 σ(密匙):
假设 n = 5
第一个字母 -> 转变为第二个
第二个字母 -> 转变为第四个
第三个字母 -> 转变为第一个
第四个字母 -> 转变为第五个
第五个字母 -> 转变为第三个
[caption id="attachment_488" align="aligncenter" width="300"] 转置式密码[/caption] 于是乎,密文是:OIELVSFCIH密码的安全强度分析
针对前边提到的三种密码的安全强度,大家能猜出哪种的密码强度最高麽? 接下来我们会逐个来分析他们的安全强度,但会涉及两个数学上的概念:排列和组合排列扫盲
排列:从 n 个不同元素中,任取 m(m ≤ n)个元素按照一定的顺序排成一列,叫做从 n 个不同元素中取出 m 个元素的一个排列。 排列数用符号 P(n, m)表示P(n, m)= n *(n-1)*(n-2)……(n-m+1)= n!/(n-m)!
!表示阶乘,注意,0!== 1组合扫盲
组合是指从 n 个字符中取 m 个方法的综合,用符号 C 来表示。C(n, m)= P(n, m)/ m!= n!/((n-m)!* m!)
在排列和组合中,排列里因为顺序非常重要,所以 AB 和 BA 被认为是不同的。 但组合仅仅是指取出的方法,于顺序无关,所以 AB 和 BA 是相同的。换字式密码的安全强度分析
现今英语中有 26 个字母,因此密匙的强度总数是对不同的 26 个字母进行不同顺序的排列所得的总数。P(26, 26)= 26!= 26*25*24……*2*1 ≈ 4.03291461 * 10^26
亲爱的童鞋们,假设计算机以每秒一亿次的速度来计算,以暴力排查的方法来寻找密匙的话,最长需要多少年才能找到? 答案是 1280 亿年。(地球诞生至今100亿年) 从理论上讲,可以通过寻找密匙来破解密码。但从实际计算量来看,换字式密码被公认为安全密码。 尽管人们已经知道利用频率分析法的方式来进行破解!(下节课详细讲解这个概念) 同时,在换字式密码中,还有一种从计算量来看比较安全的,那就是每个密匙只限制使用一次,成为一次性密码钥匙。多表替代密码的安全强度分析
假设一组中有 n 个字符,其中每组的每个字符因为不知道其转换规则,因此需要分别测试26次,因此,密匙的总数为:26*26* … *26*26 = 26^n
刚刚我们的例题中 n == 5 ,所以需要密匙的总数为:26^5 == 11881376 可见每组的字符数越多,密码强度越大,如果 n 达到20,密码的强度为:26^20 == 19,928,148,895,209,409,152,340,197,376转置式密码的安全强度分析
假设一组为 n 个字符长度,密匙的总数为:P(n, n)= n!
刚刚的栗子中,n == 5,则密匙的总数为:5!= 5 * 4 * 3 * 2 * 1 = 120
问题:当 n 的值为多少时,密匙的强度最大?