📜  密码学数字签名

📅  最后修改于: 2021-01-12 04:48:08             🧑  作者: Mango


数字签名是消息身份验证的公钥原语。在物理世界中,通常在手写或键入的消息上使用手写签名。它们用于将签名者绑定到消息。

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

数字签名是根据数据和仅签名者已知的秘密密钥计算出的密码值。

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

数字签名模型

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

型号数字签名

以下几点详细说明了整个过程-

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

  • 通常,用于加密/解密和签名/验证的密钥对是不同的。用于签名的私钥称为签名密钥,公钥称为验证密钥。

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

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

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

  • 验证程序还对接收到的数据运行相同的哈希函数以生成哈希值。

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

  • 由于数字签名是由签名者的“私钥”创建的,因此没有人可以拥有此密钥。签名者以后将无法拒绝对数据进行签名。

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

让我们假设使用RSA作为签名算法。如公钥加密一章中所述,使用RSA的加密/签名过程涉及模幂。

通过模块化幂运算对大数据进行签名在计算上既昂贵又耗时。数据的散列是数据的相对较小的摘要,因此对散列进行签名比对整个数据进行签名更为有效

数字签名的重要性

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

除了提供消息不可否认性的能力之外,数字签名还提供消息身份验证和数据完整性。让我们简要地看一下如何通过数字签名来实现这一点-

  • 消息认证-验证者使用发送者的公钥验证数字签名时,可以确保签名仅由拥有相应私钥的发送者创建,而没有其他人。

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

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

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

带有数字签名的加密

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

这对于使用PKC进行加密的用户寻找数字签名以及加密的数据以确保消息认证和不可否认性至关重要。

可以通过将数字签名与加密方案结合起来进行存档。让我们简要讨论如何实现此要求。有两种可能,先签名后加密和先加密后签名

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

带有数字签名的加密

接收者在收到加密数据和签名后,首先使用发送者的公钥验证签名。在确保签名的有效性之后,他随后使用其私钥通过解密来检索数据。