OUC中国海洋大学2023现代密码学期末复习
第一章 概论
1.掌握信息安全三要素、密码学主要功能、两种攻击形式的含义
密码学主要功能
机密性(防范信息泄露)、完整性(防范信息篡改)、非否认(防范否认干过的事情)
信息安全三要素
机密性
确保信息不被非法获取
常见威胁:窃听、盗窃文件、社会工程学
完整性
确保能够发现信息是否被改动过
常见威胁:合法用户的失误、非法用户的篡改
可用性
确保系统正常提供服务
常见威胁:设备故障、软件错误、环境因素、人为攻击
两种攻击形式
被动攻击
窃听
主动攻击
篡改、冒充
2.掌握密码学研究的内容、组成部分及各种术语
研究内容:保护系统安全
组成部分:密码编码学(设计密码)、密码分析学(破译密码)
密码学的地位:信息安全的基础,提供理论/技术支持
实现过程:密码设计 => 编码实现=> 部署使用
破译加密的主要目的:恢复密钥
密钥的原则
- 通过密文推导出密钥的难度不能低于推导出明文的难度。
- 明文与密文之间的统计关系要尽量小
- 密钥与密文之间的统计关系要尽量小
- 密钥应随机选择
- 密钥空间要足够大,以抵抗密钥穷举攻击
破译:并不一定恢复出整个明文才是成功破译。破译分全部破译和部分破译,部分破译又往往成为全部破译的突破口
密码学的攻击场景
从上到下攻击的严重程度递减、攻击难度也递减
唯密文攻击(COA,Ciphertext-only Attack)
敌方观察到一个或多个密文,试图确定明文。
已知明文攻击(KPA,Known-plaintext Attack)
地方已知一个或多个使用相同密钥加密的明文-密文对。攻击目标是,对于其他密文,可以确定明文。
选择明文攻击(CPA,Chosen-ciphertext attack)
敌方可以选择明文要求加密,并得到加密结果。攻击目标同上。
选择密文攻击(CCA,Chosen-ciphertext attack)
敌方可以选择密文要求解密。攻击目标同上。
3.掌握柯克霍夫斯原则的内容和意义,隐写术、加密术的区别,置换、代换的内容和区别
柯克霍夫斯原则
即使密码系统的任何细节已为人所知只要密钥没有泄漏它也应该是安全的
原因——密码算法很难保密
- 知道算法的人可能叛变
- 设计者有个人喜好
- 频繁更换算法不显示,但更换密钥很容易
但在政府或军事应用中,也存在保密算法的情况。不过前提是:算法必须是安全的。通过保密算法进一步加强安全性
好处有
- 保密密钥比加密算法要短,按常理来讲,越短的东西越容易保密
- 如果密钥泄露了,双方只需要改个新的密钥就能继续安全通信
- 标准化的好处:多人通讯时,可以采用相同的算法而选择不同的密钥
加密的设计
加解密是在密钥的控制下进行的
加密算法必须是一个单射
隐写术与加密术
隐写术
保护信息本身(把信息隐藏起来)。但一旦发现隐藏的方法,信息就会泄露(安全性差,没有密钥)
加密术
保护的是信息内容,传递的是变换后的密文,而不是原来的明文,不知道密钥,很难恢复信息。
常用两种方法:置换和代换
置换:Scytale。卷轴密码
代换:兽栏密码
4.了解密码学史上的几个重大事件
——在此之前密码学只是一门技术/艺术——before 1949
——密码学形成一门科学——1949-1975
-
1949年,香农发表《保密系统的通信原理》。这是密码学的理论基础之一,发表30年后才显示出它的价值
-
1976年,Diffie、Hellman发表论文《密码学的新方向》。开辟了公钥密码学的新领域。可以说“没有公钥密码的研究就没有现代密码学”
——密码学新方向(公钥密码学)——after 1976
- 1978年,RSA密码体制出现。公钥密码领域最杰出的代表,密码学史上的里程碑
- 1978年,DES(数据加密标准)出现。美国的数据加密标准,用于政府等非机密单位及商业的保密通信
它们标志着密码学理论和技术的革命性变革,宣布了现代密码学的开始
第二章 古典密码
大多数古典密码依靠唯密文攻击就可以攻破,因为它们不能很好地隐藏明文地统计特征
虽然一些古典密码未被攻破,但不代表古典密码地设计理念是科学地
置换密码
置换
- 古典密码的一种最基本的处理技术
周期置换密码
密钥:置换Π
密钥空间:n!(分组长度地全排列),和移位密码区分开
单表代换密码
代换
-
古典密码的另一种最基本的处理技术
-
代换密码的密钥就是代换表
-
依据代换表的数量分为单表代换密码和多表代换密码
凯撒密码
k=3的移位密码
密钥:无 不安全
移位密码
密钥:k
密钥空间大小:26
不安全:密钥空间很小,可以穷举攻击
简单代换密码
密钥:一个固定的代换表
密钥空间:26!(完全相同也算一个代换表)
不安全:穷举攻击不现实,但有词频分析(密钥空间大并不是密码体制安全的充分条件)+
频率分析
- 提出人:阿拉伯人
- 最早记录与 9世纪 阿尔金迪 的革命性著作 《关于破译加密信息的手稿》
古人应对词频分析1:命名密码
不仅对字母进行代换,还对常用单词代换。根据代换表,首先对明文中出现的常用单词进行代换、余下的字母再逐个代换
古人应对词频分析2:同音密码
多表代换密码
单表代换密码最大的问题是加密时始终使用一张代换表。如果同时使用两张不同的代换表,就可以有效改变字母频率。
即 同一明文字母可能对应多个密文字母,同一密文字母可能对应多个明文字母
维吉尼亚密码
加密
密钥为行,明文为列
解密
密钥为行,找到该代换表中密文的位置,对应列元素为明文
特性
密钥:自定义字符串,长度为m(不是代换表)
密钥空间:26^m
穷举攻击不现实,但不代表维吉尼亚密码无法用手工破译
维吉尼亚密码的分析
破解维吉尼亚密码之人:查尔斯 巴比奇(破译维吉尼亚密码、破译自动密钥密码(维吉尼亚发明),计算之父)
- 要先确定密钥长度,再确定具体密钥
- 具体方法
- Kasiski测试法
- 重合指数法
维吉尼亚密码的特点
-
用给定的n个移位代换表周期性地对明文字母加密
-
当两个相同的明文段落间隔的字母数为n或n的整数倍时,将加密成相同的密文段落(因为密钥重复使用了)
-
假设密文中出现两个相同的段落,对应的明文段落不一定相同,但相同的可能性很大。
轮转机密码
标志着加密机械化的开始
发明者:德国工程师 亚瑟 谢尔比乌斯
密钥:
- 转子:每个转子内部相当于一个单表代换密码(密钥空间26^{转子数量})
- 转子的位置互换:比如3个转子有 3!种不同的组合方式
- 插线板:可以使得两个字母的信号互换
密钥空间:3个转子决定
经典应用:Enigma、Lorenz、Colossus、Purple
总结
移位密码是代换密码,不是置换。
| 密码 | 密钥 | 密钥空间 |
|---|---|---|
| 周期置换密码 | 置换Π | n!(n是分组长度) |
| 移位密码 | k | 26 |
| 凯撒密码 | / | / |
| 简单代换密码 | 代换表 | 26! |
| 维吉尼亚密码 | 字符串 | 26^m |
| 轮转机密码 |
第三章 流密码
0.现代密码学概述
古典密码 => 现代密码
古典:
- 手工或者机械方式对字符或单词处理
- 明文一般有意义的自然文本
现代密码
- 面向计算机和芯片,对比特、字节进行处理
- 明文可以是任何比特串
加密体制的安全性
需要考虑两点
- 攻击能力
- 攻击目的
- 攻击目的越容易实现,越难抵抗
加密体制的分类
1.掌握随机的含义
量子力学告诉我们:现实世界中存在随机性
随机序列
性质
不能可靠重复产生
- 用完全相同的输入操作两次,得到两个不相关的序列
数学解释
概率服从均匀分布
- 产生每个比特概率为 1/2
- 任意两个比特统计上相互独立
电子计算机不能产生真正的随机序列(但量子计算机可以)
真随机序列的产生
- 使用专门的设备
- 输入是不断变化的,输出也就不可重复
- 预测产生下一个数必须重构输入信号,这无法做到
相同计算环境下,对于相同输入,电子计算机只能产生相同的输出
- 电子计算机产生的一系列所谓的随机序列是周期性的
- 任何周期性的东西都是可预测的,可预测的就不是随机的
- 要产生真正的随机序列需要随机的输入,但它本身无法提供随机输入
[!IMPORTANT]
John von Neumann:任何人考虑用数学的方法产生随机数,肯定是不合理的
电子计算机本身只能产生伪随机序列
随机 vs 伪随机
一般我们说,随机序列具有概率均匀分布的特性,伪随机序列有不可预测性
2.掌握一次一密的工作原理,实用性不强的原因
一次一密(OTP,one-time pad)(Vernam 1917)
加密:明文流异或密钥
解密:密文流异或密钥
密钥流是随机序列,且不重复使用,故得名一次一密
也就是说,明文 密文 和 密钥,知道两个后可以求得第三个是固定的
一次一密具有完善保密性(也具有语义安全性)
∀ m, ∀c,|k: E(k, m)=c | 是常数,则该加密体制具有完善保密性
一次一密的不实用性
虽然即使拥有无限计算资源也无法在唯密文攻击下破译,但密钥至少要和明文一样长(香农定理)
所以为了改造一次一密让它更实用,即缩短密钥长度,我们创造了流密码
3.掌握流密码的工作原理
基础
基本思想:使用“伪随机”密钥代替“随机”密钥流
使用工具:“伪随机生成器(PRG)”
实现方法:利用一个短的随机密钥(称作”种子“)作为PRG的输入,由PRG产生伪随机密钥流,再与明文流/密文流异或
定义
PRG的功能:利用一个短输入(种子)产生一个很长的输出
PRG的安全性
简单的事实1:PRG必须是不可预测的
不可预测性:给定输出的某些比特,高效预测其他任一比特的成功概率可忽略
简单的事实2:G是安全的 => G是不可预测的
定理 (Yao ’82):G是不可预测的 ⇒ G是安全的
所以:
定义
设G是一个PRG,如果对于任何高效的算法,成功区分G的输出和等长的随机序列的概率都是可忽略的 (计算上不可区分),则 G是一个安全的PRG
(同时想想安全的PRF、PRP的定义)
这是一种重要的安全模型类型:不可区分性
种子的安全性
攻击原理
- 攻击者完全可以知道你收集种子的方法(柯克霍夫斯原则)
- 种子不够好,就很容易被攻击者重构(PHP rand 爆破)
- 必须使用”好“的种子,使之具有不可预测性
如何收集种子
- 毫秒级的时间
- 用户的输入
- 鼠标点击的位置
我们将它们混合在一起便有了不可预测性,可以抵抗种子猜测攻击
流密码不具有完善保密性
因为密钥比明文短,所以由香农定理得.......
4.掌握完善保密性的含义
香农的思路
唯密文攻击下,密文不能泄露明文的任何信息——Shannon
完善保密性(Perfect secrecy 香农)
定义
如果一个对称加密体制(E, D)满足以下条件,它具有完善保密性
- 给定密文,攻击者无法确定密文对应哪个明文,因为概率都是相等的
- 即使拥有无限计算资源也无法从密文获得明文的任何信息(无条件安全)(但不是说任何情况下一定安全)
- 唯密文攻击无效
香农定理(Shannon‘s theorem 1949)
要满足完善保密性,所需密钥至少和明文一样长。
[!NOTE]
但注意,密钥长度比明文长,不代表着具有完善保密性;但是密钥长度比明文短,一定没有完善保密性
因为密钥或密文可能透露出一些明文的信息
5.掌握语义安全性的含义、安全模型及证明方法(必考)
性质(和完善保密性对比一下)
- 选择明文攻击无效(密钥只用一次,但是CPA安全性可以用多次)
- 计算上安全(攻击者的计算资源有限,符合现实)
[!NOTE]
也就是说,在语义安全性中,我们不要求明文被加密成某个密文的概率分布都是相同的(完善保密性),而是相似(我们难以区分)的。
而且语义安全性中,我们不再要求m0、m1是任意的,而是攻击者能够提供的就行
安全模型
如果上述过程中,对于所有高效(概率多项式时间)的攻击者A,
- “有效的算法”,其运行时间应该是 n 的多项式级别。我们把多项式时间内运行的概率算法称为概率多项式算法。概率多项式时间简写为 PPT.
- “小的成功概率”,应该比任何关于 n 的多项式的倒数级别更小。也就是说,∀c,当 n 的值足够大,敌手成功的概率小于 1/n^c. 比任何多项式的倒数都增长得慢的函数,称为可忽略的(negligible). 一个典型例子是,2^−n 比任何多项式的倒数都增长得慢。
- 如果每一个 PPT 敌手攻破一个方案的概率是可忽略的,则方案是安全的。
Adv :=| Pr[ EXP(0)=1] − Pr[ EXP(1)=1 ] |
是可忽略的。Pr[ EXP(b)=1] 表示 A 在 EXP(b) 中返回 1的概率 (b=0,1)
也就是说对于所有高效的攻击者选择的明文 m0 , m1 : EXP(0) ≈c EXP(1),两者在计算上不可区分
[!NOTE]
注意区分一下CPA安全性
- CPA安全性可以多次询问,密钥可以重复使用
- 明文长度必须相同,这里两个地方都是这样的
- 选择明文攻击下的的语义安全性简称 CPA 安全性
例子
一次一密是语义安全的
PRG是安全的=>相应的流密码是语义安全的
重复使用密钥的流密码不是语义安全的
见下
敌手能够从密文推断出明文的最低有效位,不是语义安全的

