
免责声明本文用于网络安全、软考系统分析师、软件设计师备考学习文中密码学流程为理论科普生产环境电子签名系统需要遵循电子签名相关法律法规密码组件必须经过安全审计。在系统安全分析与设计的实际应用中很多开发者容易将 “信息摘要” 和 “数字签名” 混为一谈或者误以为它们能单独解决所有安全问题。其实这两者在保障数据传输安全时扮演着截然不同却又紧密配合的角色。我们不妨设定一个具体的场景你作为发送方 A需要向接收方 B 发送一份重要的合同文件或大体积邮件附件。在这个过程中如何确保文件内容没有被中间人丙篡改又如何证明这份文件确实是你发的而不是别人伪造的这就需要我们深入理解信息摘要与数字签名的配合机制。为什么不能直接对原文进行签名在讨论具体流程前先解决一个常见的疑问既然非对称加密如 RSA可以用来签名为什么不直接用私钥对整个原始文件进行加密签名而非要先计算摘要核心原因在于效率。非对称加密算法的计算复杂度极高处理速度远慢于对称加密或哈希运算。如果我们要发送的文件高达几百兆甚至几个 G直接使用私钥对全文进行签名操作耗时将是不可接受的。相比之下信息摘要算法如 MD5、SHA‑1、SHA‑256能将任意长度的数据压缩成一个固定长度的 “指纹”例如 128 位或 256 位。对这个短小的摘要进行签名速度快且资源消耗低同时又能代表原文的唯一特征。因此业界的标准做法永远是先算摘要再对摘要签名。这里很多初学者会产生一个概念误区数字签名 私钥加密原文。严格来讲密码学层面 “签名” 和 “加密” 是两套不同接口。RSA‑Sign 签名不等价于 RSA 私钥加密。虽然数学公式高度相似但是填充算法完全不一样不能互相混用。如果开发人员直接调用私钥加密接口充当签名会引入严重安全漏洞。工程上绝对不能简单理解为 “拿私钥把摘要加密一遍”这是写代码时高频踩坑点。举一个直观的性能对比例子一台普通 PCSHA‑256 处理 1GB 文件只需要几十毫秒RSA‑2048 做一次签名运算就要消耗数毫秒。假设直接对 1GB 文件逐块做 RSA 签名整体耗时会拉长成千上万倍不管是邮件系统、电子合同、软件发布都完全无法接受。这就是为什么所有标准协议 PGP、S/MIME、JWT、代码签名全部采用 “先哈希后签名” 模式。第一步利用信息摘要锁定数据完整性信息摘要技术本质上是一种单向散列函数。它的特性是 “雪崩效应”只要原始数据发生哪怕一个比特的变化生成的摘要值就会面目全非。而且这个过程是不可逆的无法从摘要反推出原文。在我们的传输场景中保证数据完整性防篡改是第一道防线。假设你发送了合同文本中间人丙截获后修改了其中的金额数字。如果没有校验机制接收方 B 根本无从察觉。引入信息摘要后流程如下发送方 A 使用哈希算法推荐使用安全性更高的SHA‑256而非已存在碰撞风险的 MD5对原始合同文件进行计算得到一个唯一的摘要值 H1。A 将原始文件和这个摘要值 H1 一起发送给 B注意此时摘要通常是明文传输或者随签名一起发送。接收方 B 收到文件后使用相同的哈希算法对收到的文件重新计算得到摘要值 H2。B 对比 H1 和 H2。如果两者完全一致说明文件在传输过程中未被篡改如果不一致则说明数据完整性已被破坏必须丢弃。这一步解决了 “内容是否被改过” 的问题但还没解决 “是谁发的” 以及 “发送者是否承认发过” 的问题。因为中间人丙完全可以拦截消息修改文件后重新计算一个新的摘要 H3连同修改后的文件一起发给 B。B 对比 H3 和新文件依然是一致的从而被蒙骗。这就需要数字签名登场。这里我们把单纯哈希摘要的短板再讲透彻。单纯哈希只能保证你拿到的文件和你拿到的摘要是匹配的但不能保证摘要本身没有被篡改。中间人可以同时篡改文件 篡改摘要整套校验机制直接失效。很多新手做开发会犯这个错误把文件和 md5 哈希放在同一个 http 响应返回以为这样就防篡改。攻击者拦截请求修改 body 文件同时修改返回里面的 md5 值客户端校验依旧通过。所以裸哈希摘要不能直接用于公开不可信网络它只适合可信渠道分发摘要的场景。例如软件官网网页由官方服务器保护页面上张贴 SHA256 摘要用户下载安装包之后本地算哈希和网页对比这种场景裸哈希是安全。因为摘要来源是可信官网中间人无法修改网页内容。一旦摘要和文件走同一条不可信传输链路裸哈希毫无防护能力。哈希算法的安全等级也需要区分也是软考高频考点MD5128bit已经实现碰撞两份不同文件可以算出一模一样 md5禁止用于安全校验仅可做普通文件快速比对。SHA‑1160bit公开碰撞攻击淘汰不能用于签名、完整性校验。SHA‑256 / SHA‑512SHA2 家族现阶段安全工程首选。SHA‑3新一代哈希标准抗量子计算前景高安全等级系统选用。雪崩效应的含义要吃透仅仅改动文档里面一个数字哪怕把合同金额 100 万改成 10 万输出哈希值会完全变化没有任何规律。但是注意雪崩效应≠抗碰撞雪崩是基础特性抗碰撞是更高安全要求MD5 同样具备雪崩效应但是依然可以构造碰撞。第二步数字签名实现不可抵赖性数字签名的核心逻辑利用了非对称加密体系中 “私钥保密、公钥公开” 的特性。在非对称加密中公钥用于加密私钥用于解密而在数字签名中角色正好互换私钥用于签名公钥用于验证。结合前面的摘要技术完整的防篡改与防抵赖流程如下生成摘要发送方 A 先对原始合同文件计算哈希值得到摘要 H。私钥签名A 使用自己严格保管的私钥对摘要 H 进行加密运算。这个加密后的摘要就是 “数字签名”。发送数据包A 将 “原始文件” “数字签名” 一起发送给 B。公钥验签B 收到数据后首先使用 A 公开的公钥对 “数字签名” 进行解密。如果能成功解密得到摘要 H1这就证明了该签名确实是由持有对应私钥的 A 生成的因为只有 A 的公钥能解开 A 私钥加密的内容从而实现了身份认证和不可抵赖性。A 事后无法否认“这不是我发的”因为私钥只有他有。完整性复核B 同时对收到的原始文件计算哈希值得到摘要 H2。最终比对B 对比解密得到的 H1 和自己计算的 H2。如果一致说明文件既是由 A 发送的防抵赖且在传输中未被篡改防篡改。这里要区分三个容易混淆安全目标完整性、身份认证、不可抵赖。很多考题会在这里挖坑。完整性确认数据没有被修改。裸哈希可以做到完整性但是没有身份。身份认证确认消息来自预期发送者。数字签名可以实现身份认证。不可抵赖发送方事后无法否认自己发送过消息。不可抵赖是数字签名独有的能力。普通身份认证不一定具备不可抵赖。举个例子账号密码登录可以确认你的身份但是服务器产生记录如果账号密码泄露不能作为你操作的法律证据不具备不可抵赖。只有私钥签名可以做到不可抵赖。重要前提数字签名整套体系成立有一个大前提接收方 B 拿到的公钥确实属于 A 本人。如果中间人把公钥偷偷替换成攻击者自己公钥整套签名体系直接失效也就是中间人攻击。签名本身不解决公钥归属问题公钥真实性依靠 CA 证书、PGP 信任网来保证。这是绝大多数教程一笔带过工程上经常踩的大坑。举一个中间人攻击案例演示A 要给 B 发送签名合同。中间人丙拦截通信把 A 的公钥替换成丙自己的公钥发给 B。A 发出的合法签名B 拿伪造的丙公钥验签失败丙篡改合同使用自己私钥对篡改之后的文件签名发送给 B。B 以为手里公钥是 A 的验签成功相信这份篡改合同来自 A。签名本身没问题但是公钥来源被污染安全完全崩塌。所以数字签名技术本身不能校验公钥身份必须依赖外部信任体系。组合拳的实际防御效果在这个组合机制下中间人丙的攻击路径被彻底堵死若丙试图篡改文件他修改了文件内容但他没有 A 的私钥无法对新的文件内容生成合法的数字签名。当 B 用 A 的公钥验证签名时会发现解密出的摘要与自己计算的新文件摘要不匹配从而判定数据无效。若丙试图伪造签名他无法获取 A 的私钥因此根本无法生成能被 A 的公钥成功解密的签名包。若 A 试图抵赖由于签名是用 A 的私钥生成的而私钥理论上仅由 A 掌控只要公钥验证通过法律和技术层面都认定这是 A 的行为A 无法推脱。但是这里要补充边界条件数字签名不是万能银弹存在几种攻击场景签名机制无法防御场景 1重放攻击中间人不修改任何内容把之前截获的一份合法签名合同重复多次发送给 B。签名本身校验完全通过文件没有篡改签名合法。但是这是一条旧的重复消息。签名只能保证 “这份消息是 A 签发内容没有改动”但是无法区分这是刚刚发送还是一年前发送的旧报文。防御手段业务层增加时间戳、全局唯一流水号 nonce。A 在原始报文里面带上当前时间、唯一随机编号B 校验时间不能超过允许时间窗口拒绝重复序列号。密码学签名只管内容完整性重放防护需要业务层实现。场景 2私钥泄露如果 A 的私钥被黑客盗取。攻击者可以使用窃取到私钥随意伪造 A 的签名。此时验签全部显示合法但是并不是 A 本人操作。不可抵赖的根基是私钥的保密性。私钥一旦泄露所有签名全部失效。对应解决方案私钥硬件存储 UKey、密码机 HSM定期证书轮换吊销私钥泄露之后通过 CRL 证书吊销列表作废旧证书。现实电子签章系统私钥一般不存电脑磁盘存放硬件加密介质防止导出窃取。场景 3签名只保护摘要元数据不受保护很多邮件签名 S/MIME、PGP签名保护邮件正文附件但是邮件头部的 from、to、主题等元数据没有纳入签名范围。中间人可以篡改邮件标题但是正文签名依旧校验通过。开发设计签名的时候一定要明确哪些字段需要纳入哈希计算不要漏掉业务关键字段。很多业务漏洞就是关键业务参数没有参与签名计算。区分加密与签名极易混淆的核心考点很多学习者、软考考生最大混淆点数字签名会不会加密数据答案数字签名不会加密原文原文依旧明文传输。签名只是附加一段校验信息任何人拿到数据包都可以阅读原始文件内容。签名解决防篡改、身份、抗抵赖签名不解决保密性防偷看。如果我们同时需要防篡改、不可抵赖同时还要保证内容不能被中间人偷看。就要把【数字签名】【数字信封混合加密】两套机制组合在一起也就是 PGP 加密邮件完整流程。我们把完整 PGP 邮件合同传输完整流程完整梳理一遍A 读取原始合同文件计算文件 SHA256 摘要使用 A 私钥对摘要做数字签名完成签名防篡改防抵赖此时文件依旧明文生成一次性随机 AES 会话密钥使用 AES 会话密钥加密【原始文件 数字签名】对业务数据加密实现机密性中间人看不懂内容使用接收方 B 的公钥加密 AES 会话密钥生成数字信封将加密之后密文、数字信封一起发送给 BB 收到先用 B 自己私钥解开数字信封拿到 AES 会话密钥AES 解密得到原始文件与 A 的数字签名使用 A 的公钥验证数字签名对比摘要校验完整性、发送者身份。这套流程同时达成四个安全目标✅机密性第三方无法偷看合同内容✅完整性文件传输没有被篡改✅身份认证确认消息来自 A✅不可抵赖A 无法否认发送过这份合同很多软考下午案例分析题目同时要求机密性 不可抵赖很多同学只写数字签名丢失加密得分点或者只写数字信封丢失签名得分点。一定要记住签名负责身份抵赖加密负责保密两者功能互相独立互不替代。这里做表格梳理四大安全目标分别依靠什么技术方便备考复习机密性防止别人偷看数据对称加密 / 非对称加密完整性防止数据被修改哈希摘要数字签名身份认证确认是谁发来消息数字签名不可抵赖事后不能否认操作数字签名裸哈希摘要只能做到完整性没有身份、没有抗抵赖。现实协议落地S/MIME 与 PGP 邮件签名对比我们前面一直拿邮件发送合同作为业务场景现实世界邮件安全两大标准S/MIME 和 PGP。S/MIME企业邮件广泛使用基于 X.509 证书体系依赖 CA 机构颁发证书。公钥合法性由权威 CA 担保。适合企业组织 Outlook、Foxmail 原生支持 S/MIME 签名加密邮件。PGPGPG信任网 Web‑of‑Trust 去中心化不需要 CA 中心。个人开源圈子使用居多。公钥信任来自其他用户签名背书。两种协议内部逻辑完全一致签名流程原始数据→哈希摘要→私钥签名加密流程生成会话密钥对称加密数据接收方公钥加密会话密钥数字信封。两种模式都支持四种工作模式仅签名不加密邮件明文附带签名。所有人可读邮件但是可以验证发送人没有伪造内容没被篡改。企业对外发布公告邮件常用。仅加密不签名邮件密文但是无法确认发送方是谁存在中间人风险一般不推荐业务使用。既签名又加密最高安全等级机密性 完整性 抗抵赖传输涉密合同邮件首选。仅证书用于公钥分发。开发或者做软考答题有一个高频坑执行顺序。先签名后加密不可以反过来先加密再签名。如果先加密再签名攻击者收到密文可以剥离原有签名替换成攻击者自己的签名。接收方验签看到攻击者签名造成身份混淆。所以标准规范强制顺序先对原始明文做签名再整体加密签名 明文。PGP、S/MIME 全部遵守 “先签后加密”。软考案例题写流程顺序写错直接丢大半分数。工程开发中数字签名常见漏洞盘点很多开发看懂理论写代码实现依旧出现安全漏洞这里总结现实业务经常出现问题同时也是软考系统分析师案例题经常出题的故障场景。漏洞 1直接对完整大原文做签名后果性能极差CPU 占用高大文件直接超时。正确做法哈希之后对摘要签名。漏洞 2参与哈希计算字段不全关键业务参数没有纳入签名例如接口请求金额、订单 ID 没有放进哈希仅仅对用户名字段签名。攻击者可以篡改金额签名依旧校验成功。修复所有需要防篡改的业务字段全部参与哈希运算。漏洞 3使用不安全哈希算法MD5、SHA1 做签名摘要攻击者构造碰撞文件签名校验通过但是业务文件已经被替换。修复至少 SHA‑256 及以上哈希算法。漏洞 4公钥来源没有校验直接使用网络传来公钥直接从 http 接口获取对方公钥没有校验证书签名。遭遇中间人替换公钥攻击。修复X509 证书校验 CA 签名PGP 校验信任背书公钥不能直接信任网络输入。漏洞 5缺少时间戳、随机数没有防御重放攻击旧签名报文可以重复提交造成重复下单、重复签署合同。修复业务报文内置 timestamp、唯一 nonce接收方校验时间窗口拒绝重复序列号。漏洞 6签名与验签使用错误填充模式RSA 签名使用 PKCS1‑v15 老旧填充存在 Bleichenbacher 漏洞或者加密填充和签名填充混用。修复优先使用 PSS 填充模式 RSA‑PSS。漏洞 7先加密后签名颠倒流程中间人剥离原始签名附加攻击者签名身份伪造。修复业务明文先签名之后再加密整体数据。漏洞 8私钥硬编码写代码、存普通磁盘文件私钥泄露攻击者可以伪造全部签名。修复私钥不要导出明文优先硬件 UKey、密码机 HSM。软考高频真题解析选择题 1在邮件传输系统需要同时保障合同附件机密性、完整性、不可抵赖需要哪些技术组合A、仅 MD5 摘要B、SHA256 信息摘要C、数字签名D、数字签名 数字信封混合加密答案 D。解析数字签名提供完整性、不可抵赖数字信封混合加密实现机密性二者缺一。A、B 只有完整性C 签名不能加密保密。选择题 2数字签名是对以下哪一项进行签名运算A、完整原始业务文件B、文件哈希摘要C、会话密钥D、公钥答案 B。标准流程先哈希得到摘要对摘要签名。判断题数字签名可以防止传输数据被窃听偷看❌错误解析数字签名不会加密原文不能防窃听防止偷看需要加密机制。案例简答题目简述单纯信息摘要哈希为什么不能实现不可抵赖参考答案信息摘要仅能校验数据完整性摘要本身可以被中间人篡改攻击者修改文件同时重新计算摘要哈希摘要没有绑定发送者身份无法证明报文由特定用户产生任意人都可以计算哈希不能作为发送者否认行为的依据因此无法实现不可抵赖。简答简述数字签名完整工作流程。参考答案发送方对原始业务数据做哈希运算生成哈希摘要发送方使用自己的私钥对摘要执行数字签名运算原始业务数据连同数字签名一起发送接收方接收方获取发送方可信公钥使用公钥对数字签名验签还原摘要接收方对收到业务数据独立计算哈希摘要对比验签得到摘要与本地计算摘要两者一致证明数据完整消息来自私钥持有者实现不可抵赖。数字签名与电子签章现实法律边界很多同学会混淆技术数字签名和法律上可靠电子签名。技术上密码学数字签名只是技术条件。满足《电子签名法》可靠电子签名需要同时满足四条电子签名制作数据用于电子签名时属于电子签名人专有签署时电子签名制作数据仅由电子签名人控制签署后对电子签名的任何改动能够被发现签署后对数据电文内容和形式的任何改动能够被发现。仅仅写一段密码学签名代码不等于法律认可电子签章。如果私钥存在普通电脑私钥可以被别人盗取使用就不满足 “仅签名人控制”。商用合法电子合同平台一般使用第三方 CA私钥保存在硬件 UKey 或者加密机才具备完整法律效力。这是系统分析师案例题可能涉及拓展知识点。结语在实际的工程实践如 PGP 邮件加密或电子合同签署系统中正是遵循了 “哈希摘要 私钥签名 公钥验证” 这一标准范式。信息摘要确保了数据的 “原样性”而数字签名赋予了数据 “归属权” 和 “法律效力”。理解并正确实施这一流程是构建可信网络传输环境的基石也是系统安全分析与设计中最为核心的实战技能之一。我们回顾全文核心知识点总结为什么不对原文签名非对称运算性能差对短小哈希摘要签名兼顾安全与效率。裸哈希摘要只能校验完整性无法确认发送方身份中间人可以同时篡改文件与摘要。数字签名发送方私钥签名摘要接收方发送方公钥验签实现完整性、身份认证、不可抵赖签名不会加密原文。签名体系成立的前提接收方拿到的公钥确实属于发送者依靠 CA 证书或者 PGP 信任网保障签名本身不能校验公钥真伪。签名不防御重放攻击业务层需要增加时间戳、随机流水号。如果同时需要保密防窃听必须叠加数字信封混合加密流程顺序先签名后加密。私钥安全是数字签名的根基私钥泄露全部签名作废。很多学习者容易把哈希、签名、加密三者混为一谈。一定要牢记三者各司其职哈希负责提取数据指纹签名绑定指纹与发送者身份加密用来保护内容不被第三者偷看。现实业务系统几乎不会单独使用某一项而是根据安全目标做组合。掌握这套逻辑不管是软考答题还是做接口安全、邮件安全、电子合同系统的方案设计都可以避开大量常见安全误区。最后网络安全需要学习那些知识网络安全零基础入门学习路线规划初级1、网络安全理论知识2天①了解行业相关背景前景确定发展方向。②学习网络安全相关法律法规。③网络安全运营的概念。④等保简介、等保规定、流程和规范。非常重要2、渗透测试基础一周①渗透测试的流程、分类、标准②信息收集技术主动/被动信息搜集、Nmap工具、Google Hacking③漏洞扫描、漏洞利用、原理利用方法、工具MSF、绕过IDS和反病毒侦察④主机攻防演练MS17-010、MS08-067、MS10-046、MS12-20等3、操作系统基础一周①Windows系统常见功能和命令②Kali Linux系统常见功能和命令③操作系统安全系统入侵排查/系统加固基础4、计算机网络基础一周①计算机网络基础、协议和架构②网络通信原理、OSI模型、数据转发流程③常见协议解析HTTP、TCP/IP、ARP等④网络攻击技术与网络安全防御技术⑤Web漏洞原理与防御主动/被动攻击、DDOS攻击、CVE漏洞复现5、数据库基础操作2天①数据库基础②SQL语言基础③数据库安全加固6、Web渗透1周①HTML、CSS和JavaScript简介②OWASP Top10③Web漏洞扫描工具④Web渗透工具Nmap、BurpSuite、SQLMap、其他菜刀、漏扫等恭喜你如果学到这里你基本可以从事一份网络安全相关的工作比如渗透测试、Web 渗透、安全服务、安全分析等岗位如果等保模块学的好还可以从事等保工程师。薪资区间6k-15k到此为止大概1个月的时间。你已经成为了一名“脚本小子”。那么你还想往下探索吗想要入坑黑客网络安全的朋友给大家准备了一份282G全网最全的网络安全资料包免费领取7、脚本编程初级/中级/高级在网络安全领域。是否具备编程能力是“脚本小子”和真正黑客的本质区别。在实际的渗透测试过程中面对复杂多变的网络环境当常用工具不能满足实际需求的时候往往需要对现有工具进行扩展或者编写符合我们要求的工具、自动化脚本这个时候就需要具备一定的编程能力。在分秒必争的CTF竞赛中想要高效地使用自制的脚本工具来实现各种目的更是需要拥有编程能力.零基础入门建议选择脚本语言Python/PHP/Go/Java中的一种对常用库进行编程学习 搭建开发环境和选择IDE,PHP环境推荐Wamp和XAMPP IDE强烈推荐Sublime ·Python编程学习学习内容包含语法、正则、文件、 网络、多线程等常用库推荐《Python核心编程》不要看完 ·用Python编写漏洞的exp,然后写一个简单的网络爬虫 ·PHP基本语法学习并书写一个简单的博客系统 熟悉MVC架构并试着学习一个PHP框架或者Python框架 (可选) ·了解Bootstrap的布局或者CSS。8、超级黑客这部分内容对零基础的同学来说还比较遥远就不展开细说了贴一个大概的路线。网络安全工程师企业级学习路线视频配套资料国内外网安书籍、文档工具当然除了有配套的视频同时也为大家整理了各种文档和书籍资料工具并且已经帮大家分好类了。一些我自己买的、其他平台白嫖不到的视频教程要学习网安其实不难难的是坚持和相信自己我的经验是既然已经选定网安你就要相信它相信它能成为你日后进阶的高效渠道这样自己才会更有信念去学习才能在碰到困难的时候坚持下去。机会属于有准备的人这是一个实力的时代。人和人之间的差距不在于智商而在于如何利用业余时间只要你想学习什么时候开始都不晚不要担心这担心那你只需努力剩下的交给时间这份完整版的学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】