title: Cryptographie multivariée
text: # Cryptographie multivariée
  
  La cryptographie multivariée regroupe un ensemble de techniques cryptographiques à clé publique reposant sur l'utilisation de polynômes multivariés à coefficients dans un corps fini. Il s'agit d'une des directions de recherches considérées pour développer la cryptographie post-quantique. Pour l'essentiel, la sécurité des constructions issues de cette direction de recherche découle du fait que la résolution de systèmes d'équations polynomiales est un problème NP-difficile en général.
  
  ## Histoire
  
  Le premier schéma de chiffrement de cette famille fut décrit par Tsutomu Matsumoto et Hideki Imai en 1988. Bien que rapidement cryptanalysé, il inspira de nombreuses variantes dont HFE, dû à Jacques Patarin. Si HFE tel qu'initialement décrit est aujourd'hui considéré comme $cassé^,^,^,^,^,,$ des variantes telles que UOV, $HFE^{v−}^,,$ ou Rainbow sont encore $viables^,^,^,.$ De même, le schéma de signature Sflash, proposé à la compétition NESSIE, est aujourd'hui complètement $cassé^,.$
  
  Tous ces cryptosystèmes ont en commun que la clé publique est constituée d'un ensemble de polynômes multivariés, généralement des polynômes quadratiques pour des raisons d'efficacité algorithmique et de taille des clés.
  
  ## Principe général
  
  On fixe un corps fini $\mathbb {F}$, la clé publique est donnée par un ensemble :
  
  $G(x_{1},\dotsc ,x_{n})=\left(G_{1}(x_{1},\dotsc ,x_{n}),\dotsc ,G_{m}(x_{1},\dotsc ,x_{n})\right)$
  
  où chaque $G_{i}\in \mathbb {F} [x_{1},\dotsc ,x_{n}]$. Un message clair correspond à une suite $M=(m_{1},\dotsc ,m_{n})\in \mathbb {F} ^{n}$, et le chiffrement consiste simplement à évaluer chaque polynôme de la clé publique en ce point:
  
  $C=G(M)=\left(G_{1}(M),\dotsc ,G_{m}(M)\right).$
  
  On voit ici apparaître un des intérêts de cette famille de techniques cryptographiques : l'évaluation polynomiale est calculatoirement très efficace (et même, dans une certaine mesure, parallélisable), ce qui permet un chiffrement relativement très rapide. Jusqu'ici la description ci-dessus s'applique à tous les procédés de chiffrement multivariés.
  
  Pour déchiffrer, il faut posséder comme clé secrète un moyen d'inverser $G$, noté généralement $G^{-1}$. Ce moyen est spécifique au chiffrement multivarié considéré, et c'est souvent en étudiant la manière dont $G$ et son inverse sont choisis qu'une attaque a été découverte : en effet, il s'agit souvent d'une opération aisément inversible « masquée » par deux transformations, de manière tout à fait analogue à l'approche utilisée pour les chiffrements à base de codes, tels que le cryptosystème de McEliece, pour cacher le code.
  
  Pour un ensemble de polynômes $G$ général (c'est-à-dire ne présentant pas de structure particulière exploitable par l'attaquant), le problème de l'inversion est prouvé NP-difficile. Supposant P ≠ NP il est donc conjecturé que même un ordinateur quantique ne peut résoudre ce problème efficacement. Comme les polynômes utilisés en cryptographie multivariée ne sont pas tout à fait aléatoires, mais sont choisis avec une structure cachée, l'argument de sécurité n'est toutefois qu'heuristique.
  
  En calculant l'inverse $G^{-1}(M)$ au lieu de $G(M)$, on obtient un schéma de signature au lieu d'un schéma de chiffrement, où cette fois c'est la vérification publique de la signature qui est particulièrement efficace. Un des attraits de la cryptographie multivariée pour la génération de signatures est leur taille réduite comparée à d'autres approches.
  
  ## Exemple
  
  Pour illustrer le fonctionnement sur un exemple simple (tiré du cryptosystème d'Imai-Matsumoto), on se place dans le corps $\mathbb {F} =\mathbb {F} _{2^{2}}=\mathbb {F} _{2}[X]/(X^{2}+X+1)$, qui possède 4 éléments $0,1,\alpha ,1+\alpha$, que l'on va noter respectivement $0,1,2,3$. Supposons la clé publique donnée par
  
  ${\begin{aligned}G_{1}&=1+x_{2}+2x_{0}x_{2}+3x_{1}^{2}+3x_{1}x_{2}+x_{2}^{2}\\G_{2}&=1+3x_{0}+2x_{1}+x_{2}+x_{0}^{2}+x_{0}x_{1}+3x_{0}x_{2}+x_{1}^{2}\\G_{3}&=3x_{2}+x_{0}^{2}+3x_{1}^{2}+x_{1}x_{2}+3x_{2}^{2}\\\end{aligned}}$
  
  et le message $M=(1,2,3)$, alors on obtient le chiffré
  
  $C=G(M)=(0,0,1)$
  
  ## Primitives à base de cryptographie multivariée
  
  Schémas de chiffrement :
  
  * Hidden field equations (HFE), et ses variantes $HFE^+,$ $HFE^−,$ $HFE^v,$ $HFE^f,$ et $HFE^{v−}.$
  * Unbalanced oil and vinegar (UOV)
  
  Schémas de signature :
  
  * Sflash
  * Quartz
  