20231321王曦轶 《密码系统设计》

密码系统设计 第一周预习报告


一、学习内容

  • 《Windows C/C++加密解密实战》第1、2章
    • 第一章:密码定义、功能、机制
    • 第二章:OpenSSL 与 GmSSL 在 Linux 上的安装与配置

二、AI 对学习内容的总结(1分)

要求

  • 让AI(kimi,元宝等)阅读学习内容并进行总结,教材内容可以使用微信读书或者云班课电子教材

《Windows C/C++加密解密实战》第1、2章总结

第1章 密码学概述

本章从玛丽女王密码的历史故事切入,引出密码学在真实世界中的巨大作用:信息一旦泄露,可能决定个人甚至国家的命运。随后系统梳理了密码学的发展脉络,从公元前400年的“置换密码”,到二战“恩尼格玛”,再到1976年公钥思想、1977年DES、2001年AES、2010年国密SM2/3/4,时间线清晰,帮助读者建立“密码技术伴随人类冲突与协作不断演进”的整体观。
作者把密码学要解决的核心问题浓缩为五个关键词:机密性、完整性、可用性、认证性、不可否认性,并给出每条问题的具体技术答案——加密、哈希、数字签名、密钥交换、PKI。紧接着提出“五元组”模型:明文、密文、密钥、加密算法、解密算法,用一句话“p = Dk(Ek(p))”点明对称密码的本质。最后把算法分为“对称/非对称”两大阵营,用一张对比表总结各自的优缺点:对称快但密钥分发难,非对称慢但能解决密钥分发和签名问题,为后续章节的技术选型埋下伏笔。

第2章 搭建 C/C++ 密码开发环境

本章是“动手”的开始。作者先给出一线工程的结论:开源世界两大靠山——OpenSSL 与 Crypto++,前者功能最全、社区最活跃,后者纯 C++ 接口优雅;国内项目再加一个 GmSSL,国密算法一站配齐。随后进入“步步为营”的实战节奏:

  1. OpenSSL 完全攻略
    源码结构、许可证、版本差异(1.0.2 稳定、1.1.1 新特性、3.0 以后API大变)先讲透,再带读者在 Windows 下用 VS2017 + ActivePerl + NASM 编译出 32/64 位、Debug/Release、静态/动态共 8 套库;Linux 下则演示“卸载系统旧包 → 源码三连(config/make/make install)→ 软链替换”的平滑升级流程,彻底避免“系统自带老库暗中捣鬼”的坑。每一步都给出验证小程序:只要打印出 “OpenSSL ok” 且 ldd 看到新 .so,才算成功。

  2. Crypto++ 速通
    下载源码 → make 生成 libcryptopp.a → 一个 AES 块加密例子跑通,全程 5 行命令,突出“ Header-only 式”清爽体验。

  3. GmSSL 深度体验
    从 GitHub 拉 master 分支,Windows 下 nmake 安装到 C:\Program Files (x86)\GmSSL,Linux 下 ./config –-prefix=/usr/local/mygmssl 自定义路径;命令行 sm3 文件、代码里调用 EVP_sm3() 双重验证,让读者切实感到“国密算法就在手边”。作者特意在 CentOS7 旧内核上演示“Perl 5.8→5.10 升级 → 再编译”的兼容方案,照顾军工、工控等老平台场景。

  4. 小结
    本章看似“只是装软件”,实则把后续所有代码示例的“地基”一次性打牢:

    • 知道去哪找头文件、库文件
    • 懂得同一机器共存多版本时如何用 -I/-L 精准指向
    • 理解动态库搜索顺序、软链与 rpath 的恩怨
      有了这些“基建”,后面章节任何算法源码都能“拿过来就编译”。

三、对 AI 总结的反思与补充(2分)

要求

  • AI总结的问题
  • 自己的补充

