#decaf #ed448 #ed448-goldilocks #crypto

无 std ed448-goldilocks-plus

Ed448 和 Curve448 以及 Decaf 的纯 Rust 实现

4 个版本

0.11.2 2024年2月17日
0.11.1 2024年1月26日
0.11.0 2023年12月28日
0.10.0 2023年12月28日

892密码学 中排名

Download history 137/week @ 2024-03-13 317/week @ 2024-03-20 370/week @ 2024-03-27 216/week @ 2024-04-03 181/week @ 2024-04-10 283/week @ 2024-04-17 183/week @ 2024-04-24 500/week @ 2024-05-01 220/week @ 2024-05-08 467/week @ 2024-05-15 191/week @ 2024-05-22 195/week @ 2024-05-29 199/week @ 2024-06-05 421/week @ 2024-06-12 590/week @ 2024-06-19 198/week @ 2024-06-26

每月 1,442 次下载
用于 vsss-rs

BSD-3-Clause

245KB
4K SLoC

ed448-goldilocks-plus

Crate Docs BSD-3 Licensed

此代码未经过审计或审查。使用风险自负。

字段选择

字段大小是 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。

等伦

Curve448

此曲线与 Ed448-Goldilocks 是 2-等伦的。Curve448 的详细信息可以在此处找到: https://tools.ietf.org/html/rfc7748

此曲线的主要用途是 X448。

注意。在该文档中有一个与 Curve448 双有理等价的 Edwards 曲线,具有大的 d 值。此曲线未实现,据我所知,没有实用价值。

策略

Ed448-Goldilocks 上群算术的主要策略是执行 2-等伦将点映射到 Twisted-Goldilocks 曲线,然后使用更快的扭曲 Edwards 公式执行标量乘法。计算 2-等伦然后双等伦,一旦将点映射回 Ed448-Goldilocks 曲线,就会拾取一个 4 的因子,因此标量必须乘以 4。调整标量取决于点和标量。更多详细信息可以在 2-等伦论文中找到。

Decaf

Decaf 策略 [链接论文] 用于从扭曲 Goldilocks 曲线上构建一个素数阶的群。选择扭曲 Goldilocks 曲线是因为它具有更快的公式。我们还可以使用 Curve448 或 Ed448-Goldilocks。Decaf 利用一个与雅可比四次曲线相关的同质化,该曲线并未明确定义。有关详细信息,请参阅此处:https://www.shiftleft.org/papers/decaf/decaf.pdf 然而,据我所知,这个仓库中没有关于 Decaf 协议的文档,该协议是对论文中链接的原始 Decaf 协议的修改版本。

完成点与可扩展点

与 Curve25519-Dalek 不同,这个库将实现可扩展点而不是完成点。以下观察导致这一决定

  • 从完成点切换到需要 3/4 的域乘法成本。因此,如果我们进行重复的加倍,这将在射影形式中为每次加倍增加额外的成本。有关可扩展点的更多详细信息,请参阅此处 [3.2]:https://www.shiftleft.org/papers/fff/fff.pdf

致谢

库的设计借鉴了 Curve25519 的 Dalek 设计。Montgomery 曲线算术的代码也来自 Dalek 的库。

使用了 Ed448 和 libdecaf 的 Go 实现,作为参考。

特别感谢 Mike Hamburg 回答了关于 Decaf 和 goldilocks 的所有问题。

此库添加了 hash_to_curve 和结构体的序列化。

贡献

除非您明确说明,否则根据 BSD-3-Clause 许可证定义的您有意提交以包含在作品中的任何贡献,都将根据上述方式双授权,不附加任何其他条款或条件。

依赖项

~4.5MB
~87K SLoC