数字签名

当收件人必须识别和验证邮件发件人时,数字签名可用于以纯文本形式分发邮件。 对消息进行签名不会改变消息;它只是生成一个数字签名字符串,你可以与消息捆绑或单独传输。 数字签名是使用发送方的 私钥加密的短数据片段。 使用发件人的 公钥 解密签名数据可以证明数据是由发送方或有权访问发件人私钥的人加密的。

数字签名是使用 公钥 签名算法生成的。 私钥生成签名,并且必须使用相应的公钥来验证签名。 下图显示了此过程。

生成数字签名

在消息中创建数字签名涉及到两个步骤。 第一步涉及创建 哈希 值 (也称为 消息摘要) 。 然后使用签名者的私钥对此哈希值进行签名。 下面是创建数字签名所涉及的步骤的插图。

从邮件创建数字签名

若要验证签名,需要邮件和签名。 首先,必须按照创建签名的方式从消息创建哈希值。 然后,使用签名者的公钥针对签名验证此哈希值。 如果哈希值和签名匹配,则可以确信消息确实是签名者最初签名的消息,并且它未被篡改。 下图说明了验证数字签名所涉及的过程。

验证数字签名

哈希值由少量的二进制数据组成,通常约为 160 位。 这是使用 哈希算法生成的。 本节稍后会列出其中许多算法。

无论使用的算法如何,所有哈希值都共享以下属性:

  • 哈希值的长度由所使用的算法类型决定,其长度不会随消息的大小而变化。 最常见的哈希值长度为 128 位或 160 位。
  • 每对非相同消息都会转换为完全不同的哈希值,即使两个消息仅相差一位。 使用当今的技术,在不破坏哈希算法的情况下发现转换为相同哈希值的消息是不可行的。
  • 每次使用相同算法对特定消息进行哈希处理时,都会生成相同的哈希值。
  • 所有哈希算法都是单向的。 给定哈希值后,无法恢复原始消息。 事实上,在给定哈希值的情况下,无法单独确定原始消息的属性。