ECDSA
ECDSA
@2025年11月6日
ECDSA主要包含两个过程部分:
1:签名
2:验签
1)ECDSA的签名过程包括以下步骤:
选择一条椭圆曲线Ep(a,b)和基点G;
选择私有密钥k(k<n,n为G的阶),利用基点G计算公开密钥K=kG;
产生一个随机整数r(r<n),计算点R=rG;
将原数据和点R的坐标值x,y作为参数,计算SHA1做为hash,即Hash=SHA1(原数据,x,y);
计算s≡r−Hash∗k(modn);
r和s做为签名值,如果r和s其中一个为0,重新从第3步开始执行。
验证过程如下:
2)接受方在收到消息m和签名值r,s后,进行以下运算;
计算sG+H(m)P=(x1,y1),r1≡x1modp;
验证等式:r1≡rmodp;
如果等式成立,接受签名,否则签名无效。
大致过程如上所述,那么如何实现的呢?
学习前,可能会有这样的疑问:椭圆曲线如何选择,公私钥如何生成,一般对什么样的消息进行签名,最终签名如何生成。。。。。。
首先,选定椭圆方程。一般情况下选择: y^{2}=x^{3}+ax+b 形式的方程。
确定G点基点(G点是椭圆曲线上预先选定的一个点,是整个 ECDSA 算法运算的起始点)
曲线的阶((n))是指椭圆曲线上所有点(包括无穷远点)的数量。
私钥private key选取:D随机数(1<=D<=n-1)。
公钥public key生成根据私钥Q:Q=D*G
待加密数据消息:M———M被hash(m),m的hash值作为后续处理的明文。
产生一个随机整数r(r<n)。
同样 R= r*G, R用于后续另一个hash数的生成,hash数后续再用于s的产生。(注:签名的产生始终以(r,s)的形式产生,其目的始终是为了通过复杂的变化和计算来完成签名的安全性,无需深究逻辑)
再之,将原始数据和点R的坐标值x,y作为参数,计算SHA1做为hash,即Hash=SHA1(原数据,x,y);
那么为何如果r和s其中一个为0,重新从第3步开始执行呢?
一般情况下,从安全角度看,r 或 s 为 0 可能会泄露私钥的信息或者使签名容易受到攻击。正常的签名过程是通过私钥和随机数生成的,而 r 或 s 为 0 可能暗示随机数的选取出现了问题,或者私钥的使用存在漏洞,这会严重威胁安全。
以下是AI给出的回答,这里以图片形式供作参考:






WanBi!
接下来,通过一个python代码,来展示ECDSA的实际应用过程:
1 | |
- Title: ECDSA
- Author: HuAmI
- Created at : 2025-12-15 23:23:33
- Updated at : 2025-12-16 14:52:57
- Link: https://redefine.ohevan.com/2025/12/15/ECDSA/
- License: This work is licensed under CC BY-NC-SA 4.0.