首页/安全/加密与证书速查/DSA 数字签名算法(已退场)
加密算法基础95 条

DSA 数字签名算法(已退场)

FIPS 186 系列早期的签名算法:基于有限域离散对数,签名长度固定 40-64 字节左右;FIPS 186-5 已不再包含 DSA,新系统不应选用。

加密与证书速查安全更新于 2026-10-13

DSA 数字签名算法

DSA 是 FIPS 186 系列早期的数字签名算法,基于有限域离散对数问题,签名长度固定,参数生成与校验都比较复杂。FIPS 186-5 已不再包含 DSA,也不再批准它用于新系统;存量系统应把签名迁移到 ECDSA、Ed25519 或 RSASSA-PSS。它与 ECDSA 同属离散对数家族,同样依赖严格的随机数生成。

基本信息

历史标准FIPS 186-4 中仍包含 DSA
现状FIPS 186-5 不再批准 DSA,新系统不应选用
共同缺陷与 ECDSA 一样依赖一次性随机数,随机数复用会泄漏私钥
参数问题1024 位参数组存在共享弱参数风险
迁移目标ECDSA、Ed25519、RSASSA-PSS

典型使用场景

  • 清点存量证书与签名算法,识别仍在使用 DSA 的系统
  • 迁移规划:按证书链与客户端支持度分批替换
  • 排查老系统之间的签名互操作问题
  • 安全测评中回答是否使用了已弃用算法
  • 理解随机数复用风险,避免在新代码中重犯同类错误

识别遗留密钥与算法

识别遗留密钥与算法
openssl dsaparam -out dsaparam.pem 2048              # 生成 DSA 参数(测试用)
openssl gendsa -out dsa.key dsaparam.pem             # 生成 DSA 私钥
openssl dsa -in dsa.key -text -noout | head -5       # 查看关键参数
openssl x509 -in old.crt -noout -text | grep -i 'signature algorithm'   # 证书签名算法

算法状态对照

算法当前状态建议
DSAFIPS 186-5 不再批准迁移到 ECDSA 或 Ed25519
RSA PKCS#1 v1.5仍可用新系统优先 RSASSA-PSS
ECDSA推荐注意随机数的生成方式
Ed25519推荐确定性签名,实现更简单
DSA 的参数组生成与校验比 ECDSA 复杂,手工实现风险高;它同样依赖一次性随机数,复用随机数的后果与 ECDSA 一样严重,可直接恢复私钥。迁移时要同时处理算法替换与随机数生成方式这两件事。
清点方法:从证书的签名算法字段、配置里的算法白名单、以及代码中的签名调用三处入手,列出仍使用 DSA 的位置与负责人;再按「对外影响优先」的顺序迁移。迁移完成后保留一段时间的双算法兼容,避免客户端升级不同步导致中断。
清点提醒:不少老系统会把 DSA 与 RSA 材料混在同一个密钥库里,只看证书类型容易漏项,还要核查私钥算法与签名用途;这类混装库在迁移时最容易出现「换了证书但旧密钥还在用」的情况。

易错点

  • 继续为新系统签发 DSA 证书 → 不符合标准现状,部分客户端可能直接不信任
  • 参数组位数不足(如 1024 位) → 强度不够,且共享弱参数问题更严重
  • 迁移只换算法不改进密钥与随机数管理 → 风险依旧存在
  • 忽略客户端与证书链兼容 → 迁移后部分老客户端无法验证签名

数据来源与参考

  • FIPS 186-5(不再包含 DSA)
  • NIST SP 800-131A Rev.2(算法过渡)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