美文网首页
基于椭圆曲线密码学的数字签名算法

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

作者: 爱交流的独行兽 | 来源:发表于2020-12-17 09:07 被阅读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),
    这违反了哈希函数的抗第二原像性质,同样是不可能的。


    相关文章

      网友评论

          本文标题:基于椭圆曲线密码学的数字签名算法

          本文链接:https://www.haomeiwen.com/subject/qwingktx.html