Skip to content
Go back

分组加密算法

Edit page

分组加密算法

流密码 vs 分组密码

流密码一次加密一位或者一个字节

分组密码需要共享一对对称密钥,一次加密一个明文分组得到与明文等长的密文分组;

流密码面对的问题:

  1. 通信双方的密钥流必须以某种安全、独立的方式共享。如果需要通信的数据流量很大,那么就难以保证安全;
  2. 如果使用交换密钥 KK ,然后使用密钥 KK 和相应的密钥生成程序(位流发生器)生成密码学意义上可用的、强壮的密钥流。则可以解决以上的问题。

picture 1

Feistel 密码结构的设计动机(这部分有问题,待修改)

picture 2

  1. 分组密码需要同时满足加密和解密的需求,所以明文密文之间的映射必须可逆。意味着对 nn 位长的分组进行加密时,有 2n2^n 种组合,我们的加解密算法需要满足有 2n2^n 大的密文空间;
  2. nn 需要充分大,并且允许明文和密文之间采用任意的可逆映射(变换)将明文的特征掩盖,否则就和传统的代替密码一样容易被统计方法破解;

Feistel 密码

混淆和扩散

混淆和扩散是区别于代替和置换的概念。

DES

详见 DES 文章

雪崩效应:指的是明文微小的改变将引起密文的很多位改变,这有助于阻止攻击者猜测密钥或明文空间。

分组密码的工作模式

本质上,工作模式是用于增强密码算法或者使算法适应具体应用的技术。

picture 3

电码本模式(ECB)

一次处理 bb 位明文,每次使用相同的密钥加密。

密码分组链接模式(CBC)

picture 4

C1=E(K,IVP1),Cn=E(K,Cn1Pn)C_1 = E(K, IV \oplus P_1), \\ C_n = E(K, C_{n-1} \oplus P_n) P1=D(K,C1)IV,Pn=D(K,Cn)Cn1P_1 = D(K, C_1) \oplus IV, \\ P_n = D(K, C_n) \oplus C_{n-1}
密码反馈(CFB)

picture 5

将任意分组密码转换为流密码。

C1=P1Ss(E(K,IV))Cn=PnSs(E(K,Cn1))C_1 = P_1 \oplus S_s(E(K, IV)) \\ C_n = P_n \oplus S_s(E(K, C_{n-1})) P1=C1Ss(E(K,IV))Pn=CnSs(E(K,Cn1))P_1 = C_1 \oplus S_s(E(K, IV)) \\ P_n = C_n \oplus S_s(E(K, C_{n-1}))
输出反馈(OFB)

picture 6

与密码反馈基本一致,加密算法的输入是上一次 DES 的输出。

计数器(CTR)

picture 7

Cn=PnE(K,Counter)C_n = P_n \oplus E(K, Counter)

初始化一个计数器,当消息块逐渐增加,计数器也随之增加。再将计数器与明文异或,得到密文。
特点:可并行化、可预处理、不需要设计解密算法、随机访问……


Edit page
Share this post on:

Previous Post
AES
Next Post
古典加密算法