20231310王宏邦《密码系统设计》第1周
学习内容
- 《Windows C/C++加密解密实战》第 1,2 章:
- 1、第⼀章概念复习;
- 2、第⼆章主要在 Linux(Ubuntu,openEuler)上把软件更新到最新版(3.0版本以上)。
bang@LAPTOP-74GS6JSR:~$ openssl version
OpenSSL 3.0.2 15 Mar 2022 (Library: OpenSSL 3.0.2 15 Mar 2022)
可以看出,我的系统已经安装了 OpenSSL 3.0.2,完全满足了 3.0 以上版本的要求。
AI 对学习内容的总结
- AI 总结如下:
- 第1章介绍了密码学的历史背景、基本概念和密码体制的组成。通过玛丽女王的历史案例,强调了密码学在信息安全中的重要性。密码学主要解决机密性、完整性、认证性、不可否认性和可用性五大安全问题。密码体制包括明文、密文、密钥、加密算法和解密算法五个基本要素,可分为对称加密和非对称加密两大类。
- 第2章重点介绍了 OpenSSL 和 GmSSL 的开发环境搭建,包括在 Windows 和 Linux 系统下的编译、安装和基本使用。OpenSSL 是一个功能强大的开源密码库,支持多种对称加密、非对称加密和信息摘要算法。GmSSL 则是对 OpenSSL 的国密算法扩展,支持 SM2、SM3、SM4 等国密标准。
对 AI 总结的反思与补充
- AI 总结的问题:
- 1、对密码学历史的叙述较为简略,未提及密码学发展的三个阶段;
- 2、对 OpenSSL 和 GmSSL 的具体功能模块和接口介绍不够详细;
- 3、未提及 OpenSSL 的面向对象设计思想和 BIO/EVP 接口的重要性。
- 我的补充:
- 1、密码学发展可分为三个阶段:艺术阶段(1949年前)、理论奠基阶段(1949–1975)和现代密码学阶段(1976至今);
- 2、OpenSSL 包含三大模块:密码算法库、SSL/TLS 协议库和应用程序,支持 EVP 统一接口和 BIO 抽象 I/O;
- 3、GmSSL 在 OpenSSL 基础上增加了国密算法支持,符合中国商用密码标准,适用于国内安全需求。
学习思维导图
Mermaid代码
mindmaproot(密码系统设计第一周)第一章:密码学概述密码学历史:::icon(fa fa-history)从古老艺术到现代科学玛丽女王密码案例基本概念五元组: 明文、密文、密钥、加密算法、解密算法密码体制分类: 对称加密、非对称加密密码学目标机密性完整性 认证性不可否认性可用性第二章:开发环境搭建OpenSSL:::icon(fa fa-lock-open)版本验证: 3.0.2 (符合要求)功能模块: 算法库、协议库、应用程序关键接口: BIO、EVPGmSSL:::icon(fa fa-lock)国密算法支持: SM2、SM3、SM4安装方式: 源码编译Crypto++C++密码库特点: 功能全面、面向对象设计实践内容:::icon(fa fa-gears)环境验证openssl versiongmssl version命令行操作哈希计算加解密测试编程实践第一个加解密程序算法接口调用学习成果:::icon(fa fa-check-circle)理解密码学基本概念完成开发环境搭建掌握版本验证方法准备进行编程实践
思维导图
基于 AI 的学习
- 我:我正在学习"非对称加密算法"这个知识点,请你以苏格拉底的方式对我进行提问,一次一个问题。
- AI:很好,让我们开始。首先,请你告诉我,为什么我们称它为"非对称"加密?这个"不对称"体现在哪里?
- 我:我认为"不对称"指的是加密和解密使用的密钥不是同一把。加密用公钥,解密用私钥,这是两个不同的密钥,所以不对称。
- AI:很好的起点。那么,既然公钥和私钥不同,我们为何敢将公钥公开散发?这不会导致加密的消息被轻易破解吗?
- 我:不会。因为从公钥推导出私钥在计算上是不可行的,或者说极其困难。比如RSA算法基于大数分解难题,ECC基于椭圆曲线离散对数难题。
- AI:很准确。你提到了"计算上不可行"。那么,如果未来出现了强大的量子计算机,能快速解决这些数学难题,非对称加密还安全吗?
- 我:我不确定。你的理解是什么?
- AI:你的思考方向是对的。这正是当前密码学面临的挑战,被称为"量子威胁"。RSA和ECC等经典算法在量子计算机面前确实不再安全。因此,密码学家正在研究能够抵抗量子计算攻击的新算法,即"后量子密码学"(Post-Quantum Cryptography, PQC)。
- 我:明白了。那么,非对称加密虽然安全,但计算速度很慢。在实际应用中,我们是如何解决这个效率问题的呢?
- AI:一个非常关键的应用。想一想,对称加密速度快但密钥分发难,非对称加密速度慢但密钥分发方便。如何将它们的长处结合起来?
- 我:哦!我想起来了。通常是用非对称加密来安全地传输一个临时的"会话密钥",然后用这个对称密钥来加密实际要传输的大量数据。就像SSL/TLS协议做的那样。
- AI:完美!你已经抓住了混合加密系统的核心思想。那么,除了加密数据,非对称加密的另一个革命性应用是什么?
- 我:是数字签名!用私钥签名,用公钥验证。这样可以实现身份认证和不可否认性。
- AI:正是如此。那么,数字签名是如何保证消息的完整性和签名的不可否认性的?
- 我:首先,发送方会对消息生成一个哈希摘要,然后用私钥加密这个摘要,得到的密文就是签名。接收方用公钥解密签名得到摘要,再对比自己计算的哈希值。如果一致,就证明消息未被篡改,且确实来自私钥的持有者。
- AI:非常精彩的回答。看来你已经理解了核心机制。
- 我:针对"非对称加密算法"这个知识点,我理解了吗?
- AI:根据我们的对话,我认为你已经理解了非对称加密的核心概念,包括其"非对称"的本质、公钥与私钥的关系、其基于的计算困难问题、主要的应用场景(加密和数字签名)、以及如何与对称加密结合解决效率问题。你也意识到了它面临的未来挑战(量子计算)。你的理解是全面且深入的。
- 我:我的回答结束了,请对我的回答进行评价总结。
- AI:总结评价如下:
- 优势:对非对称加密的基本原理(公/私钥对)、核心安全假设(计算困难问题)和关键应用(加密、数字签名)掌握得非常扎实。
- 亮点:能够联想到实际应用(如TLS协议中的混合加密系统),这表明不仅理解了理论,还能联系实际。
- 深度能够主动思考该技术面临的未来挑战(量子计算),体现了批判性思维和前瞻性。
学习实践过程遇到的问题与解决方式
问题一:编译测试程序时链接库失败
在验证OpenSSL环境时,编写了简单的测试程序test.cpp:
#include <iostream>
#include <openssl/evp.h>int main() {OpenSSL_add_all_algorithms();std::cout << "OpenSSL test successful!" << std::endl;return 0;
}
使用g++编译时出现错误:
g++ test.cpp -o test
/tmp/ccQ2Z1oO.o: In function `main':
test.cpp:(.text+0xa): undefined reference to `OpenSSL_add_all_algorithms'
collect2: error: ld returned 1 exit status
解决过程
- 初步分析:通过AI工具查询,了解到这是典型的链接错误,说明编译器找到了头文件,但链接器找不到对应的库函数实现。
- AI建议:AI建议添加链接参数
-lssl -lcrypto
g++ test.cpp -o test -lssl -lcrypto
- 尝试解决:执行上述命令后,编译成功,但运行时出现新错误:
./test: error while loading shared libraries: libssl.so.3: cannot open shared object file: No such file or directory
- 进一步分析:AI指出这是动态库路径问题,需要确保系统能够找到OpenSSL的动态库文件。
- 最终解决方案:
find /usr -name "libssl.so.3" 2>/dev/null
find /usr -name "libcrypto.so.3" 2>/dev/null
export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH
sudo ln -s /usr/lib/x86_64-linux-gnu/libssl.so.3 /usr/lib/
sudo ln -s /usr/lib/x86_64-linux-gnu/libcrypto.so.3 /usr/lib/
- 验证结果:重新运行程序,成功输出"OpenSSL test successful!"。
问题二:GmSSL与系统OpenSSL冲突
在安装GmSSL后,执行gmssl version正常,但系统openssl version命令也指向了GmSSL,导致原有的OpenSSL环境被覆盖。
解决过程
- 检查问题:通过which命令检查
which openssl
which gmssl
发现两个命令指向了同一个位置。
- AI咨询:向AI工具描述了问题现象,AI解释这是因为安装GmSSL时覆盖了系统的openssl符号链接。
- 解决方案:AI建议使用update-alternatives管理多版本
# 恢复系统OpenSSL
sudo apt install --reinstall openssl# 设置update-alternatives
sudo update-alternatives --install /usr/bin/openssl openssl /usr/bin/openssl 100
sudo update-alternatives --install /usr/bin/openssl openssl /usr/local/gmssl/bin/openssl 50# 切换版本
sudo update-alternatives --config openssl
- 验证结果:
# 检查系统openssl
openssl version
# OpenSSL 3.0.2 15 Mar 2022# 检查gmssl
gmssl version
# GmSSL 2.5.4 - OpenSSL 1.1.0d 3 Sep 2019
参考资料
-
AI 工具:
- Kimi
- DeepSeek
-
教材:《Windows C/C++加密解密实战》
-
官方网站:
-
OpenSSL: https://www.openssl.org
-
GmSSL: https://github.com/guanzhi/GmSSL
-
Crypto++: https://www.cryptopp.com
-