6.经典流密码算法和应用
经典算法
RC4
提出者:Rivest
曾用于HTTPS(SSL/TLS)和WEP
不建议使用,不安全
LFSR(线性反馈移位寄存器)
不安全
Salsa20/12、Sosemanuk……
实际应用
流密码的密钥不能重复使用,否则不是语义安全的
这里类比一下CPA安全性中,我们说ECB不是语义安全的
而且重复使用密钥不仅可以进行选择明文攻击,
- 已知明文攻击也不安全。给出密文和明文对,我们可以计算得到密钥。
- 唯密文攻击也不安全。得到两个密文后,进行异或,抵消掉了密钥,此时获得了两个明文的异或结果。英语等自然语言和ASCII码中存在足够的冗余,容易推测出明文。
真实世界的教训
- MS=PPTP(Windows NT):使用了two-time pad,双方使用相同给的密钥,重复进行加解密
- 802.11b WEP:IV重复;使用RC4作为PRG:第1帧密钥:1||k、第2帧密钥:2||k。每一帧密钥太接近。应该每一帧使用一个伪随机密钥
- 维诺那计划:罗森堡夫妇被处决
教训
永远不要重复使用流密码的密钥
- 网络通信:为每次会话协商一个新密钥
- 磁盘文件:最好不要用流密码,因为修改文件可能泄露文件内容(实际上我们一般用分组密码中的CBC或CTR工作模式,最好用CBC模式)
第四章 分组密码
1.掌握设计分组密码的两种基本技术、与DES有关的常识
分组密码
形式
输入一个定长的明文分组
输出一个等长的密文分组
例子
DES: n=64bits,k=64bits(实际密钥是56bits)
AES: n=128bits,k=128,192,256bits
设计分组密码的两种基本技术
混乱和扩散,由香农提出,目的是为了抵抗攻击者对密码系统的统计分析
混乱
- 目的:使明文和密文之间、密钥和密文之间的相关统计特性极小化
- 实现方法:代换
扩散
- 目的:将明文及密钥的影响尽可能迅速地散布到较多个密文比特中
- 实现方法:置换
分组密码地迭代构造


