L’OAEP remplit les deux objectifs suivants :
- Ajouter un élément d'aléatoire qui peut être utilisé pour convertir un schéma de chiffrement déterministe (par exemple, RSA traditionnel ) en un schéma probabiliste .
- Empêcher le déchiffrement partiel des textes chiffrés (ou toute autre fuite d'informations) en s'assurant qu'un adversaire ne puisse récupérer aucune partie du texte clair sans être en mesure d'inverser la permutation unidirectionnelle de la porte dérobée.
La version originale d'OAEP (Bellare/Rogaway, 1994) présentait une forme de « conscience du texte clair » (qui, selon leurs auteurs, impliquait une sécurité contre les attaques à texte chiffré choisi ) dans le modèle de l'oracle aléatoire lorsque OAEP était utilisé avec une permutation à trappe quelconque. Des résultats ultérieurs ont contredit cette affirmation, montrant qu'OAEP n'était sûr qu'à IND-CCA1 . Cependant, il a été prouvé que le schéma original était sûr à IND-CCA2 dans le modèle de l'oracle aléatoire lorsque OAEP était utilisé avec la permutation RSA en utilisant des exposants de chiffrement standard, comme dans le cas de RSA-OAEP. Un schéma amélioré (appelé OAEP+) fonctionnant avec toute permutation à trappe unidirectionnelle a été proposé par Victor Shoup pour résoudre ce problème. Des travaux plus récents ont montré que dans le modèle standard (c'est-à-dire lorsque les fonctions de hachage ne sont pas modélisées comme des oracles aléatoires), il est impossible de prouver la sécurité IND-CCA2 de RSA-OAEP sous l'hypothèse de difficulté du problème RSA .
Algorithme

Dans le diagramme,
- MGF est la fonction génératrice de masque , généralement MGF1,
- Hash est la fonction de hachage choisie .
- hLen représente la longueur de la sortie de la fonction de hachage en octets.
- k est la longueur du module RSA n en octets,
- M est le message à compléter, de longueur mLen (au maximum
- L est une étiquette facultative à associer au message (l'étiquette est une chaîne vide par défaut et peut être utilisée pour authentifier des données sans nécessiter de chiffrement).
- PS est une chaîne d'octets de
- ⊕ est une opération XOR .
Codage
pour PKCS#1 v2.2 spécifie le schéma OAEP comme suit pour l'encodage :
- Hachez l'étiquette L en utilisant la fonction de hachage choisie :
- Générez une chaîne de remplissage PS composée de
- Concaténez lHash , PS , l'octet unique 0x01 et le message M pour former un bloc de données DB :
- Générez une graine aléatoire de longueur hLen .
- Utilisez la fonction de génération de masque pour générer un masque de la longueur appropriée pour le bloc de données :
- Masquez le bloc de données avec le masque généré :
- Utilisez la fonction de génération de masque pour générer un masque de longueur hLen pour la graine :
- Masquez la graine avec le masque généré :
- Le message encodé (rempli) est l'octet 0x00 concaténé avec maskedSeed et maskedDB :
Décodage
Le décodage fonctionne en inversant les étapes effectuées dans l'algorithme d'encodage :
- Hachez l'étiquette L en utilisant la fonction de hachage choisie :
- Pour inverser l'étape 9, divisez le message codé EM en l'octet 0x00, le maskedSeed (de longueur hLen ) et le maskedDB :
- Générez le masque de graine qui a été utilisé pour masquer la graine :
- Pour annuler l'étape 8, récupérez la graine avec le SeedMask :
- Générez le dbMask qui a été utilisé pour masquer le bloc de données :
- Pour annuler l'étape 6, récupérez le bloc de données DB :
- Pour inverser l'étape 3, divisez le bloc de données en ses parties :
Utilisation avec RSA : Le message encodé peut ensuite être chiffré avec RSA. Le caractère déterministe de RSA est désormais évité grâce à l’utilisation du chiffrement OAEP, car la graine est générée aléatoirement et influence l’intégralité du message encodé.
Sécurité
La sécurité de type « tout ou rien » repose sur le fait que pour récupérer M , il est nécessaire de récupérer l'intégralité de maskedDB et de maskedSeed ; maskedDB est indispensable pour récupérer la graine à partir de maskedSeed , et la graine est indispensable pour récupérer le bloc de données DB à partir de maskedDB . Étant donné que toute modification d'un bit d'un hachage cryptographique modifie complètement le résultat, l'intégralité de maskedDB et de maskedSeed doit être récupérée intégralement.
Mise en œuvre
Dans la norme PKCS#1, les oracles aléatoires sont identiques. La norme PKCS#1 exige en outre que les oracles aléatoires soient de type MGF1 avec une fonction de hachage appropriée.