Pohlig–Hellman algorithm: Difference between revisions

Content deleted Content added
Mathbot (talk | contribs)
Robot-assisted spelling. See User:Mathbot/Logged misspellings for changes.
mNo edit summary
Line 5:
'''Input''' Integers ''p'', ''g'', ''e''.
 
'''Output''' Integer ''x'', such that ''e =&#8801; g<sup>x</sup> (mod p)''.
 
#Use [[Euler's phitotient function]] to determine the prime factorization of the order of the group : <br><center><math>\phivarphi(p)=\equiv p_0\cdot p_1 \cdot \ldots \cdot p_n</math></center>
#From the remainder theorem we know that ''x = a<sub>1</sub> p<sub>1</sub> + b<sub>1</sub>''. We now find the value of ''b<sub>1</sub>'' for which the following equation holds using a fast algorithm such as [[Baby-step giant-step]] :<br> <center><math>
\begin{matrix}e^{\phivarphi(p)/p_1} & =\equiv & (g^x)^{\phivarphi(p)/p_1} \pmod{p} \\
& =\equiv & (g^{\phivarphi(p)})^{a_1}g^{b_1\phivarphi(p)/p_1} \pmod{p} \\
& =\equiv & (g^{\phivarphi(p)/p_1})^{b_1} \pmod{p}
\end{matrix}
</math> (using [[Euler's theorem]])</center><br>Note that if <math>g^{\phivarphi(p)/p_1} =\equiv 1 \pmod{p}</math> then the order of ''g'' is less than ø&phi;(''p'') and <math>e^{\phivarphi(p)/p_1} \mod p</math> must be 1 for a solution to exist. In this case there will be more than one solution for ''x'' less than ø&phi;(''p''), but since we are not looking for the whole set, we can require that ''b''<sub>1</sub>=0.<br><br>The same operation is now performed for ''p<sub>2</sub>'' up to ''p<sub>n</sub>''.<br><br>A minor modification is needed where a prime number is repeated. Suppose we are seeing ''p<sub>i</sub>'' for the ''k+1''-th time. Then we already know ''c<sub>i</sub>'' in the equation ''x = a<sub>i</sub> p<sub>i</sub><sup>k+1</sup> + b<sub>i</sub> p<sub>i</sub><sup>k</sup>+c<sub>i</sub>'', and we find ''b<sub>i</sub>'' the same way as before.
#We end up with enough simultaneous congruences so that ''x'' can be solved using the [[Chinese remainder theorem]].