数据加密标准DES
分组长度:64 bits
密钥长度:64bits(实际长度 56bits)
轮数:16
一轮的结构
E-box
将32比特输入拓展成48比特输出
输入的一位将在后续运算中影响两个S-box的输入,输出对输入的依赖性将传播得更快。
S-box
将输入的 48 bits 数据自左至右分成8组,每组 6 bits。并行送入8个S-box (每个S-box为一非线性代换结构,输出为 4 bits),整个运算形成 32 bits输出
S-box是DES里唯一的非线性部分
P-box
对 S1 至 S8 输出的 32 bits 进行坐标置换
DES的安全性
DES的最大问题
- 随着计算机技术的飞速发展,56bits的有效密钥长度不足以抵抗穷举攻击
- 密钥空间大小只有 2^56 约等于 10^17
由于DES的有效密钥长度只有56比特, 因此考虑穷举密钥攻击还是很靠谱的。
1999年1月,电子前沿基金会 (EFF, Electronic Frontier Foundation) 仅用22小时15分钟,就宣告破解了一个DES密钥。
其他问题
- DES依靠 S-box 实现非线性变换,但NSA被指责在S-box设计上隐藏了“陷门”
抵抗穷举攻击
穷举攻击(已知明文攻击)
- 给定明密文对 (mi, ci = E(k, mi)) i=1, 2, 3
- 找到密钥 k
如何抵抗DES的穷举攻击
- 增加密钥长度
3DES
使用两个或三个密钥,执行三次DES算法
2个密钥,有效密钥长度可达 112 bits
3个密钥,有效密钥长度可达 168 bits
1985年,3DES称为美国商用加密标准
DES-EEE3
三个密钥、加密三次
DES-EDE3
三个密钥、加密解密加密
DES-EEE2
两个密钥、加密三次
DES-EDE2
两个密钥、加密解密加密
为什么没有双重DES
(MMA,Meet-in-the-middle attack,中间相遇攻击)
注意区分 man in the middle attack 中间人攻击
DESX
提出者;Rivest
以更少的效率损失增加密钥的长度以及穷举攻击的难度
其他分组密码体制
AES(高级加密标准)
- 作为DES的替代者:要求比3DES快且至少一样安全,分组128bits,密钥128/192/256bits
IDEA
- 分组长度64bits,密钥长度128bits,用于PGP
回顾,DES的分组长度64bits,密钥长度64bits(实际上56bits),轮数d=16
2.掌握Feistel网络的原理
DES的核心设计思想:Feistel网络
共有d个函数f1, …, fd: {0,1}^n ⟶ {0,1}^n ,进行d次迭代
Feistel网络是一个可逆函数 F: {0,1}^2n ⟶ {0,1}^2n
加密
图里面错了,f从1开始
$$
L_i = R_{i-1}
\\
R_i = L_{i-1} \bigoplus f_{i}(R_{i-1})
$$
解密
$$
R_{i-1} = L_i
\\
L_{i-1} = R_i \bigoplus f_i(L_i)
$$
可逆性不依赖于fi是否可逆,所以 f 可以是任意函数
3.PRF和PRP
PRF:伪随机函数
PRP:伪随机置换
PRF
伪随机函数和攻击者选择的函数是不可区分的
存在高效的算法计算 F(k, x),
F: K x X ------> Y
PRP(分组密码)
存在高效的算法计算置换 E(k, x) (对应的逆置换为D(k, x)),
E: K x X -----> X
PRP和PRF之间的关系
-
任何PRP也是PRF,其中X = Y,并且是高效可逆的
PRF Switching Lemma
设 E: K x X ----> X 是一个 PRP,那么对于任何 Q-query 的攻击者 A:
| Adv_PRF - Adv_PRP | ≤ Q^2 / 2|X|
也就是说,当X的长度足够大时,安全的PRP才是安全的PRF.(比如AES-128,|x|=128)
实际应用中,我们认为这些分组密码是安全的PRP:AES,...
绝大多数情况下,PRF可以用AES等分组密码进行代替
4.掌握分组密码的工作模式
意义
分组密码的输入是输入是定长的。要加密的明文长度往往大于一个明文分组,需要采用适当的工作模式以保证明文整体的安全性
工作模式总览
| 模式名称 | 缩写 | 英文全称 |
|---|---|---|
| 电子密码本 | ECB | Electronic CodeBook |
| 密码分组链 | CBC | Cipher Block Chaining |
| 计数器 | CTR | Counter |
| 密码反馈 | CFB | Cipher FeedBack (略) |
| 输出反馈 | OFB | Output FeedBack (略) |
ECB
应用
使用于发送少量数据的场合,一般不推荐使用
原理
每个明文分组独立加密,所以如果m1 = m2, 则c1 = c2
ECB不是语义安全的
Adv = |Pr[A(E(k,m0))=1] - Pr[A(E(k,m1))=1] | = |0-1| = 1 不可忽略
优点
- 简单、高速
- 无差错传播:单个密文分组在传输或存储时出现错误,只会影响该分组的解密,不会影响到其他分组
缺点
- 安全性差,暴露明文数据的格式和统计特征
CBC(必考)
密钥可以重复使用,CPA安全的
应用
文件加密:相同的AES密钥可用于加密多个文件
IP sec:相同的AES密钥可用于加密多个报文
加密过程
E是安全的PRP,D是逆置换,IV是初始矢量
加密过程是串行的,不能并行
解密过程
解密过程可并行
CBC的特性(必考)
(有限)差错传播
单个密文分组在传输或存储过程中发生错误,会影响该分组和后面一个分组的解密。
可自同步
只要后面的分组没发生错误,便不会影响后续分组的解密
如果IV是可预测的,则不是CPA安全的
例子:Bug in old SSL/TLS
IV的选择
-
CBC$(可以不用加密IV,因为IV具有和不可预测性)
- IV选择随机数(由安全的PRG产生,具有不可预测性),与密文一起发送
-
CBCC(必须先加密IV)
- IV去计数器(接收者不知道IV时,才需要发送),计数器按固定步长增加,所以是可预测的。如果直接使用,会使得CBC模式不安全(即k=k1得、的时候不安全)。可以使用CBC-ESSIV,先加密计数器再使用。
填充
明文长度是不固定的,按固定长度分组时,如果最后一个分组长度不足,需要填充(Padding)
即使消息的长度是块大小的整数倍,仍然需要填充。
CTR(必考)
应用
文件加密
IP sec
加密解密过程(相同)
F是安全的PRF
加解密都可以并行执行
优点
- 简单速度快。实现简单,效率高/可预计算,可并行,吞吐量仅受可并行数量的限制
- 没有差错传播。
IV的选择
- CTR$:IV选择安全的PRG产生的随机数,和密文一起发送
- CTRC:IV取计数器。接收者不知道的时候才发送。为了保证F(k,x)不会重复出现,可如下产生IV
CBC VS CTR
PRF和PRP是研究分组密码安全性的抽象工具
语义安全性——密钥只使用一次——流密码
CPA安全性——密钥重复使用——CBC、CTR
5.掌握CPA安全性的模型的定义(必考)
即密钥重复使用的时候,如何保证安全性
定义
如果一个对称加密体制是CPA安全的,它应满足以下条件:
在上述安全模型中,对于所有高效攻击者A,Adv:=| Pr[EXP(0)=1] – Pr[EXP(1)=1] |是可忽略的
-
密钥可以重复使用 => 攻击者可以获得同一密钥加密的多个密文
-
攻击者攻击能力
-
选择明文攻击(CPA, chosen-plaintext attack)(密钥可以重复使用)
可以获得他选择的一个或多个明文对应的密文
-
攻击者攻击目的:破坏语义安全性
选择明文攻击下的语义安全性,简称CPA安全性
-
安全模型
Adv:=| Pr[EXP(0)=1] – Pr[EXP(1)=1] |是可忽略的
- 攻击者可以多次询问挑战者
- m0 和 m1的长度必须相同
确定性的对称加密体制不是CPA安全的
E是确定性的,即对相同的明文,总是输出相同的密文(想想流密码里重复使用密钥)

