数字签名

数字签名

从消息认证码到数字签名

使用消息认证码我们可以识别消息是否被篡改或者发送者身份是否被伪装,也就是可以校验消息的完整性,还可以对消息进行认证。然而,在出具借条的场景中却无法使用消息认证码,因为消息认证码无法防止否认。

消息认证码之所以无法防止否认,是因为消息认证码需要在发送者和接收者之间共享同一个密钥。正是因为密钥是共享的,所以能够使用消息认证码计算出正确 MAC 值的并不只有发送者,接收者也可以。由于发送者和接收者都可以计算出正确的 MAC 值,因此对于第三方来说,我们无法证明这条消息的确是由发送者生成的。

通过数字签名解决问题

发送者使用的密钥是一个只有发送者自己才知道的私钥。当发送者发送消息时,他用私钥生成一个签名,相对的,接收者则使用一个和发送者不同的密钥对签名进行验证。使用接收者的密钥无法根据消息生成签名,但是用发送者的密钥却可以对发送者所计算的签名进行验证,也就是说可以知道这个签名是否是通过发送者的密钥计算出来的。这就是数字签名。

签名的生成和验证

在数字签名中出现了两种行为:

  • 生成消息签名的行为
  • 验证消息签名的行为

这两种行为需要使用各自专用的密钥来完成。发送者使用“签名密钥”来生成消息的签名,接收者和验证者则使用“验证密钥”来验证消息的签名。数字签名对签名密钥和验证密钥进行了区分,使用验证密钥是无法生成签名的。签名密钥只能由签名的人持有,而验证密钥则是任何需要验证签名的人都可以持有。

公钥密码和数字签名的结构非常相似,实际上,数字签名就是通过将公钥密码反过来用而实现的。

公钥密码与数字签名

公钥密码包括一个由公钥和私钥组成的密钥对,公钥用于加密,私钥用于解密。

数字签名也包括一个由公钥和私钥组成的密钥对,公钥用于解密,私钥用于加密。

数字签名的方法

两种生成和验证数字签名的方法:

  • 直接对消息签名的方法
  • 对消息的散列值签名的方法,一般都用这种方法

直接对消息签名的方法

发送者需要事先生成一个包括公钥和私钥的密钥对,需要验证签名的接收者需要得到发送者的公钥,在此基础上,签名和验证的过程如下:

对消息的散列值签名的方法

打赏
  • Copyrights © 2017-2023 WSQ
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信