使用蒙哥马利阶梯可以有效地执行EdDSA。为了实现这一方法,应将基点转换为Mont。太空,然后是蒙特。应该执行梯子,并且需要恢复y-coordinate。最终,达到的点应该转换成扭曲的爱德华兹空间。
设计了一种在扭曲爱德华空间中工作的方案,并在RFC 8032中用给定的测试向量对结果进行了验证。
现在我正试着在蒙哥马利太空工作。前三个提到的步骤,即将基点转换为Mont.,Mont。阶梯执行,Y坐标恢复可以简单地执行。然而,反向转换有一个问题。根据RFC 7748描述的方程,绘制了蒙太山之间的地图。空间和Ed空间如下:\begin{multline} (x, y) = \frac{(4*v*(u^2 - 1)}{(u^4 - 2*u^2 + 4*v^2 + 1)},- \frac{(u^5 - 2*u^3 - 4*u*v^2 + u)}{(u^5 - 2*u^2*v^2 - 2*u^3 - 2*v^2 + u)} \end{multline}
我使用过(5,355293926785568175264127502063783334808976399387714271831880898435169088786967410002932673765864550910142774147268105838985595290606362) )作为Curve448之上的基点。此外,在y-coordinate recovery中,我认为A=156326和B=1。在y-coordinate恢复之后,(u,v)坐标在Mont中。空间用投影坐标表示,即(X,Y,Z)。现在,这一点需要转换到爱德华空间,即(x,y)。
这是我(在鼠尾草中)为达到my 448-金发姑娘的目的所做的尝试:
#P_projective=y_recovery(R0,R1,P_base) where R0=k*P_base
x2=R0[0]
z2=R0[1]
x3=R1[0]
z3=R1[1]
x1=P_base[0]
y1=P_base[1]
t1 = mod(x1*z2,p)
t2 = mod(x2+t1,p)
t3 = mod(x2-t1,p)
t3 = mod(t3^2, p)
t3 = mod(t3 * x3,p)
t1 = mod(312652 * z2,p) #2A = 2*156326
t2 = mod(t2 + t1,p)
t4 = mod(x1 * x2,p)
t4 = mod(t4 + z2,p)
t2 = mod(t2 * t4,p)
t1 = mod(t1 * z2,p)
t2 = mod(t2-t1,p)
t2 = mod(t2 * z3,p)
t1 = mod(y1 + y1,p)
t1 = mod(t1 * z2,p)
t1 = mod(t1 * z3,p)
X = mod(t2-t3,p)
Y = mod(t1 * x2,p)
Z = mod(t1 * z2,p)
# convert from Mont. space to Edwards space where x=a1/a2 y=b1/b2
a1 = mod(4*Y*Z*(X^2-Z^2),p)
a2 = mod(X^4-2*X^2*Z^2+4*Y^2*Z^2+Z^4,p)
b1 = mod(-(X^5-2*X^3*Z^2-4*X*Y^2*Z^2+X*Z^4),p)
b2 = mod(X^5-2*X^2*Y^2*Z-2*X^3*Z^2-2*Y^2*Z^3+X*Z^4,p)
a2_inv = Integer(inverse_mod(Integer(a2),p))
x = mod(a1*a2_inv,p)
b2_inv = Integer(inverse_mod(Integer(b2),p))
y = mod(b1*b2_inv,p)结果不正确。我犯了什么错?我应该做任何其他步骤来获得Ed448曲线中的相同点吗?
发布于 2020-07-10 07:24:31
根据交替椭圆曲线表示,彼此的点(x1,y1) of Edwards448对应于点(u,v) of Curve448,其中:
u = y1^2/x1^2
v = y1*(2-x1^2-y1^2)/x1^3.
在这种同质映射下,Edwards448的基点Edwards448对应于Curve448的基点(Gu,Gv)。对偶等温线将Curve448的无穷远点和二阶点(0,1)映射到Edwards448的点D8,而Curve448的点(u,v)对应于Edwards448的点(x1,y1),其中:
x1 = 4*(u^2-1)*v/((u^2-1)^2+4*v^2)
y1 = u*((u^2-1)^2-4*v^2)/(2*(u^2+1)*v^2-u*(u^2-1)^2).
在这种对偶的同质映射下,(Gu, Gv) of Curve448对应于Edwards448的基点(G1x, G1y)的一个倍数,其中这个倍数是l=4 (等发生度)。
https://crypto.stackexchange.com/questions/81737
复制相似问题