如何实现密钥的重复使用(如何满足CPA安全性)
- 加密体制必须是概率的(对于相同的密钥和明文,密文可以不相同)
- 加密相同的明文,得到相同密文的概率是可以忽略的
解决方案
随机加密
- 加密相同明文,输出不同密文
- 密文必然比明文长。密文长度 = 明文长度 + ”随机比特长度“
nonce-based加密
nonce:只使用一次的数值,每加密一个明文,就换一个新的(比如说计数器)
也即是说(k,n)不重复使用
第五章 Hash函数和消息验证码
1.掌握Hash函数的定义、Hash函数的安全性
定义
将一个长消息映射成固定长度的输出。本质上不是加密,是信息摘要(digest)
H: 消息 -> 散列值 (消息的长度 >>散列值的长度)
碰撞
有一对不相同的消息,两个消息的散列值相同
原因:抽屉原理(M消息(长)集合大于Y散列值(短)集合)
安全性
一个安全的Hash函数应该满足以下三个性质:
原像稳固(单向性):给定散列值找消息不行
第二原像稳固(弱抗碰撞性):给定消息m,找到另一个消息m‘使得两个消息散列值相同不行
碰撞稳固(强抗碰撞性):随便找一对消息,它们的散列值相同不行
如果Hash函数 H 设计得“好”,对给定m,要想求得相应的散列值,必须通过计算H(m)才行。采用其他方法求出散列值是计算上不可行的。即使在已知若干散列值H(m1),H(m2),…的情况下,仍是如此。
所以我们有
H(m1) + H(m2) ≠ H(m1+m2)
H(m1)H(m2) ≠ H(m1m2)
抗碰撞的哈希函数
定义上说,如果所有高效的攻击者 A 能够找到碰撞的概率是可忽略的,则称 H 为 抗碰撞Hash函数 。具有的性质有碰撞稳固、第二原像稳固。
虽然定义没说,但实际上也是原像稳固的。如SHA-256,SHA3-256
2.掌握MD迭代技术、DM压缩函数
经典Hash函数有MD5,SHA-0/1/2/3(注意这些不是加密)
目前不建议使用MD5,SHA-0,SHA-1。使用SHA2的时候使用 512/224和512/256
其中SHA-256使用MD迭代技术和DM压缩函数,加密算法E使用分组密码SHACAL-2
MD5
提出者:Rivest
输入:分组成512-bit
输出:散列值128bit
MD迭代技术
利用处理短消息的抗碰撞Hash函数,通过迭代技术,构造可以处理长消息的抗碰撞Hash函数
定理:如果压缩函数 h 是碰撞稳固的, MD迭代技术构造的 H 是抗碰撞Hash函数
Davies-Meyer压缩函数
定理: 如果 E 是一个随机置换,找到h碰撞的时间复杂度是 O(2^{n/2})
例题
要证明 h 不是碰撞稳固的,即找到一对消息的散列值相同,即找到两对(mi,Hi),使得它们经过 E 加密后的结果相同。我们通过MD迭代技术知道,Hi加密的时候会使用到Hi-1。
3.掌握MAC的定义、安全性
数据完整性技术
通过数据完整性技术,当传输/存储的信息被篡改,我们能够知道
我们首先想到将消息和它的散列值一起发送。
但是不行,因为攻击者可先伪造消息,再计算假消息的散列值。
所以问题的关键是:Hash函数没有密钥,给定消息任何人可以计算。
所以,如果设计一个可以带密钥的算法,就可以抵抗伪造
MAC
MAC: K × M ⟶ T
其中m是消息,t 称为“MAC”。(tag)
双方有一个相同的密钥。首先通过MAC函数计算t,然后将消息m 和 t 一起发送,对方再通过MAC解密m,看看得到的 t 是否合法
MAC的安全性
攻击者攻击能力:选择消息攻击(CMA)
- 攻击者选择消息 m1……m_n,可以获得相应的MAC
攻击者攻击目的:存在性伪造
- 伪造一对新的消息/MAC,m和t只要一个不是原来有的就行,注意区分数字签名
安全的MAC意味着: Adv := Pr[ A伪造成功 ] 是可忽略的
例题(模仿上述画图)
PRF-based MACs
只要 |Y| (散列值的长度)足够大 (如 |Y| = 2^80 ),则安全的PRF(伪随机函数) ⇒ 安全的MAC
比如说,基于AES可以构造输出为128-bits的MAC
截取问题
⇒ 从PRF-based MAC 的输出中截取 w-bit 作为新的MAC,其仍是安全的
… 只要 1/(2^w) 是可忽略的 (如 w>=64)
4.掌握AE的定义、安全性、构造方法和正确使用方法
认证
分类
-
消息认证(AE):确认消息来源
-
身份认证(IBC):确认通信对方是谁,同时向对方证明你是谁
主要目标
- 完整性:消息是否被改动过
也就是说CMA攻击下存在性不可伪造。解决方法是CBC-MAC和HMAC
- 真实性:是否是指定者发送过来的
三要素中还有是机密性(真实性不是三要素!),也就是CPA安全性,选择明文攻击下满足语义安全性。只能抵抗窃听(被动攻击)
CPA安全性不能保证主动攻击下的安全性。要防止篡改只能使用下面两种方法之一
- 只需要完整性:完整性技术。如MAC,数字签名
- 同时需要机密性和完整性:认证加密
认证加密
定义
安全性
满足:
- CPA安全性
- 密文完整性(攻击者不能伪造出可以正确解密的新密文)
密文完整性
具有密文完整性意味着:Adv := Pr[ A伪造成功 ] 是可忽略的
[!NOTE]
注意区分MAC安全性的存在性伪造。MAC在进行CMA攻击的时候,攻击目的是存在性伪造,c或者t能找到一个新的就可以。
而AE进行的是CCA攻击,攻击目的是破坏语义安全性,所以只能找到一个新的m,t不能变。
AE的性质
保证真实性
攻击者不能欺骗Bob,是他认为消息来自于Alice
AE=>CCA(选择密文攻击)安全性
[!CAUTION]
因为具有密文完整性,我们构造的密文通常是不合法的
于是CCA模型退化成CPA模型,不可区分
AE的构造(PPT-05-74)
MAC-then-Enc
-
明文和MAC一起被加密了
-
CCA攻击下可能不安全(我也不知道为啥),但当IV是随机数的时候,采用CBC和CTR模式是CCA安全的(即提供认证加密)
-
(CCM),AES/CBC-MAC后再用AES/CTR加密
Enc-then-MAC
- 这个总是正确的。最后结果是密文,MAC也是密文的
- (GCM)实际上我们在CTR加密再做CW-MAC
- (EAX)CTR加密后在做CMAC
安全性
也就是说我们能够构造密文的MAC的话就不安全
Enc-and-MAC
- 这个不行,得到的MAC是明文的
5.掌握CCA安全模型(必考)
攻击者攻击能力:CPA+CCA
- 可以选择任意明文,并获得相应的密文
- 可以选择任意密文(除了挑战密文),并获得相应的明文
攻击者攻击目的
- 破坏语义安全性
局限性
- 没有考虑旧消息重放
消息重放攻击可以看作是中间人攻击的低能版本。Alice拼尽全力向Bob证明身份(比如经过哈希函数)。但是Eve窃听了对话并保留了密码(或哈希)。此时Eve可以冒充为Alice
解决方法是会话标识符(会话ID、会话令牌)
CCA安全性

