Miller’s Algorithm

Consider \(E[l]\), the \(l\)-torsion points of an elliptic curve \(E\). Write \(f_P\) for the rational function with divisor \(l(P)-l(O)\).

Let \(g_{P,Q}\) be the line between the points \(P\) and \(Q\), and let \(f_c\) be the function with divisor \((f_c) = c(P) - (c P) - (c-1)(O)\). Then for all \(a,b \in \mathbb{Z}\), we have \(f_{a+b}(Q) = f_a(Q) f_b(Q) g_{aP,bP}(Q) / g_{(a+b)P, -(a+b)P}(Q)\). Let the binary representation of \(l\) be \(l_t ,..., l_0\). Then Miller’s algorithm computes \(f_P(Q)\) as follows.

  1. set \(f \leftarrow 1\) and \(V \leftarrow P\)

  2. for \(i \leftarrow t-1\) to 0 do

    1. set \(f \leftarrow f^2 g_{V,V}(Q)/g_{2V, -2V}(Q)\) and \(V \leftarrow 2V\)

    2. if \(l_i = 1\) then

      1. set \(f \leftarrow f g_{V,P}(Q)/g_{V+P, -(V+P)}(Q)\) and \(V \leftarrow V + P\)

At the end, \(f = f_l(Q) = f_P(Q)\), and \(V = l P = O\).

By adding extra logic in the above algorithm, we can avoid handling points of infinity when computing the \(g\) functions. On the last iteration, we know \(V = -P\) if \(l\) is odd, and \(V\) has order 2 if \(l\) is even.

The \(g_{P,Q}\) functions

Let the curve be \(Y = X^3 + a X + b\).

  • Tangents: At the point \((x,y)\), the line describing the tangent at that point is \(-\lambda X + Y + (-y + \lambda x)\), where \(\lambda = \frac{3x^2 + a}{2y}\).

  • Vertical lines: These are lines between \(P\) and \(-P\). Let \(P=(x,y)\). Then the vertical line through \(P\) is \(X + (-x)\).

  • Other lines: The line between \(P=(x_1, y_1)\) and \(Q=(x_2, y_2)\) is given by \( - \lambda X + Y + (-y_1 + \lambda x_1)\) where \(\lambda = \frac{y_2 - y_1}{x_2 - x_1}\).

It may be more efficient scale \(\lambda\) appropriately and do all the divisions at once. If the embedding degree is at least two, and \(P, Q\) are in the base field, the Tate exponentiation will get rid of any scaling factors. If the embedding degree is one, then since one has to compute \(f(Q+R)/f(Q)\) (which should be computed with one iteration of Miller’s algorithm), the scaling factors in the numerator cancel those in the denominator. Thus the functions may be scaled as follows:

  • Tangents:

\[ -(3 x^2 + a)X + (2y) Y + {({-2y^2 + x(3x^2 + a)})} \]
  • Verticals:

\[ X + (-x) \]
  • Lines:

\[ (y_1 - y_2)X + (x_2 - x_1)Y + (x_1 y_2 - x_2 y_1) \]

(TODO: move to optimizations page since it assumes we’re using Tate. mention projective coords and mixin) If \(P\) lies in the ground field and \(k \gt 2\), then many divisions can be avoided since we may scale by quantities such as \(2y\) and \(x_2 - x_1\) in the above equations. These quantities lie in the ground field hence become 1 during exponentiation.


\[ f_{l+1} = f_l f_1 \frac{g_{l P, P}}{g_{-(l + 1)P, (l+1)P}} = f_l \frac{g_{O, P} }{ g_{-P,P}} = f_l \]

that is, \(f_l = f_{l+1}\), hence if \(l = 2^s - 1\), we can easily compute \(f_l(Q)\) using basically \(s\) squarings. For Solinas primes of the form \(l = 2^a + 2^b - 1\) (where \(a \gt b\)), computing \(f_{2^b}(Q)\) is an intermediate step in computing \(f_{2^a}(Q)\), and then we may simply use one of the above formulas to compute \(f_{2^a + 2^b}(Q) = f_{l+1}(Q) = f_l(Q)\).

Sometimes we need to compute \(f_{a-b}\). First note

\[ (f_{-b}) = -b(P) - (-b P) - (-b - 1)(O) \]


\[ (f_b f_{-b}) = -[ (b P) + (-b P) - 2(O) ] = - (g_{b P, -b P}) \]


\[ f_{a-b} = f_a f_{-b} g_{a P,-b P} / g_{(a-b)P, -(a-b)P} = \frac{f_a g_{a P, -b P}}{f_b g_{b P, -b P} g_{(a-b)P, -(a-b)P}} \]

Under certain conditions(described later), then we have \(f_{l-1} = f_l\) so the last iteration of Miller’s algorithm can be simplified.

Ben Lynn 💡