Elliptic curves over finite fields and the computation of square roots mod 𝑝 (1985)

In this paper we present a deterministic algorithm to compute the number of <inline-formula content-type="math/mathml"> <mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" alttext="bold upper F Subscript q"> <mml:semantics> <mml:mrow class="MJX-TeXAtom-ORD"> <mml:msub> <mml:mrow class="MJX-TeXAtom-ORD"> <mml:mrow class="MJX-TeXAtom-ORD"> <mml:mi mathvariant="bold">F</mml:mi> </mml:mrow> </mml:mrow> <mml:mi>q</mml:mi> </mml:msub> </mml:mrow> <mml:annotation encoding="application/x-tex">{{\mathbf {F}}_q}</mml:annotation> </mml:semantics> </mml:math> </inline-formula>-points of an elliptic curve that is defined over a finite field <inline-formula content-type="math/mathml"> <mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" alttext="bold upper F Subscript q"> <mml:semantics> <mml:mrow class="MJX-TeXAtom-ORD"> <mml:msub> <mml:mrow class="MJX-TeXAtom-ORD"> <mml:mrow class="MJX-TeXAtom-ORD"> <mml:mi mathvariant="bold">F</mml:mi> </mml:mrow> </mml:mrow> <mml:mi>q</mml:mi> </mml:msub> </mml:mrow> <mml:annotation encoding="application/x-tex">{{\mathbf {F}}_q}</mml:annotation> </mml:semantics> </mml:math> </inline-formula> and which is given by a Weierstrass equation. The algorithm takes <inline-formula content-type="math/mathml"> <mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" alttext="upper O left-parenthesis log Superscript 9 Baseline q right-parenthesis"> <mml:semantics> <mml:mrow> <mml:mi>O</mml:mi> <mml:mo stretchy="false">(</mml:mo> <mml:mrow class="MJX-TeXAtom-ORD"> <mml:msup> <mml:mi>log</mml:mi> <mml:mn>9</mml:mn> </mml:msup> </mml:mrow> <mml:mi>q</mml:mi> <mml:mo stretchy="false">)</mml:mo> </mml:mrow> <mml:annotation encoding="application/x-tex">O({\log ^9}q)</mml:annotation> </mml:semantics> </mml:math> </inline-formula> elementary operations. As an application we give an algorithm to compute square roots <inline-formula content-type="math/mathml"> <mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" alttext="mod p"> <mml:semantics> <mml:mrow> <mml:mo lspace="thickmathspace" rspace="thickmathspace">mod</mml:mo> <mml:mi>p</mml:mi> </mml:mrow> <mml:annotation encoding="application/x-tex">\bmod p</mml:annotation> </mml:semantics> </mml:math> </inline-formula>. For fixed <inline-formula content-type="math/mathml"> <mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" alttext="x element-of bold upper Z"> <mml:semantics> <mml:mrow> <mml:mi>x</mml:mi> <mml:mo>∈</mml:mo> <mml:mrow class="MJX-TeXAtom-ORD"> <mml:mrow class="MJX-TeXAtom-ORD"> <mml:mi mathvariant="bold">Z</mml:mi> </mml:mrow> </mml:mrow> </mml:mrow> <mml:annotation encoding="application/x-tex">x \in {\mathbf {Z}}</mml:annotation> </mml:semantics> </mml:math> </inline-formula>, it takes <inline-formula content-type="math/mathml"> <mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" alttext="upper O left-parenthesis log Superscript 9 Baseline p right-parenthesis"> <mml:semantics> <mml:mrow> <mml:mi>O</mml:mi> <mml:mo stretchy="false">(</mml:mo> <mml:mrow class="MJX-TeXAtom-ORD"> <mml:msup> <mml:mi>log</mml:mi> <mml:mn>9</mml:mn> </mml:msup> </mml:mrow> <mml:mi>p</mml:mi> <mml:mo stretchy="false">)</mml:mo> </mml:mrow> <mml:annotation encoding="application/x-tex">O({\log ^9}p)</mml:annotation> </mml:semantics> </mml:math> </inline-formula> elementary operations to compute <inline-formula content-type="math/mathml"> <mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" alttext="StartRoot x EndRoot mod p"> <mml:semantics> <mml:mrow> <mml:msqrt> <mml:mi>x</mml:mi> </mml:msqrt> <mml:mo lspace="thickmathspace" rspace="thickmathspace">mod</mml:mo> <mml:mi>p</mml:mi> </mml:mrow> <mml:annotation encoding="application/x-tex">\sqrt x \bmod p</mml:annotation> </mml:semantics> </mml:math> </inline-formula>.