关于数字签名的简单通信过程
- 发送者 Alice 对消息 签署数字签名 ,并将消息 和签名 发送给 Bob;
- Bob 对接收到的签名 进行验证,确认其确实为 Alice 对消息 的签名。
发送者 Alice 视角
- Alice 具有私钥 , 公钥 ,
- Alice 选择随机数 , 并计算 ,
- Alice 对消息 进行哈希压缩,得到 ,
- Alice 计算值 ,其中 ,
- Alice 将消息 ,对应的数字签名 发送给 Bob。
接收者 Bob 视角
Bob 知道 Alice 的公钥 ,消息 , 哈希函数 Hash, 对应的签名值 ;
Bob 需要验证所接收到的签名 的确为 Alice 在其私钥 的作用下对消息 的签名。
- Bob 利用 Hash 计算 的哈希值 ,
- Bob 现在可以知道:消息 ,哈希值 ,Alice 的公钥 ,签名值 ,
- Bob 计算 ,
如果,验证通过。
Bob 在验证过程中需要确认两件事:
- 该签名由 Alice 进行签署;
- 消息 没有被其他人非法篡改。
(其实对于所有数字签名,验证过程都需要验证这两部分内容。)
下面讲解为什么 Bob 在进行上述操作之后就确认了以上两件事情。
首先来看 Bob 在验证过程对 的计算过程:
在这个表达式中,Bob 知道所有变量的值,因此他可以直接代入相应的值对表达式进行计算。
那么 Bob 究竟在计算什么呢?我们对这个表达式进行变形计算:
其中,如果有人任给一组数据,包括:消息,和, 和值 ,然后声称签名值是由 Alice签署。
那么 需要满足:
而这是不可能的,因为
只有在知道 的情况下,才能给出正确的 。
同时,如果有人篡改了消息并且通过了验证,说明他找到了并且,
这违反了哈希函数的抗第二原像性质,同样是不可能的。
网友评论