密码学数字签名
数字签名是消息认证的公钥原语。 在现实世界中,在手写或打字的消息上使用手写签名是很常见的。 它们用于将签名者绑定到消息。
同样,数字签名是将个人/实体与数字数据绑定的技术。 这种绑定可以由接收者以及任何第三方独立验证。
数字签名是根据数据和只有签名者知道的密钥计算得出的加密值。
在现实世界中,消息的接收者需要确保该消息属于发送者,并且他不应该能够否认该消息的来源。 这一要求在业务应用程序中非常重要,因为交换数据发生争议的可能性非常高。
数字签名模型
如前所述,数字签名方案基于公钥加密技术。 数字签名方案的模型如下图所示−
以下几点详细解释了整个过程 −
采用该方案的每个人都有一个公钥-私钥对。
一般情况下,用于加密/解密和签名/验证的密钥对是不同的。 用于签名的私钥称为签名密钥,公钥称为验证密钥。
签名者将数据提供给哈希函数并生成数据哈希。
哈希值和签名密钥随后被输入签名算法,该算法根据给定的哈希值生成数字签名。 签名附加到数据中,然后将两者发送给验证者。
验证者将数字签名和验证密钥输入到验证算法中。 验证算法给出一些值作为输出。
验证者还在接收到的数据上运行相同的哈希函数以生成哈希值。
为了进行验证,将此哈希值与验证算法的输出进行比较。 验证者根据比较结果判断数字签名是否有效。
由于数字签名是由签名者的"私钥"创建的,其他人无法拥有该密钥; 签名者将来不能否认对数据的签名。
需要注意的是,通常会创建数据的哈希值,而不是直接通过签名算法对数据进行签名。 由于数据的哈希是数据的唯一表示,因此用哈希代替数据进行签名就足够了。 使用哈希而不是直接使用数据进行签名的最重要原因是方案的效率。
假设使用 RSA 作为签名算法。 正如公钥加密章节中所讨论的,使用 RSA 的加密/签名过程涉及模幂。
通过模幂对大数据进行签名的计算量很大且耗时。 数据的哈希是数据的相对较小的摘要,因此对哈希进行签名比对整个数据进行签名更有效。
数字签名的重要性
在所有加密原语中,使用公钥加密的数字签名被认为是实现信息安全非常重要且有用的工具。
除了提供消息不可否认性的能力之外,数字签名还提供消息认证和数据完整性。 让我们简单看看数字签名是如何实现的 −
消息认证 − 当验证者使用发送者的公钥验证数字签名时,他确信签名仅由拥有相应秘密私钥的发送者创建,而没有其他人。
数据完整性 − 如果攻击者访问并修改了数据,则接收端的数字签名验证将失败。 修改数据的哈希值与验证算法提供的输出将不匹配。 因此,假设数据完整性已被破坏,接收方可以安全地拒绝该消息。
不可否认性 − 由于假设只有签名者知道签名密钥,因此他只能对给定数据创建唯一的签名。 这样,如果以后出现任何争议,接收者可以将数据和数字签名提供给第三方作为证据。
通过将公钥加密添加到数字签名方案中,我们可以创建一个密码系统,该系统可以提供安全的四个基本要素,即− 隐私、身份验证、完整性和不可否认性。
使用数字签名加密
在许多数字通信中,希望交换加密消息而不是明文消息以实现机密性。 在公钥加密方案中,发送者的公钥(加密)在开放域中可用,因此任何人都可以欺骗他的身份并向接收者发送任何加密的消息。
这使得使用 PKC 进行加密的用户必须寻求数字签名以及加密数据,以确保消息身份验证和不可否认性。
这可以通过将数字签名与加密方案相结合来存档。 我们简单讨论一下如何实现这个需求。 有两种可能性,先签名后加密和先加密后签名。
但是,接收者可以利用基于先签名再加密的加密系统来欺骗发送者的身份并将该数据发送给第三方。 因此,该方法不是优选的。 加密然后签名的过程更加可靠并且被广泛采用。 下图对此进行了描述−
接收方收到加密数据和签名后,首先使用发送方的公钥验证签名。 在确保签名的有效性后,他然后使用自己的私钥解密来检索数据。