首页 > 技术文章 > 第三讲 对称密码算法

Severus-Cavendish 2021-12-06 11:26 原文

对称加密算法模型

DES最重要的三个原因:

  • 通过验证,安全性高
  • DES是最早成为国际标准的对称加密算法
  • DES目前仍然被广泛的使用

※ 经典Feistel结构

理想分组密码

  • 算法固定
  • 明文和密文是一一对应
  • 密文的所有统计特征都是独立于所用密钥的

密钥空间

  • \(2^n!\)个密钥
  • \(n\)较小时是不安全的
  • 密钥的长度:\(n*2^n\)

几个关键概念:分组长度、密钥长度、迭代轮数、子密钥产生算法、轮函数

思想

  • 基本思想:用简单算法的乘积来近似表达大尺寸的替换变换
  • 多个简单算法的结合得到的加密算法比任何一个部分算法都要强
  • 交替使用替换变换和置换
  • 扩散和混淆概念的对应(对付统计分析的方法)
  1. 扩散:明文的统计特性消散在对应的密文中,这样可以让多个明文数字尽可能影响多个密文数字获得,等价于每个密文数字被许多明文数字影响。(最简单方法:代换)
    作用:尽可能使明文和密文间统计关系复杂。
  2. 混淆:尽可能使密文和密钥之间的统计关系复杂,阻止攻击者发现密钥。(最简单方法:置换)

DES算法

image

DES算法相关可以参考:DES加密中的一些重难点整理

加密步骤

image

  • 第一步:初始置换 ( \(IP\) )。
    \(x_0=IP(x)=L_0R_0\),其中\(x\)代表明文,\(L_0\)表示\(x_0\)的前32比特,\(R_0\)表示\(x_0\)的后32比特。置换过程利用了初始置换\(IP\)表。
  • 第二步:16轮Fiestel结构迭代
  • 第三步:初始逆置换( \(IP^{-1}\) )
    置换过程利用了初始逆置换\(IP^{-1}\)表。

DES的一轮迭代

\(R_0\)(32位)→E盒扩展变换(48位)→加密(48位)→S盒替代(6*8→4*8位)→P盒替代(32位)

  • S盒替代:
    假设传入第一个S盒的数据是:101110
    取它的第1位(1)与最后1位(0),组成r=10(化为十进制:2),取其余位,组成c=0111(化为十进制:7)
    查找S1盒的变换表,r+1为行,c+1为列(程序员的习惯:数数是从0开始的)
    在变换表的r+1行c+1列的数,即为S1盒要输出的数。(本例中,该数为在3行8列的11),但表中的数是十进制的,需要转换为二进制才能作为最终输出的结果
    【其余的7个S盒的变换过程同上】

子密钥的产生(16轮)

image
64位密钥中有8位是奇偶校验位,因此实际起作用的密钥为56位,并会在经过置换选择PC-1之后被分为两个28位的分组\(C_0\)\(D_0\)
之后的每轮密钥产生过程循环如下:循环左移→置换选择PC-2→产生本轮密钥→继续循环左移…

关于DES的解密:
image

DES的雪崩效应

明文或密钥的微小改变对密文产生很大的影响。

DES算法的操作模式

模式 描述 典型应用
ECB 用相同的密钥分别对明文分组独立加密 单个数据的安全传输(一个加密密钥)
CBC 加密算法的输入是上一个密文组和下一个明文组的异或 面向分组的通用传输认证
CFB 一次处理s位,上一块密文作为加密算法的输入,产生的伪随机数输出与明文异或作为下一单元的密文 面向数据流的通用传输认证
OFB 与CFB类似,只是加密算法的输入是上一次加密的输出,且使用整个分组 噪声信道上的数据流的传输(卫星通信)
CTR 每个明文分组都与一个经过加密的计数器相异或。对每个后续分组计数器递增。 面向分组的通用传输用于高速需求
  • 电子密码本ECB
    DES ECB(电子密本方式)其实非常简单,就是将数据按照8个字节一段进行DES加密或解密得到一段8个字节的密文或者明文,最后一段不足8个字节,按照需求补足8个字节进行计算,之后按照顺序将计算所得的数据连在一起即可,各段数据之间互不影响。

特点:

  1. 简单,有利于并行计算,误差不会被传送;
  2. 不能隐藏明文的模式:在密文中出现明文消息的重复
  3. 可能对明文进行主动攻击:加密消息块相互独立成为被攻击的弱点

就是最直白最简单的DES分组加密。

image

  • 密码分组链接CBC
    DES CBC(密文分组链接方式)有点麻烦,它的实现机制使加密的各段数据之间有了联系。其实现的机理如下:

