密码学基础学习总结-04

 

密码学基础总结-04鸽了好久,现在又有时间来完成这个总结了,时过境迁,有了新的目标了,这些先不说,现在就走入分组加密的总结。前面的RC4是一个经典的加密算法,但是我们现在发现其不安全,其是一种流密码的思想,回到基本的思想上去,我们很难在日常生活中使用一次一密的加密算法,我们的密钥长度一般远远小于明文的长度,这个时候,我们就有这么两种思想,第一种就是RC4的流密码思想,使用密钥作为种子生成一个...

密码学基础总结-04

鸽了好久,现在又有时间来完成这个总结了,时过境迁,有了新的目标了,这些先不说,现在就走入分组加密的总结。

前面的RC4是一个经典的加密算法,但是我们现在发现其不安全,其是一种流密码的思想,回到基本的思想上去,我们很难在日常生活中使用一次一密的加密算法,我们的密钥长度一般远远小于明文的长度,这个时候,我们就有这么两种思想,第一种就是RC4的流密码思想,使用密钥作为种子生成一个与明文等长的“密钥”,之后与明文异或,第二种思想则是将明文分割,分组加密,这就是分组加密的思想,由此有了非常著名的几个加密算法,如:DES,AES,下面就会介绍这两个算法。

DES

还是先来简单写一下这个已经不被广泛使用的加密算法。DES英文全称是:Data Encryption Standard(资料加密标准),是1976年被美国政府确认的加密标准,使用56为密钥,基于IBM的菲斯特尔网络的思想。

菲斯特尔网络结构

分组加密中与流密码中关键问题是生成一个非常像真的随机数一样的随机数,要保证随机性,在保证能够加解密的情况下,最后生成的结果越随机越好,这样便有了菲斯特尔结果,1973年,IBM的Horst Feistel提出了Feistel密码结构,其的原理描述如下:

  • 明文分组分为$L_0$ 和$R_0$ ,通过$n$次循环处理后,再结合起来生成密文分组。
  • 每$i$次循环都以上一循环产生的$L_{i-1}$和$R_{i-1}$ 和$K$产生的子密钥$K_i$作为输入。
  • 所有循环的结构都相同,其方法是先对数据的右半部分和子密钥应用函数$F$,然后对函数输出结果和数据的左半部分取异或。
  • 在置换之后,执行由数据两部分互换构成的交换。
  • 解密过程与加密过程基本相同。规则如下:用密文作为算法的输入,但以相反顺序使用子密钥$K_i$。
  • 加密和解密可以使用相同的方法。

上图就是一个子结构的描述,先将一段明文等分成左右两个部分,之后由这种非常精妙(奇怪)的网络处理,多次进行之后,就可以得到一个结果,通过这样不断的S盒的替换加密,交叉,这样可以得到最后的结果。

  • 加密: $L_i = R_{i-1};R_i = L_{i-1} \oplus F(R_{i-1},K_{i})$
  • 解密: $R_{i-1} = L_i;L_{i-1}=R_i \oplus F(R_{i-1},K_i) = R_i \oplus F(L_i,k_i)$

这个网络结构就很精妙,甚至有些奇怪难以理解,起码在我这里是这样来看的,这个交叉等等的结构让我去想是绝对想不出来的,这个时候有人会说你这也说的太简单了,重要的是F,S盒是怎么构成的,这个问题的结果就是人们不用DES的主要原因。

DES的缺陷

第一个缺陷就是过于精妙的S盒,这里的S盒就是用来置换替换的表格,这个S盒是人为规定的,在加上美国政府的参与,人们总是觉得这个有后门,在加上这个设计精巧的网络结构,不明不白给出的S盒,让人们觉得这里面肯定有鬼,美国政府准不定偷着在里面埋了后门,其强大的能力再与IBM狼狈为奸,也许这个后门非常难被发现,这个S盒引来了大量的批评,最后人们在AES中用数学明确定义了S盒的生成原理,这样人们才信任了这个算法。

第二个缺陷是过短的密钥长度,56位的密钥长度,在现在已经不够,已经有成功攻击的案例,DES这样不被认为是一个安全的加密算法。

这样的情况下,人们便抛弃了DES,后来人们又开发了很多种分组对称加密的算法,其中非常有名的一个就是AES,下一篇文章将详细的介绍AES的算法,AES是一个非常重要的算法,需要仔细的总结。