Impedir el ataque de Oracle oráculo en el proceso de intercambio de claves

1

En mis búsquedas, encontré que el ataque de Oracle Padding se puede usar contra el RSA con PKCS1PAdding o OAEP padding, y usé este algoritmo para un intercambio de claves simétricas.
¿Cómo puedo evitar un ataque de oráculo de relleno cuando uso claves públicas para el intercambio de claves secretas? Encrypt-then-MAC no se puede usar porque la generación del MAC necesita una clave secreta compartida, y la clave no se ha intercambiado todavía.

    
pregunta hyda 19.05.2015 - 17:05
fuente

1 respuesta

3

El ataque de "oráculo de relleno" del que estás hablando es mejor conocido como ataque de Bleichenbacher contra RSA . El atacante envía claves cifradas mal formadas; algunos todavía (por pura casualidad) descifran correctamente, aunque con un contenido descifrado que el atacante no puede saber. Si el comportamiento del servidor cambia, dependiendo de si el descifrado falló ("mal relleno") o no (el servidor usa el resultado del descifrado y continúa), el atacante puede obtener información sobre la clave privada RSA.

Una solución común es, de hecho, ocultar el cambio de comportamiento: cuando falla el descifrado, el servidor simplemente usa un valor aleatorio en lugar del resultado del descifrado. Por lo tanto, el atacante ya no puede distinguir entre "relleno incorrecto" y "el relleno fue correcto y dio como resultado una basura descifrada al azar". De hecho, esto es bastante difícil de implementar correctamente, especialmente porque los atacantes industriales pueden aplicar ataques de tiempo y notificar cuando el servidor utiliza un reemplazo aleatorio, debido al tiempo extra necesario para generar el reemplazo.

OAEP es nominalmente inmune al ataque de Bleichenbacher, y fue diseñado precisamente con ese objetivo; sin embargo, esto todavía requiere que se implemente correctamente, lo cual, de nuevo, no es tan fácil como parece. Se aplica la recomendación habitual: si está escribiendo su propio protocolo o implementación de criptografía, entonces lo está haciendo mal. Debe usar un protocolo existente e implementaciones existentes donde se hayan explorado y corregido detalles como la resistencia a los ataques de sincronización a través de años de pruebas en el campo.

    
respondido por el Tom Leek 19.05.2015 - 17:50
fuente

Lea otras preguntas en las etiquetas