【密码学】分组密码算法的工作模式(5)——输出反馈工作模式

本文深入解析了输出反馈(OFB)工作模式,详细阐述了OFB加密和解密的过程,通过示例展示了SM4算法在OFB模式下的应用。同时,讨论了OFB模式的性质,包括对相同明文加密产生相同密文、使用不同IV生成不同密钥流、加密解密均使用分组密码的加密运算等。此外,还提到了填充明文、差错控制、同步问题及其解决方案,强调了OFB模式的安全性和应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

8 输出反馈工作模式

8.1 变量定义

OFB工作模式采用以下变量。
a)输入变量:
      1) q q q个明文分组 P 1 , P 2 , . . . , P q P_1,P_2,...,P_q P1,P2,...,Pq所组成的序列,每个分组都为 j j j比特;
      2)密钥 K K K,需要加解密操作方约定一致,长度由分组密码算法 E E E决定;
      3)初始向量 I V IV IV,需要加解密操作方约定一致,长度为 n n n比特。
b)中间变量:
      1) q q q个密码输入变量 X 1 , X 2 , . . . , X q X_1,X_2,...,X_q X1,X2,...,Xq所组成的序列,每个变量都为 n n n比特;
      2) q q q个密码输出变量 Y 1 , Y 2 , . . . , Y q Y_1,Y_2,...,Y_q Y1,Y2,...,Yq所组成的序列,每个变量都为 n n n比特;
      3) q q q个临时变量 Z 1 , Z 2 , . . . , Z q Z_1,Z_2,...,Z_q Z1,Z2,...,Zq所组成的序列,每个变量都为 j j j比特。
c)输出变量:
q q q个密文分组 C 1 , C 2 , . . . , C q C_1,C_2,...,C_q C1,C2,...,Cq所组成的序列,每个分组都为 j j j比特。

8.2 OFB的加密方式描述

设置密码输入变量 X X X的初始向量: X 1 = I V X_1=IV X1=IV
加密运算按照如下四个步骤进行:
a)使用分组密码: Y i = E k ( X i ) Y_i=E_k(X_i) Yi=Ek(Xi)
b)选择左侧的 j j j比特: Z i = j ∼ Y i Z_i=j \sim Y_i Zi=jYi
c)生成密文分组: C i = P i ⊕ Z i C_i=P_i \oplus Z_i Ci=PiZi
d)反馈操作: X i + 1 = Y i X_{i+1}=Y_i Xi+1=Yi
i = 1 , 2 , . . . , q i=1,2,...,q i=1,2,...,q,重复上述步骤,最后一个循环结束于c)。此过程如下图所示。每次使用分组密码所生成的结果 Y i Y_i Yi被用来反馈并成为 X X X的下一个值,即 X i + 1 X_{i+1} Xi+1 Y i Y_i Yi的左侧 j j j比特用来加密明文分组。
在这里插入图片描述

8.3 OFB的加密方式示例

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


i = 1 i=1 i=1时:
X 1 = I V = X_1=IV= X1=IV= 00010203 04050607 08090A0B 0C0D0E0F
a) Y 1 = E k ( X 1 ) = Y_1=E_k(X_1)= Y1=Ek(X1)= D7B0B394 034794B0 DF20D63A 27C5496C
b) Z 1 = 128 ∼ Y 1 = Z_1=128 \sim Y_1= Z1=128Y1= D7B0B394 034794B0 DF20D63A 27C5496C
c) C 1 = P 1 ⊕ Z 1 = C_1=P_1 \oplus Z_1= C1=P1Z1= (6BC1BEE2 2E409F96 E93D7E11 7393172A) ⊕ \oplus (D7B0B394 034794B0 DF20D63A 27C5496C) = BC710D76 2D070B26 361DA82B 54565E46
d) X 2 = Y 1 = X_2=Y_1= X2=Y1= D7B0B394 034794B0 DF20D63A 27C5496C


i = 2 i=2 i=2时:
a) Y 2 = E k ( X 2 ) = Y_2=E_k(X_2)= Y2=Ek(X2)= A98D4C7F 2A77A64F BABA4C3D 604E9870
b) Z 2 = 128 ∼ Y 2 = Z_2=128 \sim Y_2= Z2=128Y2= A98D4C7F 2A77A64F BABA4C3D 604E9870
c) C 2 = P 2 ⊕ Z 2 = C_2=P_2 \oplus Z_2= C2=P2Z2= (AE2D8A57 1E03AC9C 9EB76FAC 45AF8E51) ⊕ \oplus (A98D4C7F 2A77A64F BABA4C3D 604E9870) = 07A0C628 34740AD3 240D2391 25E11621
d) X 3 = Y 2 = X_3=Y_2= X3=Y2= A98D4C7F 2A77A64F BABA4C3D 604E9870


