20231326第五周预习报告
- 20231326第五周预习报告
- 学习内容
- 《Windows C/C++加密解密实战》第 7 章
- 签名至少有5种特性
- 数字签名
- 数字签名的一般性定义
- 数字签名的分类
- 数字签名的安全性
- 数字签名的特征
- 数字签名的应用
- 使用OpenSSL命令进行签名与验签
- 基于OpenSSL的签名验签编程
- 《Windows C/C++加密解密实战》第 7 章
- AI对学习内容的总结
- 一、数字签名技术概述
- 二、数字签名技术基础
- 1. 签名的核心特性
- 2. 数字签名的基本概念
- 3. 数字签名的原理
- 4. 数字签名的一般性定义
- 三、数字签名的分类
- 四、数字签名的安全性
- 五、数字签名的特征与应用
- 1. 核心特征
- 2. 主要应用
- 六、RSA公钥算法在数字签名中的应用
- 七、基于OpenSSL的签名与验签实践
- 1. OpenSSL命令操作
- 2. OpenSSL编程实现
- 对 AI 总结的反思与补充
- 一、整体评价
- 二、不同之处与分析
- 三、需要补充与深化的知识点
- 四、后续学习方向
- 学习思维导图
- 基于 AI 的学习
- 🧩 第一部分:数字签名技术概述
- 🧩 第二部分:数字签名技术基础
- 🧩 第三部分:数字签名分类
- 🧩 第四部分:数字签名安全性
- 第7章数字签名 苏格拉底问答 总结
- 一、问答总结
- 1️⃣ 数字签名技术概述
- 2️⃣ 数字签名技术基础
- 3️⃣ 数字签名分类
- 4️⃣ 数字签名安全性
- 5️⃣ 实践与算法
- 二、整体优缺点
- 三、改进学习建议
- 学习实践过程遇到的问题与解决方式
- 问题 1:数字签名的安全性依赖哪些数学问题?为什么这些问题能保证签名不可伪造?
- 问题 2:RSA签名为什么需要结合Hash摘要,而不能直接对原消息签名?
- 问题 3:盲签名与普通签名有什么本质区别?在现实中有什么应用价值?
- 本文链接
- 参考资料
- 学习内容
学习内容
《Windows C/C++加密解密实战》第 7 章
签名至少有5种特性
- 签名是可信的
- 签名不可伪造
- 签名不可重用
- 签名的文件不可改变
- 签名不可抵赖
数字签名
- 与公钥加密算法类似
- 签名:利用签名者的私钥对消息进行计算、变换
- 验签:使用公钥检验该签名是不是由签名者签署
- 三个条件
- 不可抵赖性:签名者事后不能否认他签署的签名
- 不可伪造性:其他人不可伪造签名者的签名
- 可仲裁性:当签名双方对一个签名真实性发生争执时,第三方仲裁机构可以帮助解决争执。
- 原理:
- 系统初始化,生成数字签名中所需的参数
- 发送方利用自己的私钥对消息进行签名
- 发送方将消息原文和作为原文附件的数字签名同时传输给消息的接收方
- 接收方利用发送的公钥对签名进行解密
- 接收方将解密后的获得的消息与消息原文进行对比,如果二者一致,那么表示消息在传输中没有受到破坏或篡改,反之不然。
- 消息签名和验签的基本原理图:
数字签名的一般性定义
- 三个集合
- 消息空间
- 签名空间
- 密钥空间
- 三个算法
- 密钥生成算法:概率多项式时间
- 签名生成算法:概率多项式时间
- 签名验证算法:确定多项式时间
- 正确:有效签名
- 错误:无效签名
数字签名的分类
- 基于数学难题的分类
- 离散对数问题 --> ELGamal、DSA……
- 素因子分解问题(包含二次剩余问题) --> RSA……
- 有限自动机理论
- 椭圆曲线
- 基于密码体制的分类
- 对称密钥密码体制
- 引入第三方公证机关
- 签名:发送方:A (消息\(m_1\))--> \(E_A\),得到消息\(M_1\) --> 公证机关:C --> \(D_A\) --> 构造新消息\(M_2\):发送方信息+原消息\(m_1\) --> \(E_C\) --> 发送方
- 发送方 --> 接收方:B
- 验签:接收方:B(加密消息\(E_2\)) --> 公证机关 -->\(D_C\),得到消息m_2 --> (\(E_B\)) --> 接收方 -->(\(D_B\),得到消息\(m_2\))
- 复杂、效率低
- 第三方可信问题?
- 引入第三方公证机关
- 非对称密钥密码体制
- 签名:发送方:A(消息\(M_1\)) --> \(S_A\) --> 接收方:B
- 验签:B --> \(V_A\) --> 原始消息\(M_1\)
- 简便、安全
- 对称密钥密码体制
- 基于特殊用途的分类
- 盲签名:只需知道签名,不在乎消息内容
- 匿名特性:电子货币、电子选举……
- 双重签名:
- 安全电子交易SET协议
- 群签名:
- 集中式密钥管理
- 分布式密钥管理
- 代理签名:签名权委托
- 授权第三方
- 盲签名:只需知道签名,不在乎消息内容
- 其他分类
- ……
数字签名的安全性
- 安全性评估
- 安全性证明
- 攻击
数字签名的特征
- 一个优秀的数字签名应当具备下列特征:
- 消息发送方一旦给接收方发出签名之后,不可以再对他所签发的消息进行否认。
- 消息接收方可以确认并证实发送方的签名,但是不可以伪造签名。
- 如果签名是复制其他的签名获得的,那么消息接收方可以拒绝签名的消息,即不可以通过复制的方式将一个消息的签名变成其他消息的签名。
- 如果消息接收方己收到签名的消息,就不能再否认。
- 可以存在第三方确认通信双方之间的消息传输的过程,但是不可以伪造这个过程。
数字签名的应用
- 电子商务
- 软件发行
- ……
使用OpenSSL命令进行签名与验签
openssl version # 1.1.1b
openssl genrsa -out prikey.pem
openssl rsa -in pnkey.pem -pubout -out pubkey.pem
echo "hello world" > file.txt
openssl dgst -sign prikey.pem -shal -out shal_rsa_file.sign file.txt
openssl dgst -verify pubkey.pem -sha1 -signature shal_rsa_file.sign file.txt
基于OpenSSL的签名验签编程
- 直接使用RSA函数
- 使用EVP系列函数
AI对学习内容的总结
第七章围绕数字签名技术展开,系统阐述了其概念、原理、分类、安全性、应用及基于OpenSSL的实践操作,核心是结合RSA公钥算法说明数字签名如何保障信息安全。
一、数字签名技术概述
- 背景:互联网信息安全脆弱,需通过密码学技术保障数据传输的保密性、完整性等,数字签名是公钥密码学衍生的安全认证技术。
- 发展历程:20世纪70年代随公钥密码体制出现,国际上ISO、NIST等组织推动标准制定,我国2005年施行《电子签名法》规范其应用。
- 主流签名方案:包括基于公开密钥(如RSA)、EIGamal、椭圆曲线ECC算法的方案,还有盲签名、群签名等特殊方案。
二、数字签名技术基础
1. 签名的核心特性
手写签名和数字签名均需具备5个特性:签名可信、不可伪造、不可重用、签名文件不可改变、签名不可抵赖。
2. 数字签名的基本概念
- 定义:模拟手写签名,通过密码学技术将发送方信息明文转为密文传输,实现用户身份认证、信息完整性与有效性保障,区别于可复制的“数字化”签名。
- 关键条件:需满足不可抵赖性(签名者事后不能否认)、不可伪造性(他人无法伪造)、可仲裁性(第三方可解决签名争执)。
- 与公钥加密的关联:签名用签名者私钥对消息计算,验证用公钥检验,基于公钥密码体制实现。
3. 数字签名的原理
- 系统初始化,生成所需参数。
- 发送方用私钥对消息签名。
- 发送方将消息原文与数字签名一同传给接收方。
- 接收方用发送方公钥对签名解密。
- 接收方对比解密消息与原文,一致则消息未被篡改,反之则被篡改。
4. 数字签名的一般性定义
- 三集合:消息空间、签名空间、密钥空间(含私钥和公钥)。
- 三算法:密钥生成算法(输入安全参数,输出私钥SK和公钥PK)、签名生成算法(输入SK和待签消息m,输出签名sign(m))、签名验证算法(输入签名、消息m和PK,输出“正确”或“错误”)。
三、数字签名的分类
- 基于数学难题:分为基于离散对数问题(如EIGamal、DSA)、素因子分解问题(如RSA)、椭圆曲线、有限自动机理论的签名方案。
- 基于密码体制
- 对称密钥密码体制:需第三方公证机关,传输效率低,文件安全性依赖公证机关。
- 非对称密钥密码体制:有公开和秘密两个密钥,实现数字签名简便且安全,无需频繁依赖第三方。
- 基于特殊用途:包括盲签名(用于电子货币、电子选举,保障消息匿名)、双重签名(如SET协议中,保护客户信用卡信息和订单隐私)、群签名(群体成员以群体名义签名,支持成员动态变动)、代理签名(密钥持有者授权第三方签名)。
- 其他分类:按接收者验证方式分为真数字签名和仲裁数字签名;按签名消息个数分为一次和非一次数字签名等。
四、数字签名的安全性
- 安全性评估:设计者对方案进行密码分析,评估其在考虑范围内的安全性,无法穷举所有情况,仅为用户提供一定信心。
- 安全性证明:证明方案被破译难度与公认难题相当,有基于随机应答模型(假设Hash函数随机应答,不完全可靠)和标准模型(无需不合理假设)两类。
- 攻击分析:从攻击者角度尝试获取不该获取的信息,找出方案安全缺陷,推动方案改进或淘汰,提升数字签名整体安全性。
五、数字签名的特征与应用
1. 核心特征
- 发送方不可否认已发签名消息。
- 接收方可证实发送方签名,无法伪造。
- 复制的签名会被接收方拒绝。
- 接收方收到签名消息后不可否认。
- 第三方可确认通信过程,无法伪造。
2. 主要应用
- 广泛用于身份认证、数据完整性保护、信息不可否认等信息安全领域,“有信息安全的地方就有数字签名”。
- 在电子商务中作用关键,如RSA公钥签名方案保障数据传输安全和交易双方身份确认,支撑电子数据交换等环节。
六、RSA公钥算法在数字签名中的应用
- 方案组成:包括消息空间、参数生成算法、签名算法和验证算法。
- 签名与验证过程
- 签名:用户A选参数生成公钥和私钥,用私钥计算(S = Sig(M) = M^d \bmod n)(d为私钥),将S作为签名附在消息M后发给用户B。
- 验证:用户B用公钥计算(M' = S^e \bmod n)(e为公钥),对比M和M',一致则签名有效。
- 优化方式:待签名消息较长时,先分组签名效率低,可先用Hash函数对消息做Hash变换,对摘要消息签名,发送方传原文、摘要值和摘要签名值,接收方对比摘要并验签。
七、基于OpenSSL的签名与验签实践
1. OpenSSL命令操作
- 生成RSA密钥对:在命令行进入指定目录,输入“genrsa -out prikey.pem”生成2048位私钥文件。
- 导出公钥:输入“rsa -in prikey.pem -pubout -out pubkey.pem”生成公钥文件。
- 签名:用私钥对文件摘要签名,命令为“dgst -sign prikey.pem -shal -out shal_rsa_file.sign file.txt”。
- 验签:用公钥验签,命令为“dgst -verify pubkey.pem -shal -signature shal_rsa_file.sign file.txt”,验签通过提示“Verified OK”。
2. OpenSSL编程实现
- 直接使用RSA函数:通过RSA_sign(私钥签名,需先计算消息摘要)和RSA_verify(公钥验签)函数实现,需配置工程属性,添加相关库和包含目录。
- 使用EVP系列函数:遵循“初始化-更新-结束”三部曲,签名用EVP_SignInit_ex、EVP_SignUpdate、EVP_SignFinal,验签用EVP_VerifyInit_ex、EVP_VerifyUpdate、EVP_VerifyFinal,支持处理大数据,需注意内存释放。
对 AI 总结的反思与补充
一、整体评价
AI 对第七章的总结内容全面、结构清晰,逻辑上从概念、原理、分类、安全性、特征与应用到具体实践都进行了系统阐述,体现了较强的知识整合与条理性。尤其在分类体系与OpenSSL 实践部分,AI 的总结比我原本的笔记更细致,也有助于理解数字签名在不同层次的实现方式。
但也存在一些不足与遗漏之处,主要体现在底层机制、数学模型、安全证明方式等方面不够深入,部分表述偏重概念化而缺少技术细节。同时在我自己的总结中,一些命令书写和概念定义更贴近教材原文,但AI在总结时略有简化或偏离原意。
二、不同之处与分析
对比维度 | 我的总结 | AI 的总结 | 差异分析 |
---|---|---|---|
知识结构 | 以章节内容为主线,偏重教材原文整理 | 按逻辑结构重组,形成系统框架 | AI 逻辑更强,但与教材顺序不同,适合复习而非笔记复现 |
签名特性 | 强调“可信、不可伪造、不可重用、不可改变、不可抵赖”五个核心特性 | 概述性叙述,部分融入特征与应用章节 | AI 的表达更概括,但略削弱原文的“五点”形式记忆性 |
数字签名原理 | 侧重“签名—传输—验签—比对”的五步流程 | 在总结中补充了 Hash 摘要参与签名的优化思路 | AI 的扩展体现对 RSA 实际运算的理解,但教材原文并未强调 Hash |
分类部分 | 简述“对称/非对称/特殊用途” | 更细化,增加“基于数学难题”与“基于密码体制”两维度 | AI 分类更符合学术标准,我的笔记偏向教材叙述逻辑 |
安全性分析 | 仅提到“安全性评估、安全性证明、攻击” | 进一步区分“随机应答模型”和“标准模型” | 这一部分是AI补充的重点内容,是我遗漏的知识点 |
应用场景 | 提到电子商务、软件发行等 | 强调“身份认证、数据完整性、不可否认”等更广泛的应用 | AI 的总结范围更宽,适合论文与答辩表达 |
OpenSSL实践 | 列出命令操作流程 | 增加了参数说明与编程API(RSA_sign、EVP系列) | AI 的编程视角更实用,我的总结偏命令行实践 |
三、需要补充与深化的知识点
-
数学基础补充
- 深入理解数字签名依赖的数学难题:
- RSA:基于大整数分解困难性;
- DSA/EIGamal:基于离散对数难题;
- ECC:基于椭圆曲线离散对数问题。
- 掌握这些算法的核心计算公式与安全强度对比。
- 深入理解数字签名依赖的数学难题:
-
Hash在签名中的作用
- 教材中未明确,但实际应用必须先对消息进行哈希(如SHA256);
- 作用:提升效率与安全性;
- 公式:
S = Sign(Hash(M))
,Verify(S, Hash(M))
。
-
安全性证明体系
- 了解两种主要安全性证明方法:
- 标准模型(不依赖理想假设);
- 随机预言模型(ROM);
- 明白“签名可伪造性”与“抗自适应选择消息攻击(CMA)”的区别。
- 了解两种主要安全性证明方法:
-
盲签名与群签名的机制
- 盲签名:消息内容被随机掩盖,签名者不知原文;
- 群签名:允许群体成员代表整个群体签名,第三方可追踪签名来源;
- 实际应用:电子货币系统(盲签名)与企业组织签名(群签名)。
-
OpenSSL 编程接口细节
- 学习
EVP_SignInit_ex
、EVP_SignUpdate
、EVP_SignFinal
与EVP_Verify*
系列函数; - 理解其与底层
RSA_sign()
的区别; - 注意内存释放与错误处理流程(
EVP_MD_CTX_free
、EVP_PKEY_free
)。
- 学习
-
数字签名与加密的区别与联系
- 加密:保证机密性;
- 签名:保证完整性与身份真实性;
- 实际应用中常结合使用(如:
加密(签名(消息))
)。
-
实际安全攻击方式
- 常见攻击:重放攻击、伪造攻击、替换攻击;
- 防御措施:时间戳、唯一序列号、摘要绑定。
四、后续学习方向
-
动手实验
- 使用 OpenSSL 实现完整签名-验签流程;
- 比较 SHA1 与 SHA256 的效果;
- 尝试修改消息观察验签失败结果。
-
代码级理解
- 阅读 RSA_sign 与 EVP 接口源码调用链;
- 分析 PEM 格式私钥、公钥的结构(ASN.1编码)。
-
安全性拓展
- 学习 SM2 国密签名算法与 RSA/ECC 的对比;
- 理解“可证明安全性”的数学逻辑。
-
应用延伸
- 探索数字签名在电子合同、区块链、PKI体系中的作用;
- 学习数字证书与签名之间的关系。
学习思维导图
基于 AI 的学习
原对话链接:
https://chatgpt.com/share/68f3c7ae-6dec-800b-8c45-54077c9a4607
- Gisli: 我学习了以上知识点。基于这个思维导图,以苏格拉底的方式提问我,一次一个问题,每个知识点追问不超过3个问题,覆盖全面,补充回答。当超过10个问题后你觉得可以停止时,主动结束提问并总结我的回答的优缺点,提出改进学习
- ChatGPT: 太棒了,兄弟(Gisli)!我们来进行一场苏格拉底式问答吧——我提问,你思考、作答,我再追问。每个知识点我只问不超过3个问题,帮你真正“啃透”数字签名。准备好了吗?那我们开始👇
🧩 第一部分:数字签名技术概述
- ChatGPT: Q1: 你觉得在信息安全体系中,为什么需要“数字签名”这种机制,而不是仅仅依靠加密?
- Gisli: 在现代信息安全中,加密只能确保消息不被泄露,但不能确保消息来源的真实性以及完整性,所以需要证明发出者的方式与算法
- ChatGPT: 完全正确,Gisli!👍 你的回答抓住了数字签名的核心价值:认证身份 + 保证消息完整性,而不仅仅是保密。
接着问:
- ChatGPT: Q2: 你能说说数字签名发展历程中,从“公钥密码体制”到“电子签名法”是如何推动数字签名广泛应用的吗?
- Gisli: 在电子商务中,电子签名虽然有便携性、认证性,但是终究可以通过复制粘贴等手段伪造;使用公钥算法体制中的私钥,对电子签名后的文件本身或者摘要加密,则只能由公钥解密才能获得原始信息;私钥由发出人保管,则可证得真实性。因此,使用双重”签名“更可靠,进而推动数字签名的广泛应用
- ChatGPT: 很好,Gisli!你提到的关键点很到位:公钥密码体制保证了签名的唯一性和真实性,而“电子签名法”则为其在法律和商业场景中提供了规范和认可,这确实推动了数字签名的广泛应用。
接下来问:
- ChatGPT: Q3: 思考一下,RSA、ElGamal、ECC、盲签名和群签名,它们在设计理念上有何不同?为什么会出现这些多样化方案?
- Gisli: RSA:基于大数素因子分解问题;ElGamal:基于离散对数问题;ECC:基于椭圆曲线问题。是处于不同的数学难题考虑。盲签名:只需要验证签名真实性,而不关注消息内容。可能是处于“零知识证明”考虑。群签名:由群内个体代表签名,但又可以验证签名的个体身份真实性。处于集体公共考虑
- ChatGPT: 完全正确,Gisli!👏 你已经抓住了签名方案多样化的核心原因:不同数学难题保证安全性,不同应用场景(匿名性、群体身份等)推动特殊用途签名的出现。
🧩 第二部分:数字签名技术基础
- ChatGPT: Q4: 签名特性里提到“不可伪造、不可重用、文件不可改变、不可抵赖”,你能举一个实际例子说明每一条特性如何体现吗?
- Gisli: 私钥进行签名,私钥仅签名者可知;不清楚;签名后的文件经过改动,无法验签;私钥仅签名者可知,因而认为是签名者所签
- ChatGPT: 好的,Gisli,你已经抓住了“不可伪造”和“文件不可改变”以及“不可抵赖”的核心。😊 我帮你补充一下“不清楚”的“不可重用”例子:如果攻击者截获了某个签名,不可直接在其他文件上使用同样的签名,否则验证会失败。每次签名都是针对具体消息生成的,签名不能通用。
接着问:
- ChatGPT: Q5: “数字签名”与“公钥加密”有什么关系?为什么私钥用于签名,而公钥用于验证?
-
Gisli: 加密是对方用自己公钥加密,自己私钥解密;签名是自己私钥签名,对方用自己公钥验签,两者操作互逆;私钥仅签名者持有,公钥广而布知,因此其他人用公钥验证,自己用私钥签名,才能证明我是我
-
ChatGPT: 完全对,Gisli!👍 你已经抓住了数字签名是公钥加密的逆向使用这一关键点:加密保护消息机密性,签名保证身份和完整性。
-
ChatGPT: Q6: 请你说一下数字签名的原理流程,从密钥生成到消息验证,每一步的逻辑是什么?
- Gisli: 你是指?比如?
- ChatGPT: 我意思是:把数字签名整个操作流程描述一遍,让我看到你对每一步逻辑的理解。比如:
- 系统初始化生成密钥 → 私钥/公钥对产生
- 私钥签名 → 用私钥对消息或消息摘要加密生成签名
- 传输消息 + 签名 → 把消息和签名发送给接收方
- 公钥验证 → 接收方用发送者的公钥验证签名是否正确
- 对比消息一致性 → 确认消息未被篡改
你可以用自己的话,把整个流程讲一遍。
- Gisli: 生成自己的公私钥对,公布公钥;发送文件,用私钥签名,发送原文件与签名文件给其他人,其他人利用公开的我的公钥计算签名文件进行验签,如果得到结果与原文件(或其摘要)相同,则认为验签成功
- ChatGPT: 完美,Gisli!👏 你的回答完整覆盖了数字签名的核心流程:密钥生成 → 私钥签名 → 发送文件与签名 → 公钥验证 → 消息完整性确认。
🧩 第三部分:数字签名分类
- ChatGPT: Q7: 数字签名可以基于数学难题、密码体制或特殊用途来分类。你能说出每种分类的代表方案及它们的适用场景吗?
- Gisli: 素因子分解:RSA:兼容性能。离散对数:ELGamal:高安全。椭圆曲线:ECC系列:快速。
- ChatGPT: 很好,Gisli,你抓住了数学难题型签名的核心:RSA 基于素因子分解,ElGamal 基于离散对数,ECC 基于椭圆曲线,分别在兼容性、安全性和运算效率上各有优势。我帮你补充一下特殊用途分类的几个例子:
- 盲签名:匿名电子投票、电子货币
- 群签名:群体成员可代表群体签署,但个体身份匿名
- 代理签名:委托签名权给其他人
接着问:
- ChatGPT: Q8: 基于密码体制的签名,为什么非对称密钥签名比对称密钥签名更常用?
- Gisli: 非对称密钥无需要引入第三方,没有第三方是否真正可信问题,而且流程大大简化,速度快
- ChatGPT: 完全正确,Gisli!👍 你的回答抓住了非对称签名的优势:无需依赖第三方公证机构,流程简化,而且在现代应用中效率和安全性都更好。
🧩 第四部分:数字签名安全性
- ChatGPT: Q9: 数字签名面临的攻击有哪些?你能简单说明每种攻击的方式吗?
- Gisli: 对于离散对数型的中间人攻击?我不清楚,请讲解
- ChatGPT: 没问题,Gisli,我给你讲清楚几个常见攻击类型以及中间人攻击的原理:
-
重放攻击(Replay Attack)
- 攻击者截获合法签名的消息,再次发送给接收方。
- 数字签名系统如果不加时间戳或唯一标识,接收方可能误以为是新消息。
-
伪造攻击(Forgery Attack)
- 攻击者试图自己生成一个签名,让接收方误以为是合法发送者签名。
- 数学难题(如RSA分解、离散对数)保证伪造非常困难。
-
替换攻击(Substitution Attack)
- 攻击者替换消息内容,但保持原签名不变。
- 验签时会发现消息摘要不匹配,从而防止篡改。
-
中间人攻击(Man-in-the-Middle)
- 攻击者位于通信双方之间,截获双方公钥并伪装成对方发送消息。
- 离散对数型(如ElGamal)或其他签名若没有认证公钥,就可能被中间人伪造公钥,欺骗双方。
- 防御方法:通过证书或可信第三方验证公钥,确保公钥真实性。
如果你愿意,我可以画一张中间人攻击示意图让你一眼理解。你想让我画吗?
- Gisli: 继续
- ChatGPT: 好,Gisli!下面我先给你一张中间人攻击(MITM)示意图(mermaid),然后解释每一步并给出常见防护措施,接着问下一个苏格拉底问题(第10题)。
- ChatGPT: 解释(逐步):
- Alice 想把她的公钥发给 Bob,或两边建立加密/签名验证所需的公钥。
- Mallory 拦截了 Alice 发出的公钥,并把自己的公钥冒充成 Alice 的公钥发给 Bob(即公钥替换)。
- Bob 接收到“看起来像 Alice 的公钥”,用它来加密给 Alice 的消息或用它来验证签名 —— 实际上这是 Mallory 的公钥,所以 Mallory 能解密或伪造。
- Mallory 同样可以在向 Alice 转发 Bob 的公钥时做冒充,使 Alice 也接受错误的公钥。
- 结果:Mallory 能读、篡改、重签、重放双方消息,而双方仍以为通信是安全且直接的。
常见防护措施:
-
使用 证书/PKI:公钥由受信任的证书颁发机构(CA)签名,验证证书链与颁发者。
-
使用 公钥指纹/外部验证:通过安全渠道(面对面、电话、已认证的目录)核对公钥指纹。
-
使用 密钥交换协议并认证对端(如 TLS 的证书验证、SSH 的 known_hosts 指纹绑定)。
-
使用 带时间戳 / 一次性标识 防止重放。
-
ChatGPT: 好了,进入第 10 题(也是最后一题):
Q10: 你能解释一下安全性证明中“标准模型(standard model)”与“随机预言机模型(random oracle model)”的区别吗?为什么研究人员会用随机预言机模型做证明?(简要说明各自的优缺点)
- Gisli: 请详细讲解,
- ChatGPT: 好,Gisli,我给你详细讲解标准模型和随机预言机模型,以及它们在数字签名安全性证明中的作用。
1️⃣ 标准模型(Standard Model)
- 概念:最严格的证明模型,所有算法和攻击者能力都是可计算的,真实存在。
- 优点:证明结果贴近现实。
- 缺点:证明困难,很多高效算法难以在此证明。
2️⃣ 随机预言机模型(Random Oracle Model, ROM)
- 概念:理想化模型,把哈希函数看作完美随机函数。
- 用途:证明算法在理想化条件下安全。
- 优点:简化证明,便于设计高效算法。
- 缺点:理想化,不完全贴近现实,实际哈希函数可能有差异。
3️⃣ 总结对比
特性 | 标准模型 | 随机预言机模型 |
---|---|---|
严格性 | 高 | 较低,理想化假设 |
贴近实际 | 高 | 理论上不完全贴近真实 |
证明难度 | 高 | 相对容易 |
实用性 | 有时难以实现 | 高,便于设计高效算法 |
-
ChatGPT: Gisli,总体来说,ROM 常用来设计高效算法,因为很多算法在标准模型下难以证明。
-
Gisli: 可以,
-
ChatGPT: 好,Gisli!我给你画一个 数字签名安全性证明模型示意图(mermaid):
-
ChatGPT: 说明:算法从实际设计出发,进入安全性分析,可以选择标准模型严格证明或随机预言机模型简化证明。ROM 更便于实践,标准模型更贴近现实。
-
Gisli: 总结以下
-
ChatGPT: 好,Gisli!下面是这轮苏格拉底问答总结 + 优缺点 + 改进建议:
第7章数字签名 苏格拉底问答 总结
一、问答总结
1️⃣ 数字签名技术概述
- 理论理解扎实,能区分加密与签名的不同作用:加密保证机密性,签名保证身份与完整性。
- 公钥密码体制推动签名广泛应用,并结合电子签名法在法律和商业场景中获得认可。
- 对多种签名方案(RSA、ElGamal、ECC、盲签名、群签名)及其设计理念理解清楚。
2️⃣ 数字签名技术基础
- 能描述签名特性:不可伪造、不可重用、文件不可改变、不可抵赖。
- 掌握私钥签名、公钥验证逻辑。
- 能完整描述签名流程(密钥生成 → 签名 → 传输 → 验证 → 对比消息)。
3️⃣ 数字签名分类
- 能区分基于数学难题、密码体制和特殊用途的分类。
- 理解 RSA、ElGamal、ECC 各自特点。
- 对特殊用途签名(盲签名、群签名、代理签名)有初步理解。
4️⃣ 数字签名安全性
- 知道常见攻击类型:重放、伪造、替换、中间人攻击。
- 对中间人攻击有较清楚的理解,并能通过示意图辅助理解。
- 对标准模型和随机预言机模型有详细理解,知道各自优缺点。
5️⃣ 实践与算法
- 理解 RSA 签名算法公式(S = M^d mod n)及验签公式(M' = S^e mod n)。
- 对 OpenSSL 实践命令行和编程接口有概念性理解。
二、整体优缺点
优点:
- 理论基础扎实,逻辑清楚,能正确区分签名与加密的作用。
- 对签名流程、公钥私钥使用、主要算法和数学基础理解准确。
- 安全性与攻击类型有清晰认识,并能理解模型证明的意义。
待改进点:
- 特殊签名用途的应用实例可以更多记忆和结合场景。
- “不可重用”等细节特性可通过实际操作加深理解。
- 实践环节(OpenSSL 或编程实现)可以补充经验,加深记忆与技能。
三、改进学习建议
- 结合实际案例:电子投票、区块链交易、软件签名等,理解盲签名、群签名的实际用途。
- 动手实践:在 OpenSSL 下生成密钥、签名、验签,观察错误、篡改或重放时的验证结果。
- 复盘模型概念:对标准模型与随机预言机模型可画流程图或表格帮助记忆。
- 强化攻击理解:模拟中间人攻击、重放攻击等,将理论与实践结合,加深对安全性的整体理解。
学习实践过程遇到的问题与解决方式
问题 1:数字签名的安全性依赖哪些数学问题?为什么这些问题能保证签名不可伪造?
GPT回答:
数字签名安全性核心在于“数学难题的不可逆性”,不同签名方案依赖不同问题:
- RSA → 素因数分解问题:已知大数 ( n = p \cdot q ) 和公钥 ( e ),难以推导出私钥 ( d )(即求 ( \phi(n)^{-1} \mod e ))。
- DSA/ElGamal → 离散对数问题:给定 ( g^x \mod p ),无法高效求解 ( x )。
- ECC → 椭圆曲线离散对数问题:给定 ( Q = kP ),无法高效求解 ( k )。
这些问题难以逆向求解,保证了攻击者即便知道签名和公钥,也无法伪造有效签名,从而保证不可伪造性。
深度点:签名安全性不仅依赖数学难题本身,还依赖密钥长度和随机数生成器的质量。
问题 2:RSA签名为什么需要结合Hash摘要,而不能直接对原消息签名?
GPT回答:
直接对消息签名有几个问题:
- 效率低:大消息直接做指数运算非常耗时。
- 安全性不足:原消息结构可能被攻击者利用进行伪造(如选择消息攻击)。
解决方法:
- 先计算消息的Hash摘要 ( H(M) )(固定长度、不可逆)
- 然后签名 ( S = H(M)^d \mod n )
好处:
- 提高效率:签名固定长度的Hash值,而非整个消息。
- 增强安全性:Hash不可逆性和抗碰撞性减少伪造签名的可能性。
深度点:Hash选择不当(如MD5)可能破坏签名安全,因此常用SHA-256及以上。
问题 3:盲签名与普通签名有什么本质区别?在现实中有什么应用价值?
GPT回答:
- 普通签名:签名者知道消息内容,签名后消息+签名可公开验证。
- 盲签名:签名者无法看到消息原文,签名过程“盲化”了消息,验证时依然有效。
机制核心:
- 消息 ( M ) 被随机因子 ( r ) “盲化”:( M' = M \cdot r^e \mod n )
- 签名者签名 ( S' = (M')^d \mod n )
- 消息接收者去盲化 ( S = S'/r ) 得到有效签名
应用价值:
- 电子货币:用户匿名领取、消费数字现金
- 电子投票:保证选票匿名性,同时可验证合法性
深度点:盲签名兼顾隐私保护与可验证性,是匿名化场景不可或缺的工具。
本文链接
- cnblogs:
- https://www.cnblogs.com/gisliw/p/19150358
参考资料
- AI工具(你使用的AI工具及其链接)
- ChatGPT
- 图书
- 《Windows C/C++加密解密实战》