¿La entrada predecible (como los encabezados de bcrypt) amenaza la encriptación basada en contraseña?

4

Estoy creando un sistema para almacenar la versión con hash de algunos secretos. He leído el blog de Dropbox sobre cómo almacenan sus contraseñas, y se han inspirado en lo que están haciendo.

Dropbox, según tengo entendido, hace esto:

  1. Obtener contraseña
  2. Hash unidireccional con SHA512 (para combatir el posible truncamiento de la contraseña en bcrypt)
  3. Hash unidireccional con bcrypt
  4. Cifrado bidireccional con cifrado basado en contraseña AES256 con contraseña global del lado del servidor
  5. Almacenar en la base de datos.

Veo una debilidad potencial con este sistema en el punto 4.

Cuando se utiliza el cifrado basado en contraseña del lado del servidor, el cifrado del valor bcrypt, ¿los encabezados predecibles de bcrypt debilitarán la estrategia?

El hash bcrypt se ve así:

$2a$10$q16tPq1UQXP9n8yrcm0TMeWriU4F..i4S5Gs78zBWKDG3ourZXvCK

El inicio, encabezado, probablemente será siempre el mismo para el mismo sistema: $2a$10$ . Por supuesto, pueden tener algún otro valor, pero lo más probable es que se compartan entre todos los hashes de contraseña almacenados.

Por lo tanto, para el sistema de cifrado basado en contraseña, un atacante podría buscar patrones que coincidan con este encabezado y, posiblemente, encontrar su contraseña de cifrado.

¿Sería un mejor enfoque extraer los encabezados de bcrypt y, a continuación, cifrar solo el resto de sal + hash?

Según tengo entendido, esto no tendrá ningún componente predecible y, por lo tanto, será más seguro.

Estoy haciendo esto en java actualmente. Tal vez hay algunas soluciones preexistentes para este tipo de problema?

(PS. Soy bastante nuevo en criptografía, así que corríjame si utilizo la jerga / etiquetas incorrectas, etc.)

    
pregunta Automatico 21.12.2016 - 12:56
fuente

1 respuesta

2
  

Por lo tanto, para el sistema de cifrado basado en contraseña, un atacante podría buscar patrones que coincidan con este encabezado y, posiblemente, encontrar su contraseña de cifrado.

No hay tales patrones en el texto cifrado. En la antigüedad, los algoritmos criptográficos eran vulnerables a cosas como los ataques conocidos de texto simple y debería evitar enviar el mismo texto simple una y otra vez. De hecho, los británicos fueron ayudados a descifrando los cifrados Enigma por los alemanes enviando palabras como "wetteruebersicht" de una manera predecible.

Pero eso fue entonces. Crypto moderno es diferente. AES, si se usa correctamente , produce algo que no se puede distinguir de la basura aleatoria a menos que tenga la clave, sin importar cuán predecible sea su entrada.

Por lo tanto, no es necesario cortar el prefijo de la salida de bcrypt.

    
respondido por el Anders 21.12.2016 - 14:30
fuente

Lea otras preguntas en las etiquetas