Suponga que no tiene una tabla de arco iris (u otra lista de hashes precomputada),
y realmente necesitaría hacer un ataque de fuerza bruta o diccionario.
Este programa IGHASHGPU v0.90 afirma poder hacer aproximadamente 1300 millones de hashes SHA-1 ( es decir, más de 2 ^ 30) en cada segundo en una sola GPU ATI HD5870.
Suponga una contraseña de 40 bits de entropía, esto necesita 2 ^ 10 segundos, lo que equivale a unos 17 minutos.
Una contraseña de 44 bits de entropía ( like el del famoso cómic XKCD ) tarda 68 minutos (en el peor de los casos, el caso promedio es la mitad de esto).
La ejecución en varias GPU en paralelo acelera esto proporcionalmente.
Por lo tanto, la fuerza bruta con hashes rápidos es un peligro real, no teórico.
Y muchas contraseñas tienen una entropía mucho menor, lo que hace que la fuerza bruta sea aún más rápida.
Si utilizo una sal verdaderamente aleatoria para cada usuario, en qué orden de magnitud
¿Esto afectará la cantidad de tiempo para descifrar mi contraseña?
Se supone que el atacante conoce la propia sal, y por sí solo no aumenta mucho el tiempo de craqueo para una sola contraseña (podría aumentarla un poco, porque los datos de hash se vuelven un bloque más largos, pero eso como mucho duplica el trabajo).
El beneficio real de un salt (aleatorio independiente) es que un atacante no puede usar el mismo trabajo para atacar las contraseñas de varios usuarios al mismo tiempo. Cuando el atacante desea solo la contraseña de cualquier usuario (o "tantos como sea posible"), y tiene algunos millones de usuarios, no tener un salt podría reducir proporcionalmente el tiempo de ataque, incluso si todos los usuarios tuvieran contraseñas seguras. Y ciertamente no todos lo tendrán.
Como beneficio adicional, ¿qué algoritmos de hash son más seguros de usar?
El estándar actual es usar un algoritmo de hashing lento . PBKDF2, bcrypt o scrypt toman una contraseña y un salt como entrada y un factor de trabajo configurable: establezca este factor de trabajo tan alto como sus usuarios simplemente acepten el tiempo de inicio de sesión con el hardware de su servidor.
-
PBKDF2 es simplemente un hash rápido iterado (es decir, aún paralelizable de manera eficiente). (Es un esquema que se puede usar con diferentes algoritmos base. Use el algoritmo que esté utilizando de todos modos en su sistema).
-
Bcrypt necesita algo de memoria de trabajo (4KB) y, por lo tanto, se puede implementar de manera menos eficiente en una GPU con menos de 4KB de procesador por procesador caché.
-
Scrypt utiliza una gran cantidad de memoria (configurable) además del tiempo de procesamiento, lo que hace que sea extremadamente costoso paralelizar en GPU o personalizadas hardware, mientras que las computadoras "normales" usualmente tienen suficiente RAM disponible.
Todas estas funciones tienen una entrada de sal, y debe utilizarla .