DSA 与 ECDSA 签名方案
比较 RSA 签名、DSA 以及椭圆曲线变体
DSA 与 ECDSA 签名方案 是 CoddyKit 上的免费 Cryptology Academy 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Cryptology Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Cryptology Academy 课程共包含 4 节课。
欢迎
DSA 和 ECDSA 是使用离散对数问题计算困难性的替代签名方案。凭借更小的密钥和更快的运算,ECDSA 在现代系统中占据主导地位。
DSA 概览
DSA(NIST,1994 年)在 Z*p 中使用一个阶为素数 q 的循环群。密钥生成:私钥 x;公钥 y = g^x mod p。标准参数为:2048 位的 p、256 位的 q。
DSA 签名算法
1. 生成随机一次性数 k (1 < k < q)
2. r = (g^k mod p) mod q
3. s = k^(-1) × (Hash(M) + x×r) mod q
4. 签名:(r, s)
DSA 验证
1. u1 = Hash(M) × s^(-1) mod q
2. u2 = r × s^(-1) mod q
3. v = (g^u1 × y^u2 mod p) mod q
4. 当 v == r 时有效
DSA 一次性数漏洞
如果同一个 k 被使用两次:两个签名会共享 r。根据两个 (r,s1) 和 (r,s2) 对,可以直接计算出私钥 x。这摧毁了 PS3 的安全性(每次都使用 k=1)。
ECDSA 概览
ECDSA 是将 DSA 构造在椭圆曲线群上,而不是 Z*p 上。该曲线以小得多的参数提供等效的安全性:ECDSA-256 的安全性约等于 DSA-3072。
Python 中的 ECDSA
from cryptography.hazmat.primitives.asymmetric import ec
from cryptography.hazmat.primitives import hashes
private_key = ec.generate_private_key(ec.SECP256R1())
sig = private_key.sign(message, ec.ECDSA(hashes.SHA256()))
public_key = private_key.public_key()
public_key.verify(sig, message, ec.ECDSA(hashes.SHA256()))
确定性 ECDSA(RFC 6979)
RFC 6979 根据私钥和消息哈希值确定性地推导 k。这消除了对随机数生成器的依赖,并使一次性数不可能重复使用。所有现代实现都使用 RFC 6979。
EdDSA:Ed25519
Ed25519(Edwards 曲线 DSA)使用 Curve25519 的扭曲 Edwards 形式。其设计本身具有确定性。采用恒定时间运算。速度快于 ECDSA。推荐用于新协议(SSH 密钥、TLS 1.3、Signal)。
密钥大小对比
RSA-2048 签名:256 字节。ECDSA-256 签名:约 71 字节。Ed25519 签名:64 字节。Ed25519 公钥:32 字节。对于受限设备而言,这种大小差异很重要。
标准曲线
NIST P-256(secp256r1):TLS、FIPS 合规性。secp256k1:Bitcoin、Ethereum。Curve25519/Ed25519:Signal、WireGuard、较新的 SSH。Brainpool:一些欧洲标准。
快速检查
如果 DSA/ECDSA 的一次性数 k 被重复使用,会引入哪种灾难性漏洞?
回顾
您已经理解了 DSA、ECDSA 和 Ed25519。接下来我们将学习数字签名如何保护真实应用:代码签名和电子邮件签名。
常见问题解答
「DSA 与 ECDSA 签名方案」课时是免费的吗?
是的 — 「DSA 与 ECDSA 签名方案」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Cryptology Academy 课程的其余内容,请升级到 CoddyKit PRO。 Cryptology Academy 课程共包含 4 节课。
「DSA 与 ECDSA 签名方案」这节课中我会学到什么?
比较 RSA 签名、DSA 以及椭圆曲线变体 你通过在浏览器中直接运行的动手代码来练习 Cryptology Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Cryptology Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Cryptology Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。
「DSA 与 ECDSA 签名方案」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Cryptology Academy 课中编写并运行代码吗?
能。每节 Cryptology Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 什么是数字签名
- RSA 签名:签名与验证
- DSA 与 ECDSA 签名方案
- 现实中的签名:代码签名与电子邮件