🌐 第七章 网络安全技术
📄 一句话概括

数字签名把 7.5 的"私钥加密"从原型盖成正式楼:对数据先算哈希指纹(SHA-256),再用自己的私钥加密这块指纹——这就是签名;收信人用对方的公钥解出签名里的指纹,再对收到的数据自己重算一遍指纹,两边一比:相等 = 确系本人发的 + 一个字都没被改过。一张签名同时兑现三件事:认证(是真身发的)、完整性(没被篡改)、不可否认(私钥只有一把,签了赖不掉——电子合同的法律根基就在这)。之前一系列欠条在此全部结清:7.2 说"加密防不了篡改",7.4 留了"公钥人人能用、可冒充"的暗门,7.5 搭好"私钥造、公钥验"的地基——本节一次收口。注意:签名不是把数据加密倒过来,签的是指纹不是数据本身。

📝 本节和前面几节的关系

本节是 7.2~7.5 整条"加密线"的总装车间:7.5 给了地基(私钥加密方向 = 身份认证),本节加上哈希这个新零件,装配出完整的数字签名——同时补上 7.2 埋的两个窟窿(防不了篡改、防不了冒充)。

哈希其实早见过:7.1 讲口令时服务器存的就是哈希+盐(只存指纹不存原文)——同一个工具,两个岗位。老账也对上:7.1 的数字证书里 CA"盖信任章",盖的就是本节的数字签名;5.21 的 WPA2 四步握手里有 MIC(消息完整性校验),就是"防篡改"思想在无线第一线的简化版。看完本节,7.1~7.6 六节连成一条完整的故事线:认证(7.1)→ 加密两条路线(7.2)→ 共享密钥(7.3)→ 公开密钥(7.4)→ 私钥方向(7.5)→ 合体成签名(7.6)。

一、签名要一次证明三件事

手写签名的日常作用拆开看是三件事,数字签名要全部数字化地兑现:

前几节学过的工具各自只能兑现一角:7.4 的公钥加密只管保密;7.5 的私钥加密能证身份,但对篡改无能为力(密文改了照样能"解开",只是解开是乱码)。数字签名 = 私钥加密(证身份)+ 哈希指纹(防篡改)合体,三件事一次办齐。

二、完整流程:先取指纹,再盖章(第一张配图)

发送方(老墨)两步:

  1. 算指纹:把要发的数据喂给哈希函数(SHA-256),得到一串固定 256 位的"数据指纹";
  2. 盖私钥章:用自己的私钥加密这块指纹——得到的密文就是数字签名,附在数据后面一起发出去。

注意:数据本身可以明文发(签名管的是"谁发的、改没改",不管"有没有人看"——要保密就再叠加 7.4 的公钥加密,两件事各走各的)。

接收方(小波)两路并进:

三、哈希指纹的四个特性:比对为什么靠得住

哈希函数是本节的新零件,四个特性缺一不可:

  1. 雪崩效应:输入改 1 位,输出面目全非——"改一个逗号"也逃不掉;
  2. 定长输出:1 KB 和 1 GB 的文件,指纹都是 256 位;
  3. 单向性:从指纹反推出原文,不可能;
  4. 抗碰撞:找两份指纹相同的不同数据,难到没有现实意义。

第 ④ 条是整个比对的地基:指纹相等 = 数据必然相同。常见算法 SHA-256(当代标准)、SHA-3;MD5、SHA-1 已被破解淘汰——指纹能被伪造的签名等于没有签名。

四、为什么只对指纹盖章,不盖整份数据

还是 7.4 那个老短板:RSA 又慢、又只能处理小块数据。对一个 1 GB 的文件直接"私钥加密",要切成几万块慢慢算,不现实。

哈希指纹把问题变简单:无论多大的数据,先压缩成固定的 256 位,私钥只盖这一小块,一秒完成。指纹没变 = 数据没变(第 ④ 条兜底)——既省力,又完整。

