Esto es realmente más un apéndice a la inteligente respuesta de @ Brian. También felicito a @Martijn Pieters por agregar detalles sobre cómo forzar con fuerza bruta las contraseñas antiguas basadas en la actual y a @ratchet freak por "distancia de martilleo". No estoy eliminando mi respuesta porque creo que proporciona antecedentes interesantes para respaldarlos.
El almacenamiento de contraseñas de última generación requiere el uso de múltiples rondas de un hash criptográfico unidireccional fuerte (SHA-512 +) con sal única (128 bits +) para cada usuario. Pero no se sienta tentado a almacenar información adicional sobre cada contraseña. Cuanta más información almacene sobre cada contraseña, más socavará la seguridad de su algoritmo de hash.
Ejemplo
Considere lo fácil que resulta forzar una contraseña por fuerza bruta si sabe que:
- Tiene 7 caracteres de largo
- Los caracteres 3-5 son mayúsculas (4 es más bajo)
- 1 y 7 son números
- 6 es un símbolo
Un teclado de EE. UU. Tiene 95 caracteres imprimibles, por lo que saber que la contraseña tiene 7 caracteres de largo produce 95 ^ 7 = 69,833,729,610,000 = 7x10 ^ 13 permutaciones. Si fuera realmente aleatorio, podría llevar un año descifrar esto en un solo procesador de 3Ghz. Pero:
- Solo hay 26 caracteres en mayúscula y 26 en minúscula
- Solo hay 10 dígitos que producen 100 posibilidades para esos dos números
- Solo hay 32 símbolos
Entonces (corregido gracias a @Hellion):
26^4 (charcters 2-5 are known upper or lower-case)
x 100 (characters 1 & 7 are digits)
x 32 (character 6 is a symbol)
====
1,462,323,200 possible passwords.
¡Eso es 50,000 veces más fácil de descifrar! El almacenamiento de buena información para evitar contraseñas similares en este caso ha tomado su tiempo de crack para una contraseña de 7 caracteres de un año a un par de horas. Ahora es muy factible decodificar todas sus contraseñas en un potente escritorio multiprocesador con una buena tarjeta de video y un poco de paciencia. Espero que este simple ejemplo demuestre que cuanto más significativa sea la comparación de contraseñas similares, menos seguro será su hashing.
Importancia de Hashing fuerte
Las bases de datos con contraseñas se roban regularmente, con grandes robos en las noticias cada mes. Diablos, el mes pasado el estado de SC perdió los números de seguridad social de todos, ¡Uy! ¿Cuántas más de estas infracciones están cubiertas?
Pensamiento de cierre
Lo más aterrador para mí es cuando las personas eligen la misma contraseña o una similar para varios sitios, de modo que romper en uno le da acceso al atacante a todos ellos. Me encantaría ver un método probado para prevenir esa situación, aunque creo que evitar las contraseñas incorrectas más comunes ayudaría más que evitar que un usuario individual reutilice su contraseña incorrecta en el mismo sitio. Lo mejor que puedo sugerir es una política de toda la empresa para usar un administrador de contraseñas seguro que genere contraseñas altamente aleatorias para cada uno de sus usuarios y las almacene de forma segura.