基于椭圆曲线密码学的数字签名算法

2020-12-17  本文已影响0人  爱交流的独行兽

关于数字签名的简单通信过程

  1. 发送者 Alice 对消息 m 签署数字签名 sig ,并将消息 m 和签名 sig 发送给 Bob;
  2. Bob 对接收到的签名 sig 进行验证,确认其确实为 Alice 对消息 m 的签名。

发送者 Alice 视角

  1. Alice 具有私钥 sa, 公钥 pa = sa \cdot G
  2. Alice 选择随机数 r, 并计算 R = r \cdot G = (x,y)
  3. Alice 对消息 m 进行哈希压缩,得到 h = Hash(m),
  4. Alice 计算值 s,其中 s = \frac{h+sa\cdot x}{r},
  5. Alice 将消息 m,对应的数字签名 sig = (r\cdot G, s) = ((x,y),s) 发送给 Bob。

接收者 Bob 视角
Bob 知道 Alice 的公钥 pa,消息 m, 哈希函数 Hash, m 对应的签名值 sig = (r\cdot G,s) = ((x,y),s);
Bob 需要验证所接收到的签名 sig 的确为 Alice 在其私钥 sa 的作用下对消息 m 的签名。

  1. Bob 利用 Hash 计算 m 的哈希值 h = Hash(m)
  2. Bob 现在可以知道:消息 m,哈希值 h,Alice 的公钥 pa,签名值 (x,y,s)
  3. Bob 计算 result = \frac{h}{s}\cdot G+\frac{ pa \cdot x}{s},
    如果result = (x,y) = rG = R,验证通过。

Bob 在验证过程中需要确认两件事:

  1. 该签名由 Alice 进行签署;
  2. 消息 m 没有被其他人非法篡改。

(其实对于所有数字签名,验证过程都需要验证这两部分内容。)


下面讲解为什么 Bob 在进行上述操作之后就确认了以上两件事情。
首先来看 Bob 在验证过程对 result 的计算过程:
result = \frac{h}{s}\cdot G+\frac{pa \cdot x}{s}
在这个表达式中,Bob 知道所有变量的值,因此他可以直接代入相应的值对表达式进行计算。
那么 Bob 究竟在计算什么呢?我们对这个表达式进行变形计算:

\begin{equation} \begin{aligned} result &= \frac{h}{s}\cdot G+\frac{pa \cdot x}{s}\\ &= \frac{h}{s}\cdot G+\frac{sa\cdot G\cdot x}{s}\\ & = \frac{h+sa\cdot x}{s}\cdot G\\ & = r\cdot G\\ & = (x,y) \end{aligned} \end{equation}

其中,如果有人任给一组数据,包括:消息m,和R, 和值 s,然后声称签名值是由 Alice签署。
那么 s 需要满足:
\frac{h}{s}\cdot G+\frac{pa \cdot x}{s} = R
而这是不可能的,因为
s = \frac{h \cdot G+pa \cdot x}{R}= \frac{h + sa \cdot x}{r}
只有在知道 sa 的情况下,才能给出正确的 s
同时,如果有人篡改了消息m并且通过了验证,说明他找到了m'\neq m并且Hash(m')=Hash(m),
这违反了哈希函数的抗第二原像性质,同样是不可能的。


上一篇 下一篇

猜你喜欢

热点阅读