Versiones inseguras de hash crypt

30

Leí en crackstation para no usar estas variantes de bcrypt * ($ 1 $, $ 2 $, $ 2a $, $ 2x $, $ 3 $), pero he usado bcrypt ($ 2a $) en varias implementaciones confidenciales recientemente.
¿Puede un experto en seguridad aclarar por qué recomendar ($ 2y $, $ 5 $, $ 6 $) en lugar de ($ 1 $, $ 2 $, $ 2a $, $ 2x $, $ 3 $), cuál es la versión original propuesta por Niels Provos, y en que se diferencian

bcrypt es una función de derivación clave para contraseñas diseñadas por Niels Provos y David Mazières, basada en el cifrado Blowfish, y presentada en USENIX en 1999. Además de incorporar una sal para proteger contra los ataques de la mesa del arco iris, bcrypt es una función adaptativa: con el tiempo, el recuento de iteraciones se puede aumentar para hacerlo más lento, por lo que sigue siendo resistente a los ataques de búsqueda de fuerza bruta incluso con el aumento del poder de cálculo.     
pregunta Tawfik Khalifeh 22.09.2012 - 20:49
fuente

2 respuestas

25
  • 2: el BCrypt original, que ha quedado en desuso debido a un problema de seguridad mucho antes de que el BCrypt se hiciera popular.

  • 2a: el algoritmo oficial de BCrypt y una implementación insegura en crypt_blowfish

  • 2x: sugerido para los hashes creados por el algoritmo inseguro para la compatibilidad
  • 2y: nuevo marcador sugerido para el crypt_blowfish fijo

Por lo tanto, los hash 2a creados por el algoritmo original o el puerto Java están bien, e idénticos a los hashes 2y creados por crypt_blowfish. Pero 2a hashes creados por crypt_blowfish son inseguros.

  • 5 es sha256crypt
  • 6 es sha512crypt

El algoritmo shaXXXcrypt está inspirado en bcrypt pero usa sha2 en lugar de blowfish como funciones hash para satisfacer los requisitos de cumplimiento en los EE. UU.

    
respondido por el Hendrik Brummermann 22.09.2012 - 23:11
fuente
13

BCrypt variantes

  • $2$

    La especificación original usó el prefijo $ 2 $. Esto fue en contraste con los otros prefijos de algoritmo:

    • $1$ - MD5
    • $5$ - SHA-256
    • $6$ - SHA-512
  • $2a$

    La especificación original no definió cómo manejar un carácter no ASCII, o cómo manejar un terminador nulo. La especificación se revisó para especificar que al realizar cadenas de hash:

    • la cadena debe estar codificada en UTF-8
    • se debe incluir el terminador nulo
  • $2x$ , $2y$ (junio de 2011)

    Se descubrió un error en crypt_blowfish , una implementación de PHP de BCrypt.

    Fue un mal manejo de los caracteres con el octavo bit establecido. Sugirieron que los administradores del sistema actualicen sus bases de datos de contraseñas existentes, reemplazando $2a$ con $2x$ , para indicar que esos hashes son malos (y deben usar el algoritmo roto anterior). ).

    También sugirieron la idea de que crypt_blowfish emita $2y$ para los hashes generados por el algoritmo fijo. Nadie más, incluido OpenBSD canónico, adoptó la idea de 2x / 2y . Este marcador de versión se limitó a crypt_blowfish

    enlace

  • $2b$ (febrero de 2014)

    Se descubrió un error en la implementación OpenBSD de bcrypt.

    Estaban almacenando la longitud de sus cadenas en una charla sin firmar. Si una contraseña tuviera más de 255 caracteres, se desbordaría y ajustaría a 255.

    BCrypt fue creado para OpenBSD. Así que cuando tuvieron un error en su biblioteca, decidieron que estaba bien golpear la versión. Esto significa que todos los demás deben seguir su ejemplo si desea mantenerse actualizado con "su" especificación.

    enlace
    enlace

respondido por el Ian Boyd 22.12.2015 - 21:59
fuente

Lea otras preguntas en las etiquetas