【密码学】分组密码算法的工作模式(6)——计数器工作模式

本文详细介绍了CTR(计数器)工作模式,包括其变量定义、加密和解密过程,以及该模式的特性。在加密过程中,通过分组密码算法对计数序列进行加密,然后与明文异或得到密文;解密过程则相反,使用相同的计数序列和密钥进行解密。CTR模式允许并行处理,不依赖明文生成密钥流,适用于处理任意长度的明文,并具有直接错误传播的特性。此外,文章还提供了CTR模式加密和解密的实例,进一步阐明了工作原理。
摘要由CSDN通过智能技术生成

9 计数器工作模式

9.1 变量定义

CTR工作模式采用以下变量。
a)输入变量:
      1) q q q个明文分组 P 1 , P 2 , . . . , P q P_1,P_2,...,P_q P1,P2,...,Pq所组成的序列(其中 P 1 , P 2 , . . . , P q − 1 P_1,P_2,...,P_{q-1} P1,P2,...,Pq1都为 n n n比特, P q P_q Pq d d d比特且 0 < d ≤ n 0 < d \le n 0<dn);
      2)密钥 K K K,需要加解密操作方约定一致,长度由分组密码算法 E E E决定;
      3) q q q个计数序列 T 1 , T 2 , . . . , T q T_1,T_2,...,T_q T1,T2,...,Tq,需要加解密操作方约定一致,每个都为 n n n比特。
b)中间变量:
      1) q q q个密码输出变量 Y 1 , Y 2 , . . . , Y q Y_1,Y_2,...,Y_q Y1,Y2,...,Yq所组成的序列,每个变量都为 n n n比特;
      2)临时变量 Z Z Z,长度为 d d d比特。
c)输出变量:
       q q q个密文分组 C 1 , C 2 , . . . , C q C_1,C_2,...,C_q C1,C2,...,Cq所组成的序列(其中 C 1 , C 2 , . . . , C q − 1 C_1,C_2,...,C_{q-1} C1,C2,...,Cq1都为 n n n比特, C q C_q Cq d d d比特且 0 < d ≤ n 0 < d \le n 0<dn)。

9.2 CTR的加密方式描述

加密运算按照四个步骤进行:
a)加密计数序列: Y i = E k ( T i ) i = 1 , 2 , . . . , q Y_i=E_k(T_i) \quad i=1,2,...,q Yi=Ek(Ti)i=1,2,...,q
b)加密前 q − 1 q-1 q1个明文分组: C i = P i ⊕ Y i i = 1 , 2 , . . . , q − 1 C_i=P_i \oplus Y_i \quad i=1,2,...,q-1 Ci=PiYii=1,2,...,q1
c)选择 Y q Y_q Yq左侧的 d d d比特: Z = d ∼ Y q Z=d \sim Y_q Z=dYq
d)加密最后一个明文分组: C q = P q ⊕ Z C_q=P_q \oplus Z Cq=PqZ
此过程如下图所示。
在这里插入图片描述

9.3 CTR的加密方式示例

本示例使用的分组密码是GB/T 32907——2016中规定的SM4算法。所有变量采用“左高右低”的方式标记,即变量最左侧为其最高位。
此例所选的初始计数器为(十六进制)F0F1F2F3 F4F5F6F7 F8F9FAFB FCFDFEFF。
密钥密钥为(十六进制):2B7E1516 28AED2A6 ABF71588 09CF4F3C。
明文是(十六进制):6BC1BEE2 2E409F96 E93D7E11 7393172A
                                    AE2D8A57 1E03AC9C 9EB76FAC 45AF8E51
                                    30C81C46 A35CE411 E5FBC119 1A0A52EF
                                    F69F2445 DF4F9B17 AD2B417B E66C3710。


i = 1 i=1 i=1时:
T 1 = T_1= T1= F0F1F2F3 F4F5F6F7 F8F9FAFB FCFDFEFF
Y 1 = E k ( T 1 ) = Y_1=E_k(T_1)= Y1=Ek(T1)= 7F6FF490 973A0C58 FB2BB2C8 EB7066EB
C 1 = P 1 ⊕ Y 1 = C_1=P_1 \oplus Y_1= C1=P1Y1= (6BC1BEE2 2E409F96 E93D7E11 7393172A) ⊕ \oplus (7F6FF490 973A0C58 FB2BB2C8 EB7066EB) = = = 14AE4A72 B97A93CE 1216CCD9 98E371C1


