title: Algorithme de Pohlig-Hellman
text: # Algorithme de Pohlig-Hellman
  
  L’algorithme de Pohlig-Hellman est un algorithme pour résoudre le problème du logarithme discret (PLD). Il divise un PLD en sous-problèmes (tous des PLD aussi) et utilise ensuite les résultats de ces sous-problèmes pour construire la solution.
  
  ## Le problème du logarithme discret
  
  Soit $G=\langle g\rangle$ un groupe cyclique engendré par g. Soient h un élément de G, et N l'ordre de G.
  
  On cherche x tel que $g^x$ = h.
  
  Si une telle solution existe, alors il en existe une dans {0, 1, … , N – 1}; on peut la trouver par exemple par une réduction modulaire.
  
  En effet, par le Théorème de Lagrange, on a $g^{N}=1_{G}$, ainsi si $x\equiv x'\ ({\bmod {\ }}N)$ avec $x'\in [\![0;N-1]\!]$, alors il existe un entier relatif k ∈ ℤ tel que $x=x'+k\cdot N$. Par conséquent : $h=g^{x}=g^{x'+k\cdot N}=g^{x'}\cdot (g^{N})^{k}=g^{x'}$.
  
  On peut donc considérer les solutions $x\in \mathbb {Z} /N\mathbb {Z} .$
  
  ## L'algorithme
  
  En utilisant la décomposition en produit de facteurs premiers, on peut écrire $N=\prod _{i=1}^{n}p_{i}^{u_{i}}$.
  
  Pour chaque i allant de 1 à n on pose :
  
  $g_{i}=g^{N/p_{i}^{u_{i}}},\quad h_{i}=h^{N/p_{i}^{u_{i}}}$.
  
  Soit $x_{i}$ une solution modulo $p_{i}^{u_{i}}$ pour le PLD $g_{i}^{x_{i}}=h_{i}$ (on peut par exemple utiliser un algorithme comme baby-step giant-step ou Pollard-rho pour cette étape).
  
  On peut alors appliquer le théorème des restes chinois pour trouver une solution $x\in \mathbb {Z} /N\mathbb {Z}$ tel que pour chaque i de 1 à n on ait
  
  $x\equiv x_{i}{\pmod {p_{i}^{u_{i}}}}$
  
  Le théorème des restes chinois assure que ce $x$ est bien une solution valide pour le PLD $g^x$ = h.
  
  ## Conséquences
  
  Dans la cryptanalyse du PLD, cet algorithme permet d'affirmer que la difficulté du logarithme discret dans un groupe d'ordre $N=\prod _{i=1}^{n}p_{i}^{u_{i}}$ avec $p_{1}<\ldots <p_{n}$ se ramène à la difficulté du logarithme discret dans $p_{n}^{u_{n}}$.
  
  Une conséquence de cette remarque est que les groupes d'ordre friable sont à éviter en cryptographie lorsque l’on souhaite utiliser l'hypothèse du logarithme discret comme hypothèse de complexité (ou toute autre hypothèse plus forte), puisqu’il suffirait de résoudre les différents logarithmes discrets dans des groupes de petites tailles, où il serait possible d'utiliser un algorithme comme l'algorithme rho de Pollard en temps raisonnable.
  
  