分组密码

密码算法可以分为分组密码和流密码两种

  • 分组密码(block cipher)是每次只能处理特定长度的一块数据的一类密码算法,这里的“一块”就称为分组(block)。一个分组的比特数就称为分组长度(block lenght)。

    例如 DES和3DES的分组长度都是64比特。AES的分组长度为128比特。

  • 流密码(stream cipher)是对数据流进行连续处理的一类密码算法。流密码中一般以1比特、8比特、或32比特等为单位进行加密和解密。

分组密码处理完一个分组就结束了,因此不需要通过内部状态来记录加密的进度;相对地,流密码是对一串数据进行连续处理,因此需要保持内部状态。

模式

分组密码算法只能加密固定长度的分组,但是我们需要加密的明文长度可能会超过分组密码的分组长度,这时就需要对分组密码算法进行迭代,以便将一段很长的明文全部加密。而迭代的方法就称为分组密码的模式(mode)。

  • ECB模式:Electronic CodeBook mode(电子密码模式)
  • CBC模式:Cipher Block Chaining mode(密码分组链接模式)
  • CFB模式:Cipher FeedBack mode(密文反馈模式)
  • OFB模式:Output FeedBack mode(输出反馈模式)
  • CTR模式:CounTeR mode(计数器模式)

ECB模式

在ECB模式中,将明文分组加密之后的结果直接成为密文分组。当最后一个明文分组的内容小于分组长度时,需要用一些特定的数据进行填充(padding)。

明文分组:是指分组密码算法中作为加密对象的明文。
密文分组:是指使用分组密码算法中将明文分组加密之后所生成的密文。

image

使用 ECB 模式加密时,相同的明文分组会转换为相同的密文分组,也就是说,我们可以将其理解为是一个巨大的“明文分组->密文分组”的对应表,因此 ECB 模式也称为 电子密码本模式

ECB模式的特点

ECB模式是所有模式中最简单的一种。ECB的明文分组与密文分组是一一对应的关系,因此,如果明文中存在多个相同的明文分组,则这些明文分组最终都会将被转换为相同的密文分组。这样一来,只要观察一下密文,就可以知道明文中存在怎样的重复组合,并可以以此为线索来破译密码,因此ECB模式是存在风险的。

对ECB模式的攻击

假如存在主动攻击者Mallory,它能够改变密文分组的顺序。当接收者对密文进行解密时,由于密文分组的顺序被改变了,因此相应的明文分组的顺序也会改变。也就是说,攻击者Mallory无需破译密码就能够操纵明文。

列举一个银行转账的简单例子,假设某银行转账数据由以下3个分组构成。

分组1 = 付款人的银行账号
分组2 = 收款人的银行账号
分组3 = 转转金额

我们可以制作一个“从 A 账号 向 B账号转账1000元”的数据,用16进制数据表示如下:

明文分组1 = 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 (付款人:A)

明文分组2 = 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30  (收款人: B)

明文分组3 = 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40  (转账金额: 1000)

经过 ECB模式进行加密,

密文分组1 = 1A 2C 1A 2C 1A 2C 1A 2C 1A 2C 1A 2C 1A 2C 1A 2C (付款人:*)

密文分组2 = 2D 3F 2D 3F 2D 3F 2D 3F 2D 3F 2D 3F 2D 3F 2D 3F (收款人: *)

密文分组3 = 4D 5E 4D 5E 4D 5E 4D 5E 4D 5E 4D 5E 4D 5E 4D 5E (转账金额: **)

如果攻击者 Mallory 将密文分组1 和 2 内容对调,

密文分组1 = 2D 3F 2D 3F 2D 3F 2D 3F 2D 3F 2D 3F 2D 3F 2D 3F (付款人: *)

密文分组2 = 1A 2C 1A 2C 1A 2C 1A 2C 1A 2C 1A 2C 1A 2C 1A 2C (收款人:*)

密文分组3 = 4D 5E 4D 5E 4D 5E 4D 5E 4D 5E 4D 5E 4D 5E 4D 5E (转账金额: **)

那请求内容从A向B转账1000,变成了B向A转账1000。我们可以看出ECB模式的缺点是可以在不破译密文的情况下操纵明文。

CBC模式

CBC模式,全称Cipher Block Chaining模式,译为密文分组链接模式,即加密算法的输入是上一个密文分组和下一个明文分组的异或。因为是将上一个密文分组和下一个明文分组的内容混合加密,因此可以避免ECB模式的缺陷。当加密第一个明文分组时,由于不存在上一个密文分组,因此需要准备与分组等长的初始化向量IV,来代替上一个密文分组。

image

初始化向量:当加密第一个明文分组时,由于不存在“前一个密文分组”,因此需要事先准备一个长度为一个分组的比特序列来代替“前一个密文分组”,这个比特序列称为初始化向量,通常缩写为IV。

func NewCBCEncrypter(b Block, iv []byte) BlockMode

当我们使用 CBC模式的时候,需要传入 iv(初始化向量)

