¿Debe una cadena cifrada AES CBC basada en contraseña tener seguridad adicional?

2

Para una aplicación Java que escribí, tomo una contraseña proporcionada por un usuario y genero una clave AES de 128 bits a partir de ella usando 100,000 iteraciones de PBKDF2-HMAC-SHA512 con una sal de 512 bits generada aleatoriamente. Utilizo esta clave para cifrar un archivo mediante el cifrado en modo AES-CBC y luego hago algo con esos datos cifrados.

Lo que me molesta es que parece que alguien podría generar contraseñas y luego descifrar los primeros bytes del texto cifrado y ver si sale algo que no sea basura.

¿Estoy siendo paranoico o hay trabajo extra que se puede hacer?

Por ejemplo, ¿existe un modo de AES que impida el descifrado parcial del texto cifrado? ¿O cualquier otra cosa que ralentice el proceso de probar muchas llaves?

    
pregunta Lezorte 18.07.2018 - 21:51
fuente

2 respuestas

1

La capacidad de descifrar una parte del texto cifrado no es crítica.

Es una práctica común, por ejemplo en programas de cifrado de disco, agregar una cadena fija (conocida) al texto cifrado y, por lo tanto, verificar si la contraseña falla. Independientemente del modo que esté utilizando, este no sería el punto crítico.

El modo CBC tiene solo una debilidad significativa: El modo CBC no evita los ataques de manipulación, es decir, un atacante que adivina una parte del texto cifrado puede modificarlo de acuerdo con sus propósitos. Si está disponible, use el modo GCM, EAX, CCM o OCB.

    
respondido por el BeloumiX 19.07.2018 - 08:56
fuente
-1
  

hay un modo de AES que evita el descifrado parcial de   texto cifrado

Afirmo que no soy experto en criptografía, pero mi comprensión del cifrado de bloque de cadena (CBC) es que tiene debilidades causadas principalmente por la falta de autenticación. Aunque, debido a que su vector de inicialización (IV) es un valor fijo ( previsibilidad IV ), este IV genera el último bloque del texto cifrado. Puede ver cómo diferentes implementaciones de AES ocultan datos sobre una imagen " Texto parcialmente descifrado independientemente de IV ".

"Descifrar con el IV incorrecto hace que el primer bloque de texto sin formato esté dañado, pero los bloques de texto sin formato subsiguientes serán correctos. Esto se debe a que cada bloque está XOR con el texto cifrado del bloque anterior, no el texto sin formato, por lo que no es necesario para descifrar el bloque anterior antes de usarlo como el IV para el descifrado del actual ". - Modo de operación de cifrado de bloque

El modo Galois / Counter (GCM) se suele considerar como autenticación GCM = CTR +. AES-GCM con una implementación IV adecuada se considera más segura que otras alternativas AES. Se prefiere GCM porque es un algoritmo más rápido y, a diferencia de CBC, GCM es compatible con la autenticación. Sin embargo, GCM "si reutiliza un nonce. Un único nonce repetido permite que un adversario recupere su subclave de autenticación, además de aprender el XOR de los dos mensajes con el mismo nonce". que obviamente no es lo ideal. Además, GCM utiliza IVs de 96 bits, lo que hace que las tasas de colisión sean más altas y la reutilización IV sea potencialmente más frecuente.

Este hilo Cómo elegir ¿Un modo de encriptación AES? debería ayudar, ya que describe diferentes implementaciones de AES, lo que debería permitirle elegir cuál es el adecuado para su infraestructura.

Aunque, a pesar de todo esto, optaría por CBC para el almacenamiento local. GCM se ha sentido más por las comunicaciones encriptadas en red (en tiempo real).

  

O cualquier otra cosa que ralentice el proceso de probar muchas claves

Presumiré que con las claves se refiere a las contraseñas. Donde quiere pasar las contraseñas a través de una función de hashing de una vía con múltiples iteraciones (rondas) para el almacenamiento por algo (base de datos probable).

El hash de contraseña parece más importante. He leído varias disputas con respecto al uso de la familia SHA-2 para el hashing de contraseñas, la mayoría de las críticas provienen de que SHA-2 no realiza varias iteraciones, algo que ya ha hecho, pero esto no concierne a su escenario directamente ya que está utilizando PBKDF2 con HMAC SHA512. Sin embargo, revisaría qué tipo de sistema tiene tu potencial atacante e implementaría un algoritmo de hash moderno para proteger contra eso. P.ej. ¿Utilizan CPU, GPU o ASIC para forzar la PBKDF2? Argon2 ha sido conocido por su buena resistencia contra la mayoría de los intentos de fuerza bruta. Comparando los tres algoritmos Argon2:

  • Argon2d: la mejor protección contra la fuerza bruta de GPU.
  • Argon2i: optimizado para resistir ataques de canal lateral. Accede a la matriz de memoria en un orden independiente de contraseña.
  • Argon2id: un híbrido de Argon2d y Argon2i.

Los tres modos permiten la especificación mediante tres parámetros que controlan:

  • tiempo de ejecución
  • se requiere memoria
  • grado de paralelismo

Estas especificaciones deben considerarse para todos los algoritmos de hashing de contraseñas. PBKDF2 es una función de hashing conocida y reconocida que se considera segura para el hashing de contraseñas. Sin embargo, se reconoce que es débil contra una fuerza bruta ASIC.

Elegiría entre Argon2id o PBKDF2 HMAC SHA512, y evaluaré de qué tipo de atacante estoy defendiendo.

    
respondido por el safesploit 18.07.2018 - 23:11
fuente

Lea otras preguntas en las etiquetas