i = 3 i=3 i=3时:
a) Y 3 = E k ( X 3 ) = Y_3=E_k(X_3)= Y3=Ek(X3)= E4BEAE5A 6AACAD40 158FDC37 E3EAC677
b) Z 3 = 128 ∼ Y 3 = Z_3=128 \sim Y_3= Z3=128Y3= E4BEAE5A 6AACAD40 158FDC37 E3EAC677
c) C 3 = P 3 ⊕ Z 3 = C_3=P_3 \oplus Z_3= C3=P3Z3= (30C81C46 A35CE411 E5FBC119 1A0A52EF) ⊕ \oplus (E4BEAE5A 6AACAD40 158FDC37 E3EAC677) = D476B21C C9F04951 F0741D2E F9E09498
d) X 4 = Y 3 = X_4=Y_3= X4=Y3= E4BEAE5A 6AACAD40 158FDC37 E3EAC677


i = 4 i=4 i=4时:
a) Y 4 = E k ( X 4 ) = Y_4=E_k(X_4)= Y4=Ek(X4)= E31BD851 F4BEA1B1 8B936EE6 9B6B5BDE
b) Z 4 = 128 ∼ Y 4 = Z_4=128 \sim Y_4= Z4=128Y4= E31BD851 F4BEA1B1 8B936EE6 9B6B5BDE
c) C 4 = P 4 ⊕ Z 4 = C_4=P_4 \oplus Z_4= C4=P4Z4= (F69F2445 DF4F9B17 AD2B417B E66C3710) ⊕ \oplus (E31BD851 F4BEA1B1 8B936EE6 9B6B5BDE) = 1584FC14 2BF13AA6 26B82F9D 7D076CCE


在这里插入图片描述

8.4 OFB的解密方式描述

设置密码输入变量 X X X的初始向量: X 1 = I V X_1=IV X1=IV
解密运算按照如下四个步骤进行:
a)使用分组密码: Y i = E k ( X i ) Y_i=E_k(X_i) Yi=Ek(Xi)
b)选择左侧的 j j j比特: Z i = j ∼ Y i Z_i=j \sim Y_i Zi=jYi
c)生成明文分组: P i = C i ⊕ Z i P_i=C_i \oplus Z_i Pi=CiZi
d)反馈操作: X i + 1 = Y i X_{i+1}=Y_i Xi+1=Yi
i = 1 , 2 , . . . , q i=1,2,...,q i=1,2,...,q,重复上述步骤,最后一个循环结束于c)。此过程图下图所示。解密过程与加密过程仅在步骤c)有不同,相应的变量值 X i X_i Xi Y i Y_i Yi是相同的。
在这里插入图片描述

8.5 OFB的解密方式示例

本示例使用的分组密码是GB/T 32907——2016中规定的SM4算法。所有变量采用“左高右低”的方式标记,即变量最左侧为其最高位。
此例所选的参数为: j = 128 j=128 j=128
密钥密钥为(十六进制):2B7E1516 28AED2A6 ABF71588 09CF4F3C。
初始向量为(十六进制):00010203 04050607 08090A0B 0C0D0E0F。
密文是(十六进制):BC710D76 2D070B26 361DA82B 54565E46
                                    07A0C628 34740AD3 240D2391 25E11621
                                    D476B21C C9F04951 F0741D2E F9E09498
                                    1584FC14 2BF13AA6 26B82F9D 7D076CCE。


i = 1 i=1 i=1时:
X 1 = I V = X_1=IV= X1=IV= 00010203 04050607 08090A0B 0C0D0E0F
a) Y 1 = E k ( X 1 ) = Y_1=E_k(X_1)= Y1=Ek(X1)= D7B0B394 034794B0 DF20D63A 27C5496C
b) Z 1 = 128 ∼ Y 1 = Z_1=128 \sim Y_1= Z1=128Y1= D7B0B394 034794B0 DF20D63A 27C5496C
c) P 1 = C 1 ⊕ Z 1 = P_1=C_1 \oplus Z_1= P1=C1Z1= (BC710D76 2D070B26 361DA82B 54565E46) ⊕ \oplus (D7B0B394 034794B0 DF20D63A 27C5496C) = 6BC1BEE2 2E409F96 E93D7E11 7393172A
d) X 2 = Y 1 = X_2=Y_1= X2=Y1= D7B0B394 034794B0 DF20D63A 27C5496C


