在公钥密码学,爱德华兹曲线数字签名算法(EdDSA)是一种数字签名方式,使用一种基于扭曲的爱德华兹曲线的施诺尔签名变种。
其被设计为比现有的数字签名方式更快同时不牺牲安全性。Daniel J. Bernstein、Niels Duif、Tanja Lange、Peter Schwabe 和 Bo-Yin Yang等人的团队研发了这一算法,并将其参考实现发布为了公有领域软件。
概要
以下是 EdDSA 的简化描述,忽略将整数和曲线点编码为位串的细节。关于完整的细节,请参见论文和RFC。 所以\ell必须足够大才能使其不可行,并且通常取值超过。
\ell的选择受限于q的选择,因为根据哈斯定理, \#E(\mathbb{F}_q) = 2^c \ell不能与q + 1相差超过2\sqrt{q}。散列函数H在EdDSA安全性的正式分析中通常被建模为随机预言。
在 EdDSA 签名方案中,
; 公钥
: EdDSA公钥是一个曲线点A \in E(\mathbb{F}_q),编码为b位。
; 签名验证
: 公钥A对消息M的EdDSA签名是元组(R, S),编码为2b位,由满足下面的验证方程的曲线点R \in E(\mathbb{F}_q)和整数0 组成。\parallel表示串接。
2^c S B = 2^c R + 2^c H(R \parallel A \parallel M) A
; 私钥
: EdDSA私钥是一个b位字符串k,其应该被均匀地随机选择。对应的公钥为A = s B,其中s = H_{0,\dots,b - 1}(k)为通过将H(k)的最低有效b位解释为小端字节序的整数得到。
; 签名
: 消息M的签名被确定地计算为(R, S),其中R = r B,r = H(H_{b,\dots,2b - 1}(k) \parallel M),且S \equiv r + H(R \parallel A \parallel M) s \pmod \ell这满足验证方程:
\begin{align}
2^c S B &= 2^c (r + H(R \parallel A \parallel M) s) B \\
&= 2^c r B + 2^c H(R \parallel A \parallel M) s B \\
&= 2^c R + 2^c H(R \parallel A \parallel M) A.
\end{align}
Ed25519
Ed25519是使用SHA-512(SHA-2)和Curve25519的EdDSA签名方式
x = \frac{u}{v}\sqrt{-486664}, \quad y = \frac{u - 1}{u + 1}
性能
原作团队将Ed25519针对x86-64 Nehalem、Westmere处理器家族进行了优化x86-64。可以批量执行64个签名的验证,以获得更大的吞吐量。Ed25519 旨在提供与128位对称密码质量相当的抗攻击能力。
公钥的长度为256位,签名的长度为512位。
安全编码
Ed25519旨在避免使用依赖于秘密数据的分支条件或数组索引的实现,
相比之下,EdDSA 确定性地选择 nonce 作为私钥和消息的哈希值的一部分。因此,一旦生成私钥,EdDSA 就不再需要随机数生成器来进行签名,并且不存在用于生成签名的受损随机数生成器泄露私钥的风险。并且有测试向量。
软件
Ed25519 的显着用途包括OpenSSH、GnuPG及各种替代方案和OpenBSD的signify工具。SSH协议中的Ed25519和Ed448使用已经得到标准化。在2023年,FIPS 186-5 标准的最终版确定将Ed25519包含为一种批准的签名方案。
- Botan
- Crypto++
- CryptoNote 加密货币协议
- Dropbear SSH
- I2Pd的EdDSA实现
- Java Development Kit 15
- Libgcrypt
- Minisign和macOS的Minisign Miscellanea
- NaCl / libsodium
- OpenSSL 1.1.1
- Python的一个缓慢但简洁的替代实现,不包含侧信道攻击保护
- Supercop参考实现(带有内联汇编的C语言)
- Virgil PKI默认使用Ed25519密钥
- wolfSSL
Ed448
Ed448是使用SHAKE256和Curve448的EdDSA签名方式,定义于。其也已被FIPS 186-5标准的最终版本批准。
参考文献
外部链接
- [https://ed25519.cr.yp.to/ Ed25519主页]
评论 (0)