本文主要是介绍OpenSSL密码库算法笔记——第5.4.2章 椭圆曲线上点的射影坐标表示,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
射影坐标又分成好几种——标准射影坐标、Jacobi射影坐标、Chudnovsky射影坐标。
在标准射影坐标中,射影点(x, y, z),z≠0,对应仿射点(x/z, y/z),椭圆曲线的射影方程为y2z=x3+axz+bz2。在Jacobi射影坐标中,射影点(x, y, z),z≠0,对应仿射点(x/z2, y/z3),椭圆曲线的射影方程为y2=x3+axz4+bz6。在Chudnovsky射影坐标中,射影点(x, y, z),z≠0,对应仿射点(x, y, z, z2, z3)。
在射影坐标系下做点的加法不需要做逆运算,只需要先将仿射点转化成射影点,在做完点的所有运算之后再转化为仿射点。
一般情况下都会选择使用Jacobi射影坐标系,因为在该坐标系下做点的加法和二倍点时效率都比较高(参见§5.4.2),而且也为人们所熟悉。在实现代码中选择的就是Jacobi射影坐标系,对点的定义包括了X、Y、Z坐标。如果要想将这个Jacobi射影点(X, Y, Z)化成仿射点,只需要将Z化为1即可得到对应仿射点X ← X/Z2,Y ← Y/Z3,Z ← 1。
现在回过头再来看看代码中对点的定义就更加清楚了。
typedef struct ec_point_st EC_POINT;
struct ec_point_st {
const EC_METHOD *meth;
BIGNUM X;
BIGNUM Y;
BIGNUM Z;
int Z_is_one;
} /* EC_POINT */;
这篇关于OpenSSL密码库算法笔记——第5.4.2章 椭圆曲线上点的射影坐标表示的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!