签名定义
Sig=Fsig(Fhash(m),dA)
- dA是私钥
- m是待签名信息
- Fhash是哈希函数
- Fsig是签名算法
- Sig是签名结果
- Sig = (R,S)
签名过程
- 生成随机数k,作为临时私钥
- 临时公钥P = k*G
- R是P的x坐标
- S = k-1(Hash(m) + dA * R) mod p
- k是步骤1中的临时私钥
- R是步骤2中临时公钥的x坐标值
- dA是私钥
- m是带签名数据
- p是椭圆曲线的素数阶
公钥生成方法见这篇文章
验证签名过程
验证签名是生成签名的反过程,使用R,S和公钥计算P
P = S-1 * Hash(m) * G + S-1 * R * Qa
- R和S是签名值
- Qa是签名私钥对应的公钥
- m是源数据
- G是椭圆曲线的预置生成点
如果最终计算出来P和R是相等的,那么签名通过