如果一个对称加密体制是CCA安全的,则对于任意高效的攻击者A, 在上述安全模型中 Adv := | Pr[EXP(0)=1] – Pr[EXP(1)=1] | 是可忽略的
例子
随机IV的CBC不是CCA安全的
我们先发送恰好为一个分组长度的m0和m1,然后给挑战者,挑战者随机返回.
一个密文
然后我们构造一个密文,与挑战密文的差异仅仅是 IV异或了1,那么返回的明文相对CPA查询发送的明文也是异或了1。
6.掌握CBC-MAC的构造法
PRF-based MAC只能处理短消息,比如基于AES的MAC只能处理128-bit的消息。我们如何利用处理短消息的MAC构造可以处理长消息的MAC
- CBC-MAC
- 基于抗碰撞的HMAC
这两种方法都是将处理短消息的PRF改造成可以处理长消息的PRF
CBC-MAC
F是一个安全的PRF
只对定长消息是安全的 。如果处理变长消息就不安全。参考上右图
- 获得单分组消息m 的 t
- 构造m‘ = m||(t ⨁ m),对应的MAC仍然是t。
ECBC-MAC(encrypted CBC-MAC)
相当于对CBC-MAC的结果再经过F进行一次加密,这下对变长消息也是安全的
ECBC-MAC的填充
回顾一下CBC的填充,最后填充是追加字符+指示符(填充字符的数目)
长度足够的话,也会有一个dummy block
直接追加一串0是不安全的,因为pad(m) = pad(m||0)
ISO填充方法
为了保证安全性,填充方法必须可逆的
ISO标准的CBC-MAC(双密钥三重加密)
E 是一个安全的PRP,D是逆置换
7.了解生日攻击的原理,以及对散列值长度的要求
散列值长度n=64时,生日攻击完全可行,因为攻击的时间复杂度只有O(232) 。不安全!
要想达到O(2n) 安全性,选择的抗碰撞Hash函数的散列值长度应该是2n-bits。
例如:如果想让生日攻击的时间复杂度高于O(2^80),应该使用散列值长度至少是160-bits的抗碰撞Hash函数。
[!NOTE]
生日攻击不需要考虑Hash函数的内部结构
8.了解HMAC
提出者:Bellare等
目的:利用抗碰撞Hash函数直接构造MAC
不能使用MD迭代技术构造的H(处理长信息的哈希函数)来构造MAC
因为MAC(k,m) = H( k|| m)
第六章 公钥密码学
公钥密码学概述
对称密码的缺陷
- 密钥管理困难:n个用户相互通信,总共有 n(b-1)/2个密钥。 密钥爆炸问题
- 无法实现“非否认”:双方都有相同的密钥,两方都可以做相同的计算
- 共享密钥困难(存在密钥分发问题):密钥分发不仅成本巨大,也容易称为通信中的薄弱环节
公钥密码的提出
提出者:Diffie-Hellman
解决问题:从未见过面的两个人如何实现通信
解决方法:Diffie-Hellman密钥交换协议
他俩设想公钥加密的可能性,但没能提出解决方案
公钥密码的缺点和误区
缺点
- 计算速度慢
- 密钥长
- 应用历史短
误区
- 公钥密码更安全 x
- 对称密码已经过时 x
- RSA最快的情况也比DES慢上100倍,速度一直是公钥密码体制的缺陷。
- 公钥分发十分简单 x
Diffie-Hellman密钥交换协议
随机选择大素数 p
随机选择生成元 g ∈
(mod p)
安全性
安全性基于Diffie-Hellman问题
能抵抗窃听:窃听者能获得 p,g,gx,gy;不能通过此计算出gxy
Diffie-Hellman问题
计算Diffie-Hellman问题(CDH)
计算gxy
判定Diffie-Hellman问题(DDH)
给定T∈
,判断T是否等于gxy
性质
- 给定 x 或 y,计算 g^xy 很容易
- 给定 p, g, gx, gy,求g^xy 计算上不可行
- 对任意的T,判断是否T=g^xy 计算上不可行
(计算难度与 p 的取值和长度有关)
中间人攻击(MMA Man-in-the-Middle-Attack)
主动攻击下不安全。攻击者可以拦截gx和gy,并分发出相同的gz,然后得到gxz和gyz
如何抵抗中间人攻击
需要对交换的数据进行认证,以使通信双方知道到底在与谁进行密钥交换
公钥加密体制
定义
一个公钥加密体制包含以下算法
- Setup(1λ): 随机产生公钥和私钥 (pk, sk). (1λ 表示产生输出的比特长度)
(私钥自己留好,公钥可以通过公开信道传递)
- Enc(pk, m): 给定明文 m∈M,输出密文 c ∈C
- Dec(sk,c): 给定密文 c∈C,输出 m∈M 或 ⊥
(公钥是公开的,用来加密;私钥不公开,用于解密。如果不是配套公钥产生的明文,那么私钥解密不成功)
一致性要求: Setup输出的 ∀(pk, sk) : 对于∀m∈M,有 Dec(sk, Enc(pk, m) ) = m
也就是说,如果有攻击者在偷换了密文c,解密出来就是⊥
陷门函数(TDF, trapdoor function)
定义
一个X⟶Y 的陷门函数包含以下算法
- G(1λ): 随机产生一对密钥 (pk, sk)
- F(pk, ·): 给定pk,定义一个 X ⟶ Y 的函数
- F-1(sk, ·): 给定sk,定义一个 Y ⟶ X 的 F 的逆函数
一致性要求: G输出的 ∀(pk, sk), 对于 ∀x∈X: F-1(sk, F(pk, x) ) = x
也就是说,我们把加密函数换成了一个陷门函数F,其逆函数用于解密
单向陷门函数(one-way TDF)
如果 F(pk, ·) 是 单向 的 (容易计算, 但不知道 sk 难以求逆), 则 (G, F, F-1) 是安全的
安全模型
Adv := Pr[ x = x’ ] 是可忽略的,
基于one-way TDF构造公钥加密体系(ISO标准)
构造工具
- (G, F, F-1): one-way TDF ( X ⟶ Y )
- (E, D) : AE (K × M ⟶ C)
- H: Hash函数 (X ⟶ K)
算法
构造一个公钥加密体制 (Setup, Enc, Dec):
- Setup 直接调用 G
- Enc(pk, m) :

