第2章 古典密码的演化

发布时间 2023-10-31 21:09:53作者: p1cky

2.1 引子

现代密码多是用计算机或是其他数码科技,基于比特和字节对需要加密的信息进行操作。

古典密码的大部分加密方式都是利用替换式密码或移位式密码,有时则是两者的混合。

加密方法的安全性其实是基于加密方法的数学难度的提高而提高的。

习惯用小写字母来表示明文,而用大写字母来表示被加密后的密文。

在密码学中常常将字母与数字对应起来以便加密中的计算,具体的对应关系如下:

1.1

为了使密码更加安全,通常会忽略明文信息中的空格和标点符号。

2.2 单表替换密码

2.2.1 最简单的替换密码——移位密码

1.凯撒密码

凯撒将每个字母后移三位,即用a后面第三个字母d来替换a。

1.2

2.模运算初步

1.21

1.3

3.移位密码的几何表示

1.4

2.2.2 带斜率的变换——仿射密码

1.仿射密码的几何解释

1.5

仿射密码是在移位密码的基础上,直线斜率发生了变化。

2.模数乘法及其逆元

1.6

2.2.3 替换密码的一般形式与特点

移位密码和仿射密码都属于替换密码。

替换密码在代数上看就是在明文x与密文y之间建立简单的一对一的映射。

1.7

2.2.4 替换密码的杀手——频率攻击

对于移位密码来说密钥值仅可能有13个,很容易用穷尽搜索的方式得到密钥值。

仿射密码若选用已知明文攻击也是较易成功的;或者用一种更普遍的方法,称为频率分析。

频率分析的依据在绝大多数英文文本中,字母的出现频率是不相等的,而且语言的每个字母都有自身的特性,若仅采用字母替换,字母特性并不会改变。

2.3 多表替换密码

  1. Vigen re 密码

1.8

明文其实是被分成了长度与加密向量长度相同的组,之后再分别用与组内的每一位对应的加密向量项的值来进行移位加密。

该密码可以看成是使用一系列不同移位的凯撒密码组成的密码方案。

2.Vigen re 密码的频率攻击

1)获取密钥长度(*)

2)获取密钥值

3.解密

该密码易被唯密文攻击破解,而其他三种攻击方式则会更容易成功。

它采用了密钥在明文上重复书写的原理,这样一个字母可能对应多个替换,而非一对一的字符替换。

4.几何意义

该密码的加密过程相当于一个组合线性变换,先将明文按照密钥长度分组,后用密钥来对每一组明文分别加密,且每一组内每一位的移位值可能均不同。

2.4 分组密码

2.4.1 分组密码基础

分组密码先将明文进行分组,再将每个明文组以一系列替换表依次对明文组中的字母进行替换,因此这种方式也能叫作多表替换密码。

分组密码是同时加密几个字母与数字的分组,因此改变明文分组的一个字符,就可能改变与之相对应的密文分组潜在的所有字符的加密。

1.9

2.4.2 最简单的分组密码

1.Playfair密码

1.10

例子中任何一个字母 都只可能有与它在同一行的其他四个字母和它下面的一个字母,共五种字母可以对它进行替换。

Playfair密码将明文中的双字母组合作为一个单元对待,并将这些单元转换为双字母组合。

2.ADFGX密码

1.11

1.12

2.4.3 多表代换分组密码——希尔密码

希尔密码的主要思想是取m个明文符号的m个线性组合,得到m个密文符号,这种变换是在Z26上进行的。

1.13

1.14

1.15

2.4.4 分组密码的基本手段——扩散和混淆

在密码学中,混淆与扩散是创建加密文件的两种主要方法。

混淆的含义是密钥并不是和密文简单地相关,在特殊的情况下,每一个密文字符都依赖于密钥的几个部分。主要是用来使密文和对称式加密方法中密钥的关系变得尽可能复杂。

扩散主要是用来使明文和密文的关系变得尽可能复杂,明文中任何一点小更动都会使得密文有很大的差异。类似地,如果改变了密文中的一个字符,明文中的几个字符也要改变。

具有混淆和扩散特性的加密算法可有效防止类似频率分析攻击。

混淆和扩散概念在任何一个设计良好的分组密码中均起着非常重要的作用,但是同时,扩散的概念是错误传播(这也正是密码的有点):密文中的一个小错误在解密的信息中可以转化成一个相当大的错误,以至于通常造成解密是不可读的。

2.5 一种不可攻破的密码体制

一次一密

一次一密的密钥是与信息同样长度的0和1组成的随机序列,一旦密钥使用过一次就丢弃它并且不再使用,加密的过程就是信息和密钥逐比特地做模2家运算,这个过程通常叫做异或,用XOR表示。

对于明文由一系列字母组成的情况,稍微有一些变化,密钥是一串随机的移位序列,每一位都是介于0~25之间的数字,解密使用同样的密钥,但是要减去所加上的移位。

我们认为具备如下性质的随机序列产生器产生的伪随机序列在密码学上是安全的:

(1)序列看起来是随机的,可以通过所有随机性统计检验;

(2)序列是不可被预测的,即使拥有了产生序列的算法或硬件和所有以前产出的比特流的全部信息,也不能通过计算来预测下一个随机比特应该是什么。

(3)序列不能可靠地重复产生,即对于完全相同的两次输入来说,相同的序列产生器会产生两个不相关的随机序列。

2.6 伪随机序列的产生

2.6.1 一般方式

一般在大多数的计算机上均有产生随机数的方法,比如标准C库函数中的rand()函数,它可以产生介于0~65535之间的任何一个伪随机数。这类伪随机序列发生器一般都建立在线性同余生成器的基础之上。

1.16

但是这类伪随机序列发生器所产生的伪随机序列并无法满足密码学的要求,较适合于实验目的的情况,因为它们依然是可预知的比特流。

为产生不可预知的比特流作为输入源,我们常用两种方法创建这样不可知的比特流,分别是利用单向函数和数论中的难题。

1.17

2.6.2 线性反馈移位寄存序列

1.18

1.19

2.7 转轮密码(*)

1.20