云计算百科
云计算领域专业知识百科平台

[数字安全]DSA 数字签名算法:从联邦标准到历史遗留,工程师该补的这一课

如果你还在老系统里看到 DSA 证书、DSA SSH key,或者 DSA 签名的软件包,不用意外。它曾经是美国政府选定的数字签名标准,如今已经进入只读阶段:新签名不再被批准,旧签名还得继续验。理解 DSA,不只是复习一个老算法,更是看清密码学标准怎么演进、算法敏捷性为什么重要,以及一个设计良好的算法怎么会变成维护负担。

一、DSA 到底是什么

DSA,全称 Digital Signature Algorithm,数字签名算法。它是一种公钥密码算法,但用途很窄:只做数字签名。

和 RSA 不同,RSA 能加密、解密、签名,DSA 不能加密,也不能做密钥交换。它只负责证明一件事:这条消息来自某个私钥持有者,并且消息在签名之后没有被改过。

DSA 的数学基础是有限域上的离散对数问题。NIST 在 1991 年提出 DSA,1994 年把它纳入数字签名标准 FIPS 186。DSA 本身可以看作 Schnorr 和 ElGamal 签名方案的变体,经过标准化后用于政府和商业系统。

常见误解是把 DSA 和 ECDSA 混在一起。ECDSA 是 DSA 在椭圆曲线上的对应版本,思路相似,但底层数学不同。DSA 用的是有限域离散对数,ECDSA 用的是椭圆曲线离散对数。

二、DSA 能提供什么价值

DSA 通过一套签名和验证机制,给出三个核心保证。

  • 身份认证:验证者能确认签名来自某个特定私钥的持有者,从而确认签名者身份。
  • 完整性:签名后的消息只要被改动,签名就会失效。接收方知道数据没有被篡改。
  • 不可否认性:只要私钥一直在签名者控制之下,签名者事后就不能否认自己签过这条消息。

这些性质让 DSA 在政府通信、软件分发和早期安全协议里很有吸引力,尤其是那些只需要签名验证、不需要加密的场景。

三、DSA 是什么时候出现和公告的

NIST 在 1991 年 8 月 30 日公布了 DSA,作为数字签名标准草案。这件事在当时很受关注,原因有两个。

第一,这是美国联邦标准第一次强制指定单一签名算法,而不是允许多种算法并存。

第二,DSA 的设计有 NSA 参与。密码学界因此担心标准里可能藏后门,也担心政府对密码标准的控制过强。

后续标准演进大致如下。

  • 1994 年,FIPS 186 正式发布。
  • 2009 年,FIPS 186-3 通过,密钥长度从最早的 512 到 1024 位扩展到更大范围。
  • 2013 年,FIPS 186-4 进一步细化了要求。
  • 2023 年 2 月,FIPS 186-5 发布,DSA 被移除出签名生成方法。它只允许用于验证在该标准生效日期之前创建的旧签名。

也就是说,DSA 在今天不是完全不能用,而是只能用于兼容历史数据。新系统不应该再生成 DSA 签名。

四、DSA 用在过哪些地方

DSA 在它的活跃期进入了不少实际系统。

  • TLS 和 SSL 证书:早期 HTTPS 部署会使用 DSA 签名的证书。浏览器和服务器支持 DSA 作为证书签名算法,让网站通过离散对数问题证明身份,而不是依赖 RSA 的整数分解。
  • 代码签名:软件发行方用 DSA 给可执行文件和更新包签名。签名用来确认代码来自声称的开发者,并且在传输过程中没有被修改。Java applet 和部分 Linux 包管理系统里都能见到这种用法。
  • SSH 密钥认证:SSH 协议支持 DSA 密钥做主机认证和用户认证。DSA 密钥对可以向远程服务器证明用户身份,不需要传密码。很多系统管理员当年都生成过 DSA key。
  • 政府和国防通信:DSA 本来就是联邦标准,因此在美国政府机构、承包商的安全消息系统和文档签名场景里有采用。

五、DSA 的优点