i = 2 i=2 i=2时:
a) Y 2 = E k ( X 2 ) = Y_2=E_k(X_2)= Y2=Ek(X2)= A98D4C7F 2A77A64F BABA4C3D 604E9870
b) Z 2 = 128 ∼ Y 2 = Z_2=128 \sim Y_2= Z2=128Y2= A98D4C7F 2A77A64F BABA4C3D 604E9870
c) P 2 = C 2 ⊕ Z 2 = P_2=C_2 \oplus Z_2= P2=C2Z2= (07A0C628 34740AD3 240D2391 25E11621) ⊕ \oplus (A98D4C7F 2A77A64F BABA4C3D 604E9870) = AE2D8A57 1E03AC9C 9EB76FAC 45AF8E51
d) X 3 = Y 2 = X_3=Y_2= X3=Y2= A98D4C7F 2A77A64F BABA4C3D 604E9870


i = 3 i=3 i=3时:
a) Y 3 = E k ( X 3 ) = Y_3=E_k(X_3)= Y3=Ek(X3)= E4BEAE5A 6AACAD40 158FDC37 E3EAC677
b) Z 3 = 128 ∼ Y 3 = Z_3=128 \sim Y_3= Z3=128Y3= E4BEAE5A 6AACAD40 158FDC37 E3EAC677
c) P 3 = C 3 ⊕ Z 3 = P_3=C_3 \oplus Z_3= P3=C3Z3= (D476B21C C9F04951 F0741D2E F9E09498) ⊕ \oplus (E4BEAE5A 6AACAD40 158FDC37 E3EAC677) = 30C81C46 A35CE411 E5FBC119 1A0A52EF
d) X 4 = Y 3 = X_4=Y_3= X4=Y3= E4BEAE5A 6AACAD40 158FDC37 E3EAC677


i = 4 i=4 i=4时:
a) Y 4 = E k ( X 4 ) = Y_4=E_k(X_4)= Y4=Ek(X4)= E31BD851 F4BEA1B1 8B936EE6 9B6B5BDE
b) Z 4 = 128 ∼ Y 4 = Z_4=128 \sim Y_4= Z4=128Y4= E31BD851 F4BEA1B1 8B936EE6 9B6B5BDE
c) P 4 = C 4 ⊕ Z 4 = P_4=C_4 \oplus Z_4= P4=C4Z4= (1584FC14 2BF13AA6 26B82F9D 7D076CCE) ⊕ \oplus (E31BD851 F4BEA1B1 8B936EE6 9B6B5BDE) = F69F2445 DF4F9B17 AD2B417B E66C3710


在这里插入图片描述

8.6 输出反馈工作模式的性质

8.6.1 场景

只要使用同样的密钥和初始向量对相同的明文进行加密,OFB模式将生成相同的密文。此外,当使用相同的密钥和 I V IV IV时,OFB模式中将会生成相同的密钥流,因此,为了保密起见,对于一个给定的密钥,一个特定的 I V IV IV只能使用一次。

8.6.2 性质

OFB模式的性质有:
a)没有链接操作会使得OFB模式容易受到主动的攻击;
b)使用不同的 I V IV IV值生成不同的密钥流,可防止同一明文加密成同一密文;
c)OFB模式的加密和解密过程都使用分组密码的加密运算;
d)OFB模式不依赖明文来生成用于对明文进行异或运算的密钥流;
e)加解密操作方需要约定一致的参数 j j j,参数的取值可公开;
f)对于每个明文,选择一个较小的 j j j值将需要更多次的分组密码操作,从而引起更大的处理开销。

8.6.3 填充明文

只有长度为 j j j比特倍数的明文才能被加密。其他长度的明文需要填充至 j j j比特的整数倍。但是,经常选择 j j j的大小使得明文无需进行填充,例如对于明文的最后部分可以修改 j j j

8.6.4 差错控制

OFB模式中,密文中每一差错比特只会引起明文中同一位置出现一个差错比特,不影响明文其他位置。

8.6.5 同步

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值