i = 2 i=2 i=2时:
T 2 = T 1 + 1 = T_2=T_1+1= T2=T1+1= F0F1F2F3 F4F5F6F7 F8F9FAFB FCFDFF00
Y 2 = E k ( T 2 ) = Y_2=E_k(T_2)= Y2=Ek(T2)= CEDA65DC 7D4711F1 3F2E4AA9 A053AFCA
C 2 = P 2 ⊕ Y 2 = C_2=P_2 \oplus Y_2= C2=P2Y2= (AE2D8A57 1E03AC9C 9EB76FAC 45AF8E51) ⊕ \oplus (CEDA65DC 7D4711F1 3F2E4AA9 A053AFCA) = = = 60F7EF8B 6344BD6D A1992505 E5FC219B


i = 3 i=3 i=3时:
T 3 = T 2 + 1 = T_3=T_2+1= T3=T2+1= F0F1F2F3 F4F5F6F7 F8F9FAFB FCFDFF01
Y 3 = E k ( T 3 ) = Y_3=E_k(T_3)= Y3=Ek(T3)= 3B384BBE CF019101 D9F48748 8675E008
C 3 = P 3 ⊕ Y 3 = C_3=P_3 \oplus Y_3= C3=P3Y3= (30C81C46 A35CE411 E5FBC119 1A0A52EF) ⊕ \oplus (3B384BBE CF019101 D9F48748 8675E008) = = = 0BF057F8 6C5D7510 3C0F4651 9C7FB2E7


i = 4 i=4 i=4时:
T 4 = T 3 + 1 = T_4=T_3+1= T4=T3+1= F0F1F2F3 F4F5F6F7 F8F9FAFB FCFDFF02
Y 4 = E k ( T 4 ) = Y_4=E_k(T_4)= Y4=Ek(T4)= DFB72146 85940187 41C45528 BFBBF81E
Z = d ∼ Y 4 = Z=d \sim Y_4= Z=dY4= DFB72146 85940187 41C45528 BFBBF81E
C 4 = P 4 ⊕ Z = C_4=P_4 \oplus Z= C4=P4Z= (F69F2445 DF4F9B17 AD2B417B E66C3710) ⊕ \oplus (DFB72146 85940187 41C45528 BFBBF81E) = = = 29280503 5ADB9A90 ECEF1453 59D7CF0E


在这里插入图片描述

9.4 CTR的解密方式描述

解密运算按照以下四个步骤进行:
a)加密计数序列: Y i = E k ( T i ) i = 1 , 2 , . . . , q Y_i=E_k(T_i) \quad i=1,2,...,q Yi=Ek(Ti)i=1,2,...,q
b)解密前 q − 1 q-1 q1个密文分组: P i = C i ⊕ Y i i = 1 , 2 , . . . , q − 1 P_i=C_i \oplus Y_i \quad i=1,2,...,q-1 Pi=CiYii=1,2,...,q1
c)选择 Y q Y_q Yq左侧的 d d d比特: Z = d ∼ Y q Z=d \sim Y_q Z=dYq
d)解密最后一个密文分组: P q = C q ⊕ Z P_q=C_q \oplus Z Pq=CqZ
此过程如下图所示。
在这里插入图片描述

9.5 CTR的解密方式示例

本示例使用的分组密码是GB/T 32907——2016中规定的SM4算法。所有变量采用“左高右低”的方式标记,即变量最左侧为其最高位。
此例所选的初始计数器为(十六进制)F0F1F2F3 F4F5F6F7 F8F9FAFB FCFDFEFF。
密钥密钥为(十六进制):2B7E1516 28AED2A6 ABF71588 09CF4F3C。
密文是(十六进制):14AE4A72 B97A93CE 1216CCD9 98E371C1
                                    60F7EF8B 6344BD6D A1992505 E5FC219B
                                    0BF057F8 6C5D7510 3C0F4651 9C7FB2E7
                                    29280503 5ADB9A90 ECEF1453 59D7CF0E。