- Dec( sk, (y,c) ) :

one-way TDF应用避坑指南
- 确定性函数:无法达到语义安全性(攻击者知道公钥,语义安全性=CPA安全性)
- 存在很多攻击
永远不要直接使用 one-way TDF 加密明文。它们只是函数,不是加密体制,不能直接拿来用
陷门置换(TDP,trapdoor permutation)
定义
一个 X⟶X 的陷门置换包含以下算法
- G(1λ): 随机产生一对密钥 (pk, sk)
- F(pk, ·): 给定pk,定义一个 X ⟶ X 的函数
- F-1(sk, ·): 给定sk,定义一个 X ⟶ X 的 F 的逆函数
一致性要求: G输出的 ∀(pk, sk),对于 ∀x∈X: F-1(sk, F(pk, x) ) = x
单向陷门置换
如果 F(pk, ·) 是 单向 的 (容易计算, 但不知道 sk 难以求逆),则 (G, F, F-1) 是安全的陷门置换 (模型类似单向陷门函数)
RSA(必考)(算法要会写)
提出者:MIT的三位密码学家:Rivest、Shamir、Adleman
RSA陷门置换
G(1λ): 随机选择大素数 p, q 约等于 1024-bit ,计算 n=pq
选取两个整数 e , d 使得 ed≡1 (mod ø(n))(也就是说e*d与phi(n)互素,也就是 说ed互逆)
output pk = (e,n) ,sk = (d, n)
RSA (pk, x): Zn ⟶ Zn, output y=xe mod n,
RSA-1 (sk, y): Zn ⟶ Zn, output x=yd mod n
RSA陷门置换的计算问题
- 如何计算两个大素数
- 素性检测(如Miller-Rabin算法)
- 如何计算d
- ed≡1 (mod ø(n)) 。事实上,d和e在模ø(n)下互为逆元。使用拓展的欧几里得算法
- xe 、yd mod n
- 实际都是模运算下的整数求幂。使用 乘法链运算
RSA假设
RSA是单向置换
但RSA是否是one-way TDP(安全的陷门置换)?未知
教科书式的RSA
Textbook RSA :
public key: (e,n) Encrypt: c ⟵ me mod n
secret key: (d,n) Decrypt: m ⟵ cd mod n
参数选择和性能
- p和q为安全素数
- 安全素数:形如 p=2p1+1 的素数, p1 也是素数
- 目的:确保p1、q1都有大的素因子,以增加猜测φ(n)的难度
- e一般选 3、17、65537(216+1),二进制表示只有两个1
- 推荐使用65537
- 这样,即使多个用户使用相同的e,使用这三个值也没有任何安全问题,且可提高计算速度
- d > n0.25 / 3,否则容易受攻击(Wiener‘s attack)
- 执行的非对称性
- 加密快、解密慢
攻击手法
不安全的加密方法——不是语义安全的,存在很多攻击方法
- 共模攻击:给用户相同给的n、不同的加解密密钥
- 低加密指数攻击
- 低解密指数攻击
- 选择密文攻击
RSA陷门置换只是个函数,不是加密体制,不能直接拿来用
教科书式的RSA的安全性
- 理论上,RSA的安全性基于分解大整数是困难的这一假设,但至今未能证明分解n就是攻击RSA的最佳方法。
RSA的主要缺点
- 安全性问题:无法证明RSA的破译是否等同于大整数分解问题
- 速度问题:增大p和q将使计算开销指数增长
- 选择合适的p、q对于普通用户困难
PKCS(必考)(例题要掌握)
实际应用中的RSA
关键在于如何预处理和最终安全性如何评估
OAEP
是CCA安全的,H、G可以用SHA-256实现
OAEP+
F是任意陷门置换,OAEP+是CCA安全的
SAEP+
RSA(e=3),H、G、W都是Hash函数,解密是检查W(m,r)的合法性
例题
解密的时候从下往上看
考试的时候很可能给出一个新的,没见过的处理方式,要学会根据图分析
第七章 数字签名
掌握数字签名的定义、安全模型
手写签名
- 目的:绑定签名者信息与文件
- 问题:任何人可以把签名复制到另一个文档
数字签名
- 解决方法:绑定签名与文档
- 目的:使用一次认证信道建立可以多次使用的认证信道
定义
一个数字签名体制包含以下算法
- Setup(1λ):随机产生公钥和私钥(pk,sk)
- Sign (sk, m):给定消息m∈M,输出签名σ∈S
- Verify (pk, m, σ):给定消息m∈M,签名σ∈S,输出‘accept’或'reject'
使用私钥加密,这个签名只有自己能签;使用公钥解密,这个签名所有人都可以检查
一致性要求:Setup输出的任意(pk,sk),对于任意m∈M,有Verify (pk, m, Sign (sk, m) ) = ‘accept’
数字签名体制的安全性
攻击者攻击能力:选择消息攻击(CMA)。可以选择消息获得对应签名(选择消息攻击不属于加密体制密码分析的类别)
攻击者攻击目的:存在性伪造。伪造一对新的消息/签名,就是给你一个签名,你能产生一个新的匹配的消息达到伪造(只能是新消息不能是新签名)。
定义(安全的数字签名体制):一个数字签名体制是安全的,则对于任意高效的攻击者 A,在上述安全模型中伪造成功的概率Adv := Pr[ A伪造成功 ] 是可忽略的。
例题
掌握Hash函数在数字签名中的重要作用
利用抗碰撞Hash函数签署长信息
就是说在签名和检验的时候,对消息计算一次散列值
构造工具
- SIG = (Setup, Sign, Verify): 数字签名体制,消息空间为M
- H: Mbig —> M,Hash函数 (e.g. SHA-256)
消息 m ∈ Mbig ,数字签名体制SIGbig
- Setup^big (1λ): 直接调用Setup
- Signbig (sk, m) : output Sign(sk, H(m))
- Verifybig ( pk, m, σ ) : output Verify(pk, H(m), σ)
定理:
如果 SIG 是安全的数字签名体制 (消息空间为 M)、H是抗碰撞Hash函数,则 SIGbig 也是安全的数字签名体制 (消息空间为 M^big)
例题
掌握RSA-FDH数字签名体制
全域Hash(full domain hash, FDH)
也就是说,把签名的构造函数换成TDP,其中签名用逆函数,检验用F函数,并且对消息用全域哈希函数计算一次
构造工具
- (G, F, F-1): 定义在 X 上的 TDP(陷门置换)
- H: M --> X,全域Hash函数
算法
- Setup(1λ): 直接调用G
- Sign (sk, m) : output σ <---- F^-1(sk, H(m))
- Verify ( pk, m, σ ) : output ‘accept’: F(pk, σ) = H(m)
‘reject’: otherwise
例题
因为,全域哈希函数的输出在随机选择下表现得像均匀分布,输出是不确定的。然而普通的Hash函数,输出是固定的
RSA-FDH
哈希函数选择抗碰撞的,签名的时候用消息的散列值和d,检验的时候用签名和e,查看结果是否和H(m)相同。
- Setup (1λ):
- 随机选择大素数 p, q 大约是1024-bit ,计算 n=pq
选取两个整数 e , d 使得 ed≡1 (mod Φ(n))
构造抗碰撞Hash函数 H: M ⟶Zn
output pk = (e, n, H) ,sk = (d, n, H)、
- 随机选择大素数 p, q 大约是1024-bit ,计算 n=pq
- Sign (sk, m): output σ⟵H(m)d mod n
- Verify (pk, m, σ): output ‘accept’: H(m) = σe mod n
‘reject’: otherwise
存在的问题:H的构造依赖于n的取值,有些不方便
掌握公钥基础设施(PKI)的意义,CA的作用
校验者如何确定收到是签名者的公钥:依赖认证的信道
公钥证书
问题:浏览器需要服务器的公钥,以建立会话密钥
解决方案:服务器向可信第三方 申请签署自己的公钥 pk

