“RFC6979签名临时量生成将HMAC用作K/V状态更新工具:同一私钥与摘要确定候选序列,范围拒绝和签名零值重试都继续当前状态。它不是给消息加认证标签的新MAC接口;候选的安全性还需相应生成…”
形式陈述
输入与三个转换
RFC6979用确定性状态机生成DSA/ECDSA签名临时量。本页固定2013年8月RFC的SHA-256实例,并纳入已验证勘误3812。输入为素数阶
记
把 按大端解释,若输入超过 位则只保留最左 位;输入较短时不在右边补零 把 编码为恰好 字节的大端整数,必要时在左侧补零
最后一项的模约简用于初始化输入;生成候选时的范围检查不会做这次模约简。
K、V状态与连续重试
令
每次尝试把
再开始下一次尝试。状态不会恢复到初始值。生成器在每个新消息上重新初始化;同一私钥和同一摘要则重现同一轨迹。
直觉
秘密
候选不是“随便取一个大整数再模
例子与边界
非整字节长度能暴露错误
取ff的左5位是11111,所以
00010010。把这个完整字节再次送入bits2int,只留下00010,得到2而非18。两个名字看起来像互逆函数,但当
先拒绝范围,再拒绝零s
用教学阶19、私钥7和消息ASCII retry/7,SHA-256摘要的最左5位给
这个例子同时检查三处:22不能取模后变成3,零
正式互操作例采用RFC6979附录A.2.5公开的P-256私钥和消息sample,其SHA-256候选为a6e3c57d…d8aad60,最终efd48b2a开头、f7cb1c94开头。下载器保存完整预期值并逐字比较,也核对test第二组向量;正文中的省略号不是待签字节。
推论与应用
确定性临时量去掉了每次签名时调用随机源的一类失败,但私钥生成仍要有足够熵。不同协议若让同一密钥签相同有效摘要,会产生相同临时量;应按协议规范把域和上下文纳入实际消息,不擅自修改RFC内部编码。对ECDSA来说,同一摘要重现同一签名本身不是“两条不同摘要复用k”的代数泄漏。
设实际尝试
签名执行实验可逐行检查候选状态。迁移任务:同一消息中保持摘要最左5位不变而改变其余位,解释教学
参考资料
- Thomas Pornin,RFC6979: Deterministic Usage of DSA and ECDSA,2013年8月,§§2.3、3.2–3.5及附录A.2.5
- RFC Editor,已验证勘误3812:
时重新选择 并计算 ;本页生成器将该反馈纳入同一重试路径