← 返回题目列表

什么是数字签名?它和加密有什么区别?

高频 中等 第 4 / 29 题 更新于 2026/07/28
数字签名哈希非对称加密HTTPS

简化版

数字签名用来证明「这份内容确实是某人发的、且没被篡改」(认证 + 完整性)。做法是:先对内容算哈希摘要,再用私钥加密这个摘要得到签名;别人用公钥解密签名得到摘要,和自己算的摘要对比,一致就说明没被改、且确实是私钥持有者签的。它和加密的关键区别:加密用公钥、解密用私钥(保密);签名用私钥、验证用公钥(认证)——公私钥用法正好相反

详细版

数字签名的过程

  • 签名方摘要 = 哈希(内容)签名 = 私钥加密(摘要),把内容 + 签名一起发出。
  • 验证方摘要A = 公钥解密(签名)摘要B = 哈希(收到的内容) → 比较 摘要A == 摘要B

如果两个摘要一致,说明:① 内容没被篡改(改了内容,摘要B 就变了);② 确实是私钥持有者签的(只有对应私钥能签出能被公钥解开的签名)。

为什么先哈希再签,而不是直接对内容签:非对称运算慢,内容可能很大,先哈希成固定长度的短摘要再签,效率高;且哈希还提供了完整性校验。

完整版教学

一、签名和加密:公私钥用法相反

这是这道题的题眼。非对称的公私钥有两种「反向」用法,对应两个完全不同的目的:

加密(保密性)数字签名(认证 + 完整性)
谁能操作公钥加密(人人可加密)私钥签名(只有持有者能签)
谁能还原私钥解密(只有持有者能看)公钥验证(人人可验证)
目的只有你能看证明是你发的、没被改

加密是「只有私钥持有者能读」,签名是「只有私钥持有者能签、但谁都能验」。 方向正好反过来。理解这个「反向」,就理解了数字签名的本质。

二、为什么私钥签名能证明身份

关键在于:私钥只有持有者一个人有,且用私钥签的东西只有对应公钥能验证通过

所以,当你收到一份内容和签名,用某人的公钥成功验证了签名,就能推断:这个签名一定是用配对的私钥签的,而私钥只有那个人有 → 因此这份内容确实来自他,且没被篡改(篡改会导致摘要对不上)。

这就是「不可否认性」——签名者无法抵赖,因为只有他能签出这个签名。

三、哈希在签名里的作用

数字签名离不开哈希(摘要算法,如 SHA-256),它负责「完整性」:

  • 哈希把任意长内容压成固定长度的摘要,且内容改一个字,摘要就面目全非(雪崩效应);
  • 哈希不可逆,无法从摘要反推内容;
  • 所以对摘要签名,等价于对内容签名,但更高效(摘要短,非对称运算快)。

验证方重新哈希收到的内容,和签名里解出的摘要一比,就能发现内容有没有被改。哈希保完整性,私钥签名保来源真实性,两者配合才是完整的数字签名。

四、数字签名在 HTTPS/证书里的应用

数字签名是 HTTPS 信任体系的基石:

  • 证书签名:CA 用自己的私钥对「域名 + 服务器公钥」签名,做成证书;浏览器用 CA 公钥验证签名,确认证书可信(详见「数字证书」那道题)。
  • 握手完整性:TLS 握手过程也用签名/MAC 保证握手消息没被中间人篡改。

可以说,没有数字签名,证书体系就无法防伪造,HTTPS 的「防冒充」也就无从谈起。

五、常见误区

  • ❌ 把签名和加密搞反——加密公钥加、私钥解;签名私钥签、公钥验,方向相反。
  • ❌ 以为签名是加密整个内容——是对内容的哈希摘要签名,内容本身通常不因签名而加密。
  • ❌ 以为签名保证内容保密——签名只保证「来源真实 + 没被篡改」,不负责保密(保密是加密的事)。
  • ❌ 以为哈希就能防篡改——单纯哈希能被连内容带哈希一起改掉;配上私钥签名,攻击者没私钥才改不了。

六、常见误区与追问

考点正确口径
签名私钥对摘要签名,公钥验证
加密公钥加密私钥解密,或对称密钥加解密
摘要先 hash 再签名,避免对大内容直接签
digest = Hash(message)
signature = Sign(privateKey, digest)
Verify(publicKey, digest, signature)

签名证明“谁发的、有没有被改”,加密保证“别人看不见”。

  • 误区:数字签名就是加密。 签名目标是身份认证和完整性,加密目标是机密性。
  • 误区:签名要用公钥生成。 签名由私钥生成,任何持有公钥的人都能验证。
  • 误区:直接对原文全文签名最常见。 实际通常先计算摘要,再对摘要签名,效率更高且格式固定。
  • 追问:为什么签名能防篡改? 内容一改摘要就变,原签名无法通过公钥验证。
  • 追问:HTTPS 哪里用到签名? 证书由 CA 签名,握手中服务器也可能对握手参数签名证明持有私钥。
  • 追问:签名能保证保密吗? 不能,签名不隐藏内容;需要加密才能保证机密性。

七、加强记忆

数字签名 = 对内容哈希摘要 + 用私钥加密摘要,验证时用公钥解签得摘要、和重新哈希的摘要比对,保证「来源真实 + 没被篡改」(认证 + 完整性 + 不可否认)。它和加密的公私钥用法正好相反:加密是公钥加/私钥解(保密),签名是私钥签/公钥验(认证)。CA 给证书签名就是它的核心应用。