关于数字签名的简单通信过程
- 发送者 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签署。
那么 需要满足:
而这是不可能的,因为
只有在知道 的情况下,才能给出正确的
。
同时,如果有人篡改了消息并且通过了验证,说明他找到了
并且
,
这违反了哈希函数的抗第二原像性质,同样是不可能的。
网友评论