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 */;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值