密码学/素数曲线/标准射影坐标
外观
< 密码学
<密码学
标准射影坐标 用于表示素数曲线 y^2 = x^3 + ax + b 上的椭圆曲线点。当域反转的成本明显高于域乘法时,使用它们可能会比仿射坐标 速度更快。在标准射影坐标 中,三元组 (X, Y, Z) 表示仿射点 (X / Z, Y / Z)。
令 (X, Y, Z) 是一个点 (不等于无穷远点) 以标准射影坐标 表示。那么它的倍点 (X', Y', Z') 可以通过以下方式计算
if (Y == 0) return POINT_AT_INFINITY W = a*Z^2 + 3*X^2 S = Y*Z B = X*Y*S H = W^2 - 8*B X' = 2*H*S Y' = W*(4*B - H) - 8*Y^2*S^2 Z' = 8*S^3 return (X', Y', Z')
注意:如果 a = -3,那么 W 也可以计算为 W = 3*(X + Z)*(X - Z),节省了 2 个域平方运算。
令 (X1, Y1, Z1) 和 (X2, Y2, Z2) 是两个点 (都不等于无穷远点) 以标准射影坐标 表示。那么它们的和 (X3, Y3, Z3) 可以通过以下方式计算
U1 = Y2*Z1 U2 = Y1*Z2 V1 = X2*Z1 V2 = X1*Z2 if (V1 == V2) if (U1 != U2) return POINT_AT_INFINITY else return POINT_DOUBLE(X1, Y1, Z1) U = U1 - U2 V = V1 - V2 W = Z1*Z2 A = U^2*W - V^3 - 2*V^2*V2 X3 = V*A Y3 = U*(V^2*V2 - A) - V^3*U2 Z3 = V^3*W return (X3, Y3, Z3)
令 (X1, Y1, Z1) 是一个点以标准射影坐标 表示,(X2, Y2) 是一个点以仿射坐标 表示 (都不等于无穷远点)。通过将“Z2”的每次出现替换为“1”(从而减少三个域乘法),可以很容易地从常规标准射影点加法推导出添加这些点的公式。