加密步骤如下:

  1. 首先将数据按照8个字节一组进行分组得到D1D2......Dn(若数据不是8的整数倍,用指定的PADDING数据补位)
  2. 第一组数据D1与初始化向量I异或后的结果进行DES加密得到第一组密文C1(初始化向量I为全零)
  3. 第二组数据D2与第一组的加密结果C1异或以后的结果进行DES加密,得到第二组密文C2
  4. 之后的数据以此类推,得到Cn
  5. 按顺序连为C1C2C3......Cn即为加密结果。

解密是加密的逆过程,步骤如下:

  1. 首先将数据按照8个字节一组进行分组得到C1C2C3......Cn
  2. 将第一组数据进行解密后与初始化向量I进行异或得到第一组明文D1(注意:一定是先解密再异或)
  3. 将第二组数据C2进行解密后与第一组密文数据进行异或得到第二组数据D2
  4. 之后依此类推,得到Dn
  5. 按顺序连为D1D2D3......Dn即为解密结果。
    这里注意一点,解密的结果并不一定是我们原来的加密数据,可能还含有你补得位,一定要把补位去掉才是你的原来的数据。

特点:

  1. 不容易主动攻击,安全性好于ECB,适合传输长度长的报文,是SSL、IPSec的标准。每个密文块依赖于所有的信息块,明文消息中一个改变会影响所有密文块
  2. 发送方和接收方都需要知道初始化向量
  3. 加密过程是串行的,无法被并行化(在解密时,从两个邻接的密文块中即可得到一个平文块。因此,解密过程可以被并行化)。

一个一层套一层的串行结构。

image

  • 密码反馈CFB
    密文反馈(CFB,Cipher feedback)模式类似于CBC,可以将块密码变为自同步的流密码;工作过程亦非常相似,CFB的解密过程几乎就是颠倒的CBC的加密过程:
    需要使用一个与块的大小相同的移位寄存器,并用IV将寄存器初始化。然后,将寄存器内容使用块密码加密,然后将结果的最高x位与平文的x进行异或,以产生密文的x位。下一步将生成的x位密文移入寄存器中,并对下面的x位平文重复这一过程。解密过程与加密过程相似,以IV开始,对寄存器加密,将结果的高x与密文异或,产生x位平文,再将密文的下面x位移入寄存器。
    与CBC相似,平文的改变会影响接下来所有的密文,因此加密过程不能并行化;而同样的,与CBC类似,解密过程是可以并行化的。

和密码分组链接CBC非常像,明显的区别在于异或和加密的顺序、明文只参与最后的异或。

image

  • 输出反馈OFB
    输出反馈模式(Output feedback, OFB)可以将块密码变成同步的流密码。它产生密钥流的块,然后将其与平文块进行异或,得到密文。与其它流密码一样,密文中一个位的翻转会使平文中同样位置的位也产生翻转。这种特性使得许多错误校正码,例如奇偶校验位,即使在加密前计算而在加密后进行校验也可以得出正确结果。
    每个使用OFB的输出块与其前面所有的输出块相关,因此不能并行化处理。然而,由于平文和密文只在最终的异或过程中使用,因此可以事先对IV进行加密,最后并行的将平文或密文进行并行的异或处理。
    可以利用输入全0的CBC模式产生OFB模式的密钥流。这种方法十分实用,因为可以利用快速的CBC硬件实现来加速OFB模式的加密过程。

和密文反馈CFB很像,同样明文只参与最后的异或。区别在于CFB将每次加密并异或后的密文用于下一次加密的开始,而OFB将加密后的输出结果直接用于下一次加密的开始,而密文在异或之后生成。

image

  • 计数器模式CTR
    将密文反馈CFB中的输入改为计数器Counter且每组加密之间不产生链接。
    image

双密钥的三重DES

image

DES算法的差分分析

差分分析方法是一种选择明文攻击。该方法的基本思想是:通过分析一堆特选的明文对的差相应密文对的差的影响来提取密钥信息。这种攻击方法主要适用于攻击迭代密码

可以参考:DES算法实现+差分分析和线性分析代码实现

SPN结构和AES算法

  • 加密、解密相似但不对称
    image

注意起始要先进行一次轮密钥加,最后一轮加密没有列混淆。
image
256位密钥时需要有两次\(g\)变换(每128位需要一次\(g\)变换)

AES算法的安全性

  • 没有发现弱密钥或补密钥
  • 能有效抵抗目前已知的攻击算法:线性攻击、差分攻击

推荐阅读