#decaf #ed448-goldilocks #crypto

ed448

Ed448、Curve448和Decaf的纯Rust实现

4个版本 (破坏性更新)

0.4.0 2020年5月4日
0.3.0 2020年5月4日
0.2.0 2020年5月4日
0.1.0 2020年5月4日

#1425 in 密码学

BSD-3-Clause许可

240KB
5K SLoC

Goldilocks

非常大的WIP

字段选择

  • 字段大小是一个Solinas三元素素数 2^448 - 2^224 -1。这个素数被称为Goldilocks素数。
  • 我们将用变量q表示Goldilocks素数。

Goldilocks曲线

Goldilocks曲线是一个未扭曲的edwards曲线。x^2 + y^2 = 1 -39081x^2y^2。

注意。论文中说"Ed448-Goldilocks"是曲线,Goldilocks是素数子群,即应用decaf策略后得到的群。这与上面定义的Goldilocks素数不同,因为那是在曲线上定义的素数。

扭曲曲线

此库还将通过使用双等价变换(双等价变换是仿射加倍公式的变体)来实现扭曲变体。这个双等价变换将有效地清除扭曲曲线上的系数,这将使我们能够使用更快的扭曲曲线算术。然而,此策略并不能完全清除系数。如果点是低阶的,则扭曲曲线算术将产生单位点,而剩余的未扭曲曲线算术将产生一个小阶子群的点。

计算双等价变换以清除系数的成本与通过加倍清除系数的成本相同。[链接论文]

Decaf/Ristretto

由于扭曲曲线部分中的理由,此库还将实现Decaf和Ristretto在扭曲Edwards曲线上的实现。

完成的点与可扩展点

与Curve25519-Dalek不同,此库将实现可扩展点而不是完成的点。由于以下观察结果:

  • 从CompletedPoint切换需要3/4字段乘法成本。因此,如果我们进行重复加倍,这将为每次加倍增加额外的成本。

有趣的事实

Goldilocks使用未扭曲的edwards曲线定义,Curve25519使用Montgomery曲线定义。两者都使用等价变换来计算相应的扭曲Edwards。

也许为了命名的一致性

  • CurveXXX = MontgomeryCurve

不要忘记对设计(DALEK)、MONTGOMERY代码和MIKE以及GOLANG实现的致谢

依赖项