形式陈述
两个模数,三类输入
ECDSA是数字签名理路数字签名Digital signature由私钥签名、公开验证并提供不可伪造性的认证机制。的一个具体签名、验证算法。本页采用SEC 1 v2.0的素域版本。先固定有效域参数:素数、非奇异曲线、点及其素数阶。坐标按计算,标量按计算;两者不能混用。生成一个阶循环群理路循环群Cyclic group能由一个元素的全部整数次幂生成的群。,单位元记。这些域参数由接口提供,不把用户任意传来的曲线当作已经验证的安全域。
私钥满足,公钥。验证者先确认、坐标是内整数、满足曲线方程且;此外还需在协议外确认这把公钥属于谁。消息摘要转换为整数:取摘要最左边至多位,按大端解释;后续模运算自然完成约简。截取的是左端位,不是摘要整数直接模。
签名与验证
签名者取候选,计算
若或,弃用本候选并重新取;否则输出。本页不做low-S归一化,不包含DER、证书或交易格式。接口收到的必须已经是整数,严格字节解析属于其上层格式合同。
验证者拒绝任何不满足的输入,然后计算
只有且才接受。合法签名有
所以横坐标检查成功。这证明的是正确性;不能只由“离散对数难求”这句话省略ECDSA安全分析所需的模型和归约。
直觉
签名把临时秘密、长期秘密和消息整数约束在里。公钥允许验证者在点的世界计算,却不直接提供。乘上后,验证者重建同一个临时点,比较它的横坐标指纹。
横坐标会丢失信息:与共享横坐标。因此通过时,也通过,重建点恰好取负。这不会自动产生另一条消息的签名,却会产生同一消息的不同有效签名;“签名算法内部确定”与“每条消息只有唯一接受表示”是两个条件。
本算法实际调用椭圆曲线理路椭圆曲线Elliptic curve带指定有理点的光滑射影亏格一曲线;由短 Weierstrass 方程推导点加法,并完整计算一个九点有限群。的点加法、倍点和无穷远点规则。下载器采用仿射坐标、重复倍点与条件相加,目的是让每一步可复算;它有数据相关分支与大整数求逆,不提供恒定时间实现。
例子与边界
在17个坐标值上算一份签名
取。全曲线恰有19个点;下载器可枚举核对。私钥,所以。让,则、,而,所以
验证时,得到,于是,通过。把改成7仍通过,因为;重建点变成。这个极小群可穷举私钥,只适合教学。
同一个k泄漏了什么
仍用,第二条消息取,签名为。两条方程相减,消去长期秘密项:
这个计算要求真的用了同一个,且、。仅见相同还不够:与也给出相同横坐标,其他坐标约简也可能产生重复;应核对相应候选,而不能把任意相同都代入同一假设。
与都是实际可触发的分支。在本小曲线上,故必须重试;取,且,故也必须重试。把零发出去会令验证所需逆元不存在。
推论与应用
RFC6979确定性候选生成理路RFC6979 确定性签名临时量Deterministic signature nonce · RFC6979以私钥和摘要初始化HMAC状态,严格区分位截断与整数编码,按拒绝采样连续产生适合ECDSA的临时标量。用私钥与消息摘要生成候选序列,替换签名时的随机来源。遇到或时应继续同一生成器,而不是重新初始化后永远得到同一个坏候选。确定性生成不弥补弱私钥、故障或侧信道,也不把ECDSA的接受对称性消除。
设群阶位数为,一次标量乘法用次点运算;验证包含公钥子群检查和两次标量乘法,仍是次点运算及常数次模求逆。签名若尝试个候选则是次点运算。仿射点运算还含模求逆,不能把它当作一个机器指令;消息哈希另计读取消息的成本。正常密钥参数下失败候选罕见,但这里的成本保留实际尝试数。
签名执行实验同时复算小曲线、RFC6979的P-256公开向量和篡改。迁移任务:把第二次临时量改为,手算第二个,分别尝试“同一”和“相反”两套方程,再用恢复的核对公钥;说明为什么相同不能单独决定泄漏公式。另一项任务让两份摘要在截取后相同,解释为什么差分逆元条件失效。
参考资料