密码学 数字签名


数字签名是消息认证的公钥原语。在现实世界中,在手写或打字的消息上使用手写签名是很常见的。它们用于将签名者绑定到消息。

类似地,数字签名是将个人/实体与数字数据绑定的技术。这种绑定可以由接收者以及任何第三方独立验证。

数字签名是根据数据和只有签名者知道的密钥计算出的加密值。

在现实世界中,消息的接收者需要确保该消息属于发送者,并且他不应该能够否认该消息的起源。这一要求在业务应用程序中非常重要,因为交换数据发生争议的可能性非常高。

数字签名模型

如前所述,数字签名方案基于公钥密码学。数字签名方案的模型如下图所示 -

模型数字签名

以下几点详细解释了整个过程 -

  • 采用该方案的每个人都有一个公钥-私钥对。

  • 一般来说,加解密和签名/验证所使用的密钥对是不同的。用于签名的私钥称为签名密钥,公钥称为验证密钥。

  • 签名者将数据提供给哈希函数并生成数据哈希。

  • 然后,哈希值和签名密钥被输入签名算法,该算法根据给定的哈希值生成数字签名。签名被附加到数据中,然后两者都被发送给验证者。

  • 验证者将数字签名和验证密钥输入到验证算法中。验证算法给出一些值作为输出。

  • 验证者还在接收到的数据上运行相同的哈希函数以生成哈希值。

  • 为了进行验证,将该哈希值与验证算法的输出进行比较。验证者根据比较结果判断数字签名是否有效。

  • 由于数字签名是由签名者的“私钥”创建的,任何其他人都无法拥有该密钥;签名者将来不能否认对数据的签名。

应该注意的是,通常不是通过签名算法直接对数据进行签名,而是创建数据的哈希值。由于数据的哈希是数据的唯一表示,因此用哈希代替数据进行签名就足够了。使用哈希而不是直接使用数据进行签名的最重要原因是该方案的效率。

让我们假设 RSA 用作签名算法。正如公钥加密章节中所讨论的,使用 RSA 的加密/签名过程涉及模幂运算。

通过模幂对大数据进行签名的计算成本高昂且耗时。数据的哈希是数据的相对较小的摘要,因此对哈希进行签名比对整个数据进行签名更有效

数字签名的重要性

在所有密码原语中,使用公钥密码技术的数字签名被认为是实现信息安全的非常重要且有用的工具。

除了提供消息不可否认性的能力之外,数字签名还提供消息认证和数据完整性。让我们简单地看看数字签名是如何实现的 -

  • 消息身份验证- 当验证者使用发送者的公钥验证数字签名时,他确信签名仅由拥有相应秘密私钥的发送者创建,而不是由其他人创建。

  • 数据完整性- 如果攻击者可以访问数据并对其进行修改,则接收端的数字签名验证将失败。修改数据的哈希值与验证算法提供的输出将不匹配。因此,假设数据完整性已被破坏,接收者可以安全地拒绝该消息。

  • 不可否认性- 由于假设只有签名者知道签名密钥,因此他只能在给定数据上创建唯一的签名。这样,如果将来出现任何争议,接收者可以将数据和数字签名提供给第三方作为证据。

通过将公钥加密添加到数字签名方案中,我们可以创建一个密码系统,该系统可以提供安全的四个基本要素,即隐私、身份验证、完整性和不可否认性。

使用数字签名加密

在许多数字通信中,希望交换加密消息而不是明文消息以实现机密性。在公钥加密方案中,发送者的公钥(加密)在开放域中可用,因此任何人都可以欺骗他的身份并向接收者发送任何加密的消息。

这使得使用 PKC 进行加密的用户必须寻求数字签名以及加密数据,以确保消息身份验证和不可否认性。

这可以通过将数字签名与加密方案相结合来存档。我们简单讨论一下如何实现这个需求。有两种可能性:先签名后加密先加密后签名

然而,接收者可以利用基于先签名再加密的加密系统来欺骗发送者的身份并将该数据发送给第三方。因此,该方法不是优选的。加密然后签名的过程更加可靠并且被广泛采用。下图描述了这一点 -

使用数字签名加密

接收方收到加密数据和签名后,首先使用发送方的公钥验证签名。在确保签名的有效性后,他然后使用自己的私钥解密来检索数据。