CBC模式的特点

  • 明文分组在加密之前一定会与“前一个密文分组”进行XOR运算,因此即便明文分组1和2的值是相等的,密文分组1和2的值也不一定是相等的。这样ECB模式的缺陷在CBC模式中就不存在了。

  • 在CBC模式中,无法单独对一个中间的明文分组进行加密。例如,如果要生成密文分组3,则至少需要凑齐明文分组1、2、3才行。

  • 如果密文分组中有一些比特缺失了,即便只缺失了1比特,那么缺失比特的位置之后的密文分组也就全部无法解密了。

对CBC模式的攻击

假设主动攻击者Mallory的目的是通过修改密文来操纵解密后的明文。如果Mallory能够对初始化向量中任意比特进行反转,则解密后得到的明文分组中相应的比特也会被反转。

image

CFB模式

CFB模式,全称Cipher FeedBack模式,译为密文反馈模式,即上一个密文分组作为加密算法的输入,输出与明文异或作为下一个分组的密文。在CFB模式中,明文分组和密文分组之间只有一次异或。

image

CFB模式与一次性密码本相似,都是通过将明文与随机比特序列进行异或运算来生成密文。但由于CFB模式中密码算法的输出是通过计算得到的,并非真正的随机数,因此不具备一次性密码本那样理论上不可破译的性质。CFB模式可以看做使用分组方式实现流密码的方式。

对CFB模式的攻击

对CFB模式可以实施 重放攻击(replay attack)

有一天 A 向 B 发送了一条消息,这条消息由4个密文分组组成,攻击者将后3个密文分组保存下来,第二天,A又向 B 发送内容不同的4个密文分组,攻击者将后3个密文分组进行替换。解密的时候就会发现第一个可以解密正确,第2个会出现错误,而第3个和第4个则变成攻击者替换的内容。

image

OFB模式

OFB模式,全称Output Feedback模式,译为输出反馈模式。OFB模式与CFB模式类似,只是加密算法的输入是上一次加密的输出。

OFB模式不是通过密码算法对明文直接进行加密的,而是通过将“明文分组”和“密码算法的输出”进行XOR来产生“密文分组”的。

OFB模式加密和处理解密逻辑相同,明文与密钥流异或生成密文,密文与密钥流异或生成明文。
  
image
  
image

CTR模式

CTR模式,全称Counter模式,译为计数器模式。CTR模式中,每个分组对应一个逐次累加的计数器,并通过对计数器进行加密来生成密钥流。也即最终的密文分组是通过将计数器加密得到的比特序列,与明文分组进行异或运算得到的。

image

CTR模式的特点

  • CTR模式的加密和解密使用了完全相同的结构,因此在程序实现上比较容易。这一特点和同为流密码的OFB模式是一样的。

  • CTR模式中可以以任意顺序对分组进行加密和解密,因此在加密和解密时需要用到的“计数器”的值可以由nonce和分组序号直接计算出来。能够以任意顺序处理分组,就以为着能够实现并行计算。在支持并行计算的系统中,CTR模式的速度是非常快的。

错误与机密性

  • 假设CTR模式的密文分组中有一个比特被反转了,则解密后明文分组中仅有与之对应的比特会被反转,这一错误不会放大,这一弱点和OFB模式是相同的。

  • 在OFB模式中,如果对密钥流的一个分组进行加密后其结果碰巧和加密前是相同的,那么这一分组之后的密钥流就会变成同一值的不断反复。在CTR模式中就不存在这一问题。

分组密码模式比较

模式优点缺点备注
ECB模式简单
快速
支持并行运算
明文中的重复排列反映在密文中
通过删除、替换密文分组可以对明文进行操作
对包含某些比特错误的密文进行解密时对应的分组会出错
不能抵御重放攻击
不应使用
CBC模式明文的重复排列不会反映在密文中
支持并行运算(仅解密)
能够解密任意密文分组
对包含某些错误比特的密文进行解密时,第一个分组的全部比特以及后一个分组的相应比特会出错
加密不支持并行运算
CRYPRTREC推荐 《应用密码学》推荐
CFB模式不需要填充
支持并行计算(仅解密)
能够解密任意密文分组
加密不支持并行计算
对包含某些错误比特的密文进行解密时,第一个分组的全部比特以及后一个分组的相应比特会出错
不能抵御重放攻击
CRYPRTREC推荐
OFB模式不需要填充
可事先进行加密、解密的准备
加密、解密使用相同结构
对包含某些错误比特的密文进行解密时,只有明文中相对应的比特会出错
不支持并行计算
主动攻击者反转密文分组中的某些比特时,明文分组中相对应的比特也会被反转
CRYPRTREC推荐
CTR模式不需要填充
可事先进行加密、解密的准备
加密、解密使用相同结构
对包含某些错误比特的密文进行解密时,只有明文中相对应的比特会出错
支持并行计算(加密、解密)
主动攻击者反转密文分组中的某些比特时,明文分组中相对应的比特也会被反转CRYPRTREC推荐 《应用密码学》推荐
  • 8
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值