公钥证书的逻辑形式
用户身份和用户公钥的结合体,由CA审核用户身份后签发
公钥基础设施(PKI)
为配合公钥证书的签发,需要十分复杂的管理机构,CA(负责签发和管理证书)只是其中一个组成部分而已
PKI不是特指某一个密码设备和管理设施,它是
- 生成、管理、存储、颁发和撤销公钥证书所需要的软硬件、人员、策略和规程的总和
- 提供密钥管理和数字签名服务的平台
密钥生命周期
过程有:密钥产生、证书签发、密钥使用、证书检验、密钥过期、密钥更新
了解X.509公钥证书格式

PKI相关产品
VeriSign
- 最大的公共CA,最早推广PKI的公司之一
- 最可信的公共CA之一
Entrust
- 世界一流,管理和安全做的很出色
- 与其他产品兼容
- 支持各种标准:X.509等
第八章 ECC和IBC
1.掌握ECC的优点
ECC的提出者:N.Koblitz(华盛顿大学) 和 V.Miller(IBM)
SEC的提出者:Certicom Corp
SEC:Standards for Efficient Crtptography
比特币中使用 ECDSA/secp256k1 曲线
定义
满足以下定义的三次方程
以下为非奇异椭圆曲线的两个例子
参数长度对比

虽然比起RSA来说,公钥长度比较短。但是仍然长于分组密码
ECC的优点
- 安全性高
- 比传统公钥体制更安全
- 灵活性好
- Fp上的椭圆曲线可通过改变参数得到不同的曲线
- 密钥长度更短
- 使用更短的密钥长度提供相同的安全强度
ECC 因密钥长度短、计算速度快(相对)而迅速爆红,成为公钥密码的主流之一,是设计大多数计算能力和存储空间有限、带宽受限又要求高速实现的安全产品的首选。如智慧卡、无线网络、手持设备
ECC版DH协议
首先,他们需要约定好一个椭圆曲线 E(Fp),以及一个基点 P.
现在 在曲线上,Alice 找一个 nA,Bob 找一个 nB ,
接下来 Alice 计算 QA = nA*P,Bob 计算 QB = nB * P
完成之后,Alice 和 Bob 交换 QA 和 QB ,
然后 Alice 计算 nA * QB ,Bob 计算 nB * QA
然后拿着这个带你的 x 坐标,就可以作为对称加密的密钥了
所以在传输的时候我们可以抛弃y坐标,达到消息传输的简化
CDH
计算得到nA*nB*P
DDH
给定点T在椭圆曲线上,判断T是否等同于nA*nB*P
性质
- 给定 x 或 y,计算xyP很容易
- 给定椭圆曲线,P xP yP计算 xyP不行
- 对任意T,判断是否T = xyP计算上不可行(计算难度与椭圆曲线与基域元素长度有关)
2.掌握椭圆曲线加法群的几何性质
由于无穷远点 O 的存在,任意两个点都是可加的。所以椭圆曲线与加法运算构成群(阿贝尔群)
加法交换群的特性
-
单位元:无穷远点 o
- 对于任意 P∈E,有P+O=O+P=P
-
逆元
-
设P=(x,y)∈E,则P的逆元定义为:P=(x,-y)
于是,P+(-P)=(x,y)+(x,-y)=O
-
-
有结合律和交换律
-
加法运算法则(必考)
- x1≠x2 : 画一条通过P、Q的直线与椭圆曲线交于R,R的逆元便是P+Q的结果
- x1=x2 且 y1=-y2 时,P与Q互为逆元: P+Q=O
- x1=x2 且 y1=y2 时,则P=Q (点P与自己相加):画一条通过P的切线,与椭圆曲线交于R,R的逆元便是P+P的结果
-
P的阶:满足nP=0的最小正整数 n
nP = P+ P + P + P + ……。显然,nP可以通过类似于快速幂的算法,以O(logn)次加法的代价算法来
给定 P 和 Q = nP,求解n,就是椭圆曲线上的离散对数问题
有限域上的椭圆曲线
有限域(元素有限的)上的椭圆曲线和加法,构成了一个有限群
和之前的区别在于,方程 和 离散
前面介绍的椭圆曲线方程的系数是实数 (连续的),有限域上的椭圆曲线方程的系数属于Fp (离散的,整数)
有限域Fp上的椭圆曲线,通常记为E(Fp),简记为E。其中Fp称为E的基域。
都和实数上的曲线加法相同,只是所有的坐标运算都是模p的,
所以离散对数问题也相同,即找到一个整数 n 使得 Q=nP.我们记
并称n是以P为底Q的椭圆曲线离散对数
3.掌握双线性映射的描述
定义
- 超奇异椭圆曲线是有限域上一种特殊的椭圆曲线
- 在该类曲线上,存在一种被称为 双线性映射 的高效算法,可以 将曲线上两个点映射到基域上的一个元素
- 如今,基于超奇异椭圆曲线和双线性映射的密码体制变得主流,成为当今密码学研究和应用的热点之一。
性质
设p是大素数,加法群 G1 和乘法群 G2 都是p阶循环群。双线性映射 e:G1×G1→G2满足以下条件:
-
双线性(必考)
\[\begin{aligned} e(P,Q+R)&=e(P,Q)e(P,R)\\ e(P+Q,R)&=e(P,R)e(Q,R)\\ e(aP,{b}Q)&=e(P,Q)^{ab}\\ \end{aligned} \] -
非退化性
- 存在P∈G1, 有e(P, P)≠1
-
可计算性
-
对于所有P,Q∈G1, e(P, Q)可高效计算
通常,取G1为有限域上超奇异椭圆曲线,G2为G1的基域乘法群
-
优缺点
- 优点
- 提供了丰富的运算性质,可以满足以前难以满足的安全需求
- 缺点
- 目前的计算速度相对较慢(这也是公钥密码的通病)
双线性映射的DDH问题
回顾椭圆曲线上的DH问题
给定E(Fp),以及(P,xP,yP)
CDH:计算xyP
DDH:给定T,判断T是否等于xyP
有限域上超奇异椭圆曲线中,DDH问题不再困难

