因此,假设我要执行Ed448或Ed25519数字签名或想要进行DH密钥交换。进一步假定这些曲线(Curve448或Curve25519)是必需的。

但是问题是,我只给出了一个受约束的设备,该设备仅允许使用Weierstrass-Computations。另外,我有一个软件库可以执行Weierstrass-Operations,但不能执行Montgomery / Edwards操作。这里的“运算”表示点加法和标量乘法。还要注意,两个设备/库都支持任意(Weierstrass)曲线。

因此引发了一个问题:是否有可能使用Weierstrass引擎执行Edwards / Montgomery操作,如果可以,怎么做? >

#1 楼

如果我正确理解了您的问题,那么您实际上是在询问Edwards和Montgomery曲线中的点是否可以用Weierstrass坐标表示。这是真的;实际上,特征$ \ neq2,3 $的任何椭圆曲线都可以用Weierstrass形式$ \ mathcal {E} _ {w} ^ {a,b}表示:y ^ 2 = x ^ 3 + ax + b $,并且通过扩展它的要点也可以。

,问题就变成了“转换有多么容易”?

对于形式为$ \ mathcal的蒙哥马利曲线{E} _m ^ {A,B}:By ^ 2 = x ^ 3 + Ax ^ 2 + x $,这非常简单。您可以将\ mathcal {E} _m ^ A $中的点$(x,y)\映射到Weierstrass曲线$ \ mathcal {E} _w ^ {1 / B ^ 2-A ^ 2 / 3B ^ 2,A (2A ^ 2-9)/ 27B ^ 3} $,通过地图$((x + A / 3)/ B,y / B)$。逆映射很明显,$(Bx-A / 3,By)$。如果$ B = 1 $(实际使用的每条蒙哥马利曲线都是这种情况),则会大大简化。

对于扭曲的Edwards曲线$ \ mathcal {E} _ {e} ^ {a,d }:ax ^ 2 + y ^ 2 = 1 + dx ^ 2y ^ 2 $(其中Edwards曲线是$ a = 1 $的子集),还有一个简单的映射到Weierstrass曲线,该方法包括将曲线转换为蒙哥马利格式第一。特别是,我们可以将$ \ mathcal {E} _e ^ {a,d} $映射到$ \ mathcal {E} _m ^ {2(a + d)/(a-d),4 /(a-d) } $通过$(x,y)\ mapsto \ left(\ frac {1 + y} {1-y},\ frac {1 + y} {x-xy} \ right)$,反之为$(x, y)\ mapsto \ left(\ frac {x} {y},\ frac {x-1} {x + 1} \ right)$。用上面的方法组合这些贴图,我们得到对应的Weierstrass曲线$ \ mathcal {E} _w ^ {a,b} $的贴图。与标量乘法的成本相比,这些转换都不是十分昂贵。