对称密码加密与破解策略

密码其实一直存在与我们的日常生活中,而且在不知不觉中运用它来组织语言,比如双关语,其实,就是将你想要表达的思想通过你敏捷的思维和丰富的经历进行隐晦的表达,这其实就是一个加密的过程,如果我们把你想要表达的真正意思当做明文,那么你最后表达出的就是密文,而在你脑海中加工的过程即为加密。密码技术其实就是为了隐藏和保护重要信息的存储和传输过程的技术,刚出现的时候最广泛的运用在战争中情报的保护,后来信息技术迅速发展,信息安全变的越来越重要,所以人们开发出了形形色色的密码技术。

凯撒密码

是一种通过平移字母表的加密方法,比如向后平移一位,[a -> b] ,[b-> c],[c -> d] … 以此类推,一种最简单的映射。在这种加密方式中,平移的位数就是密钥。密钥只有26种,这也被成为是某种加密算法的密钥空间。

这种加密方式很容易被遍历整个密钥空间,从而暴力破解密文。

简单替换密码

凯撒密码的升级版,就是通过一个字母映射表,把对应的明文字母通过映射表映射成密文。在计算机技术出现之前很长一段时间里,这种加密方式被广泛应用。这种加密方式的密钥就是这份映射表,而它的密钥空间有多大呢?26的阶乘,一个十分巨大的数字,基本上通过暴力破解的方式已经行不通了,因为遍历整个密钥空间所需要消耗的时间相当巨大。

即便每秒能够遍历10亿个密钥,要遍历完所有密钥也需要花费超过120亿年的时间。

但是这种加密方式存在一一对应的关系,就是说密文中的字符与明文字符必然是有映射关系的。那么就可以通过一种叫频率攻击的方式破解,简单说在英文中每个字母的出现频率是大致固定的,而且某些字母的组合也是有一定规律的。当拥有大量密文用例时候,分析某个字母的频率,再通过普通明文的频率便可以大大的缩小密钥空间,继而可以推测出字母映射表。

一次性密码本

计算机技术的发展让加密技术从简单的文字加密变成对比特序列的加密,因为计算机所操作的对象是文字编码后的比特序列。一次性密码本是一种特殊的加密方式,它的加密方式十分简单,但也是绝对无法破译的加密技术,即使你暴力遍历了整个密钥空间。

例如:
明文A是:0110 1101 0110 1001 => mi
密钥B是:0110 1011 1111 1010

接下去让 A 与 B 做异或运算,A XOR B 得到密文 C:0000 0110 1001 0011

即使破解这暴力遍历所有密钥空间,它也不能确定哪一个密钥是正确的密钥,因为它会得到所有字母的组合情况。

所以一次性密码本是理论上无法破译的。但是实际应用中并没有使用这种十分安全的加密方式,原因是,一次性密码本的密钥跟明文必须是等长的,我们必须解决如何存储密钥和传输密钥的问题。那么我们保护一段明文的任务就转换成了保护一段等长密钥的任务,并没有从根本上解决这个问题。

分组密码

看过一次性密码本的加密方式以后,你可能会想,为什么不用定长密钥重复加密明文。当然这种方式是存在的,而且几乎应用在当前所有的加密算法中,这种加密方式被称为分组密码。也就是把明文切分成与密钥等长的若干组,分别进行加密。而对分组的迭代加密方式则被称作模式。

ECB模式

这是最简单的一种方式,就是将每个分组与密钥进行加密运算得到密文。

ECB模式有一个很大的缺陷就是加密后明文和密文各个分组的顺序是不变的,如果我知道每个分组所代表的明文的模糊含义,就可以通过截获并篡改其中的分组顺序,来修改明文。

比如, A转账给B一万元。我就可以修改成 B转账给A一万元。

CBC模式

在这种模式下,每个分组在加密前都需要跟前一个分组的密文进行XOR运算,第一个分组会与初始化向量IV进行XOR运算然后进行加密。当解密时某些分组被交换后,解密完的明文就可以判别损坏。

但是,在这种模式下,我们可以通过攻击IV的方式来篡改第一个分组的明文,因为明文在加密前与IV进行了XOR运算,那么理论上我就可以控制第一个分组变成任意明文。

其他模式

在分组密码中还有很多其他的模式,比如,CFB、OFB、CTR等,就不一一赘述了。