20231326《密码系统设计》第1周
20231326王荣盛《密码系统设计》第一周预习报告
学习内容
《Windows C/C++加密解密实战》第 1、2 章
第一章 概念复习
- 玛丽女王密码 代替密码
- 破解方法:频率分析法
- 原理:使用其他字符代替原字符,实际上个字符出现频率不变。自然语言中各个字母出现频率相对稳定。
- 密码学简史
- 1949前 古典密码学 更像一门“艺术”:凯撒、维吉尼亚、栅栏
- 1949-1975 近代密码学 需求增加带动密码机械化发展:Shannon、Davi Kahn、单密钥体制、DES
- 1976至今 现代密码学 密码学研究的“春天”,密码逐渐电子化:Diffie-Hellman提出“公钥密码”、RSA、ElGamal、ECC、Hash(MD5、SHA1、SHA2)
- 信息安全五大问题
- 机密性、可用性、完整性、认证性(真实性)、不可否认性 - 密码学五元组
- 明文Plaintext、密文Ciphertext、密钥Key、加密算法Encryption Algorithm、解密算法Decryption Algorithm
- 对应密码方案构成密码体制
- 加密:\(c = E_k(m)\)
- 解密:\(m = D_k(c)\)
- 有意义的密码体制满足:\(m = D_k(E_k(m))\)
- 加解密算法分类:
- 对称算法:运算速度快、密钥短、明密文空间扩张较小;唯密钥安全
- 非对称算法:密钥分发和管理简单、有效的数字签名;运算速度慢、等效密钥长度大、密文往往比明文长
第二章 概念复习
- 密码编程两个重要国际库
- OpenSSL:C
- Crypto++:C++
- OpenSSL
- 优秀的跨平台性能
- 目录结构
- Crypto
- SSL
- Apps
- Docs
- Demos
- Includes
- Test
- 支持的对称加密算法
- 7种算法:AES、DES、Blowfish、CAST、IDEA、RC2、RC5
- 4种模式:ECB、CBC、CFB、OFB
- 支持的非对称加密算法
- 4种算法:DH、RSA、DSA、ECC
- 密钥交换、数字签名、数据加密
- 支持的信息摘要算法
- 5种算法:MD2、MD5、MDC2、SHA/SHA1、RIPEMD
- 密钥、证书管理
- X.509、PKCS#12、PKCS#7证书编解码
- 小型CA
第二章 操作实践:在Ubuntu2204上配置并试用OpenSSL、GmSSL
-
操作环境:
- Windows 11 Pro, 64-bit (Build 26100.4946) 10.0.26100
- VMware Workstation 17 Pro 17.6.3 build-24583834
- Ubuntu 22.04.5 LTS (Jammy Jellyfish)
-
OpenSSL
- 换源、检查更新

- 查看OpenSSL版本

此版本ubuntu预装了openssl 3.0.2 - 使用OpenSSL linux 指令
-
基本语法格式:
openssl command [command_options] [command_args]- 查看版本:
openssl version - 查看帮助:
openssl help - 使用AES-256-CBC加密
new.txt
openssl enc -aes-256-cbc -salt -in new.txt -out encrypted.enc - 解密:
openssl enc -d -aes-256-cbc -salt -in encrypted.enc -out decrypted.txt

- 生成2048位RSA私钥:
openssl genrsa -out private.key 2048 - 从私钥提取公钥:
openssl rsa -in private.key -pubout -out public.key

- 查看版本:
-
GMSSL
- 下载安装脚本
wget https://github.com/guanzhi/GmSSL/releases/download/v3.1.1/GmSSL-3.1.1-Linux.sh - 安装GmSSL
chmod +x GmSSL-3.1.1-Linux.sh
./GmSSL-3.1.1-Linux.sh
- 使用GmSSL指令
- 查看版本:

