1.换位加密
关键点:明文顺序对换
Ex1: 比如要加密明文: see the light,假如我们按照3x4的矩阵排列这个明文,可以得到如下形式,最后一个x表示占位,并无实际意义
我们将其做转置变为4x3矩阵
这样一来接收方收到的密文为shgeehelttix,显然要破译这个密文要知道这个矩阵的大小,然后再填入即可
换位加密的缺点是很明显的,它的头和尾字母是一致的,如何改善呢?来看个新的例子!
Ex2: 明文为:crypto is fun ,按照之前换位的做法 我们要先将明文转为3x4的矩阵,也就是下图中横线上面的矩阵,其中x表示占位符,为了改变头尾顺序相同的缺点,我们引入顺序的概念,也就是我们加入一组数字或者字母这里以{1,2,3,4}为例(当然也可以引入{M,.R,Y,Q},为直观所以用数字),也就变为横线下面的样子
引入数字后,我们以数字的大小为转置的行数,这里是从小->大,也就说column1 转置后为row1=>ROU,column2转置后为row2=>YIN,依次类推
显然解密不仅要知道矩阵维度,还要知道加密的顺序才行
假如有12个字母要猜几次呢?
首先设置矩阵:可为1x12 2x6 3x4 4x3 6x2 12x1,然后对于每种情况我们分别讨论,比如1x12,那就12个字母的排列,如果是2x6矩阵,依次填入后尝试每一种矩阵
以2x6矩阵为例 如下图所示的两种情况 ....以此类推
这种方式就是穷举法,也叫穷举攻击
换位还可以玩的更高级些,比如双重换位:
明文:ATTACK&AT&DAWN ;&号这里表示分隔,也就占位的意思吧,中文翻译为凌晨发起总攻,显然如果这条明文被对方截获了,我方就完蛋啦,我们用更为复杂的双重加密来让保证我们的明文能正确传达到友军手中,按照我们之前的做法,弄一个矩阵,这里是4x3,为每一列打上编号,不同的是这里连行也打上了编号,设下面这个矩阵为A
设下面的矩阵的为B,显然B[行编号,列编号] = A[行编号,列编号]
小结:上述的算法仅仅涉及调换顺序,不改变字符,解密注意写入顺序对应明文即可
2.凯撒加密
凯撒加密的思想很简单,a替换为D,b替换为E,每个字母偏移3位
比如,明文为:RETURN TO ROME,经过加密:UHWXUA WR URPH,此时若我们还用换位加密中的说的穷举攻击,要耗时多久呢?
以a来举例,此时a有26种选择,而到b时因为a已经选走 了一种,而b所对应的密文肯定不和a一致所以b只有25种选择,以此类推c有24种,也就是26*25*24*.....*1=26! > 2的88次方
需要1000年才能破解完!这看似很好了 但其实有个致命的缺陷,我们来看张图
有人对英语单词出现字母的频率做了大量的统计发现,每个字母出现的概率不一样 ,其中e出现的频率最高,那我们就可以做出这样的破解,拿到密文后统计每个字母出现的频率,比对上表,比如密文中出现最多的可能是e! 这样我们就以一种被称为"统计攻击"的方式破解了密文
但是!这样做真的靠谱吗?靠统计字母的频率真的可以吗? 有一个人了用英语写了5W字的文章,其中不带一个e!(额..........虽然不稳定,但总归是一种攻破凯撒加密的方式总比用1000年好)
3.维吉尼亚密码(Vigenere Cipher)
同样举例说明,要加密的明文为:SECRETMESSAGE,我们设K={12,0,19,7},密文和秘钥对应的数字做加法,其中秘钥k是循环的,如下图
这样一来经过以上形式的加密,我们得到的密文为:EEVYQT.....(不一一列出),这样一来不同字母通过变换可能变为一样,这使得统计攻击无效了
对于Vigenere的解密,我们以第一个字母S->E为例进行说明,S经过K[0]的加密后变为E,也就是4,所以是 (4-K[0]) + 26) = 18,显然经过讨论E的解密过程我们知道,要解密就要知道秘钥K 就可以了
接下来我们分析一下倘若不知道K,穷举破解的效率:
K = 1,0~25,26 的 1次方
K = 2,0~25,0~25 ,26的2次方
....
K = 26, 26^1+26^2+^26^3+......+26^26 =6.4023643634154 * 10^36
4.希尔密码(Hill cipher)
hill cipher需要运用矩阵运算的一些基本概念:A*A逆=I,I为单位矩阵,其次将第一个字母A设为0,最后一个Z设为25,中间依次累加,比如明文设为:
MEETMEHERE={12,4,4,19,12,4,7,4,17,4}
设n=2,加密矩阵A设为
再将明文对应的字母串{12,4,4,19,12,4,7,4,17,4}化为列向量的形式,如下图
显然A是2x2矩阵,P是2*1矩阵,依次做个乘法我们得到2*1的四个向量,以第一个为例,如下
316 => 316-26*12 = 4,152 = > 152-26*5=22,把运算化为字母对应的数字,所以如下:
对于解密我们要算出逆矩阵即可
5.一次一密(one-time Pad)
这种方式是绝对安全的,每次加密的秘钥和明文长度是一样的,一般用在国家级的传输中,商业中一般不用这个
6.密码本加密
其实这种方式的加密我们在电影中也有看到过,比如二战中日本人就是用密码本的形式进行加密的,这种加密方式是这样运作的:用单词对应一组数字,比如说:
test:13732
is:10142
start:14512
每次要解密的时候就拿个密码本出来看看找到对应的数字就可以了,这种方式如果用久了,敌人多多少少也会猜到一些,所以要不定期更新,比较麻烦,而且假如密码本被对方截获了,那就全完蛋啦,所以一般战争打输了,密码本是一定要销毁的