ECC椭圆曲线算法(4)签名验证过程

2021/5/1 22:25:14

本文主要是介绍ECC椭圆曲线算法(4)签名验证过程,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

1. 说明

Alice和Bob在通信的过程中,为了验证消息的来源,既消息确实是Alice发出来的。需要由Alice对消息使用自己的私钥生成一个签名hash,然后Bob用Alice的公钥进行验证,判断hash是否一样,从而知道签名是否正确。

2. 步骤

假设:

  • 基点:G
  • 私钥:k
  • 公钥:K =k *G
  • Message:M

step1. Alice 数据传送前的操作:生成公私钥对

step2. Alice

  • 选择随机数r
  • 计算点r*G,得到(x, y)
  • 根据消息求哈希h
  • 根据随机数r、消息M的哈希h、私钥k,计算s = (h + kx)/r.
  • 将消息M、签名{rG, s}、公钥K发给Bob

step3. Bob:收到消息M、以及签名{rG=(x,y), s}

  • 根据消息求哈希h
  • 使用发送方公钥K计算:hG/s + xK/s,并与rG比较,如相等即验签成功

hG/s + xK/s = hG/s + x(kG)/s = (h+xk)G/s = r(h+xk)G / (h+kx) = rG

在这里插入图片描述
注:

  • r值
    在选择随机数r的时候,真正的算法需要做一个判断,计算 r 值是否为0, 如果r == 0, 需要重新随机:r = x   mod  n
  • n值
    如果说椭圆曲线方程可用(CURVE, G, n)表示,其中CURVE表示椭圆曲线点域和几何方程;G是所有点倍积运算的基点;n是该椭圆曲线的可倍积阶数(multiplicative order),作为一个很大的质数,n的几何意义在于,nG 是阿贝尔群的单位元。
  • h值
    实际上需要对h值作一个转换,既是对h的二进制形式下最左边(即最高位)L_n个bits,而L_n是上述椭圆曲线参数中的可倍积阶数n的二进制长度。注意z 可能大于n,但长度绝对不会比 n 更长
    在这里插入图片描述

【参考】

  1. 密码学系列 - 椭圆曲线 ECDSA - 签名与验签 csdn
  2. Elliptic Curve Digital Signature Algorithm Wikipedia


这篇关于ECC椭圆曲线算法(4)签名验证过程的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程