- 输出SM3摘要
root@ubuntu-vm:~# echo "hello" | gmssl sm3 f7a87a195b0cc0052b9d598482212ceb07e4ea60e8d139a5dfeff36c24abf2b3 - 查看版本:
AI 对学习内容的总结
一、密码学的核心概念与逻辑
- 密码学的基本目标
- 核心是保护信息的机密性、完整性、可用性、认证性、不可否认性。
- 不同的加密算法和协议都是为了解决这些问题而设计的。
- 密码学五元组本质
- 明文、密文、密钥、加解密算法构成闭环。
- AI视角:这是一个可计算的映射关系:
m -> E_k -> c -> D_k -> m - 对称加密是函数单参数映射,非对称加密是函数双参数映射(公钥-私钥)。
- 算法分类与适用场景
- 对称算法:高速、短密钥、密文短,适合大数据加密。
- 非对称算法:密钥分发简单、可数字签名,适合身份验证和小量数据加密。
- AI视角:算法选择可以看作优化问题:速度 vs 安全 vs 密钥管理复杂度。
二、密码学发展史的逻辑演进
- 古典密码 → 单纯替换和移位 → 易被频率分析破解。
- 近代密码 → 密码机械化、单密钥体制 → 提升安全性与效率。
- 现代密码 → 公钥密码、椭圆曲线、Hash → 可支持电子化通信、数字签名。
- AI视角:这是复杂性与可扩展性演进的历史,算法从“经验规则”向“数学证明安全”发展。
三、密码编程库的作用与结构
- OpenSSL / Crypto++
- 提供完整加解密、签名、摘要、证书管理工具。
- AI视角:它们是密码学算法的可调用接口,把抽象数学公式变成可执行流程。
- OpenSSL核心功能分类
- 对称加密:AES、DES、Blowfish 等 → 数据加密传输。
- 非对称加密:RSA、ECC 等 → 密钥交换、签名。
- 摘要算法:MD5、SHA1、SM3 → 数据完整性验证。
- 证书管理:X.509、PKCS12 → 身份认证与信任链构建。
- GmSSL
- 国密算法库,兼容国标 SM 系列加密(SM2/SM3/SM4)。
- AI视角:扩展了算法空间,支持更广泛的国际与国家标准。
四、操作实践总结
- AI视角:操作步骤是算法抽象到系统实现的映射:
- 安装与环境准备 → 构建执行平台。
- 命令行操作 → 调用库函数实现加密、解密、摘要。
- 密钥生成与管理 → 安全参数初始化。
- 实际执行 → 输入明文 → 输出密文 / 摘要 / 公私钥对。
- 本质上,OpenSSL/GmSSL 是将数学模型 → 系统函数 → 用户接口的转换。
五、AI总结的知识内核
- 抽象层次
- 信息安全目标 → 加密算法 → 编程接口 → 系统操作。
- 核心联系
- 密钥是安全的根本。
- 算法是信息变换的规则。
- 工具是算法可执行化。
- 实用逻辑
- 理论 → 算法 → 工具 → 实践。
- 每一层都是上一层的应用和验证。
对 AI 总结的反思与补充
第一章主要是理论基础:密码发展史、核心概念、五元组和算法分类。
第二章是实操:掌握 OpenSSL 与 GmSSL 的安装、版本查询、对称/非对称加密操作以及摘要函数使用。
重点掌握:
对称与非对称加密的优劣、用途
OpenSSL常用命令与RSA密钥生成流程
GmSSL支持的国密算法(SM2/SM3/SM4)和简单摘要计算
- 历史时间线:给出关键年份和事件,但缺少事件之间逻辑联系(为什么 Diffie-Hellman 出现后 RSA 成为标准、ECC 的优势等)。
- 实践操作细节:对 OpenSSL 命令行操作缺少实际示例,可补充生成密钥、加解密、签名验证命令,便于操作训练。
- 证书验证流程:X.509/PKCS#12/PKCS#7 的用途虽然提到,但如何在 TLS/HTTPS 中验证、检查有效期、撤销状态等流程未明确说明。
- 密码学原理联系实际:如 RSA + AES 混合加密、ECDHE 密钥交换、前向安全等内容未列入,需要和 TLS 握手实践结合理解。
AI提问:
- 代替密码的破解依赖语言特性,面对二进制数据或随机数据,传统频率分析法是否仍然有效?
- 频率分析依赖明文统计特性
- 二进制或随机数据缺乏模式 → 传统频率分析无效
- 现代方法:数学分析、已知明文攻击、密码强度分析
- 在建立小型CA或自签名证书时,如何保证信任链安全?哪些攻击手段可能威胁证书体系?
- 保证信任链安全的方法
- 私钥安全存储(HSM或受保护服务器)
- 严格签发策略
- 证书撤销机制(CRL / OCSP)
- 链完整性校验
- 可能威胁
- 私钥泄露 → 可伪造证书
- 中间CA被篡改或伪造 → 信任链破坏
- MITM攻击 → 使用伪造证书欺骗
- 弱加密算法 → 可能被破解
- 保证信任链安全的方法
- 信息安全五大问题中,某一方面提高安全性会不会对其他方面产生负面影响?
- 提高机密性 → 强加密/频繁密钥更换
- 正面:数据安全性高
- 负面:系统开销增加,可能降低可用性
- 提高认证性/不可否认性 → 多因素认证
- 正面:身份验证更安全
- 负面:操作复杂,影响可用性
- 增强完整性 → 频繁签名或哈希验证
- 正面:篡改可被检测
- 负面:增加延迟和计算资源消耗
- 信息安全需权衡多目标优化
- 提高机密性 → 强加密/频繁密钥更换
学习思维导图
基于 AI 的学习
Gisli: 我在学习OpenSSL知识点,对具体操作有些不理解,请你设置不同场景,以苏格拉底的方式对我进行提问,一次一个问题
ChatGPT: 好的,Roshein 👍
我来当你的“苏格拉底老师”,一次只给你一个问题,引导你自己思考。我们从简单的场景入手,然后逐渐深入。
第一个问题:
如果你要用 OpenSSL 来加密一份文件,你会选择对称加密(AES 之类)还是非对称加密(RSA 之类)?为什么?
Gisli: 根本在于非对称加密算法加密数据过程很慢
ChatGPT: 没错,Roshein 👌,你抓住了关键:非对称加密慢,所以通常不会直接用来加密大文件。
那我接着问你一个引导性的问题:
在实际应用里,如果我们需要给一份很大的文件加密,为什么常常会把“对称加密”和“非对称加密”结合起来使用呢?
Gisli: 用对称密钥加密文件很快,但是对称密钥的分发需要依赖安全信道。这时候可以用非对称算法加密对称密钥
ChatGPT: 完全正确,Roshein 🎯!你已经把“混合加密”的核心思想说清楚了:
- 大文件 → 用 对称加密(快)
- 小小的对称密钥 → 用 非对称加密(解决分发问题)
那我继续追问一个更细节的问题:
在 OpenSSL 的命令行操作中,如果你用
openssl rsautl -encrypt来加密对称密钥,你觉得这个命令需要哪些必备要素才能成功执行?
Gisli: 使用rsa加密首先要有公钥文件 openssl genrsa -out private.key && openssl rsa -in private.key -pubout -out public.key
我不确定,请你判断并指出
ChatGPT: Roshein,你的思路很棒 👍,答案方向完全正确!
- 生成私钥
openssl genrsa -out private.key 2048
- 从私钥导出公钥
openssl rsa -in private.key -pubout -out public.key
- 用公钥加密对称密钥文件
openssl rsautl -encrypt -inkey public.key -pubin -in secret.key -out secret.key.enc
- 用私钥解密对称密钥文件
openssl rsautl -decrypt -inkey private.key -in secret.key.enc -out secret.key
注意:加密时一定要显式指定 -pubin,否则 OpenSSL 会认为输入的是私钥。
我继续提问你一个问题:
如果我们把这个流程用在实际应用(比如 HTTPS),你觉得对称密钥是如何在客户端和服务器之间“临时生成并交换”的?
Gisli: -pubin -in secret.key是什么意思
ChatGPT: 好问题,Roshein 👌
-pubin:告诉 OpenSSL 输入的是公钥文件-in secret.key:要被加密的明文文件
总结:用公钥 (public.key) 把 secret.key 文件内容加密,结果保存为 secret.key.enc。
思考问题:
如果
secret.key文件比 RSA 公钥能加密的最大长度还大,会发生什么情况呢?
Gisli: 好的,继续
ChatGPT: RSA 只能加密比密钥长度更短的数据块,如果超过会报错。解决办法:使用 AES 加密大文件,然后用 RSA 加密 AES 密钥。
命令行示例:
# 生成随机 AES 密钥
openssl rand 32 > secret.key
# 用 AES 加密大文件
openssl enc -aes-256-cbc -salt -in bigfile.txt -out bigfile.enc -pass file:./secret.key
# 用 RSA 公钥加密 AES 密钥
openssl rsautl -encrypt -inkey public.key -pubin -in secret.key -out secret.key.enc
发送 bigfile.enc + secret.key.enc 给对方,对方用私钥解密 secret.key.enc,再用 AES 密钥解密大文件。
思考:
为什么 HTTPS/TLS 最终采用 RSA+AES,而不是全程只用 RSA?
Gisli: 因为对于https tls,最终保护的数据大多数是application data,这是大量且连续的,要保证数据包传输的及时性,尽可能减小时延,使用更快的对称算法加密
ChatGPT: 答得太漂亮了!
- 握手阶段:用非对称加密(RSA / ECDHE)解决“密钥协商、身份验证”
- 数据传输阶段:用对称加密保证高速、低延迟
接着:
如果你在用 OpenSSL 生成自签名证书(openssl req -new -x509 ...),证书里除了“公钥”之外,还必须包含哪些关键信息,才能在 TLS 握手中真正有用?
Gisli: 还包括用私钥签名后的交换密钥?我不确定,请讲一讲
ChatGPT: 关键内容:
- 公钥
- 证书主体信息(Subject)
- 证书颁发者信息(Issuer)
- 有效期
- 签名(Signature)
注意:证书里不会直接包含 TLS 握手密钥,握手密钥每次会话生成。
提问:
如果客户端拿到自签名证书,它该怎么判断“信任”这个证书?
Gisli: 验证签名;签名有效后,验证证书信息中的域名、日期等,可能还会向CA请求过期列表?
ChatGPT: 完全对!
- 验证签名
- 检查证书信息
- 检查撤销状态(CRL 或 OCSP)
下一步思考:
握手结束后,为什么双方可以安全地用 AES 对称密钥传输大量数据?
Gisli: 因为握手过程已经使用非对称算法协商好了传输的对称算法和密钥,这是很难解决的DH问题
ChatGPT: 完全正确!
- 握手阶段生成共享秘密(对称密钥)
- 数据阶段用共享对称密钥加密,第三方无法推导密钥
实操问题:
如果用 OpenSSL 生成 ECDHE 密钥对并保存文件,你会用哪条命令?
Gisli: 这个我不会
ChatGPT: 步骤:
- 生成椭圆曲线私钥
openssl ecparam -name prime256v1 -genkey -noout -out ecdhe.key
- 提取公钥
openssl ec -in ecdhe.key -pubout -out ecdhe_pub.key
思考:
如果你有 ecdhe.key 和 ecdhe_pub.key,用 OpenSSL 生成共享密钥时会用哪个命令?
Gisli: 总结对话,你觉得我的实践操作和理论知识怎么样,并针对性地提出还要学习的内容
ChatGPT:
实践操作能力:思路清晰,但命令细节需练习
理论知识能力:理解混合加密和 TLS 原理较好
针对性学习建议:
- OpenSSL 命令实践强化(RSA/AES/ECDHE)
- 证书与 TLS 实操(自签名、客户端验证)
- 深入理解密钥交换和前向安全
- 实验与理论结合(小项目演示完整混合加密流程)
学习实践过程遇到的问题与解决方式
- 对称加密和非对称加密在实际应用中如何组合使用才能兼顾效率和安全性?
我的思考与回答:对称算法加密快,但唯密钥安全;非对称算法密钥便于管理,且能进行数字签名。因此,可以使用对称算法加密明文,再用非对称算法加密对称密钥,即使在公开信道上传输加密后的密钥,也需要对应私钥才能解开。这种体制既解决了加密数据的效率问题,也解决了密钥分发的问题。同时,还可以对密文和加密后的密钥进行散列摘要和签名,保证认证性和完整性。
- 公钥加密的安全性基于数学难题(如大数分解或椭圆曲线问题),这些数学问题的复杂性是否可能被未来计算能力突破?
ChatGPT: 公钥加密(如 RSA、ECC)的安全性依赖于特定数学问题的计算复杂性:
RSA:安全性基于大整数分解的困难性;
ECC(椭圆曲线加密):安全性基于离散对数问题的难解性。
随着计算能力提升,尤其是量子计算的发展,这些问题可能被更高效算法解决:
经典计算机:现有密钥长度(如 RSA-2048、ECC-256)在可预见时间内仍然安全;
子计算机:Shor 算法能在多项式时间内破解大整数分解和离散对数问题,可能威胁现有公钥加密体系。
结论:公钥加密的安全性不是绝对的,而是依赖于当前算法与计算能力。未来计算能力或新算法突破可能削弱现有加密强度,因此需关注量子安全加密(Post-Quantum Cryptography)。
参考资料
- AI工具(你使用的AI工具及其链接)
- 图书
- 网站

浙公网安备 33010602011771号