Articulo de referencia

Relleno de cifrado asimétrico óptimo

En criptografía , el relleno de cifrado asimétrico óptimo ( OAEP ) es un esquema de relleno que se usa frecuentemente junto con el cifrado RSA . OAEP fue introducido por Bellare...

En criptografía , el relleno de cifrado asimétrico óptimo ( OAEP ) es un esquema de relleno que se usa frecuentemente junto con el cifrado RSA . OAEP fue introducido por Bellare y Rogaway [ 1 ] y posteriormente estandarizado en PKCS #1 v2 y RFC 2437.

El algoritmo OAEP es una forma de red Feistel que utiliza un par de oráculos aleatorios G y H para procesar el texto plano antes del cifrado asimétrico . Cuando se combina con cualquier permutación unidireccional de puerta trasera seguraF{\displaystyle f}Este procesamiento, según se demuestra en el modelo de oráculo aleatorio, da como resultado un esquema combinado que es semánticamente seguro frente a un ataque de texto plano elegido (IND-CPA) . Cuando se implementa con ciertas permutaciones de puerta trasera (por ejemplo, RSA), OAEP también demuestra ser seguro frente a un ataque de texto cifrado elegido. OAEP puede utilizarse para construir una transformación de todo o nada .

OAEP cumple los dos objetivos siguientes:

  1. Añade un elemento de aleatoriedad que pueda utilizarse para convertir un esquema de cifrado determinista (por ejemplo, el RSA tradicional ) en un esquema probabilístico .
  2. Evite el descifrado parcial de textos cifrados (u otra fuga de información) asegurándose de que un adversario no pueda recuperar ninguna parte del texto plano sin poder invertir la permutación unidireccional de la puerta trasera.F{\displaystyle f}.

La versión original de OAEP (Bellare/Rogaway, 1994) mostró una forma de " conocimiento del texto plano " (que afirmaron implica seguridad contra ataques de texto cifrado elegido ) en el modelo de oráculo aleatorio cuando OAEP se usa con cualquier permutación de puerta trasera. Resultados posteriores contradijeron esta afirmación, mostrando que OAEP era solo seguro IND-CCA1 . Sin embargo, se demostró que el esquema original en el modelo de oráculo aleatorio era seguro IND-CCA2 cuando OAEP se usa con la permutación RSA usando 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 puerta trasera 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 demostrar la seguridad IND-CCA2 de RSA-OAEP bajo la dificultad supuesta del problema RSA . [ 4 ] [ 5 ]

Algoritmo

Esquema de codificación OAEP según RFC 8017

En el diagrama,

  • MGF es la función generadora de máscara , usualmente MGF1,
  • Hash es la función hash elegida ,
  • 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 una longitud mLen (como máximometroLminorte=k2hLminorte2{\displaystyle \mathrm {mLen} =k-2\cdot \mathrm {hLen} -2}bytes),
  • L es una etiqueta opcional que se asocia con el mensaje (la etiqueta es una cadena vacía por defecto y se puede utilizar para autenticar datos sin necesidad de cifrado).
  • PS es una cadena de bytes dekmetroLminorte2hLminorte2{\displaystyle k-\mathrm {mLen} -2\cdot \mathrm {hLen} -2}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:

  1. Calcula el hash de la etiqueta L utilizando la función hash elegida:lHash=Hash(L){\displaystyle \mathrm {lHash} =\mathrm {Hash} (L)}
  2. Generar una cadena de relleno PS que consta dekmetroLminorte2hLminorte2{\displaystyle k-\mathrm {mLen} -2\cdot \mathrm {hLen} -2}bytes (0x00 y 0x01).
  3. Concatenar lHash , PS , el byte único 0x01 y el mensaje M para formar un bloque de datos DB :DB=lHash||PAGS||0incógnita01||METRO{\displaystyle \mathrm {DB} =\mathrm {lHash} ||\mathrm {PS} ||\mathrm {0x01} ||\mathrm {M} }Este bloque de datos tiene longitudkhLminorte1{\displaystyle k-\mathrm {hLen} -1}bytes.
  4. Genera una semilla aleatoria de longitud hLen .
  5. Utilice la función generadora de máscaras para generar una máscara de la longitud adecuada para el bloque de datos:dbMETROask=METROGRAMOF(smimid,khLminorte1){\displaystyle \mathrm {dbMask} =\mathrm {MGF} (\mathrm {seed} ,k-\mathrm {hLen} -1)}
  6. Enmascara el bloque de datos con la máscara generada:metroaskmidDB=DBdbMETROask{\displaystyle \mathrm {maskedDB} =\mathrm {DB} \oplus \mathrm {dbMask} }
  7. Utilice la función generadora de máscaras para generar una máscara de longitud hLen para la semilla:smimidMETROask=METROGRAMOF(metroaskmidDB,hLminorte){\displaystyle \mathrm {seedMask} =\mathrm {MGF} (\mathrm {maskedDB},\mathrm {hLen})}
  8. Enmascara la semilla con la máscara generada:metroaskmidSmimid=smimidsmimidMETROask{\displaystyle \mathrm {maskedSeed} =\mathrm {seed} \oplus \mathrm {seedMask} }
  9. El mensaje codificado (rellenado) es el byte 0x00 concatenado con maskedSeed y maskedDB :miMETRO=0incógnita00||metroaskmidSmimid||metroaskmidDB{\displaystyle \mathrm {EM} =\mathrm {0x00} ||\mathrm {maskedSeed} ||\mathrm {maskedDB} }

