跳到主要内容
ecdsa.com

DSA(数字签名算法)

FIPS 186(1994年)定义的基于有限域离散对数的签名算法;FIPS 186-5 于2023年停止将其用于生成新签名,只保留用于验证已有签名。
其他写法Digital Signature Algorithmssh-dssDSS

域参数包括:素数 p(1024~3072 位)、整除 p − 1 的素数 q(160、224 或 256 位),以及 q 阶子群的生成元 g。签名为 r = (gᵏ mod p) mod q 和 s = k⁻¹·(z + x·r) mod q,结构与 ECDSA 相同(ECDSA 正是它的椭圆曲线版本),失效方式也相同:重复或可预测的 k 会暴露私钥 x。RFC 6979 既适用于 ECDSA,也适用于 DSA。

FIPS 186-5 指出,DSA“不再由本标准规定,只能用于验证此前生成的数字签名”。OpenSSH 于2015年默认禁用 ssh-dss 密钥,并在 OpenSSH 10.0(2025年4月)中彻底移除了 DSA 支持;GnuPG 仍能读取旧的 DSA/ElGamal 密钥,许多库也为存档保留了 DSA 验证功能。

签名的编码方式与 ECDSA 签名相同:在 X.509 和 CMS 中是由两个整数组成的 DER SEQUENCE(例如 dsa-with-SHA256,2.16.840.1.101.3.4.3.2),在其他场合则是两个定长整数。如果仍发现 DSA 密钥,应将其替换为 Ed25519 或 ECDSA P-256,只在必须检查旧签名的地方保留 DSA。

标准与参考资料

全部术语