Skip to content

算法Algorithm

ECDSA 签名

Elliptic Curve Digital Signature Algorithm · ECDSA

从临时椭圆曲线点的横坐标产生签名标量,重建验证点,并明确零值重试、密钥检查与nonce复用的代数后果。

形式陈述 ​

两个模数,三类输入 ​

ECDSA是数字签名的一个具体签名、验证算法。本页采用SEC 1 v2.0的素域版本。先固定有效域参数:素数p、非奇异曲线y2=x3+ax+b(modp)、点G及其素数阶q>2。坐标按p计算,标量按q计算;两者不能混用。G生成一个q阶循环群,单位元记O。这些域参数由接口提供,不把用户任意传来的曲线当作已经验证的安全域。

私钥d满足1≤d<q,公钥Q=dG。验证者先确认Q≠O、坐标是[0,p−1]内整数、满足曲线方程且qQ=O;此外还需在协议外确认这把公钥属于谁。消息摘要转换为整数z:取摘要最左边至多bitlen(q)位,按大端解释;后续模q运算自然完成约简。截取的是左端位,不是摘要整数直接模q。

签名与验证 ​

签名者取候选1≤k<q,计算

R=kG,r=x(R)modq,s=k−1(z+rd)modq.

若r=0或s=0,弃用本候选并重新取k;否则输出(r,s)。本页不做low-S归一化,不包含DER、证书或交易格式。接口收到的r,s必须已经是整数,严格字节解析属于其上层格式合同。

验证者拒绝任何不满足1≤r,s<q的输入,然后计算

w=s−1modq,u1=zwmodq,u2=rwmodq,R′=u1G+u2Q.

只有R′≠O且x(R′)modq=r才接受。合法签名有

R′=s−1(z+rd)G=kG,

所以横坐标检查成功。这证明的是正确性;不能只由“离散对数难求”这句话省略ECDSA安全分析所需的模型和归约。

直觉

签名把临时秘密k、长期秘密d和消息整数z约束在sk=z+rd里。公钥允许验证者在点的世界计算dG,却不直接提供d。乘上s−1后,验证者重建同一个临时点,比较它的横坐标指纹。

横坐标会丢失信息:R与−R共享横坐标。因此(r,s)通过时,(r,q−s)也通过,重建点恰好取负。这不会自动产生另一条消息的签名,却会产生同一消息的不同有效签名;“签名算法内部确定”与“每条消息只有唯一接受表示”是两个条件。

本算法实际调用椭圆曲线的点加法、倍点和无穷远点规则。下载器采用仿射坐标、重复倍点与条件相加,目的是让每一步可复算;它有数据相关分支与大整数求逆,不提供恒定时间实现。

例子与边界

在17个坐标值上算一份签名 ​

取p=17,a=b=2,G=(5,1),q=19。全曲线恰有19个点;下载器可枚举核对。私钥d=7,所以Q=7G=(0,6)。让z=4,k=3,则R=3G=(10,6)、r=10,而3−1=13(mod19),所以

s=13(4+10⋅7)mod19=12.

验证时12−1=8,得到u1=13,u2=4,于是13G+4Q=41G=3G,通过。把s改成7仍通过,因为7=19−12;重建点变成−3G=(10,11)。这个极小群可穷举私钥,只适合教学。

同一个k泄漏了什么 ​

仍用d=7,k=3,第二条消息取z2=9,签名为(10,1)。两条方程相减,消去长期秘密项:

k=(z1−z2)(s1−s2)−1modq=3,d=(s1k−z1)r−1modq=7.

这个计算要求真的用了同一个k,且s1≠s2(modq)、r≠0。仅见相同r还不够:k与q−k也给出相同横坐标,其他坐标约简也可能产生重复r;应核对相应候选,而不能把任意相同r都代入同一假设。

r=0与s=0都是实际可触发的分支。在本小曲线上7G=(0,6),故k=7必须重试;取d=7,z=21,k=6,r=16且z+rd=133≡0(mod19),故s=0也必须重试。把零s发出去会令验证所需逆元不存在。

推论与应用

RFC6979确定性候选生成用私钥与消息摘要生成候选序列,替换签名时的随机k来源。遇到r=0或s=0时应继续同一生成器,而不是重新初始化后永远得到同一个坏候选。确定性生成不弥补弱私钥、故障或侧信道,也不把ECDSA的s↦q−s接受对称性消除。

设群阶位数为b,一次标量乘法用O(b)次点运算;验证包含公钥子群检查和两次标量乘法,仍是O(b)次点运算及常数次模q求逆。签名若尝试a个候选则是O(ab)次点运算。仿射点运算还含模p求逆,不能把它当作一个机器指令;消息哈希另计读取消息的成本。正常密钥参数下失败候选罕见,但这里的成本保留实际尝试数。

签名执行实验同时复算小曲线、RFC6979的P-256公开向量和篡改。迁移任务:把第二次临时量改为q−k=16,手算第二个s,分别尝试“同一k”和“相反k”两套方程,再用恢复的dG核对公钥;说明为什么相同r不能单独决定泄漏公式。另一项任务让两份摘要在截取后相同,解释为什么差分逆元条件失效。

参考资料
关系图谱10 个相邻概念 · 2 类关系

拖动节点调整位置。

显示关系

显示:依赖

  1. 前置三跳
  2. 前置二跳
  3. 前置一跳
  4. 当前条目
  5. 后续一跳
  6. 后续二跳
  7. 后续三跳
文字版关系按与当前条目的最短距离分组
类型化关系