反思与补充

  1. 历史故事:燃起了兴趣,但“爽点”≠“重点”
    反思:玛丽女王桥段确实抓人,可它把密码学包装成“宫廷谍战”,容易让人把核心误读成“斗智斗勇”,而忽略真正的底层矛盾——数学难题的硬度。
    补充:若教材能在故事后立即给出“那条密码到底为什么会被频率分析破掉”的极简数学推导(哪怕用两行公式说明单表替换的统计脆弱性),就能把“爽点”立即锚定到“数学硬度”这个学习主线上,避免兴趣流于表面。
  2. 五元组模型:清晰但“静态”
    反思:明文-密文-密钥-算法二元组把加解密拍平成一条公式,却天然隐藏了时间维度和参与方维度。
    补充:如果加一幅“时序图”——把加密、传输、解密三个阶段横向拉开,再把“攻击者”放在信道下方标注“可监听”“可篡改”“可重放”——学生一眼就能看懂:为什么需要完整性校验、为什么需要公私钥、为什么需要证书,而不是事后反复背诵“完整性、认证性、不可否认性”这些抽象词。
  3. 对称 vs 非对称:比喻好用,但容易固化思维
    反思:“一把钥匙”和“投递口”的比喻简单,却悄悄把“混合加密”这种现实主流方案给屏蔽了。
    补充:教材应在比喻后立刻补一句“实际HTTPS先用非对称送对称密钥,再用对称跑数据”,让学生刚形成二元对立时就知道“大人全都要”,防止非黑即白的思维定式。
  4. 算法列表:像“菜单”缺“口味提示”
    反思:书中把DES、3DES、AES、SM4等一排介绍,参数列得细,但没有给出“什么时候选谁”的简明策略。
    补充:只要加一张“选型三角”示意图——速度、安全强度、生态支持——并在三角区内标注典型场景(“嵌入式选ChaCha20”“国密项目选SM4”“兼容老系统用3DES”),学生就能把“名字”迅速映射到“用途”,避免学完仍不知何从下手。
  5. 编译大全:细节拉满,却缺“地图”
    反思:一步步教出8种库,新手很容易陷入“跟着敲却不知道自己到底在干嘛”的麻木状态。
    补充:如果先给出一张“目标-工具-产物”总览图——横轴是32/64位、Debug/Release,纵轴是静态/动态,交叉格子里只写“产物名+用途一句话”——学生就能在动手前先看到整张拼图,明白“每一步只是去填一个格子”,而不是无尽的黑箱操作。
  6. 国密切入:情怀加分,但“标准生态”介绍不足
    反思:教材强调SM2/3/4的“国产”属性,却未点明国密标准文档、检测要求、合规流程这些现实环节。
    补充:只需加一页“国密生态地图”——左边是算法,中间是标准文档号(GM/T 0003-2012等),右边是“过检、商用密码产品销售许可、等保2.0”——学生就能意识到:算法只是入口,真正的工程落地后面还有一条合规链,从而对“国产”二字有完整、冷静的认知。
  7. 整体叙事:重“功能”轻“失效”
    反思:两章都在讲“算法能做什么”,几乎没有笔墨讲“算法怎么就会崩”。
    补充:若在每类算法结尾放一张“故障卡”——DES的56位暴力破解、RC4的密钥重用、非对称的中间人、填充的POODLE——用一句话点出死法,学生自然形成“先想怎么死,再想怎么活”的工程思维,而不是盲目乐观地写代码。
    第一章:书中只介绍了加密技术和库的原理,没有说明它们在实际中的应用场景,如网络安全中的SSL/TLS通信加密、数据保护中的硬盘和数据库加密,以及数字签名在电子邮件和软件分发中的完整性验证。第二章:在介绍OpenSSL和Crypto++时缺少实际应用示例,OpenSSL主要用于Web服务器的SSL/TLS加密,Crypto++适合需要定制加密的文件加密工具等应用;提及GmSSL时应说明其与OpenSSL的兼容性以及为满足中国商用密码标准而设计的原因。

四、学习思维导图(2分)

要求

—- Mermaid代码与截图(参考MermaidMindMap语法)或者提交思维导图链接(如果使用线上编辑器,推荐processon,xmind,...)

思维导图

