密码学期末复习流程
0. 复习目标
本复习流程用于《密码学》期末复习,目标是:
- 梳理 PPT 中的核心模块;
- 对应往年试题高频考点;
- 按模块逐步复习、补充笔记;
- 最终能够完成计算题、简答题、算法题和综合设计题。
第一阶段:基础概念与古典密码
模块 1:密码学基本概念
复习目标
掌握密码学最基本的概念,能够回答简答题。
需要掌握的知识点
- 明文、密文、加密、解密
- 加密算法、解密算法
- 加密密钥 Ke、解密密钥 Kd
- 密码体制五元组:
<M, C, K, E, D> - 加密公式:
C = E(M, Ke) - 解密公式:
M = D(C, Kd) - 密钥在密码系统中的作用
- 密码体制的分类:
- 对称密码
- 非对称密码
- 分组密码
- 序列密码
必背答题模板
密码体制由明文空间 M、密文空间 C、密钥空间 K、加密算法 E 和解密算法 D 组成。发送方使用加密密钥 Ke 对明文 M 加密得到密文 C,即 C=E(M,Ke)。接收方使用解密密钥 Kd 对密文 C 解密得到明文 M,即 M=D(C,Kd)。密钥的作用是控制加密和解密变换,是保证密码系统安全性的核心。
自查问题
- 什么是明文?
- 什么是密文?
- 加密和解密的基本过程是什么?
- 密钥为什么重要?
- 密码体制五元组分别代表什么?
模块 2:对称密码与非对称密码
复习目标
能够区分对称密码和非对称密码,并说明它们的优缺点和典型算法。
需要掌握的知识点
对称密码
- 加密密钥和解密密钥相同或容易互推
- 公式特点:
Ke = Kd - 优点:
- 速度快
- 适合大量数据加密
- 工程实现成熟
- 缺点:
- 密钥分配困难
- 不适合大规模开放网络
- 难以直接实现数字签名
- 典型算法:
- DES
- AES
- SM4
- ZUC
- RC4
非对称密码
- 加密密钥和解密密钥不同
- 公式特点:
Ke ≠ Kd - 公钥可以公开,私钥必须保密
- 优点:
- 便于密钥分配
- 可以实现数字签名
- 适合身份认证和密钥协商
- 缺点:
- 运算速度慢
- 不适合直接加密大量数据
- 典型算法:
- RSA
- ElGamal
- ECC
- SM2
必背答题模板
对称密码是指加密密钥和解密密钥相同或容易互相推出的密码体制,优点是速度快,适合大量数据加密,缺点是密钥分配困难。非对称密码是指加密密钥和解密密钥不同,公钥可以公开,私钥由用户秘密保存,优点是便于密钥分配并能实现数字签名,缺点是运算速度较慢。
自查问题
- 对称密码的“对称”是什么意思?
- 非对称密码的“非对称”是什么意思?
- 为什么公钥可以公开?
- 为什么非对称密码适合数字签名?
- 对称密码和非对称密码通常如何配合使用?
模块 3:古典密码与加法密码
复习目标
掌握加法密码的加密、解密方法,能完成往年计算题。
需要掌握的知识点
- 字母编号:
- A=0
- B=1
- …
- Z=25
- 加法密码加密公式:
1 | C = (M + k) mod 26 |
- 加法密码解密公式:
1 | M = (C - k) mod 26 |
- 密文字母表的写法
- 空格一般保留,不参与加密
典型题型
给定密钥 k,对英文短语进行加密。
例如:
1 | k = 5 |
解题步骤
- 写出明文字母表;
- 将字母表整体后移 k 位;
- 得到密文字母表;
- 逐字母替换明文;
- 空格保留。
自查问题
- k=5 时,A 加密后是什么?
- k=5 时,W 加密后是什么?
- 加法密码如何解密?
- 为什么要 mod 26?
第二阶段:分组密码
模块 4:DES
复习目标
掌握 DES 的整体结构、S 盒查表方法和 Feistel 结构特点。
需要掌握的知识点
DES 基本特征
- 分组长度:64 位
- 密钥长度:64 位,其中有效密钥 56 位
- 结构:Feistel 结构
- 轮数:16 轮
- 加密和解密使用同一算法
- 解密时子密钥顺序相反
- 综合使用:
- 置换
- 代替
- 异或
- S 盒
DES 加密流程
- 64 位明文经过初始置换 IP;
- 分成左半部分 L0 和右半部分 R0;
- 进行 16 轮 Feistel 迭代;
- 每轮使用一个子密钥 Ki;
- 最后经过逆初始置换 IP^-1 得到密文。通常合并为 R16 || L16
Feistel 轮函数公式
1 | Li = Ri-1 |
DES S 盒查表
方法
S 盒输入 6 位,输出 4 位。
设输入为:
1 | b1 b2 b3 b4 b5 b6 |
行号:
1 | b1b6 |
列号:
1 | b2b3b4b5 |
然后查表得到输出。
高频考点
- DES 是不是对合运算?
- DES 为什么加密解密算法相同?
- DES S 盒如何查表?
- S 盒起什么作用?
- Feistel 结构为什么可逆?
必背答题模板
DES 是 64 位分组密码,采用 Feistel 结构,共进行 16 轮迭代。明文首先经过初始置换 IP,然后分成左右两半 L0 和 R0。每一轮中,右半部分经过轮函数 f 和子密钥 Ki 处理后与左半部分异或,再交换左右两部分。DES 解密与加密使用相同算法,只是子密钥使用顺序相反。
自查问题
- DES 的分组长度是多少?
- DES 的轮数是多少?
- DES 是什么结构?
- S 盒输入几位,输出几位?
- S 盒查表时行号和列号怎么确定?
模块 5:AES
复习目标
掌握 AES 的整体结构、轮变换、AES-128 的轮数,以及第一轮字节计算的基本思路。
需要掌握的知识点
AES 基本特征
- 分组长度:128 位
- 密钥长度:
- 128 位
- 192 位
- 256 位
- AES-128 轮数:10 轮
- 结构:SP 结构
- AES 不是 Feistel 结构
- AES 加密和解密算法不同
AES 基本轮变换
- SubBytes 字节代换
- ShiftRows 行移位
- MixColumns 列混合
- AddRoundKey 轮密钥加
AES 加密流程
- 初始轮密钥加 AddRoundKey;
- 前 9 轮:
- SubBytes
- ShiftRows
- MixColumns
- AddRoundKey
- 第 10 轮:
- SubBytes
- ShiftRows
- AddRoundKey
- 最后一轮没有 MixColumns。
高频考点
- AES-128 有多少轮?10
- AES 的四个基本变换是什么?s盒置换、左移、列扩散、添加轮密钥、
- AES 为什么最后一轮没有 MixColumns?保证加解密的对称性
- 为什么第一步和最后一步必须是 AddRoundKey?如果第一步不加密钥,那么前几步只是把明文做了公开变换,攻击者也能同步计算出来,不能提供真正的保密性。
- AES 和 DES 的区别是什么?
必背答题模板
AES 是 128 位分组密码,采用 SP 结构。AES-128 使用 128 位密钥,共进行 10 轮加密。加密过程首先进行初始轮密钥加,然后前 9 轮依次执行字节代换、行移位、列混合和轮密钥加,最后一轮省略列混合。AES 的安全性主要来自 S 盒的非线性混淆以及行移位、列混合带来的扩散。
第一轮字节计算思路
如果题目要求计算 AES 第一轮某个字节:
- 将明文按 AES 状态矩阵填入;
- 进行初始 AddRoundKey;
- 如果密钥全 0,则状态值不变;
- 查 S 盒完成 SubBytes;
- 判断该字节是否受 ShiftRows 影响;
- 如果经过 MixColumns,需要同一列 4 个字节共同参与计算;
- 最后再与第一轮轮密钥异或。
自查问题
- AES 是 Feistel 结构吗?
- AES-128 有多少轮?
- AES 最后一轮为什么没有 MixColumns?
- SubBytes 的作用是什么?
- MixColumns 的作用是什么?
- AddRoundKey 的作用是什么?
模块 6:SM4
复习目标
掌握 SM4 的基本结构和与 AES、DES 的区别。
需要掌握的知识点
SM4 基本特征
- 我国商用分组密码算法
- 分组长度:128 位
- 密钥长度:128 位
- 轮数:32 轮
- 结构:非对称 Feistel 结构
- 数据处理单位:
- 字节,8 位
- 字,32 位
- 加密解密算法结构相同
- 解密时轮密钥逆序使用
SM4 基本部件
- 异或运算
- 循环左移
- S 盒
- 非线性变换 τ
- 线性变换 L
- 合成变换 T
作用
- S 盒:混淆
- 线性变换 L:扩散
- 轮密钥:引入密钥控制
必背答题模板
SM4 是我国商用分组密码算法,分组长度和密钥长度均为 128 位,共进行 32 轮迭代。SM4 采用非对称 Feistel 结构,基本部件包括 S 盒、非线性变换和线性变换。S 盒用于实现混淆,线性变换用于实现扩散。SM4 加密和解密算法结构相同,解密时轮密钥按逆序使用。
自查问题
- SM4 的分组长度是多少?
- SM4 的密钥长度是多少?
- SM4 有多少轮?
- SM4 是 Feistel 结构还是 SP 结构?
- SM4 解密时轮密钥如何使用?
模块 7:分组密码工作模式
复习目标
掌握 ECB、CBC、CFB、OFB、CTR 五种模式的流程、作用、优缺点。
7.1 ECB 模式
流程
1 | Ci = E(Mi, K) |
每个明文分组独立加密。
优点
- 简单
- 可并行
- 错误不扩散
缺点
- 相同明文块得到相同密文块
- 会暴露明文模式
- 不适合大量结构化数据
适用场景
- 加密少量随机数据
- 加密密钥等短数据
7.2 CBC 模式
流程
1 | C1 = E(M1 ⊕ IV, K) |
解密
1 | M1 = D(C1, K) ⊕ IV |
优点
- 隐藏明文模式
- 比 ECB 更安全
缺点
- 加密不能完全并行
- 需要 IV
- 密文错误会影响当前块和下一块
适用场景
- 文件加密
- 普通数据块加密
7.3 CFB 模式
特点
- 将分组密码转化为类似序列密码
- 加密分组密码输出后与明文异或
- 密文反馈到移位寄存器
优点
- 可以处理小于分组长度的数据
- 适合流式数据
缺点
- 错误会传播
- 加密过程有反馈依赖
7.4 OFB 模式
特点
- 输出反馈模式
- 分组密码输出反馈到寄存器
- 不反馈密文
优点
- 无错误传播
- 适合语音、图像等数据
缺点
- 不容易发现密文被篡改
- 初始向量不能重复
7.5 CTR 模式
流程
1 | Oi = E(Ti, K) |
其中 Ti 是计数器。
优点
- 可以并行
- 适合高速加密
- 可以处理任意长度数据
- 适合短块
缺点
- 计数器不能重复
- 一旦重复会造成密钥流复用
| 模式 | 加密核心 | 是否需要 IV/计数器 | 是否可并行加密 | 是否需要 Padding | 错误传播 | 主要优点 | 主要缺点 |
|---|---|---|---|---|---|---|---|
| ECB | Ci=E(Mi,K) |
不需要 | 可以 | 需要 | 不传播 | 简单、并行 | 暴露明文模式 |
| CBC | Ci=E(Mi⊕Ci-1,K) |
需要 IV | 不可以 | 需要 | 影响当前和下一块 | 隐藏模式 | 加密不能并行 |
| CFB | Ci=Mi⊕E(Ci-1,K) |
需要 IV | 不可以 | 通常不需要 | 会传播一段 | 可流式处理 | 依赖反馈 |
| OFB | Ci=Mi⊕Oi,Oi=E(Oi-1,K) |
需要 IV | 密钥流可预生成 | 不需要 | 不传播 | 适合实时数据 | 不检测篡改 |
| CTR | Ci=Mi⊕E(Ti,K) |
需要计数器 | 可以 | 不需要 | 不传播 | 高速并行 | 计数器不能重复 |
高频考点
- 至少写出三种工作模式
- 说明每种模式的流程
- 比较 ECB 和 CBC
- CTR 为什么能并行?
- OFB 为什么无错误传播?
- CFB 和 OFB 有什么区别?
自查问题
- ECB 为什么不安全?
- CBC 为什么需要 IV?
- CFB 反馈的是密文还是输出?
- OFB 反馈的是什么?
- CTR 为什么不能重复计数器?
模块 8:短块问题与 Padding
复习目标
掌握短块问题定义、padding 作用和常见处理方法。
短块问题
分组密码要求每个输入块长度固定。如果明文长度不是分组长度的整数倍,最后剩余的数据块长度小于标准分组长度,这就是短块问题。
Padding 的作用
Padding 用于将不足一个分组的数据补齐到完整分组长度,使分组密码能够正常处理。解密后再根据填充规则去掉填充数据,还原原始明文。
常见处理方法
- 填充法 Padding
- CFB 模式
- OFB 模式
- CTR 模式
- X CBC
- 密文窃取
各方法比较
Padding
优点:
- 简单
- 易实现
缺点:
- 密文长度可能增加
- 需要正确去填充
- 设计不当可能存在 padding oracle 问题
CTR / OFB / CFB
优点:
- 可处理任意长度数据
- 最后一块可直接按实际长度异或
缺点:
- 初始向量或计数器不能重复
X CBC
优点:
- 可处理任意长度数据
缺点:
- 需要多个密钥
- 控制较复杂
必背答题模板
短块问题是指明文长度不是分组长度的整数倍,导致最后一个明文块长度不足一个完整分组。由于分组密码只能处理固定长度分组,因此需要特殊处理。常见方法包括填充法、CFB、OFB、CTR、X CBC 和密文窃取。Padding 的作用是将短块补齐到完整分组长度,使其能够被分组密码加密。
自查问题
- 什么是短块问题?
- Padding 的作用是什么?
- CTR 如何处理短块?
- Padding 有什么缺点?
第三阶段:序列密码与 ZUC
模块 9:序列密码基础
复习目标
掌握序列密码的基本模型、加解密公式和安全性要求。
需要掌握的知识点
序列密码定义
明文、密文和密钥以位或字符为单位进行加解密。
基本公式
1 | Ci = mi ⊕ ki |
核心思想
用短的种子密钥通过密钥序列产生器生成长的密钥序列,再与明文异或。
密钥序列安全性要求
- 长周期性
- 非线性
- 统计上的预期性
- 可伸缩性
- 不可预测性
必背答题模板
序列密码是以位或字符为单位进行加解密的密码体制。其加密方式通常是将明文序列与密钥序列逐位异或,得到密文序列。序列密码的安全性主要取决于密钥序列的安全性,一个好的密钥序列应具有长周期性、非线性、良好的统计特性、可伸缩性和不可预测性。
自查问题
序列密码和分组密码有什么区别?
序列密码的加密公式是什么?
为什么密钥序列要有长周期?
为什么非线性重要?
什么是不可预测性?
对比项 序列密码 分组密码 加密单位 位、字符、字节 固定长度分组 典型公式 ci=mi⊕kiCi=E(Mi,K)典型算法 RC4、ZUC DES、AES、SM4 是否需要填充 通常不需要 ECB/CBC 通常需要 适用场景 实时通信、流数据 文件、数据块、协议加密 核心安全 密钥序列质量 分组算法结构和模式
模块 10:LFSR
复习目标
掌握线性反馈移位寄存器的反馈函数、状态转移、周期和 m 序列判断。
需要掌握的知识点
- 连接多项式
- 反馈函数
- 状态转移过程
- 输出序列
- 周期
- m 序列判断
解题步骤
- 根据连接多项式写出反馈函数;
- 画出 LFSR 逻辑框图;
- 选定初始状态;
- 按移位规则列出状态变迁;
- 记录输出序列;
- 判断周期;
- 判断是否为 m 序列。
m 序列判断
n 级 LFSR 的最大周期为:
1 | 2^n - 1 |
如果周期达到 2^n - 1,则输出序列为 m 序列。
典型例子
连接多项式:
1 | g(x) = x^4 + x + 1 |
反馈函数:
1 | v = S0 ⊕ S1 |
若状态按:
1 | S1 → S0 |
则新状态为:
1 | (S1, S2, S3, v) |
自查问题
- 如何由连接多项式写反馈函数?
- n 级 LFSR 最大周期是多少?
- 什么是 m 序列?
- 为什么全 0 状态不能进入?
- 如何列状态变迁表?
模块 11:ZUC 祖冲之密码
复习目标
掌握 ZUC 的用途、基本结构和三层组成。
需要掌握的知识点
- ZUC 是我国设计的序列密码算法
- ZUC 是 4G LTE 国际标准
- ZUC 本质上是密钥序列产生算法
- 面向 32 位字
- 三层结构:
- 16 级 LFSR
- 比特重组 BR
- 非线性函数 F
- 基于 ZUC 的算法:
- 128-EEA3:机密性算法
- 128-EIA3:完整性算法
必背答题模板
ZUC 是我国设计的序列密码算法,已成为 4G LTE 国际标准。它本质上是一个密钥序列产生算法,面向 32 位字。ZUC 由三层组成:上层是 16 级线性反馈移位寄存器 LFSR,中层是比特重组 BR,下层是非线性函数 F。LFSR 提供长周期序列,BR 对状态进行重组,F 引入非线性,最终生成密钥序列。
自查问题
- ZUC 是分组密码还是序列密码?
- ZUC 的三层结构是什么?
- 128-EEA3 用于什么?
- 128-EIA3 用于什么?
- ZUC 为什么要加入非线性函数 F?
第四阶段:Hash 与 SM3
模块 12:Hash 函数基础
复习目标
掌握 Hash 函数定义、安全性要求和应用。
需要掌握的知识点
Hash 函数定义
Hash 函数将任意长输入 M 变换为定长输出 h:
1 | h = H(M) |
Hash 函数是一种压缩变换。
安全性要求
1. 单向性
给定 h,难以找到 x,使:
1 | H(x) = h |
也称抗原像攻击。
2. 抗弱碰撞性
给定 x,难以找到 y≠x,使:
1 | H(x) = H(y) |
也称抗第二原像攻击。
3. 抗强碰撞性
难以找到任意 x≠y,使:
1 | H(x) = H(y) |
Hash 应用
- 消息完整性校验
- 数字签名
- 消息认证
- 口令保护
- 文件指纹
Hash 函数是将任意长度输入映射为固定长度输出的函数,是一种压缩变换。安全 Hash 函数应满足单向性、抗弱碰撞性和抗强碰撞性。单向性保证不能由摘要反推出原文;抗弱碰撞性保证给定一个消息难以找到另一个具有相同摘要的消息;抗强碰撞性保证难以找到任意两个摘要相同的不同消息。
自查问题
- Hash 函数为什么是压缩函数?
- 什么是单向性?
- 什么是抗弱碰撞性?
- 什么是抗强碰撞性?
- Hash 在数字签名中起什么作用?
模块 13:SM3
复习目标
掌握 SM3 的基本定位和应用场景。
需要掌握的知识点
- SM3 是我国商用密码 Hash 算法
- 输入任意长度消息
- 输出固定长度摘要
- 输出长度通常为 256 位
- 可用于:
- 数字签名
- 消息认证
- 完整性校验
- SM2 签名前摘要计算
必背答题模板
SM3 是我国商用密码杂凑算法,用于将任意长度消息压缩为固定长度摘要。SM3 具有 Hash 函数应具备的单向性、抗弱碰撞性和抗强碰撞性,常用于数字签名、消息认证和完整性校验等场景。在 SM2 签名中,SM3 通常用于计算待签名消息摘要。
自查问题
- SM3 是什么类型的算法?
- SM3 输出摘要有什么作用?
- SM3 和 SM2 有什么关系?
- SM3 能不能用于加密?
第五阶段:公钥密码
模块 14:公钥密码基础
复习目标
掌握公钥密码思想、单向陷门函数和常见困难问题。
需要掌握的知识点
公钥密码基本思想
- 密钥分为公钥和私钥
- 公钥可以公开
- 私钥必须保密
- 公钥和私钥不同
- 由公钥不能推出私钥
单向函数
正向计算容易,反向计算困难。
单向陷门函数
如果掌握陷门信息,反向计算容易;如果不掌握陷门信息,反向计算困难。
常见数学困难问题
- 大整数因子分解问题
- RSA
- 有限域离散对数问题
- ElGamal
- 椭圆曲线离散对数问题
- ECC
- SM2
必背答题模板
公钥密码将密钥分为公开密钥和私有密钥。公开密钥可以公开,用于加密或验证签名;私有密钥由用户秘密保存,用于解密或产生签名。公钥密码的安全性依赖于单向陷门函数,即正向计算容易,反向计算在没有陷门时困难,而掌握私钥的合法用户可以高效完成反向运算。
自查问题
- 什么是单向函数?
- 什么是单向陷门函数?
- RSA 基于什么困难问题?
- ElGamal 基于什么困难问题?
- SM2 基于什么困难问题?
模块 15:RSA
复习目标
掌握 RSA 参数生成、加密、解密和签名计算。
需要掌握的知识点
RSA 参数生成
- 选择两个大素数 p、q;
- 计算:
1 | n = pq |
- 计算:
1 | φ(n) = (p-1)(q-1) |
- 选择 e,满足:
1 | gcd(e, φ(n)) = 1 |
- 求 d,使:
1 | ed ≡ 1 mod φ(n) |
- 公钥:
1 | (e, n) |
- 私钥:
1 | (d, n) |
RSA 加密
1 | C = M^e mod n |
RSA 解密
1 | M = C^d mod n |
RSA 签名
1 | S = H(M)^d mod n |
RSA 验签
1 | H(M) ?= S^e mod n |
高频考点
- 已知 n、e、M,求密文 C
- 已知 p、q、e,求 d
- 已知 e、n、C,求明文 M
- RSA 签名为什么要先 Hash
- RSA 的安全性基于什么困难问题
必背答题模板
RSA 的安全性基于大整数因子分解困难问题。首先选取两个大素数 p 和 q,计算 n=pq 和 φ(n)=(p-1)(q-1),选择与 φ(n) 互素的 e 作为公钥指数,再求 d 满足 ed≡1 mod φ(n)。公钥为 (e,n),私钥为 (d,n)。加密公式为 C=M^e mod n,解密公式为 M=C^d mod n。
自查问题
- n 如何计算?
- φ(n) 如何计算?
- e 需要满足什么条件?
- d 如何计算?
- RSA 加密公式是什么?
- RSA 解密公式是什么?
- RSA 签名为什么要先 Hash?
模块 16:ElGamal
复习目标
掌握 ElGamal 密钥生成、加密和解密流程。
需要掌握的知识点
参数选择
- 选大素数 p
- 选本原元 α 或 g
- 选私钥 x
公钥计算
1 | y = g^x mod p |
公钥
1 | (p, g, y) |
私钥
1 | x |
加密流程
随机选择 k:
1 | c1 = g^k mod p |
密文:
1 | (c1, c2) |
解密流程
1 | s = c1^x mod p |
高频考点
- 公钥 y 如何计算?
- 密文为什么是两个数?
- 随机数 k 为什么不能重复?
- ElGamal 基于什么困难问题?
必背答题模板
ElGamal 密码基于有限域离散对数问题。系统选择大素数 p 和本原元 g,用户选择私钥 x,并计算公钥 y=g^x mod p。加密时随机选择 k,计算 c1=g^k mod p 和 c2=m·y^k mod p,密文为 (c1,c2)。解密时计算共享密钥 s=c1^x mod p,再用 s 的逆元恢复明文。
自查问题
- ElGamal 的私钥是什么?
- ElGamal 的公钥是什么?
- ElGamal 加密时为什么要选随机数 k?
- ElGamal 密文为什么是二元组?
- ElGamal 安全性基于什么?
模块 17:椭圆曲线密码 ECC / SM2 加密
复习目标
掌握椭圆曲线密码的基本概念、密钥生成和求点方法。
需要掌握的知识点
素域 GF(p) 上的椭圆曲线
1 | y^2 = x^3 + ax + b mod p |
其中需要满足:
1 | 4a^3 + 27b^2 ≠ 0 mod p |
椭圆曲线密码参数
1 | T = <p, a, b, G, n, h> |
含义:
- p:有限域
- a, b:曲线参数
- G:基点
- n:基点 G 的阶
- h:余因子
密钥生成
私钥:
1 | d |
公钥:
1 | Q = dG |
安全性
基于椭圆曲线离散对数问题:
已知 d 和 G,计算 Q=dG 容易;
已知 Q 和 G,求 d 困难。
椭圆曲线求点方法
给定曲线:
1 | y^2 = x^3 + ax + b mod p |
步骤:
- 枚举 x=0,1,…,p-1;
- 计算右边:
1 | f(x)=x^3+ax+b mod p |
- 枚举 y=0,1,…,p-1;
- 找到满足:
1 | y^2 ≡ f(x) mod p |
的 y;
\5. 写出所有点;
\6. 最后加上无穷远点 O。
必背答题模板
椭圆曲线公钥密码建立在椭圆曲线离散对数问题之上。用户选择随机数 d 作为私钥,计算 Q=dG 作为公钥。给定 d 和 G,计算 Q 容易;但给定 Q 和 G,求 d 在计算上困难。SM2 是我国商用椭圆曲线公钥密码标准,具有密钥短、效率高、安全性强等特点。
自查问题
- ECC 的基本曲线方程是什么?
- 私钥 d 和公钥 Q 的关系是什么?
- 什么是椭圆曲线离散对数问题?
- 如何在 GF(p) 上求椭圆曲线点?
- 为什么最后要加无穷远点 O?
第六阶段:数字签名与认证
模块 18:数字签名基础
复习目标
掌握数字签名的概念、作用、模型和 RSA 签名安全问题。
需要掌握的知识点
数字签名作用
- 身份认证
- 数据完整性
- 不可否认性
数字签名应满足
- 签名者不能抵赖;
- 其他人不能伪造签名;
- 发生争议时第三方可以验证。
数字签名模型
签名:
1 | S = SIG(M, Kd) |
验证:
1 | VER(M, S, Ke) |
RSA 签名
1 | S = H(M)^d mod n |
验证:
1 | H(M) ?= S^e mod n |
为什么 RSA 签名要先 Hash?
如果直接对消息 M 签名,RSA 的乘法同态性可能导致伪造签名。
例如:
1 | S1 = M1^d mod n |
则攻击者可以构造:
1 | S3 = S1S2 mod n |
它对应:
1 | M3 = M1M2 mod n |
因此可能伪造新消息签名。
必背答题模板
数字签名是用签名者私钥对消息或消息摘要产生的认证信息,验证者可以用签名者公钥验证签名的真实性。数字签名能够提供身份认证、消息完整性和不可否认性。实际应用中通常不直接对消息签名,而是先计算消息 Hash 值,再对摘要签名,这样可以提高效率并防止利用 RSA 乘法同态性进行伪造攻击。
自查问题
- 数字签名有什么作用?
- 数字签名和加密有什么区别?
- 签名用公钥还是私钥?
- 验签用公钥还是私钥?
- 为什么签名前要 Hash?
模块 19:认证与数字签名区别
复习目标
掌握认证的含义,以及认证和数字签名的区别。
认证定义
认证是确认通信实体身份或消息来源真实性的过程。
认证类型
- 身份认证
- 消息认证
认证与数字签名区别
| 对比项 | 认证 | 数字签名 |
|---|---|---|
| 主要作用 | 确认身份或消息来源 | 身份认证、完整性、防抵赖 |
| 常用技术 | 口令、MAC、挑战响应 | 公钥密码 |
| 是否防抵赖 | 通常不能 | 可以 |
| 是否第三方可验证 | 不一定 | 可以 |
| 密钥特点 | 常用共享密钥 | 私钥签名、公钥验证 |
必背答题模板
认证是确认实体身份或消息来源真实性的过程,主要用于证明通信对象或消息是真实的。数字签名是一种基于公钥密码的认证技术,不仅能够证明消息来源和完整性,还能提供不可否认性。普通消息认证码通常基于共享密钥,双方都能产生认证码,因此不能向第三方证明责任;而数字签名由私钥产生、公钥验证,因此可以防止签名者抵赖。
自查问题
- 什么是认证?
- 身份认证和消息认证有什么区别?
- 数字签名为什么能防抵赖?
- MAC 为什么不能防抵赖?
模块 20:SM2 数字签名
复习目标
掌握 SM2 签名的基本思想、密钥关系和安全基础。
需要掌握的知识点
- SM2 是我国商用公钥密码标准
- SM2 签名基于椭圆曲线密码
- 私钥:
1 | d |
- 公钥:
1 | Q = dG |
- 签名时使用:
- 私钥 d
- 消息摘要
- 随机数 k
- 验证时使用:
- 公钥 Q
- 消息摘要
- 签名值
- 安全性基于椭圆曲线离散对数问题
必背答题模板
SM2 数字签名算法是我国商用公钥密码标准中的椭圆曲线签名算法。用户选择随机数 d 作为私钥,计算 Q=dG 作为公钥。签名时利用私钥、消息摘要和随机数生成签名值;验证时利用公钥和消息摘要检验签名是否有效。SM2 签名的安全性依赖于椭圆曲线离散对数问题。
自查问题
- SM2 签名属于哪类算法?
- SM2 私钥和公钥关系是什么?
- SM2 签名为什么需要随机数?
- SM2 安全性基于什么困难问题?
第七阶段:密码协议与综合设计题
模块 21:密码协议基础
复习目标
掌握协议定义、特点和安全协议设计要求。
协议定义
协议是两个或两个以上参与者为了完成某一特定任务而采取的一系列执行步骤。
协议特点
- 每一方都必须了解协议;
- 每一方都必须同意并遵循协议;
- 每一步必须清楚、明确、无歧义;
- 对每种可能情况都应规定动作;
- 协议步骤必须有序执行。
密码协议常见安全目标
- 保密性
- 完整性
- 身份认证
- 不可否认性
- 防重放
- 密钥协商
- 访问控制
- 审计追踪
自查问题
- 什么是协议?
- 协议和算法有什么区别?
- 安全协议需要满足哪些目标?
- 为什么协议步骤不能随意改变?
模块 22:综合设计题模板
复习目标
能够完成电子支付、远程登录、文件传输、信息系统安全设计类大题。
综合设计题固定结构
1. 应用场景
说明系统中有哪些参与方。
例如电子支付系统:
- 用户
- 商户
- 支付平台
- 银行
- 认证中心 CA
2. 安全威胁
至少写 4 到 6 个:
- 身份冒充
- 数据泄露
- 数据篡改
- 重放攻击
- 交易抵赖
- 中间人攻击
- 密钥泄露
- 终端木马
- 内部人员违规
3. 安全目标
对应写:
- 保密性
- 完整性
- 身份认证
- 不可否认性
- 防重放
- 密钥安全
- 可审计性
4. 密码技术选择
| 安全目标 | 可用技术 |
|---|---|
| 保密性 | AES、SM4 |
| 完整性 | Hash、SM3、HMAC、MAC |
| 身份认证 | 数字证书、挑战响应、口令、双因素认证 |
| 不可否认性 | RSA 签名、SM2 签名 |
| 防重放 | 随机数、时间戳、序列号 |
| 密钥协商 | RSA、SM2、ECDH |
| 安全传输 | TLS、HTTPS |
| 审计 | 日志、签名凭证、时间戳 |
5. 协议流程
以电子支付为例:
- 用户登录系统,服务器对用户进行身份认证;
- 用户生成订单信息,包括订单号、金额、商户号、时间戳和随机数;
- 用户对订单摘要进行数字签名;
- 客户端与支付平台协商会话密钥;
- 订单数据用 SM4 或 AES 加密传输;
- 支付平台验证用户签名、时间戳和订单号;
- 支付平台完成扣款;
- 支付平台对支付结果签名;
- 商户验证支付平台签名后确认收款;
- 系统保存交易日志、签名和时间戳,便于审计和仲裁。
6. 局限性
密码技术不能完全解决:
- 用户终端中毒
- 社会工程学诈骗
- 用户误操作
- 内部人员违规
- 业务逻辑漏洞
- 服务器被入侵
因此还需要:
- 风控系统
- 权限管理
- 日志审计
- 设备绑定
- 多因素认证
- 人工审核
综合设计题答题模板
针对该系统,首先需要解决身份认证、数据保密、完整性、防抵赖和防重放等安全问题。可以采用数字证书或挑战响应完成身份认证,使用 SM4 或 AES 对业务数据进行加密,使用 SM3 或 HMAC 保证数据完整性,使用 SM2 或 RSA 数字签名实现不可否认性,并通过时间戳、随机数和序列号防止重放攻击。系统还应保存交易日志和签名凭证用于审计。密码技术虽然可以解决通信安全和数据真实性问题,但不能完全解决终端木马、社会工程学、内部人员违规等问题,因此还需要配合权限控制、风控系统和日志审计等措施。
自查问题
- 综合设计题第一步写什么?
- 电子支付有哪些安全威胁?
- 什么技术保证保密性?
- 什么技术保证完整性?
- 什么技术保证不可否认性?
- 如何防止重放攻击?
- 密码技术解决不了哪些问题?
第八阶段:考前专项训练
训练 1:计算题
必练题型
- 加法密码加密
- DES S 盒查表
- AES 第一轮字节计算
- RSA 加密
- RSA 求私钥 d
- LFSR 状态转移
- LFSR 判断 m 序列
- GF(p) 上椭圆曲线求点
训练 2:简答题
必背问题
- 加密解密基本过程及密钥作用
- 对称密码与非对称密码区别
- DES 的基本结构
- AES 的基本结构
- SM4 的基本结构
- 分组密码工作模式
- 短块问题和 padding
- 序列密码安全性要求
- Hash 函数安全性
- RSA 签名为什么要先 Hash
- 认证与数字签名区别
- 公钥密码基本思想
训练 3:综合设计题
必练场景
- 电子支付系统
- 网上银行系统
- 文件安全传输系统
- 用户登录认证系统
- 远程办公通信系统
每道设计题都按以下结构回答
- 应用场景;
- 安全威胁;
- 安全目标;
- 密码技术;
- 协议流程;
- 局限性和补充措施。
第九阶段:七天复习安排
第 1 天:基础概念 + 古典密码
任务
- 复习密码体制五元组
- 复习对称与非对称密码
- 练习加法密码
- 整理基础概念简答模板
输出
- 写出 3 道基础简答题答案
- 做 2 道加法密码计算题
第 2 天:DES + AES
任务
- 复习 DES 整体流程
- 练习 DES S 盒查表
- 复习 AES 四个基本变换
- 理解 AES 第一轮计算流程
输出
- 写出 DES 结构简答
- 写出 AES 结构简答
- 做 3 道 S 盒查表题
第 3 天:SM4 + 工作模式 + 短块
任务
- 复习 SM4 基本结构
- 背 ECB、CBC、CFB、OFB、CTR
- 复习短块问题
- 复习 padding 作用
输出
- 写出三种分组密码工作模式
- 写出短块问题简答
- 对比 ECB 和 CBC
第 4 天:序列密码 + LFSR + ZUC
任务
- 复习序列密码模型
- 复习随机序列安全性
- 练习 LFSR 状态转移
- 复习 ZUC 三层结构
输出
- 做 1 道完整 LFSR 题
- 写出 ZUC 简答模板
- 写出 m 序列判断方法
第 5 天:Hash + RSA + ElGamal
任务
- 复习 Hash 三个安全性
- 练习 RSA 加密、解密、求 d
- 复习 RSA 签名为什么要 Hash
- 复习 ElGamal 流程
输出
- 做 3 道 RSA 计算题
- 写出 Hash 简答模板
- 写出 ElGamal 加密流程
第 6 天:ECC / SM2 + 数字签名 + 认证
任务
- 复习椭圆曲线基本方程
- 练习 GF(p) 求点
- 复习 SM2 加密和签名
- 复习认证与数字签名区别
输出
- 做 1 道椭圆曲线求点题
- 写出数字签名简答模板
- 写出认证与签名区别
第 7 天:综合设计题 + 全卷模拟
任务
- 背综合设计题模板
- 练习电子支付系统设计
- 复习所有高频简答
- 模拟一套试卷
输出
- 完成 1 道综合设计题
- 完成 1 套计算题训练
- 整理最后错题清单
第十阶段:考前速记清单
必背公式
1 | C = E(M, Ke) |
必背关键词
- 明文
- 密文
- 密钥
- 对称密码
- 非对称密码
- 分组密码
- 序列密码
- Feistel 结构
- SP 结构
- S 盒
- 混淆
- 扩散
- 雪崩效应
- 工作模式
- 短块问题
- Padding
- LFSR
- m 序列
- Hash
- 单向性
- 抗弱碰撞
- 抗强碰撞
- RSA
- ElGamal
- SM2
- 数字签名
- 认证
- 不可否认性
- 防重放
- 密码协议
复习进度记录
已完成模块
- 模块 1:密码学基本概念
- 模块 2:对称密码与非对称密码
- 模块 3:古典密码与加法密码
- 模块 4:DES
- 模块 5:AES
- 模块 6:SM4
- 模块 7:分组密码工作模式
- 模块 8:短块问题与 Padding
- 模块 9:序列密码基础
- 模块 10:LFSR
- 模块 11:ZUC
- 模块 12:Hash 函数基础
- 模块 13:SM3
- 模块 14:公钥密码基础
- 模块 15:RSA
- 模块 16:ElGamal
- 模块 17:ECC / SM2 加密
- 模块 18:数字签名基础
- 模块 19:认证与数字签名区别
- 模块 20:SM2 数字签名
- 模块 21:密码协议基础
- 模块 22:综合设计题模板
错题记录
错题 1
题目:
1 |
错误原因:
1 |
正确方法:
1 |
错题 2
题目:
1 |
错误原因:
1 |
正确方法:
1 |
最后复习原则
- 计算题先掌握方法,不要死背答案;
- 简答题背模板,但要能换一种说法写出来;
- 设计题按“威胁—目标—技术—流程—局限”结构写;
- 遇到算法题,先写流程,再代入数据;
- 考试时不会的题也要写出公式和基本思想,尽量拿步骤分。
2.攻击方用A的公钥对消息进行验证得到𝐄 ( 𝐌,𝐊𝐞𝐁 ),攻击者使用自己的私钥进行签名伪造称自己发送的消息给B