数字签名的引入

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chengqiuming/article/details/82831775

一 Alice的借条

假设Alice需要向Bob借100万。不过Alice和Bob离得很远,无法直接见面。通过银行汇款,Alice可以立刻从Bob那里收到钱,但是Alice的借条应该怎样发送给Bob呢?可以用挂号信寄过去,不过那样会花上一段时间,能不能用电子邮件来发送借条呢?比如:

“Bob,我向你借款100万元。——Alice”

显然,这样的邮件无法代替借条,Bob看到这封邮件也不会轻易相信,因为电子邮件是很容易被伪造的。Alice写的邮件可能被篡改,也有可能有人伪装成Alice发送者封邮件,或者Alice也可以事后以“我不知道这张借条”为理由进行否认。

二 从消息认证码到数字签名

1 消息认证码

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

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

2 数字签名

假设发送者Alice和接收者Bob不需要共享一个密钥,也就是说,Alice和Bob各自使用不同的密钥。

我们假设Alice使用的密钥是一个只有Alice自己才知道的私钥。当Alice发送消息时,她用私钥生成一个“签名”。相对地,接收者Bob则使用一个和Alice不同的密钥对签名进行验证。使用Bob的密钥无法根据消息生成签名,但是用Bob的密钥却可以对Alice所计算的签名进行验证,也就是说可以知道这个签名是否是通过Alice的密钥计算出来的。如果真有这么一种方法的话,那么不管是识别篡改、伪装还是防止否认就都可以实现了。

实际上,这种看似神奇的技术已经问世了,它就是数字签名。 

猜你喜欢

转载自blog.csdn.net/chengqiuming/article/details/82831775