分组密码:见《【DanBoneh】Block Ciphers》分组密码。
设计分组密码的两种基本技术:为了抵抗攻击者对密码系统的统计分析,香农提出混乱和扩散。
混乱
- 目的:使明文和密文之间、密文和密文之间的相关统计特性极小化,从而使攻击者无法找到密钥。
- 方法:代换。
扩散
- 目的:将明文及密钥的影响尽可能迅速地散布到较多个密文比特中。
- 方法:置换。
目前,绝大多数的分组密码都是通过迭代技术构造的。轮密钥(子密钥):$k_1$~$k_d$,轮函数:R($k_i$,..)。
DES
核心思想:Feistel网络,是使用任意函数构造可逆函数(分组密码)的一般方法。d 个函数无需可逆,构造出的Feistel网络仍然可逆。
Feistel网络
Feistel网络求逆
DES结构
Feistel网络一轮的结构中,乘积函数 F 有三个关键函数 E-box、S-box、P-box。
DES安全性:密钥空间只有 $2_56$ ≈ $10_17$,56 bits不足以抵抗穷举攻击。DES 依靠 S-box 实现非线性变换,但 NSA 被指责在 S-box 设计上隐藏了“陷门”。
PRF and PRP:见《【DanBoneh】Block Ciphers》PRF、PRP。
PRF开关引理
分组密码工作模式
ECB模式
对于包含两个或两个以上分组的明文,ECB 不是语义安全的。
优点
- 简单、高速。
- 无差错传播:单个密文分组在传输或存储时出现错误,只会影响该分组的解密,不会影响到其他分组。
缺点:安全性差,暴露明文数据的格式和统计特征
确定的计数器模式
F 是安全的 PRF,与真随机函数不可区分,可以构造一个安全的 PRG。
CPA
CPA安全性:选择明文攻击下的语义安全性(密钥可以重复使用)。
对称加密体制不是CPA安全的。
随机化加密
选取随机数和密钥 k 共同加密明文,使得加密相同的明文,输出不同的密文。
密文比明文长,密文长度 = 明文长度 + “随机比特长度”,“随机比特长度” ≠ 随机比特长度,只是相关。
nonce-based加密
nonce:只使用一次的数值,每加密一个明文,就换一个新的。(k,n)不重复使用。
如何选择nonce?
- 计数器方式:设置nonce为计数器,使用每次数值加 1 ,如果发送者和接收者保持相同的状态,则nonce无需发送。
- 随机数方式:设置nonce为随机数,随机数需与密文一起发送。
文件加密:随机数方式(加密文件时无需保持状态)
SSL(按顺序发送): 计数器方式 (无需向对方发送nonce)
IP sec(无序发送): 计数器方式即可, 但发送每个报文时,需附带所用nonce一起发送
CBC模式
密钥可以重复使用,CPA安全的。加密串行,解密可以并行。使用 PRP。
见《【DanBoneh】Using Block Ciphers》CBC。
差错传播:单个密文分组在传输或存储过程中发生错误,会影响该分组和后面一个分组的解密。
可自同步:只要后面的分组没发生错误,便不会影响后续分组的解密。
CTR模式
密钥可以重复使用,CPA安全的。加密、解密都可以并行。使用安全的 PRF。