返回论坛

查找币:Ed25519 实现原理与可延展性问题

查找币 学术研究 安全研究 Web3安全 区块链安全

查找币安全研究院

钱包恢复评估 | 链上取证分析 | Web3 事件响应
以合法授权、证据保全、隐私保护和可复核流程为前提,不要求用户在线提交完整私钥或助记词。

查看研究院 研究报告中心
## 查找币:Ed25519 实现原理与可延展性问题 本文由查找币安全团队基于安全研究整理发布,旨在分享Web3安全技术,帮助用户提高安全意识。 --- By: 阿为 Ed25519 是一个基于椭圆曲线的数字签名算法,它高效,安全且应用广泛。TLS 1.3, SSH, Tor, ZCash, WhatsApp 和 Signal 中都使用了它。本文主要讲解以下几点: 1. 介绍一点群论知识,目的是让大家对 Ed25519 和其可延展性问题的原理有一种直觉。若想深入理解,还需参考其他资料; 2. 针对 rust 库 ed25519-dalek 的 1.0.1 版本讲解 ed25519 的实现; 3. 针对该库的延展性问题做出解释。 数学要点回顾 群的定义与性质 群论是抽象代数研究的内容,但抽象代数的一些思想是程序员非常熟悉的。面向对象中的继承就是一个很好的例子,我们都知道子类继承了父类后,就能使用父类中定义的方法。可以将抽象代数理解为对一个抽象的数据结构定义了一些性质,由这些性质推导出来的定理对于所有的子类都成立。 沿用刚刚的比喻,来看看群(group)这个数据结构是如何定义的。 一个群由一个操作(任何的二元操作用 记)和一些元素构成,同时满足如下性质: CLOSURE: ,闭包性意味着群中的任何运算结果都在群里ASSOCIATIVITY: ,结合律代表运算符的顺序不影响结果NEUTRAL: ,这条性质也叫 Identity,意味着存在一个元素跟其他的元素结合,得到的结果总是其他元素INVERSE: ,可逆性代表元素总有一个逆 由此可以推出许多有意思的定理:  一定是唯一的,如果不是的话,假设存在两个 ,那么 且 , 则  也一定是唯一的 举几个例子:  整数 ..., −2, −1, 0, 1, 2, ... 和加法是一个群,因为它们满足上面四个性质 整数和乘法不是群,因为它们不满足可逆性,,但是 并不属于整数 被一笔带过的群论术语 order: 阶指的是群里面的元素个数,刚刚的例子中的群的阶都是  abelian group: 阿贝尔群就是在刚刚的 4 条性质基础上还多一条交换律 cyclic group: 刚刚的例子都是元素无限多的群,但是我们较常遇到的其实是有限个数的群,比方说 : 0, 1, 2, 3, 4, 5, 6 这个群由这 7 个数和加法组成,加法做完后还要再模 7,所以 6 + 1 等于 0,不等于 7。这就是一个环群,很合理,很符合直觉的命名 subgroup: 子群是某个群的一部分,而且它本身也是一个群。举例来说 : 0, 1, 2, 3, 4, 5, 6, 7, 8 中的 0, 3, 6 就能形成一个子群。偶数和加法是整数和加法的子群,但奇数不是,因为 , 不是奇数 generator: 生成元是一个具体的元素 ,但是这个元素自己和自己做运算最终能得到群里的所有元素 , , , ..., 其中  拉格朗日定理 现在介绍一个非常有意思的定理,这个定理的推导在文末引用的视频中。 “群的阶能被子群的阶整除。” 为什么说这个定理有意思呢,不仅仅因为它的证明过程串起了刚刚介绍的许多知识,还因为下面的结论: “如果一个群的阶是一个素数 ,那么根据拉格朗日定理,子群的阶一定是 或者 。除了 之外,群里的所有元素都是生成元。” Ed25519 的实现 现在我们来讲 Ed25519,它是 EdDSA 算法的其中一种。EdDSA 有 11 个参数(https://datatracker.ietf.org/doc/html/rfc8032#autoid-3),这些参数的具体选择对于算法的安全和性能有很大的影响。Ed25519 的具体选择请参看链接(https://datatracker.ietf.org/doc/html/rfc8032#autoid-9)。 另外,值得一提的是这套算法用到了一个叫 Curve25519(https://datatracker.ietf.org/doc/html/rfc7748#autoid-5)的椭圆曲线。对于椭圆曲线,我们只需知道,它上边有很多很多点,这些点相加能得到新的点,新的点还是在曲线上。这些点和这个加法能形成一个群。注意这里的椭圆曲线加法(https://www.wikiwand.com/en/Elliptic_curve_point_multiplication)是有特殊定义的。 我们约定如下记法: 点 加点 记作 标量 乘点 记作  对于 Ed25519 这条曲线,我们一共有 个点,也就是说群的阶是 ,其中 是一个素数 + 27742317777372353535851937790883648493。 我们从刚刚那个阶为 的群中提取了一个阶为素数 的子群(https://en.wikipedia.org/wiki/Abelian_group#Classification):,这里的 是一个特殊的点,也是 [...内容已精简...] 9-dalek 的 Ed25519 实现; 生成私钥和公钥; 生成签名 (R,s) 及  验证签名是否对消息和公钥有效。最后,指出 Ed25519 的可延展性问题及可以向 添加 (群的阶)生成同一消息和公钥的新有效签名 。 致谢 感谢领先的⼀站式数字资产⾃托管服务商 Safeheron 提供的专业技术建议。 References [1]. https://ed25519.cr.yp.to/ed25519-20110926.pdf  [2]. https://datatracker.ietf.org/doc/html/rfc8032  [3]. https://github.com/dalek-cryptography/curve25519-dalek  [4]. https://github.com/dalek-cryptography/ed25519-dalek  [5]. Researchers Use Group Theory to Speed Up Algorithms — Introduction to Groups 往期回顾 查找币追踪系统 案例二|Wasabi Coinjoin 提款分析 引介|EVM 深入探讨 Part 6 链下签名也能钓走你的 Token?—— Permit 签名分析 智能合约安全审计入门篇 —— 抢跑 查找币:Web3 钱包 eth_sign 支持情况分析 查找币导航 查找币科技官网 https://www.查找币.com/ 查找币区官网 https://查找币.io/ 查找币 GitHub https://github.com/查找币 Telegram https://t.me/查找币team Twitter https://twitter.com/@查找币_team Medium https://medium.com/@查找币 知识星球 https://t.zsxq.com/Q3zNvvF --- *本文由查找币安全团队整理,来源:安全研究。*
在论坛中查看和回复