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 密码学
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