This explains https://arxiv.org/abs/math/0208038 .
Motivation
Compute 2 P + Q 2P + Q 2 P + Q without the intermediate results 2 P 2P 2 P and P + Q P + Q P + Q given E : y 2 = x 3 + a ⋅ x + b E: y^2 = x^3 + a \cdot x + b E : y 2 = x 3 + a ⋅ x + b , where 4 a 3 + 27 b 2 ≠ 0 4a^3 + 27b^2 \ne 0 4 a 3 + 27 b 2 = 0 ,
2 P 2P 2 P : 1 multiplication, 2 squarings and 1 division. If P = ( x 1 , y 1 ) P = (x_1, y_1) P = ( x 1 , y 1 ) , R = 2 P = ( x 2 , y 2 ) R = 2P = (x_2, y_2) R = 2 P = ( x 2 , y 2 ) is computed as follows:
λ = 3 x 1 2 + a 2 y 1 x 2 = λ 2 − 2 x 1 y 2 = ( x 1 − x 2 ) λ − y 1 \lambda = \frac{3 {x_1}^2 + a}{2 y_1}
\\x_2 = \lambda^2 - 2x_1 \\
y_2 = (x_1 - x_2) \lambda - y_1 λ = 2 y 1 3 x 1 2 + a x 2 = λ 2 − 2 x 1 y 2 = ( x 1 − x 2 ) λ − y 1 P + Q P + Q P + Q : 1 multiplication, 1 squaring and 1 division. If P = ( x 1 , y 1 ) P = (x_1, y_1) P = ( x 1 , y 1 ) and Q = ( x 2 , y 2 ) Q = (x_2, y_2) Q = ( x 2 , y 2 ) , R = P + Q = ( x 3 , y 3 ) R = P + Q = (x_3, y_3) R = P + Q = ( x 3 , y 3 ) is computed as follows:
λ 1 = ( y 2 − y 1 ) / ( x 2 − x 1 ) , x 3 = λ 1 2 − x 1 − x 2 , y 3 = ( x 1 − x 3 ) λ 1 − y 1 \lambda_1 = (y_2 - y_1) / (x_2 - x_1),\\
x_3 = {\lambda_1}^2 - x_1 -x_2, \\
y_3 = (x_1 - x_3)\lambda_1 - y_1 λ 1 = ( y 2 − y 1 ) / ( x 2 − x 1 ) , x 3 = λ 1 2 − x 1 − x 2 , y 3 = ( x 1 − x 3 ) λ 1 − y 1 Naive 2 P + Q 2P + Q 2 P + Q : 2 multiplications, 3 squarings and 2 divisions
How can we improve this?
Algorithm
Suppose P = ( x 1 , y 1 ) P = (x_1, y_1) P = ( x 1 , y 1 ) and Q = ( x 2 , y 2 ) Q = (x_2, y_2) Q = ( x 2 , y 2 ) are distinct points on E E E , with x 1 ≠ x 2 x_1 \ne x_2 x 1 = x 2 . The sum P + Q P + Q P + Q has coordinates ( x 3 , y 3 ) (x_3, y_3) ( x 3 , y 3 ) , where:
λ 1 = ( y 2 − y 1 ) / ( x 2 − x 1 ) , x 3 = λ 1 2 − x 1 − x 2 , y 3 = ( x 1 − x 3 ) λ 1 − y 1 \lambda_1 = (y_2 - y_1) / (x_2 - x_1),\\ x_3 = {\lambda_1}^2 - x_1 -x_2, \\ y_3 = (x_1 - x_3)\lambda_1 - y_1 λ 1 = ( y 2 − y 1 ) / ( x 2 − x 1 ) , x 3 = λ 1 2 − x 1 − x 2 , y 3 = ( x 1 − x 3 ) λ 1 − y 1 Now suppose we want to add ( P + Q ) (P + Q) ( P + Q ) to P P P . To do this, we add ( x 1 , y 1 ) (x_1, y_1) ( x 1 , y 1 ) to ( x 3 , y 3 ) (x_3, y_3) ( x 3 , y 3 ) using the same addition rule. Assuming x 3 ≠ x 1 x_3 \ne x_1 x 3 = x 1 , the resulting coordinates are ( x 4 , y 4 ) (x_4, y_4) ( x 4 , y 4 ) , where
λ 2 = ( y 3 − y 1 ) / ( x 3 − x 1 ) , x 4 = λ 2 2 − x 1 − x 3 , y 4 = ( x 1 − x 4 ) λ 2 − y 1 \lambda_2 = (y_3 - y_1) / (x_ 3 - x_1), \\ x_4 = {\lambda_2}^2 - x_1 - x_3, \\ y_4 = (x_1 - x_4)\lambda_2 - y_1 λ 2 = ( y 3 − y 1 ) / ( x 3 − x 1 ) , x 4 = λ 2 2 − x 1 − x 3 , y 4 = ( x 1 − x 4 ) λ 2 − y 1 We can omit the explicit computation of y 3 y_3 y 3 since it is used only to calculate λ 2 \lambda_2 λ 2 . Instead, λ 2 \lambda_2 λ 2 can be computed directly as:
λ 2 = ( y 3 − y 1 ) / ( x 3 − x 1 ) = ( ( x 1 − x 3 ) λ 1 − 2 y 1 ) / ( x 3 − x 1 ) = − λ 1 − 2 y 1 / ( x 3 − x 1 ) \begin{align*}
\lambda_2 &= (y_3 - y_1) / (x_3 - x_1)\\
&= ((x_1 - x_3) \lambda_1 - 2y_1) / (x_3 - x_1) \\
&= -\lambda_1 - 2y_1 / (x_3 - x_1) \\
\end{align*} λ 2 = ( y 3 − y 1 ) / ( x 3 − x 1 ) = (( x 1 − x 3 ) λ 1 − 2 y 1 ) / ( x 3 − x 1 ) = − λ 1 − 2 y 1 / ( x 3 − x 1 ) Which means you can compute λ 2 \lambda_2 λ 2 using x 1 , y 1 x_1, y_1 x 1 , y 1 and λ 1 \lambda_1 λ 1 .
λ 2 = − λ 1 − 2 y 1 / ( λ 1 2 − x 2 − 2 x 1 ) \lambda_2 = -\lambda_1 - 2y_1 / ({\lambda_1}^2 -x_2 - 2x_1) λ 2 = − λ 1 − 2 y 1 / ( λ 1 2 − x 2 − 2 x 1 ) Additionally, you can compute x 4 x_4 x 4 using x 2 , λ 1 x_2, \lambda_1 x 2 , λ 1 and λ 2 \lambda_2 λ 2 .
x 3 = λ 1 2 − x 1 − x 2 x 3 − x 4 = λ 1 2 − x 1 − x 2 − ( λ 2 2 − x 1 − x 3 ) − x 4 = λ 1 2 − x 2 − λ 2 2 x 4 = x 2 + λ 2 2 − λ 1 2 \begin{align*} x_3 &= {\lambda_1}^2 - x_1 - x_2 \\
x_3 - x_4 &= {\lambda_1}^2 - x_1 - x_2 -( {\lambda_2}^2 - x_1 - x_3 ) \\ -x_4 &={\lambda_1}^2 - x_2 - \lambda_2^2 \\ x_4 &= x_2 + {\lambda_2}^2 - {\lambda_1}^2 \end{align*} x 3 x 3 − x 4 − x 4 x 4 = λ 1 2 − x 1 − x 2 = λ 1 2 − x 1 − x 2 − ( λ 2 2 − x 1 − x 3 ) = λ 1 2 − x 2 − λ 2 2 = x 2 + λ 2 2 − λ 1 2 This trick can also be applied when computing 3 P 3P 3 P . Thus, 3 P + Q = ( ( P + Q ) + P ) + P 3P + Q = ((P + Q) + P) + P 3 P + Q = (( P + Q ) + P ) + P saves 2 multiplicaitons.
Conclusion
The cost of this algorithm is as follows:
Optimized 2 P + Q 2P + Q 2 P + Q : 1 multiplication, 2 squarings and 2 divisions (+ 1 squaring when P = Q P = Q P = Q )
Idea: ( P + Q ) + P (P + Q) +P ( P + Q ) + P instead of 2 P + Q 2P + Q 2 P + Q and y y y -coordinate is not computed when computing ( P + Q ) (P + Q) ( P + Q ) ⇒ This saves a field multiplication
if P = Q P = Q P = Q
2 * (1 multiplication, 2 squarings and 1 division) - 1 multiplication
otherwise
2 * (1 multiplication, 1 squaring and 1 division) - 1 multiplication
Written by ryan Kim from A41
Last updated 2 months ago