Añade un elemento de aleatoriedad que puede usarse para convertir un esquema de cifrado determinista (por ejemplo, RSA tradicional ) en un esquema probabilístico .
Evite el descifrado parcial de textos cifrados (u otra fuga de información) al garantizar que un adversario no pueda recuperar ninguna porción del texto simple sin poder invertir la permutación unidireccional de la trampa .
La versión original de OAEP (Bellare/Rogaway, 1994) mostró una forma de " conocimiento del texto simple " (que según afirmaban implica seguridad contra ataques de texto cifrado elegido ) en el modelo de oráculo aleatorio cuando se utiliza OAEP con cualquier permutación de trampilla. Los resultados posteriores contradijeron esta afirmación, mostrando que OAEP solo era seguro IND-CCA1 . Sin embargo, se demostró que el esquema original en el modelo de oráculo aleatorio era seguro IND-CCA2 cuando se utiliza OAEP con la permutación RSA utilizando exponentes de cifrado estándar, como en el caso de RSA-OAEP. [2] Victor Shoup
ofreció un esquema mejorado (llamado OAEP+) que funciona con cualquier permutación unidireccional de trampilla para resolver este problema. [3]
Trabajos más recientes han demostrado que en el modelo estándar (es decir, cuando las funciones hash no se modelan como oráculos aleatorios) es imposible probar la seguridad IND-CCA2 de RSA-OAEP bajo la supuesta dificultad del problema RSA . [4] [5]
hLen es la longitud de la salida de la función hash en bytes,
k es la longitud del módulo RSA n en bytes,
M es el mensaje que se va a rellenar, con longitud mLen (como máximo bytes),
L es una etiqueta opcional que se asociará con el mensaje (la etiqueta es la cadena vacía por defecto y se puede utilizar para autenticar datos sin necesidad de cifrado),
PS es una cadena de bytes de bytes nulos.
⊕ es una operación XOR .
Codificación
RFC 8017 [6] para PKCS#1 v2.2 especifica el esquema OAEP de la siguiente manera para la codificación:
Hash de la etiqueta L utilizando la función hash elegida:
Genere una cadena de relleno PS que consta de bytes con el valor 0x00.
Concatene lHash , PS , el byte único 0x01 y el mensaje M para formar un bloque de datos DB :. Este bloque de datos tiene una longitud de bytes.
Generar una semilla aleatoria de longitud hLen .
Utilice la función de generación de máscara para generar una máscara de la longitud adecuada para el bloque de datos:
Enmascarar el bloque de datos con la máscara generada:
Utilice la función de generación de máscara para generar una máscara de longitud hLen para la semilla:
Enmascarar la semilla con la máscara generada:
El mensaje codificado (rellenado) es el byte 0x00 concatenado con maskedSeed y maskedDB :
Descodificación
La decodificación funciona invirtiendo los pasos realizados en el algoritmo de codificación:
Hash de la etiqueta L utilizando la función hash elegida:
Para revertir el paso 9, divida el mensaje codificado EM en el byte 0x00, el maskedSeed (con longitud hLen ) y el maskedDB :
Generar la seedMask que se utilizó para enmascarar la semilla :
Para revertir el paso 8, recupere la semilla con seedMask :
Genere la dbMask que se utilizó para enmascarar el bloque de datos:
Para revertir el paso 6, recupere el bloque de datos DB:
Para revertir el paso 3, divida el bloque de datos en sus partes: .
Verifique que:
lHash' es igual al lHash calculado
PS solo consta de bytes 0x00
PS y M están separados por el byte 0x01 y
El primer byte de EM es el byte 0x00.
Si alguna de estas condiciones no se cumple, el relleno no es válido.
Uso en RSA: El mensaje codificado puede entonces cifrarse con RSA. La propiedad determinista de RSA ahora se evita al utilizar la codificación OAEP porque la semilla se genera aleatoriamente e influye en todo el mensaje codificado.
Seguridad
La seguridad de " todo o nada " se debe al hecho de que para recuperar M , se debe recuperar toda la maskedDB y toda la maskedSeed ; se requiere maskedDB para recuperar la semilla de maskedSeed , y la semilla es necesaria para recuperar el bloque de datos DB de maskedDB . Dado que cualquier bit modificado de un hash criptográfico cambia completamente el resultado, se deben recuperar completamente toda la maskedDB y toda la maskedSeed .
Implementación
En el estándar PKCS#1, los oráculos aleatorios son idénticos. El estándar PKCS#1 exige además que los oráculos aleatorios sean MGF1 con una función hash adecuada. [7]
^ M. Bellare , P. Rogaway . Optimal Asymmetric Encryption - How to encrypt with RSA ( Cifrado asimétrico óptimo: cómo cifrar con RSA) . Resumen ampliado en Advances in Cryptology – Eurocrypt '94 Proceedings, Lecture Notes in Computer Science Vol. 950, A. De Santis ed, Springer-Verlag , 1995. Versión completa (pdf)
^
Eiichiro Fujisaki, Tatsuaki Okamoto, David Pointcheval y Jacques Stern . RSA: OAEP es seguro bajo el supuesto RSA . En J. Kilian, ed., Advances in Cryptology – CRYPTO 2001, vol. 2139 de Lecture Notes in Computer Science, SpringerVerlag, 2001. Versión completa (pdf)
^
Victor Shoup. OAEP Reconsidered . IBM Zurich Research Lab, Saumerstr. 4, 8803 Ruschlikon, Suiza. 18 de septiembre de 2001. Versión completa (pdf)
^
P. Paillier y J. Villar, Intercambio de unidireccionalidad frente a seguridad de texto cifrado elegido en cifrado basado en factorización , Avances en criptología – Asiacrypt 2006.
^
D. Brown, ¿Qué hashes hacen que RSA-OAEP sea seguro?, IACR ePrint 2006/233.
^ "Operación de cifrado". PKCS #1: Especificaciones de criptografía RSA versión 2.2. IETF . Noviembre de 2016. pág. 22. sec. 7.1.1. doi : 10.17487/RFC8017 . RFC 8017 . Consultado el 4 de junio de 2022 .
^ Brown, Daniel RL (2006). "¿Qué hashes hacen que RSA-OAEP sea seguro?" (PDF) . Archivo de publicaciones electrónicas de criptología de la IACR . Consultado el 3 de abril de 2019 .