密码学:流加密法与块加密法

参考

对称密钥算法与AES-----算法模式
【密码学06】数据块填充模式
图解DES、3DES和AES加密算法

基础

现代加密法与经典加密法最主要的不同之处在于其主要是基于计算机特征(二进制)而非语言结构(字母)

流加密法

算法描述

一个简单的流加密法需要一个“随机”的二进制位流作为密钥,将明文与此密钥流进行XOR逻辑运算,就可生成密文,密文再与密钥进行XOR逻辑运算,就可还原成明文。

主要的一个问题是密钥的设计,如果密钥流是重复的位序列,则其容易被记住但不安全,如果密钥流与明文一样长,则很难被记住。

线性反馈移位寄存器是比较常用的生成同步密钥流的硬件设备。

破解

  • 插入攻击法:要求能在明文流中插入一个位,并截获密文流。
  • 位串匹配攻击法。
  • 单词匹配攻击法。

块加密法

算法描述

块加密法每次作用于固定大小的位块,它对每个块执行相同的变换,从而生成相等个数的密文块。

尽管听起来,按这样的定义,Vigenere加密法也属于块加密法的一种,如下:
在这里插入图片描述
然而实际并不是这样的,块加密法最重要的特征是:密文块中的所有位与明文块中的所有位都有关,而Vigenere加密法显然不满足此特征,明文块中单个字符的改变只会导致密文块中单个字符的改变。

模式

(1)电子编码簿模式:电子编码簿模式是最简单的操作模式,将明文消息分成64位块,然后单独加密每个块。消息中的所有块用相同密钥加密,其算法的加密过程如下图所示:
在这里插入图片描述

接收方将收到的数据分成64位块,利用与加密时相同的密钥解密每个块得到相应的明文块,其解密的步骤如下图所示:
在这里插入图片描述

电子编码簿模式中用一个密钥加密消息的所有块,如果原消息中重复明文块,则消息中相应的密文块也会重复。所以,电子编码簿只适合加密小消息,因此重复相同明文块的范围很小。

(2)CBC模式:选取一个初始向量 IV(图中为0向量),第一个明文块与初始向量做异或运算,然后来自上一块的密文依次与当前明文做异或运算生成密文。
在这里插入图片描述
(3)输出-反馈模式
(4)计数器模式
(5)OCB模式

填充问题

由于块加密法是作用于固定大小的块的,那么当明文的大小不是块大小的整数倍时,就需要进行填充。填充的要求是可逆:即加密时能添加填充字符,解密时能检测出填充字符。

以下是常见的四种填充方式:

  1. Zeros填充:全部填充为0的字节,结果如下:
    F1 F2 F3 F4 F5 F6 F7 F8 //第一块
    F9 00 00 00 00 00 00 00 //第二块

  2. X923 填充: 填充为0的字节序列,最后一个字节记录填充的总字节数,结果如下:
    F1 F2 F3 F4 F5 F6 F7 F8 //第一块
    F9 00 00 00 00 00 00 07 //第二块

  3. PKCS7 填充: 每个填充的字节都记录了填充的总字节数,结果如下:
    F1 F2 F3 F4 F5 F6 F7 F8 //第一块
    F9 07 07 07 07 07 07 07 //第二块

  4. ISO10126 填充: 填充随机字节序列,最后一个字节记录填充的总字节数,结果如下:
    F1 F2 F3 F4 F5 F6 F7 F8 //第一块
    F9 7D 2A 75 EF F8 EF 07 //第二块.

例子

下文提及的DES、3DES、AES均属于块加密法。

DES

简介

DES即数据加密标准,是一种将 64bit 的明文加密为 64bit 密文的算法,输入的密钥长度为 56bit,密钥中每隔 7bit 设置一位奇偶校验位,因此在算法中的密钥视为 64bit。

DES是分块加密法的一种,以 64bit 的明文为一个块进行加密,如果需要加密的数据大于 64bit,那么就需要对DES加密进行迭代,迭代的具体方式就是块加密法的五种“模式”,即 ECB、CBC、CFB、OFB、CTR。

Feistel结构

DES的基本结构,也被称为Feistel结构,在很多密码算法中都有运用。Feistel结构的“一轮”如下:
在这里插入图片描述

  1. 64bit 的明文被分为左右两个部分。
  2. 由 64bit 密钥产生 48bit 子密钥,每一轮都不同。
  3. 右侧 32bit 明文与子密钥输入到轮函数中,输出结果与左侧 32bit 明文异或,得到左侧 32bit 密文,右侧 32bit 明文。

Feistel结构的3轮如下,每一轮结束后要对调左右两部分:
在这里插入图片描述
DES加密包括了16轮。

子密钥产生算法

在这里插入图片描述
64bit 密钥穿过 PC-1 块后,去除了添加的奇偶校验位,然后按一定的顺序分为左右两半,每部分都是28位,然后根据DES轮数的不同,分别进行不同位数的左移,左移后穿过PC-2,丢掉8位,产生一轮中用到的48位密钥。

轮函数

轮函数需要用到扩充盒(E盒)、替换盒(S盒)、置换盒(P盒),流程如下:
在这里插入图片描述

3DES

简介

3DES是DES的强化版本,是使用三个密钥依次进行加密-解密-加密的过程,如下:
在这里插入图片描述
之所以中间有一次解密算法,是为了让3DES能兼容DES:三个密钥相同时,加密-解密-加密就相当于只做了一次DES加密,因此用DES加密的密文也能使用3DES来解密。

AES

简介

随着新的密码分析技术的开发,DES变得不安全了,于是美国国家标准与技术局要求开发新的加密标准,最终选择了Rijndael算法作为新的加密标准,即AES。

Rijndael结构

Rijndael是一种灵活的算法,其块的大小可变(128/192/256位),密钥大小可变(128/192/256位),迭代次数也可变(10/12/14次),常用的有三个版本,分别被称为 AES-128,AES-192,AES-256。

Rijndael结构如下:
在这里插入图片描述
以AES-128为例,其输入的明文和密钥长度都是16字节:

  1. 第一轮开始前,先使用一次轮密钥加,即子密钥与明文块做一次异或,产生16B数据,然后开始进入“轮”。

  2. 字节替换SubBytes:16B数据穿过S盒后,每个字节的值都被替换为别的字节的值。在这里插入图片描述

  3. 行移位ShiftRow:4字节为一行,各行按一定的规则循环左移。在这里插入图片描述

  4. 列混淆MixColumn:通过矩阵乘法实现。在这里插入图片描述

  5. 轮密钥加KeyAdd:上述操作后得到的输出(16字节)与轮密钥进行异或。在这里插入图片描述

  6. AES-128进行如上所述的10轮循环,最后一轮循环没有列混淆的操作。

子密钥产生算法

16字节的密钥先分为 4*4 的矩阵,然后每一列作为一个“字”,即wi,经过密钥编排函数,将4个字扩展到44个字,每4个字一组,共十一组。即在第一轮开始前、一到十轮每轮的末尾各使用一次。请添加图片描述

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值