Descodificación

La decodificación funciona revirtiendo los pasos dados en el algoritmo de codificación:

  1. Calcula el hash de la etiqueta L utilizando la función hash elegida:lHash=Hash(L){\displaystyle \mathrm {lHash} =\mathrm {Hash} (L)}
  2. Para revertir el paso 9, divida el mensaje codificado EM en el byte 0x00, maskedSeed (con longitud hLen ) y maskedDB : miMETRO=0incógnita00||metroaskmidSmimid||metroaskmidDB{\displaystyle \mathrm {EM} =\mathrm {0x00} ||\mathrm {maskedSeed} ||\mathrm {maskedDB} }
  3. Generar la máscara de semilla que se utilizó para enmascarar la semilla :smimidMETROask=METROGRAMOF(metroaskmidDB,hLminorte){\displaystyle \mathrm {seedMask} =\mathrm {MGF} (\mathrm {maskedDB},\mathrm {hLen})}
  4. Para revertir el paso 8, recupere la semilla con seedMask :smimid=metroaskmidSmimidsmimidMETROask{\displaystyle \mathrm {seed} =\mathrm {maskedSeed} \oplus \mathrm {seedMask} }
  5. Generar la máscara de base de datos que se utilizó para enmascarar el bloque de datos:dbMETROask=METROGRAMOF(smimid,khLminorte1){\displaystyle \mathrm {dbMask} =\mathrm {MGF} (\mathrm {seed} ,k-\mathrm {hLen} -1)}
  6. Para revertir el paso 6, recupere el bloque de datos DB:DB=metroaskmidDBdbMETROask{\displaystyle \mathrm {DB} =\mathrm {maskedDB} \oplus \mathrm {dbMask} }
  7. Para revertir el paso 3, divida el bloque de datos en sus partes:DB=lHash||PAGS||0incógnita01||METRO{\displaystyle \mathrm {DB} =\mathrm {lHash'} ||\mathrm {PS} ||\mathrm {0x01} ||\mathrm {M} }.
    1. Verifica 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.
    2. Si no se cumple alguna de estas condiciones, el relleno no es válido.

Uso en RSA: El mensaje codificado puede luego cifrarse con RSA. La propiedad determinista de RSA se evita ahora mediante la codificación OAEP, ya que la semilla se genera aleatoriamente e influye en todo el mensaje codificado.

Seguridad

La seguridad de " todo o nada " radica en que, para recuperar M , es necesario recuperar tanto maskedDB como maskedSeed ; maskedDB es indispensable para recuperar la semilla de maskedSeed , y la semilla es indispensable para recuperar el bloque de datos DB de maskedDB . Dado que cualquier bit modificado en un hash criptográfico altera completamente el resultado, tanto maskedDB como maskedSeed deben recuperarse por completo.

Implementación

En el estándar PKCS#1, los oráculos aleatorios son idénticos. El estándar PKCS#1 también exige que los oráculos aleatorios sean MGF1 con una función hash apropiada. [ 7 ]

Véase también

Referencias

  1. M. Bellare , P. Rogaway . Cifrado asimétrico óptimo: cómo cifrar con RSA . Resumen extendido 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).
  2. 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).
  3. Victor Shoup. OAEP reconsiderado . Laboratorio de Investigación de IBM en Zúrich, Saumerstr. 4, 8803 Ruschlikon, Suiza. 18 de septiembre de 2001. Versión completa (pdf).
  4. P. Paillier y J. Villar, Intercambio de unidireccionalidad frente a seguridad de texto cifrado elegido en el cifrado basado en factorización , Avances en criptología – Asiacrypt 2006.
  5. D. Brown, ¿Qué funciones hash hacen que RSA-OAEP sea seguro?, IACR ePrint 2006/233.
  6. "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 .
  7. Brown, Daniel RL (2006). "¿Qué funciones hash hacen que RSA-OAEP sea seguro?" (PDF) . Archivo de preimpresiones de criptología de la IACR . Recuperado el 3 de abril de 2019 .