Fonction pseudo-aléatoire

Une fonction pseudo-aléatoire (ou PRF pour pseudorandom function) est une fonction dont l'ensemble des sorties possibles n'est pas efficacement distinguable des sorties d'une fonction aléatoire. Il ne faut pas confondre cette notion avec celle de générateur de nombres pseudo-aléatoires (PRNG). Une fonction qui est un PRNG garantit seulement qu'une de ses sorties prise seule semble aléatoire si son entrée a été choisie aléatoirement. En revanche, une fonction pseudo-aléatoire garantit cela pour toutes ses sorties, indépendamment de la méthode de choix de l'entrée.

En cryptographie, ce genre de fonction est extrêmement important : il sert de brique de base à la conception de primitives cryptographiques, en particulier pour les algorithmes de chiffrement[1].

Définition

modifier

Formellement, une fonction pseudo-aléatoire est une fonction , où représente l'espace des clefs, représente le domaine de la fonction et son image.

La définition de sécurité associée, est donnée par le fait que n'importe quel adversaire polynomial est incapable de distinguer entre la sortie de de la sortie d'une fonction aléatoire sur le même domaine, conditionnée sur le choix de la clef [1].

Construction

modifier

L'existence de fonctions à sens unique est suffisante pour construire des fonctions pseudo-aléatoire. En effet il est possible de construire un générateur pseudo-aléatoire (PRG) à partir de fonctions à sens unique[2], et il est possible de construire une fonction pseudo-aléatoire à partir d'un générateur pseudo-aléatoire[1].

Applications

modifier

Chiffrement sémantiquement sûr

modifier

L'existence d'une fonction pseudo-aléatoire rend possible la conception d'un schéma de chiffrement symétrique sémantiquement sûr par la construction qui suit[1]. Intuitivement, elle consiste à utiliser la sortie de la fonction pseudo-aléatoire comme une sortie uniforme pour l'utiliser comme masque jetable. L'avantage réside en le fait que la clef n'est ici plus aussi longue que le message, mais va dépendre de la clef utilisée et de la taille de l'aléa (qui est dépendante de l'entrée de la fonction pseudo-aléatoire ).

  • Génération de la clef: Une clef est générée aléatoirement dans l'espace des clefs de la PRF.
  • Chiffrer: Pour chiffrer un message sous la clef , on calcule le message chiffré de la manière suivante:
    • Tirer un aléa .
    • Renvoyer le message chiffré: , où représente le ou exclusif bit à bit.
  • Déchiffrer: Pour déchiffrer un message avec la clef , on calcule: .

La correction se vérifie par le fait que est involutif.

La sécurité s'obtient par réduction polynomiale depuis la sécurité du chiffrement pseudo-aléatoire. En d'autres termes, si un adversaire était capable de distinguer entre le schéma présenté ci-dessus et une chaîne aléatoire, alors on pourrait directement l'utiliser pour distinguer entre un message construit à l'aide d'une fonction pseudo-aléatoire d'une vraie fonction aléatoire, auquel cas le chiffré serait distribué uniformément sur l'espace des chiffrés (le ou exclusif d'une constante (ici un message)par une fonction uniforme est distribué comme une fonction uniforme).

Notes et références

modifier

Bibliographie

modifier
  • [Katz et Lindell 2014] (en) Jonathan Katz et Yehuda Lindell, Introduction to Modern Cryptography, 2nd Edition, Boca Raton, Chapman and Hall, , 583 p. (ISBN 978-1-4665-7026-9, lire en ligne), « Chapitre 3.6.1 Pseudorandom Functions »
  • [Håstad et al. 1999] (en) Johan Håstad, Russell Impagliazzo, Leonid A. Levin et Michael Luby, « A pseudorandom generator from any one-way function », SIAM Journal of Computing,‎ (DOI 10.1137/S0097539793244708)