在它的生命周期里,DSA 确实有一些实用优势。

  • 签名生成快:在相同安全级别下,很多实现里 DSA 生成签名的速度比 RSA 快。选好随机 nonce 之后,签名值的计算很高效。
  • 签名体积小:DSA 签名比同等安全级别的 RSA 签名更短。比如 1024 位 DSA 的签名是 320 位,而 1024 位 RSA 签名是 1024 位。这在带宽紧张的环境里有意义。
  • 标准定义清楚:作为联邦标准,DSA 对参数生成、密钥长度和互操作性都有明确规范,开发者知道该实现什么。
  • 免专利费:DSA 虽然涉及专利,但 NIST 让它在全球范围内可以免专利费使用,降低了采用门槛。

六、DSA 的缺点

随着密码学环境成熟,DSA 的问题越来越明显。

  • 只能签名:DSA 不能加密,也不能做密钥交换。系统如果既要保密又要认证,就得再引入 RSA 或对称加密。复杂度和密钥管理成本都会上升。
  • 严重依赖高质量随机数:DSA 每次签名都需要一个唯一、不可预测的随机值,也就是 nonce。如果 nonce 被重用或者可预测,私钥就能从签名里恢复。这不是理论问题。2010 年 PlayStation 3 被破解,利用的正是 ECDSA 的 nonce 重用漏洞。
  • 验证慢:DSA 的签名验证比 RSA 验证更耗时。在验证频繁、签名很少的系统里,DSA 会成为性能瓶颈。
  • 密钥长度膨胀:为了对抗计算能力增长,DSA 需要越来越长的密钥。3072 位 DSA 密钥提供的安全强度,大致只相当于 256 位椭圆曲线密钥,但存储和计算开销大得多。
  • 行业采用有限:虽然 DSA 是联邦标准,但它从未像 RSA 那样普及。很多商业 CA 和软件厂商更愿意用 RSA,因为 RSA 用途更广。NIST 自己在移除 DSA 时也提到,行业使用有限是原因之一。

七、相关安全标准和落地建议

如果组织里还有系统在用 DSA,操作建议很直接。

  • 停止生成新的 DSA 签名:FIPS 186-5 已经不再批准 DSA 用于签名生成。新开发应使用 ECDSA、EdDSA 或合适密钥长度的 RSA。
  • 只验证旧签名:DSA 仍可用于验证 2023 年 2 月 3 日之前创建的签名。这样系统可以继续校验历史数据,不必立刻全部重签。
  • 迁移到现代算法:可选替代包括 ECDSA P-256 或 P-384、EdDSA Ed25519、RSA 3072 位及以上。它们要么性能更好,要么密钥更小,或者两者兼有。
  • 规划后量子迁移:NIST 已经给出后量子迁移方向。按 NIST IR 8547 的路线图,RSA 和 ECC 在 2030 年后会逐步弃用,2035 年后不再允许。长期系统应开始评估 ML-DSA,也就是 Dilithium 这类后量子签名算法。
  • 审计现有 DSA 部署:找出仍在使用 DSA 签名的地方。分清哪些是生成签名,哪些只是验证签名。仍在生成 DSA 签名的系统要优先迁移,因为这已经不符合当前标准。

八、写在最后

DSA 完成了它的历史任务。在需要标准化、免专利费的签名机制时,它提供了一个可用方案。但它的局限也很致命,尤其是只能签名,以及对 nonce 误用的脆弱性。它更像一个过渡技术,而不是长期答案。

对工程师来说,DSA 的教训不是“它失败了”,而是密码学标准一定会演进,系统从第一天起就要考虑算法敏捷性。今天用 ECDSA 或 Ed25519,不代表可以高枕无忧。后量子迁移的时间表已经摆在那里,越早把算法替换设计成可插拔能力,未来付出的代价越小。

参考资料

  • FIPS 186-5, Digital Signature Standard (DSS), NIST, 2023
  • FIPS 186-4, Digital Signature Standard (DSS), NIST, 2013
  • NIST IR 8547 (Initial Public Draft), Transition to Post-Quantum Cryptography Standards
  • NIST FIPS 186-5 公告与 DSA 移除说明
赞(0)
未经允许不得转载:网硕互联帮助中心 » [数字安全]DSA 数字签名算法:从联邦标准到历史遗留,工程师该补的这一课
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!