当前位置: 代码迷 >> 综合 >> 分组密码算法CBC密文窃取模式(Ciphertext Stealing for CBC Mode)研究
  详细解决方案

分组密码算法CBC密文窃取模式(Ciphertext Stealing for CBC Mode)研究

热度:94   发布时间:2024-01-12 01:57:57.0

参考文档

NIST SP 800-38A Addendum. Addendum to NIST Special Publication 800-38A, Recommendation for Block Cipher Modes of Operation: Three Variants of Ciphertext Stealing for CBC Mode, October, 2010.

 

0. 简介

有三种密文偷窃模式

  1. CBC-CS1:最末两个块做挪动和特殊处理。当最末分组完整时,等价于CBC。
  2. CBC-CS2:当最末分组不完整时,把CBC-CS1的最末两个块交换位置;否则,保持CBC-CS1处理结果。
  3. CBC-CS3:无条件将CBC-CS1的最末两个块交换位置。

1. CBC-CS1

CBC-CS1-Encrypt

输入:明文P, 长为 len(P); 初始化向量IV; 密钥K. (分组大小为b

输出:密文C, 长度 len(C) = len(P).

步骤:

步骤1. 分块数,

步骤2. d为最末一个分组的大小,1≤db

len(p) mod b > 0时,d = len(p) mod b,当len(p) mod b = 0时,d = b

步骤3. 明文划分P = P1 || P2 || ... || Pn-1 || Pn*,其中Pn*可能是完整分组(此时最末一个分组的大小d = b),也可能是不完整分组(此时d = len(p) mod b)。

步骤4. PADb-d比特的0,Pn= Pn* || PAD。如Pn*是完整分组,则PAD为空串。

步骤5. CBC加密:

C1 || C2 || ... || Cn-1 || Cn = CBC-ENC(K, IV, P1 || P2 || ... || Pn-1 || Pn)

步骤6. Cn-1* = MSBd(Cn-1)

步骤7. 返回C1 || C2 || ... || Cn-1* || Cn

当最末一个分组为完整分组时,CBC-CS1即为CBC模式。

 

2. CBC-CS2

上接CBC-CS1。

步骤8:判断最末一个分组是不是完整分组:

  • 8.1 是完整分组,则不做改动,直接返回CBC-CS1的结果;
  • 8.2 是不完整分组,则交换CBC-CS1密文最后两个分组的顺序后输出,即将C1 || C2 || ... || Cn-1* || Cn修改为C1 || C2 || ... || Cn || Cn-1*后输出。

3. CBC-CS3

上接CBC-CS1。

步骤8:强制交换CBC-CS1密文最后两个分组的顺序后输出,即将C1 || C2 || ... || Cn-1* || Cn修改为C1 || C2 || ... || Cn || Cn-1*后输出。(无论最末分组是否完整)

 

 

 

  相关解决方案