mindmap
root((密码系统设计第一周))
教材
第一章
密码定义与概念
密码功能(机密性/完整性/可用性/认证性/不可否认性)
密码系统五元组(明文/密文/密钥/加密算法/解密算法)
加解密算法分类(对称/非对称)
第二章
OpenSSL安装与编译(源码下载/配置/编译/测试)
GmSSL安装与编译(国产算法支持/与OpenSSL兼容)
课件
网络空间安全概述
密码与密码系统
法律法规与标准
密码应用与密评
实践
gitee/github代码托管
openssl命令行与编程示例
gmssl命令行与编程示例

屏幕截图 2025-09-14 154156


基于AI的学习

要求

  • 至少找到自己理解不是太好2个概念,让AI对自己进行苏格拉底提问
  • 参考下面提示语或者使用AIAgent
    提示词:“我在学***X知识点,请你以苏格拉底的方式对我进行提问,一次一个问题”
    1.核心是要求AI工具:“请你以苏格拉底的方式对我进行提问”
    2.然后AI工具就会给你提问,如果不知道问题的答案,可以反问AI:“你的理解(回答)是什么?”
    3.如果你觉得差不多了,可以先问问AI工具:“针对我XXX知识点,我理解了吗?”
    4.AI工具会给出它的判断,如果你也觉得自己想清楚了,可以最后问AI工具:“我的回答结束了,请对我的回答进行评价总结”,让它帮你总结一下。

学习内容

苏格拉底式对话:密码学的基本概念

提示词:
“我在学习‘密码学的基本概念’知识点,请你以苏格拉底的方式对我进行提问,一次一个问题。”


AI
你说“加密是为了保护信息”,那么如果一条消息永远不需要被任何人读取,是否还需要加密?为什么?

回答
不需要;加密的目的就是为了让“被授权的人”能读、“未被授权的人”不能读。若根本没人要读,就无需耗费资源去加密。


AI
既然加密区分了“授权”与“未授权”,请问谁来决定“谁能解密”?在数学上这种决定权被封装成什么?

回答
由密钥决定;谁拥有正确密钥谁就能解密。数学上把这条界限称为“密钥空间”:只有密钥空间内的值才能把密文映射回明文。


AI
如果密钥空间很小(例如只有 2³² 种可能),但算法极其复杂,你认为系统整体安全吗?给出理由。

回答
不安全;攻击者可直接枚举所有 2³² 把钥匙,复杂度与算法细节无关。安全强度首先看密钥空间能否扛住穷举。


AI
书中提到“加密算法可以公开”,为何公开算法反而被认为更安全?请用“信任”与“验证”两个词说明。

回答
公开后全世界都能验证其数学硬度,发现漏洞即会曝光;保密算法无法被大规模检验,反而可能隐藏后门。信任应建立在可公开验证的基础上。


AI
五元组(明文、密文、密钥、加密算法、解密算法)把加密过程模型化,你觉得这个模型最容易让人忽略哪一类真实世界的攻击?举例说明。

回答
忽略“协议层”攻击,如初始向量重用、填充预言机、时间侧信道;模型只覆盖单步加/解密,未涉及如何把密钥安全分发、如何同步 IV、如何防止篡改。


回答
针对我“密码学的基本概念”知识点,我理解了吗?

AI评价
你已抓住密钥空间、Kerckhoffs 原则及模型边界问题;理解到位,可总结。


回答
我的回答结束了,请对我的回答进行评价总结。

AI总结
核心概念清晰:明白密钥决定授权、密钥长度决定安全、公开算法利于验证,同时意识到基本模型不涵盖协议层攻击;继续保持“模型+实战协议”双视角即可。

苏格拉底式对话:密码系统的五元组

提示词:
“我在学习‘密码系统的五元组’知识点,请你以苏格拉底的方式对我进行提问,一次一个问题。”


AI
在你看来,五元组里的“密钥”到底承担什么角色?请用你自己的话简单说明。

回答
密钥就像一把钥匙,决定同一套算法下能解开哪一把“锁”,没有密钥就无法从密文恢复明文。


AI
如果攻击者拿到了密钥,但未拿到算法细节,系统是否仍然安全?为什么?

