11 个不稳定版本
0.9.0 | 2023 年 3 月 10 日 |
---|---|
0.8.3 | 2022 年 1 月 31 日 |
0.8.2 | 2021 年 2 月 7 日 |
0.7.2 | 2021 年 2 月 7 日 |
0.4.0 | 2020 年 5 月 9 日 |
#574 in 密码学
1,477 每月下载量
在 3 个crate中使用(其中2个直接使用)
240KB
3K SLoC
此代码未经审计或审查。使用风险自担。
字段选择
字段大小是Solinas三元素素数 2^448 - 2^224 -1。这个素数被称为Goldilocks素数。
曲线
此存储库明确实现了三个曲线,并隐式实现了另一个曲线。
明确实现的三个曲线是
-
Ed448-Goldilocks
-
Curve448
-
Twisted-Goldilocks
Ed448-Goldilocks 曲线
- Goldilocks 曲线是一个具有仿射方程 x^2 + y^2 = 1 - 39081x^2y^2 的Edwards曲线。
- 此曲线由Mike Hamburg在https://eprint.iacr.org/2015/625.pdf中定义。
- 此曲线在Goldilocks素数上的系数为4。
Twisted-Goldilocks 曲线
- 扭曲的Goldilocks曲线是一个具有仿射方程 y^2 - x^2 = 1 - 39082x^2y^2 的扭曲Edwards曲线。
- 此曲线也在https://eprint.iacr.org/2015/625.pdf中定义。
- 此曲线在Goldilocks素数上的系数为4。
等价
- 此曲线是2-等价于Ed448-Goldilocks。等价细节可以在此找到:https://www.shiftleft.org/papers/isogeny/isogeny.pdf
Curve448
此曲线是2-等价于Ed448-Goldilocks。Curve448的细节可以在此找到:https://tools.ietf.org/html/rfc7748
此曲线的主要用途是X448。
注意。在该文档中有一个与Curve448双有理等价的Edwards曲线,具有大的d
值。此曲线未实现,据我所知,没有实际用途。
策略
Ed448-Goldilocks上群算术的主要策略是执行2-等价将点映射到Twisted-Goldilocks曲线,然后使用更快的扭曲Edwards公式执行标量乘法。在将点映射回Ed448-Goldilocks曲线后,2-等价和双等价将选择一个因子4,因此标量必须调整4倍。调整标量取决于点和标量。更多详细信息可以在2-等价论文中找到。
Decaf
Decaf策略[链接论文]用于从扭曲的Goldilocks曲线构建一个素数阶群。选择扭曲的Goldilocks曲线是因为它具有更快的公式。我们还可以使用Curve448或Ed448-Goldilocks。Decaf利用了与雅可比四次曲线相关的等距同构,该曲线没有明确定义。更多细节可以在此处找到:https://www.shiftleft.org/papers/decaf/decaf.pdf。然而,据我所知,在此存储库中实现的Decaf协议没有文档,这是对论文中链接的原始decaf协议的修改版本。
完成点 vs 可扩展点
与Curve25519-Dalek不同,此库将实现可扩展点而不是完成点。以下观察结果导致了这一点:
- 从完成点切换需要3/4个域乘法成本。因此,如果我们进行重复的加倍操作,这将为射影形式中的每个加倍添加额外的成本。更多关于可扩展点的细节可以在此处找到[3.2]:https://www.shiftleft.org/papers/fff/fff.pdf
致谢
库的设计借鉴了Dalek对Curve25519的设计。蒙哥马利曲线算术的代码也来自Dalek的库。
将Ed448和libdecaf的golang实现作为参考。
特别感谢Mike Hamburg就Decaf和goldilocks提出的所有问题给予解答。
依赖项
~0–1.2MB
~24K SLoC