i = 1 i=1 i=1时:
T 1 = T_1= T1= F0F1F2F3 F4F5F6F7 F8F9FAFB FCFDFEFF
Y 1 = E k ( T 1 ) = Y_1=E_k(T_1)= Y1=Ek(T1)= 7F6FF490 973A0C58 FB2BB2C8 EB7066EB
P 1 = C 1 ⊕ Y 1 = P_1=C_1 \oplus Y_1= P1=C1Y1= (14AE4A72 B97A93CE 1216CCD9 98E371C1) ⊕ \oplus (7F6FF490 973A0C58 FB2BB2C8 EB7066EB) = = = 6BC1BEE2 2E409F96 E93D7E11 7393172A


i = 2 i=2 i=2时:
T 2 = T 1 + 1 = T_2=T_1+1= T2=T1+1= F0F1F2F3 F4F5F6F7 F8F9FAFB FCFDFF00
Y 2 = E k ( T 2 ) = Y_2=E_k(T_2)= Y2=Ek(T2)= CEDA65DC 7D4711F1 3F2E4AA9 A053AFCA
P 2 = C 2 ⊕ Y 2 = P_2=C_2 \oplus Y_2= P2=C2Y2= (60F7EF8B 6344BD6D A1992505 E5FC219B) ⊕ \oplus (CEDA65DC 7D4711F1 3F2E4AA9 A053AFCA) = = = AE2D8A57 1E03AC9C 9EB76FAC 45AF8E51


i = 3 i=3 i=3时:
T 3 = T 2 + 1 = T_3=T_2+1= T3=T2+1= F0F1F2F3 F4F5F6F7 F8F9FAFB FCFDFF01
Y 3 = E k ( T 3 ) = Y_3=E_k(T_3)= Y3=Ek(T3)= 3B384BBE CF019101 D9F48748 8675E008
P 3 = C 3 ⊕ Y 3 = P_3=C_3 \oplus Y_3= P3=C3Y3= (0BF057F8 6C5D7510 3C0F4651 9C7FB2E7) ⊕ \oplus (3B384BBE CF019101 D9F48748 8675E008) = = = 30C81C46 A35CE411 E5FBC119 1A0A52EF


i = 4 i=4 i=4时:
T 4 = T 3 + 1 = T_4=T_3+1= T4=T3+1= F0F1F2F3 F4F5F6F7 F8F9FAFB FCFDFF02
Y 4 = E k ( T 4 ) = Y_4=E_k(T_4)= Y4=Ek(T4)= DFB72146 85940187 41C45528 BFBBF81E
Z = d ∼ Y 4 = Z=d \sim Y_4= Z=dY4= DFB72146 85940187 41C45528 BFBBF81E
P 4 = C 4 ⊕ Z = P_4=C_4 \oplus Z= P4=C4Z= (29280503 5ADB9A90 ECEF1453 59D7CF0E) ⊕ \oplus (DFB72146 85940187 41C45528 BFBBF81E) = = = F69F2445 DF4F9B17 AD2B417B E66C3710


在这里插入图片描述

9.6 计数器工作模式的性质

9.6.1 场景

计数器模式下的分组密码算法使用序列号作为算法的输入。不是用加密算法的输出填充寄存器,而是将一个计数器输入到寄存器中。每一分组完成加密后,计数器都要增加某个常数,典型值是1。没有什么是专供计数器用的,它不必根据可能的输入计数。可以将随机序列发生器作为分组算法的输入,而不必考虑其密码上是否安全。

9.6.2 性质

CTR的性质有:
a)加密运算可并行处理,吞吐量仅受可使用并行数量的限制;
b)使用不同的计数器生成不同的密钥流,可防止同一明文加密成同一密文;
c)CTR工作模式的加密和解密过程都使用分组密码的加密运算;
d)CTR工作模式不依赖明文生成用于对明文进行异或运算的密钥流。

9.6.3 填充明文

计数器模式不需要填充明文,可以处理任意长度的明文。

9.6.4 差错扩散

CTR模式不在生成的明文输出中扩散密文差错。密文中每一差错比特只会引起解密后的明文中出现一个差错比特。

9.6.5 同步

CTR工作模式不是自动同步的。如果加密和解密两个操作不同步,系统需要重新初始化。这种同步丢失可能由于插入或丢失任意数目的密文所引起。
每次重新初始化应使用一个新的计数器值,它不同于与同一个密钥一起使用的以前的计数器值。其原因是对于相同的参数,每次都要生成相同的密钥流。这将易于受到“已知明文攻击”。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值