三方DH密钥交换协议
BDH问题(Bilinear Diffie-Hellman)
给定G1,G2以及 P,aP,bP,cP,计算e(P,P)^abc
性质
- 给定 a, b 或 c,计算 e(P, P)^abc 很容易
- 给定 G1, G2 ,P, aP, bP, cP,求e(P, P)^abc 计算上不可行
安全性基于Bilinear Diffie-Hellman问题
4.掌握IBC的基本概念、优缺点、KGC和CA的区别
基于身份的密码学(IBC)
提出者:Adi Shamir
解决问题:如何以较小的代价保证公钥的真实性
原理
-
传统公钥密码中公钥的产生
- 先选择私钥,再计算公钥,公钥必然显得 ”一片混乱“
- 公钥整数,PKI
-
IBC产生公钥的原理
-
先选择公钥,再选择私钥
-
公钥可选择email地址、身份证号等,称之为用户的身份,记为ID
(注意:公钥就是ID,或者从ID直接推导而来)
(ID必须是每个用户唯一确定的信息)
-
私钥看起来杂论无章,没关系,反而有利
-
基于身份的加密体制(IBE)
- Setup(1λ):产生系统公开参数param,生成随机主密钥msk
- KeyGen(param,ID,msk):生成身份ID对应的用户私钥sk
- Enc(param,ID,m):给定明文m,输出密文c
- Dec(param,sk,c):给定密文c,输出m或⊥
一致性要求:Setup输出的 ∀(param, msk), 对于∀ ID,KeyGen输出的∀sk : 对于 ∀m∈M,有 Dec(param, sk, Enc(param, ID, m) ) = m
IBC下的秘密通信模型(ppt-40)
- Bob公开展示ID给KGC,由此产生私钥。
- Alice获得公钥(Bob的ID),使用ID对消息进行加密发送给Bob
- Bob通过私钥解密
如果私钥泄露,攻击者可以破译任意密文
KGC的含义
我们依然需要一个可信第三方,用以帮助用户产生私钥,我们称之为密钥产生中心(Key Generation Center, KGC)。用户选择自己的ID作为公钥,KGC根据ID产生相应的私钥(用户的私钥从KGC中获得)
KGC vs CA in PKI
[!NOTE]
- IBC中的KGC与PKI中CA职能不同
- KGC只需要由ID计算出私钥,公钥就是ID或由ID推导而来
- CA绑定ID和公钥,ID不是公钥
- KGC的任务简单很多
IBC的优缺点
优点
- 避免使用复杂的PKI系统
缺点
-
私钥泄露以后,对应的ID也就无法使用
密钥撤销问题是影响IBC问题的主要桎梏(主要桎梏是密钥丢失了怎么办)
-
密钥托管问题(Key-escrow)
私钥由KGC产生,一旦KGC被攻破(主密钥泄露),所有用户信息将受到严重威胁。
5.了解ECC和双线性映射的应用
Boneh-Franklin的IBE
第九章 安全协议
1.掌握安全协议的相关概念
定义
协议:两个或两个以上的参与者为完成某项特定任务而采取的一系列步骤
协议的复杂性:
- 把所有不利条件实现估计到,而不能假定一切都是正常的和非常理想的
- 看一个协议是否正确,不能光看在正常情况下是否正确,而且还必须非常仔细地检查这个协议 能否应付各种异常情况
例子
两军问题:有些问题考虑太全面则无法解决
尾生期与梁下:有些问题考虑不全面会导致严重后果
安全协议
安全协议:又称密码协议,使用密码技术完成某项特定任务,并满足安全需求的协议。 经常使用对称密码、公钥密码、Hash函数、PRG等密码工具。
安全协议的安全性需求:机密性、完整性、认证性、非否认性、公平性、匿名性。这些根据应用场合不同进行组合。
安全协议中的角色:协议参与者、攻击者(分内部/外部;被动/主动)、可信第三方(用户都信任的实体,通常与每个用户共享密钥。它可以使用户之间确认彼此身份 或 共享会话密钥)
[!NOTE]
很有可能出不定项选择
安全协议设计与分析的困难性:
- 安全目标本身的微妙性
- 运行环境的复杂性
- 攻击者模型的复杂性
- 安全协议本身具有“高并发性”
好的安全协议应满足的条件:
- 满足目标(应用目标,安全目标)
- 易于实现
- 各参与者所需计算量小、存储量小
- 通信负载小(延迟小,占用带宽小)
- 交互轮数少
2.掌握口令的相关概念和使用
身份认证(实体认证)
主要目标:确认通信方的身份(能做到确认对方是谁,同时向对方确认你是谁)
回顾一下消息认证,目标是机密性和完整性
分类:单向认证(账号密码),双向认证(对暗号)
方法:Know sth(知道什么可用于识别身份的 信息)、Have sth(拥有什么可用于识别身份的东西)、Be sth(有什么独特的特征)
Know sth
口令是最常用的身份认证机制,但安全性较差
弱口令:短口令、常见单词、生日、电话号码、系统预设口令
口令管理措施:
- 口令空间:有一定长度,包含多种符号类型,不易猜测
- 口令时间:有一定生存期,不使用历史口令
- 口令保护:不同系统用不同的,登录失败次数限制
口令的存储:
利用Hash函数存储口令,防范攻击者偷取数据库后得到口令
Have sth
令牌:
- 存储卡:磁卡保存信息,配合PIN
- 智能卡:包含CPU和存储器(如JAVA环)
令牌的优点
[!CAUTION]
可以随身携带,攻击者必须先拿到令牌,这增加了攻击难度
需要输入一个正确的PIN才能使令牌发挥作用
试图使用物理手段获得存储信息,有些令牌还有自毁功能
Be sth
生物特征
如指纹、掌纹、虹膜、视网膜、手形、面部特征、声波、DNA等
动态特征
如签名特征、键盘特征
3.掌握秘密共享的基本概念、Shamir的门限方案(必考)
秘密共享
宝藏问题:海盗们把宝藏藏在一个安全的地方,只有用地图才能找到。但地图如何分配呢?各拿一份地图肯定不行:彼此不信任;各拿地图的一部分也不行:有人丢失他那份,无法复原地图
定义:将秘密信息分割存储的密码技术
秘密共享的目的
防止秘密过于集中,以达到分散风险(避免权力过于集中)和容忍入侵(混进几个攻击者不影响安全性)的目的
门限方案(这个必考,详情看 必考.md )
提出者:Shamir
-
分割秘密
-
设秘密信息为 k ,令 a0 = k
-
随机产生 m-1 次多项式
f(x) = a_{m-1}x^{m-1} + … + a1x+ a0 mod p, 易知 K=f(0)
-
依次计算 ki = f(xi), i = 1, …… , n
每一对(xi, ki)都是 f(x) 函数曲线上的一个点
-
ki必须保密,xi不需要保密
-
-
重构f(x)
- 给定 k1, k2,...,km 共m个share,对应的分别是 x1,x2,...,xm。可由拉格朗日插值多项式恢复出 f(x)

-
恢复秘密信息 k = f(0)。
我们可以把插值多项式这样理解
拿到一对(xi, ki),ki为常数放在外面乘,分子是 (x-其他的k) ,分母是(xi-其他的k)。分子分母高度对称,除了一个被减数是 x ,一个被减数是 xi 。
视觉密码
提出者:Shamir
零知识证明
设P掌握某些信息,并希望向V证明这一事实
V除了知道P能证明该信息,不能得到任何额外的知识
零知识洞穴
实例
图同构的零知识证明
第十章 量子密码学
量子密码学不是用来取代现代密码学,而是要将量子密码学的优势和现代密码体制的优势结合起来,寻找新的应用领域
量子密码的安全性基于量子状态的特性
优点
- 密钥在公开信道中传输不必担心被窃听
- 能检查出密钥在传输过程中是否被窃听
量子密钥分发体制(QKD)
可分为两类
- 基于不确定性原理
- 基于量子纠缠态
虽然量子密钥分发体制还没有进入实用阶段,可是它成为使用的密码通信手段已经没有原则问题了
量子计算机
将计算上不可行的问题,通过量子计算机,变为计算上可行的问题
量子密码通信三大主流协议
BB84、E91、B92

浙公网安备 33010602011771号