(不定期更新)应用密码学笔记
简称为“大网安数”。
密码学概述
现代密码学四性:机密性,完整性,鉴别和不可抵赖性。
三个时期为:古典密码(算法保密),近代密码(密钥保密)和现代密码时期。
对密码系统的攻击:唯密文攻击,已知明文攻击,选择明文攻击,选择密文攻击。
Kerckhoffs原则:安全性只取决于密钥的保密,而不是算法。否则是“受限制的密码算法”。
安全性分类:无条件安全性,计算安全性,可证明安全性。
密码算法的功能:加密,杂凑,数字签名,身份鉴别,密钥协商。
私钥用于签名,公钥用于验证。
作业(p14):
1-1,1-2,1-4,1-6,1-7
古典密码
单表替代密码
Caesar
仿射密码
密钥短语密码
把密钥放在最前面,剩余字母排在密钥后作为替换表。
缺点
词频分析。
多表替代密码
Vigenere
Hill
其中
优缺点:
- 对抗唯密文攻击,密钥空间大。
- 易受已知明文攻击与选择明文攻击。
OTP (Vernam)
不能重复使用密钥,理论上不可破译。
playfair
密钥字母去重,放在前面,剩下字母接上,i/j占一个空,排成5*5的矩阵。
对明文两两分组(记为p1 p2),如果:
- 如果在同一行,那么密文就是明文靠右的字母。(最右的右边就是左边第一个)
- 如果在同一列,那么密文就是明文靠下的字母。(同理)
- 如果都不是,那么取另一个对角线作为密文,原文与对应密文的行相同。
- 如果相同(或剩一个),则在中间(右边)插一个约定的字母x。
链式密码算法
利用一个明文加密的结果作为下一个明文加密密钥。
缺点:误码扩散。
置换密码
周期置换
密钥规定了位置的置换。
属于Hill的特例,即属于线性变换的密码。
列置换密码
把明文按行填入矩阵,密钥规定以列读取的顺序。
转轮机密码
不考。
作业:
2.1 2.4 2.5 2.7 2.8 2.10 2.11 2.13 2.14 2.15
分组密码
设计原则
- 扩散原则:明文每一位影响密文尽可能多的位,密文每一位被尽可能多的明文影响。
- 混乱原则:敌手获得明文和密文也无法求出密钥的任意信息。
- 软件设计:使用子块和简单的运算。
- 硬件实现:尽量使用规则的结构。
若
则是幂等密码体制,如仿射密码、置换密码等。 迭代密码体制必须是非幂等的。
典型结构
- SPN结构:扩散更快速,但是加密和解密不相似。
- Feistel结构:加密解密相似,扩散慢一些(至少需要两轮才能改变输入的每一位)。
DES
安全性完全依赖于密钥保密。
密钥 64 位(8 位用于奇偶校验)
步骤:
- 明文IP置换。
的 扩展得到 (32 -> 48):把 分成8块,每块记为 到 ,然后 前面加上前一块的 , 后面加上后一块的 . - 对
加上校验位(8的倍数),通过 PC-1
得到C[0]
和D[0]
,左移一位得到C[1]
和D[1]
,通过PC-2
得到48位. 盒变换(48 -> 32):不同的块是不同的 盒,取 到 作为 盒的行, 作为 盒的列,查表得到的值作为密钥块。(重点) 盒变换。 - 与
异或以后得到 ,便完成了一轮迭代。 - 经过 16 次迭代后再经过一次IP逆置换。
优点:
- 加密解密结构相同。
- 强度高。
改进:三重DES。
分组密码的工作模式
- ECB:每块明文加密成相应的密码块,最后不足64 bit的部分用随机串补全。(本身是一种大的单字母替换)
- CBC(常用):当前明文块在加密之前要与前面的密文块进行异或,需严格保密初始向量。
- CFB:按比分组小得多的单位进行加密,密文依赖于前面所有明文。
- OFB:在块内部进行反馈。(易受篡改)
- CTR:可并行、预处理,可产生较好的伪随机数序列。
如何选择:
- 安全性
- 高效性
- 功能