这也解释了签名的形态:你验证软件、证书时看到的"签名"从来不是数据的加密版,只是一小块加密过的指纹。

五、签名 ≠ 加密:最容易混的一对

加密(7.4 方向①) 签名(本节)
用的钥匙 对方的公钥 自己的私钥
处理对象 整份数据 数据的哈希指纹
回答的问题 "别人能不能看懂" "是不是本人发的、改没改"
验证方式 私钥解开即读 两路指纹比对

口诀:公钥加密是"寄挂号信",私钥签名是"按手印"——挂号信管看不看得到,手印管是不是你按的。HTTPS 里两者同台:签名验服务器身份 + 公钥加密送会话密钥 + AES 加密流量。

六、动手 Demo(Demo94)

7.5 的 Demo93 已经跑过"盖章/验章",本节补齐另一半:亲眼看看哈希指纹的雪崩效应。

第一步:给文件取指纹

随便找个文件(比如桌面上的任意一张图),按 Win 键 → 输入 powershell → 回车,粘贴运行:

Get-FileHash "C:\Users\admin\Desktop\任意一个文件.jpg" -Algorithm SHA256 | Format-List

看什么算成功:打印出一串 64 位的十六进制字符——这就是这个文件的 SHA-256 指纹。

第二步:体验雪崩效应

把同一个文件用记事本/画图打开,随便改一个像素(或加一个空格)另存,再取一次指纹。

看什么算成功:两次指纹完全不同——内容只动了万分之一,指纹已经天翻地覆。这就是"改 1 位、全变样",也是签名能抓篡改的原因。

第三步:串起完整流程

再跑一遍 Demo93 的 SignData/VerifyData 两段(真章 True、篡改 False)——现在你能说清它内部发生了什么:SignData = 哈希指纹 + 私钥盖章;VerifyData = 重算指纹 + 公钥取章 + 比对。

30 秒实验:用 Get-FileHash 验证一个下载文件的完整性(很多软件官网会公布 SHA-256 校验值)——对比本地指纹和官网公布的值,一致才说明下载没被损坏或篡改。这就是数字签名思想的"手动挡"版本。

七、常见误区

八、动手自测

点开自测(先自己答,再展开对答案) 1. 数字签名一次兑现哪三件事?分别靠哪个环节兑现? 2. 写出发送方和接收方的完整步骤(各两三步)。 3. 为什么签名前要先算哈希,而不是直接用私钥加密整份数据? 4. 哈希的四个特性是什么?哪一个保证"指纹相等 = 数据相同"? 5. 签名和加密在"用哪把钥匙、处理什么对象"上有何区别? 6. MD5 为什么不能再用于签名?
答案 1. **认证**(公钥能解开签名 = 私钥主人盖的)、**完整性**(数据变则指纹变,比对失败)、**不可否认**(私钥唯一,签了赖不掉)——分别靠"私钥盖指纹章""两路指纹比对""私钥只有一把"兑现。 2. 发送方:①数据 → 哈希指纹;②私钥加密指纹 = 签名,随数据发出。接收方:③对数据重算指纹(路A)+ 用对方公钥解签名取指纹(路B);④两路比对,相等通过、不等否决。 3. RSA 又慢又只能处理小块(7.4 老短板),大文件按块签不现实;哈希把任意大小数据压成固定 256 位指纹,私钥只盖这一小块,一秒完成,且"指纹没变 = 数据没变"。 4. **雪崩效应、定长输出、单向性、抗碰撞**;第 ④ 条抗碰撞保证"指纹相等 = 数据相同"。 5. 加密用**对方公钥**、处理**整份数据**,回答"别人能不能看懂";签名用**自己私钥**、处理**哈希指纹**,回答"是不是本人发的、改没改"。 6. MD5 已能被人为制造**碰撞**(两份不同数据同指纹)——攻击者可以把你的签名"移植"到恶意数据上,指纹能伪造的签名等于没有签名。用 SHA-256 起步。

九、下一步学什么

相关笔记