数字签名

我们日常生活中的书信或文件可以依据亲笔签名或印章来证明其真实来源。类似地,在计算机网络中传送的报文可以使用数字签名来证明其真实来源。
数字签名必须保证以下三点
(1)接收方能够核实发送方对报文的数字签名。
(2)包括接收方在内的任何人都不能伪造对报文的数字签名。
(3)发送方事后不能抵赖对报文的数字签名。

数字签名的实现

现在已有多种实现数字签名的方法。采用公钥密码算法比采用对称密钥密码算法更容易实现数字签名。

  1. 签名生成(发送方):
  • 对原始消息(如文档、交易)进行哈希运算,生成摘要(Digest)。
  • 用发送方的私钥加密摘要,生成数字签名。
  • 将签名与原始消息一起发送给接收方。
  1. 验证过程(接收方):
  • 使用发送方的公钥解密签名,得到原始摘要。
  • 对接收到的消息重新计算哈希值,生成新摘要。
  • 对比两个摘要:

    • 一致:消息未被篡改,且来源可信。
    • 不一致:消息可能被篡改或签名无效。

    数字签名

由于公钥密码算法的计算代价非常高,对整个报文进行数字签名是一件非常耗时的事情,更有效的方法是仅对报文摘要进行数字签名。

  1. 具有保密性的数字签名
    采用公钥密码算法实现报文的数字签名,但被截获的后果

    数字签名1

使用接收方公钥加密带有数字签名的报文

数字签名2

常见误区

  • 数字签名 ≠ 加密:签名仅验证来源和完整性,不提供机密性(需额外加密)。
  • 哈希必要性:直接加密大文件效率低,哈希压缩后签名更高效。
  • 证书信任:自签名证书需手动信任,CA签发证书通过PKI自动验证。