回答
不安全;算法迟早会被逆向或公开,安全应依赖密钥保密,而非算法保密。


AI
若密钥长度很短(如32位),算法非常复杂,整体安全性如何?

回答
依旧脆弱;短密钥意味着暴力搜索空间小,算法再复杂也挡不住穷举。


AI
五元组抽象的最大好处与可能误区各是什么?

回答
好处是统一模型,任何对称方案都能套用;误区是易忽视填充、工作模式、初始向量等周边要素。


AI
针对我“密码系统的五元组”知识点,我理解了吗?

AI评价
已抓住核心:密钥是安全支点,强度看密钥长度与保密性;也意识到模型外因素,整体视角合格。


回答
我的回答结束了,请对我的回答进行评价总结。

AI总结
理解到位,能用“钥匙-锁”比喻又跳出比喻,区分复杂度与密钥空间,并提及模型边界;继续保持“模型+实战”双视角即可。

苏格拉底式对话:OpenSSL 的核心概念

提示词:
“我在学习‘OpenSSL’知识点,请你以苏格拉底的方式对我进行提问,一次一个问题。”


AI
当你输入 openssl enc -aes-128-cbc 时,你认为 OpenSSL 最先干的三件事是什么?

回答

  1. 把命令行参数解析成算法、密钥、IV 等结构;
  2. 根据算法名找到对应的 EVP_CIPHER 实现;
  3. 初始化 EVP_CIPHER_CTX,准备后续 update/final。

AI
如果此时你只在命令行给了 -K 123456 却忘了 -iv,CBC 模式还能正常工作吗?为什么?

回答
不能;CBC 必须提供 IV,否则 OpenSSL 会随机生成一个,加密完再输出到 stderr,解密方若没拿到同一 IV 就得不到原明文。


AI
既然 IV 可以公开,那它的“公开”边界在哪里?随密文一起传是否安全?

回答
安全;IV 只要求不可预测,不要求保密。通常做法是把 IV 放在密文最前面,解密时先读固定长度再解。


AI
你提到“EVP_CIPHER 实现”,OpenSSL 为何要用 EVP 层包裹具体算法?直接调 AES 函数不行吗?

回答
EVP 层统一接口,使同一份代码可切换算法,还能自动处理填充、引擎、硬件加速;直接调 AES 函数需自己管填充和上下文,易出错。


AI
当工程里同时出现 libcrypto.so.1.1libcrypto.so.3 两个版本,运行时加载顺序由谁决定?可能引发什么风险?

回答
由动态链接器按 rpath/ldconfig 搜索顺序决定;若老程序链接新符号可能崩溃,或新程序掉到旧版缺少国密算法,出现“功能静默降级”。


回答
针对我“OpenSSL”知识点,我理解了吗?

AI评价
你已抓住命令行→EVP 层→算法实现的调用链,明白 IV 的公开性与版本兼容风险;核心概念清晰,可进入总结。


回答
我的回答结束了,请对我的回答进行评价总结。

AI总结
理解深度合格:能拆解命令行到 API 的映射,知晓 EVP 统一接口的价值,并注意到 IV 与版本兼容的工程细节;后续可继续探究引擎机制、FIPS 模式及国密 EVP 的挂接方式。

学习实践过程遇到的问题与解决方式(AI驱动,优先使用AI工具解决问题)

  • 问题 1:OpenSSL 编译时 make test 报错
    现象:运行 make test 时,报错提示缺少 libtest-harness-perl。
    AI 回答:缺少 libtest-harness-perl 包。
    解决方法:
    sudo apt-get install libtest-harness-perl
  • 问题 2:GmSSL 计算的 SM3 哈希值与 Windows 不一致
    现象:Linux 下 gmssl sm3 file.txt 的结果与 Windows 下不同。
    AI 回答:Linux 文件末尾可能多了一个换行符。
    解决方法:用 echo -n 创建无换行符的文件:
    echo -n "your text content" > file.txt
    gmssl sm3 file.txt

参考资料

posted @ 2025-09-14 16:08  王曦轶  阅读(24)  评论(0)    收藏  举报