Evite el descifrado parcial de textos cifrados (u otra filtración de información) garantizando que un adversario no pueda recuperar ninguna parte del texto sin formato sin poder invertir la permutación unidireccional de la trampilla .
La versión original de OAEP (Bellare/Rogaway, 1994) mostró una forma de " conocimiento de texto sin formato " (que, según afirmaron, implica seguridad contra ataques de texto cifrado elegidos ) en el modelo de Oracle aleatorio cuando se utiliza OAEP con cualquier permutación de trampilla. Los resultados posteriores contradijeron esta afirmación y mostraron que OAEP solo era seguro para IND-CCA1 . Sin embargo, se demostró en el modelo aleatorio de Oracle que el esquema original es seguro IND-CCA2 cuando se usa 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]
Un trabajo más reciente ha 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 dureza 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 (como máximo en bytes),
L es una etiqueta opcional que se asociará con el mensaje (la etiqueta es la cadena vacía de forma predeterminada 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 la etiqueta L usando 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 bytes de longitud.
Genere 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:
Enmascare 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:
Enmascare 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 seguidos en el algoritmo de codificación:
Hash la etiqueta L usando la función hash elegida:
Para revertir el paso 9, divida el mensaje codificado EM en el byte 0x00, MaskedSeed (con longitud hLen ) y MaskedDB :
Genere la seedMask que se usó 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: .
Comprueba eso:
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 no se cumple alguna de estas condiciones, entonces el relleno no es válido.
Uso en RSA: el mensaje codificado se puede cifrar con RSA. La propiedad determinista de RSA ahora se evita mediante el uso de la codificación OAEP porque la semilla se genera aleatoriamente e influye en todo el mensaje codificado.
Seguridad
La seguridad de " todo o nada " proviene del hecho de que para recuperar M , uno debe recuperar toda la base de datos enmascarada y toda la semilla enmascarada ; Se requiere MaskedDB para recuperar la semilla de MaskedSeed , y se requiere la semilla para recuperar el bloque de datos DB de MaskedDB . Dado que cualquier bit modificado de un hash criptográfico cambia completamente el resultado, tanto el maskedDB completo como el maskedSeed completo deben recuperarse por completo.
Implementación
En el estándar PKCS#1, los oráculos aleatorios son idénticos. El estándar PKCS#1 requiere además que los oráculos aleatorios sean MGF1 con una función hash adecuada. [7]
^
Eiichiro Fujisaki, Tatsuaki Okamoto, David Pointcheval y Jacques Stern . RSA-- La OAEP está segura bajo el supuesto RSA . En J. Kilian, ed., Avances en criptología - CRYPTO 2001, vol. 2139 de Lecture Notes in Computer Science, SpringerVerlag, 2001. versión completa (pdf)
^
Víctor Shoup. "OAEP reconsiderada" . Laboratorio de investigación de IBM Zurich, Saumerstr. 4, 8803 Rüschlikon, Suiza. 18 de septiembre de 2001. versión completa (pdf)
^
P. Paillier y J. Villar, Comercio unidireccional contra la seguridad del texto cifrado elegido en el cifrado basado en factoring , 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. seg. 7.1.1. doi : 10.17487/RFC8017 . RFC 8017 . Consultado el 4 de junio de 2022 .
^ Marrón, Daniel RL (2006). "¿Qué hashes hacen que RSA-OAEP sea seguro?" (PDF) . Archivo ePrint de criptología IACR . Consultado el 3 de abril de 2019 .