edwards25519 double算法

edwards25519 curve表示为:

− x 2 + y 2 = 1 + d x 2 y 2 , d = − ( 121665 / 121666 ) , q = 2 255 − 19 -x^2+y^2=1+dx^2y^2,d=-(121665/121666),q=2^{255}-19 x2+y2=1+dx2y2,d=(121665/121666),q=225519

根据博客Extended twisted Edwards curve坐标系中提及:


注意,在Extended坐标系下,可提供更快的加法运算,在Projective坐标系下,可提供更快的double运算!!!实际使用时,可根据不同的计算选择不同的坐标系。


所以,double运算采用论文《Twisted Edwards Curves》中的Doubling in Projective Twisted Coordinates算法:
在这里插入图片描述
对于edwards25519 curve, a = − 1 a=-1 a=1。同时根据https://doc-internal.dalek.rs/curve25519_dalek/backend/serial/curve_models/index.html 中定义,对应的Projective坐标为 ( W 1 : W 2 : W 3 ) (W_1:W_2:W_3) (W1:W2:W3),详细的计算过程为:
B = ( X 1 + Y 1 ) 2 ; C = X 1 2 ; D = Y 1 2 ; E = a C = − X 1 2 ; F : = E + D = Y 1 2 − X 1 2 ; H = Z 1 2 ; J = F − 2 H = Y 1 2 − X 1 2 − 2 Z 1 2 B=(X_1+Y_1)^2; C=X_1^2;D=Y_1^2;E=aC=-X_1^2;F:=E+D=Y_1^2-X_1^2; H=Z_1^2;J=F-2H=Y_1^2-X_1^2-2Z_1^2 B=(X1+Y1)2;C=X12;D=Y12;E=aC=X12;F:=E+D=Y12X12;H=Z12;J=F2H=Y12X122Z12
⇒ W 1 = X 3 = ( B − C − D ) ∗ J = [ ( X 1 + Y 1 ) 2 − ( X 1 2 + Y 1 2 ) ] ∗ ( Y 1 2 − X 1 2 − 2 Z 1 2 ) \Rightarrow W_1=X_3=(B-C-D)*J=[(X_1+Y_1)^2-(X_1^2+Y_1^2)]*(Y_1^2-X_1^2-2Z_1^2) W1=X3=(BCD)J=[(X1+Y1)2(X12+Y12)](Y12X122Z12)
⇒ W 2 = Y 3 = F ∗ ( E − D ) = ( Y 1 2 − X 1 2 ) ∗ ( − X 1 2 − Y 1 2 ) \Rightarrow W_2=Y_3=F*(E-D)=(Y_1^2-X_1^2)*(-X_1^2-Y_1^2) W2=Y3=F(ED)=(Y12X12)(X12Y12)
⇒ W 3 = Z 3 = F ∗ J = ( Y 1 2 − X 1 2 ) ∗ ( Y 1 2 − X 1 2 − 2 Z 1 2 ) \Rightarrow W_3=Z_3=F*J=(Y_1^2-X_1^2)*(Y_1^2-X_1^2-2Z_1^2) W3=Z3=FJ=(Y12X12)(Y12X122Z12)

∵ W 1 W 3 = X T Z T = X Z = x = ( X 1 + Y 1 ) 2 − ( X 1 2 + Y 1 2 ) Y 1 2 − X 1 2 \because \frac{W_1}{W_3}=\frac{XT}{ZT}=\frac{X}{Z}=x=\frac{(X_1+Y_1)^2-(X_1^2+Y_1^2)}{Y_1^2-X_1^2} W3W1=ZTXT=ZX=x=Y12X12(X1+Y1)2(X12+Y12)
∵ W 2 W 3 = Y Z Z T = Y T = y = X 1 2 + Y 1 2 2 Z 1 2 − ( Y 1 2 − X 1 2 ) \because \frac{W_2}{W_3}=\frac{YZ}{ZT}=\frac{Y}{T}=y=\frac{X_1^2+Y_1^2}{2Z_1^2-(Y_1^2-X_1^2)} W3W2=ZTYZ=TY=y=2Z12(Y12X12)X12+Y12
∴ X = ( X 1 + Y 1 ) 2 − ( X 1 2 + Y 1 2 ) ; Y = X 1 2 + Y 1 2 ; Z = Y 1 2 − X 1 2 ; T = 2 Z 1 2 − ( Y 1 2 − X 1 2 ) \therefore X=(X_1+Y_1)^2-(X_1^2+Y_1^2); Y=X_1^2+Y_1^2; Z=Y_1^2-X_1^2; T=2Z_1^2-(Y_1^2-X_1^2) X=(X1+Y1)2(X12+Y12);Y=X12+Y12;Z=Y12X12;T=2Z12(Y12X12)

以上得到的即为 σ : ( ( X : Z ) , ( Y : T ) ) \sigma :((X:Z),(Y:T)) σ:((X:Z),(Y:T))。相应的代码实现为:

// ------------------------------------------------------------------------
// Doubling
// ------------------------------------------------------------------------

impl ProjectivePoint {
    /// Double this point: return self + self
    pub fn double(&self) -> CompletedPoint { // Double()
        let XX          = self.X.square();
        let YY          = self.Y.square();
        let ZZ2         = self.Z.square2();
        let X_plus_Y    = &self.X + &self.Y;
        let X_plus_Y_sq = X_plus_Y.square();
        let YY_plus_XX  = &YY + &XX;
        let YY_minus_XX = &YY - &XX;

        CompletedPoint{
            X: &X_plus_Y_sq - &YY_plus_XX,
            Y: YY_plus_XX,
            Z: YY_minus_XX,
            T: &ZZ2 - &YY_minus_XX
        }
    }
}

由于有:
σ : ( ( X : Z ) , ( Y : T ) ) ↦ ( X Y : X T : Z Y : Z T ) ↦ ( T ′ : X ′ : Y ′ : Z ′ ) \sigma :((X:Z),(Y:T))\mapsto(XY:XT:ZY:ZT)\mapsto(T':X':Y':Z') σ:((X:Z),(Y:T))(XY:XT:ZY:ZT)(T:X:Y:Z)
对应的 ( X ′ : Y ′ : Z ′ : T ′ ) (X':Y':Z':T') (X:Y:Z:T)即为extended坐标系表示,有:
X ′ = X T ; Y ′ = Z Y ; Z ′ = Z T ; T ′ = X Y X'=XT; Y'=ZY; Z'=ZT; T'=XY X=XT;Y=ZY;Z=ZT;T=XY

对应的代码实现为:

/// Convert this point from the \\( \mathbb P\^1 \times \mathbb P\^1
    /// \\) model to the \\( \mathbb P\^3 \\) model.
    ///
    /// This costs \\(4 \mathrm M \\).
    pub fn to_extended(&self) -> EdwardsPoint {
        EdwardsPoint {
            X: &self.X * &self.T,
            Y: &self.Y * &self.Z,
            Z: &self.Z * &self.T,
            T: &self.X * &self.Y,
        }
    }

参考资料:
[1] Extended twisted Edwards curve坐标系
[2] 论文《Twisted Edwards Curves》
[3] https://doc-internal.dalek.rs/curve25519_dalek/backend/serial/curve_models/index.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值