- 明文: 需要秘密传送的信息
- 密文:明文经过密码变换后的信息
- 加密:把明文变成密文的过程
- 解密:把密文变成明文的过程
- 破译:从密文恢复成密文的过程
- 加密算法:对明文进行加密时采用的一组规则
- 解密算法: 对密文进行解密时采用的一组规则
- 密钥: 加密和解密时使用的(秘密的)关键性信息
数学符号 记 密码系统 为 集合 S = { P, C, K, E, D}
P = 明文空间
C = 密文空间
K = 密钥空间
E = 加密算法
D = 解密算法
当给定密钥 k ∈ K 时, 加密算法为 Ek, 解密算法为Dk
对应密码系统为 Sk = { P, C, k, Ek, Dk }
且符合逻辑关系: C= Ek §; P= Dk© = Dk( Ek§ )
注:军用 不公开算法,商用 公开算法。
记 加密密钥为 Ke,解密密钥为 Kd
单钥体制: Ke = Kd
双钥体制: Ke ≠ Kd
流密码 Stream Cipher : 数据逐位(比特/字符)加密,即数据流和密钥流 逐位(比特/字符) 进行 异或(XOR)运算
分组密码 Block Cipher : 对数据分组,分组后再进行处理
<1> 密码分析的条件与工具:
- 已知加密算法
- 语言特性
- 计算机
- 截取到明文、密文中已知或推测的数据项
- 数论工具、统计工具
- 技巧 和 运气(玄学)
<2> 密码分析类型
- 唯密文攻击: 已知加密算法和密文
- 已知明文攻击: 已知加密算法、待破译密文、明文-密文对
- 选择明文攻击: 已知加密算法、待破译密文、选择的明文信息和对应密文
- 选择密文攻击: 已知加密算法、待破译密文、猜测的密文和对应的明文
- 选择文本攻击:已知加密算法、待破译的密文、选择的明文信息与对应密文、猜测的密文与对应明文
<3> 无条件安全 的定义:
指无论提供多少密文,密文中信息都不能唯一地决定对应的明文,则密码体制无条件安全。
除了一次一密的方案外,没有无条件安全的其他算法
<4> 安全性的体现: 破译成本>信息本身价值;破译时间>信息的有效期
小常识1: 暴搜密钥 O ( 2^n ) ,n为密钥的长度(bit为单位),即二进制长度
即 置换密码、单表代换密码、多表代换密码、多字母代换密码
详见:
B站公开课链接
个人笔记链接
- 置换密码:置换表格,列变换
- 单表代换:凯撒密码,后移k位
- 多表代换:加和取模法
- 多字母代换:5*5 密钥表格法
(Data Encryption Standard)
(Advanced Encryption Standard)
密钥长度可变,密钥越长越难破译;迭代轮数越多越难破译
可抵抗穷举、差分、线性、Square、侧信道攻击
对合运算(即 解密算法 与 加密算法 一致
密钥生成算法 与 加密算法结构 类似
⇒ 工程实现更加简单
Input 输入:密码(加密算法)的输入
output 输出:密码(加密算法)的输出
明文、密文:对应分组下的 明文段、密文段
当前组的密钥:对当前分组进行加密所使用的密钥,二进制下加和取模过程(XOR)所使用的密钥段。
注:当前组的密钥 ≠ 整个加密算法的密钥
无法抵抗统计分析
注: K为密钥,P[i] 表示第 i 段明文, C[i]表示第 i 段密文。
本段参考博客:链接(写得比我看的那本书写得更通俗易懂)
先加和取模,再加密算法,得密文。
加密过程: 在所有分组前插入一个分组IV,每个分组的加密方式(密钥)具有递推关系,即跟上一组的密文有关。
分组随机性: 被插入的分组IV被称为初始化矢量,是一个随机的n比特分组(长度和内容均随机)。由此可以使得后续分组随机、密文翻译方式随机。
注:因为插入原因,对于m个明文分组,CBC模式将输出m+1个密文分组
本段参考博客:链接(写得比我看的那本书写得更通俗易懂)
先加密算法,再加和取模,得密文
加密过程: 把上一组的 Input、和密文进行逻辑连接,作为当前组的 input输入,然后对input进行加密算法。
分组随机性: 在所有分组前插入随机分组IV(长度、内容均随机)。
注:因为插入原因,对于m个明文分组,CBC模式将输出m+1个密文分组
本段参考博客:链接(写得比我看的那本书写得更通俗易懂)
先加密算法,再加和取模,得密文
加密过程: 把上一组的 Input、和密文进行逻辑连接,作为当前组的 input输入,然后对input进行加密算法。
分组随机性: 在所有分组前插入随机分组IV(长度、内容均随机)。
注:因为插入原因,对于m个明文分组,CBC模式将输出m+1个密文分组
本段参考博客:链接(写得比我看的那本书写得更通俗易懂)
加密过程: 计数器CTR,每进行一段明文->密文加密过程,CTR++;将计数器输入到加密算法,得到的输出作为密钥。
Basic:加和取模
密钥更换频率要高: 改为研究密钥生成算法
但是一次一密,成本过高,所以想到序列密码方法:
密钥生成算法,根据种子密钥,生成密钥,使加密效果接近于 一次一密
对双方同步性的严格要求,有弊有利
要求: 严格要求双方同步
弊端:一旦发生1bit的丢包现象,序列的后续密文均发生错误。
优势:抵抗“重播”和“插入删除“攻击,一旦有攻击者用这两种方法,立马可以被通讯双方检测到
借助 n级移位寄存器存储的密文反馈型 (OFB),流密码。
即 每个密文数字 影响后n个明文数字的加密结果。
使用 与 或 非 等 逻辑运算,实现非线性组合。
防止线性(代数)相关推导破解同步序列密码。
基于 非线性数据表(计算机查表)
256字节的S表,和两个指针 I 和 J,S[ 0 ~255],存储的数字为 0 ~ 255 随机顺序。
先将S顺序填充,再创造R[0~255]表,用户将密钥写入R内,用R表将S表进行随机化。
【参考代码】
for(int i=0;i<=255;i++){//初始化序列
s[i]=i;
T[i]=key[i%keylen];
}j=0;
for(int i=0;i<=255;i++){//随机置换
j=(j+s[i]+T[i]) % 256;
swap(s[i],s[j]);
}
实现随机置换S表的效果。
即密钥序列产生算法
128bit 密钥 和 128bit 初始向量
32bit 密钥字序列
三层逻辑,16级线性反馈移位寄存器+比特重组+非线性函数
理解1: 对于流密码体制而言,加密方式固定,所以可以作文章的地方便是 “密钥序列”。
理解2: 根据先前密码学的铺垫结论,“一次一密” 体制安全性最佳,而“随机数生成”是实现“一次一密”的关键步骤。
周期性:
序列a[i] 称为周期序列,即 存在 周期T 使得 a[i+T]=a[i]
真随机序列应当为 非周期性的,所以周期越长越接近真随机,越安全。
自相关性低; 线性复杂度 是不可预测性的重要指标。
n级线性反馈移位寄存器:
f(x) = Σ c[i] * x[i] ,c[i]为常系数
即通过分组密码加密生成随机序列。
RC4等算法。
RSA生成器等。
扩散、混淆等。
密钥管理、分发、更换,成本高