vocabulario tributarios tributario terminos puente para ingles impositivos glosario español cuentas cuenta contadores contables contable catalogo security hash password-protection salt

security - tributarios - Sales de contraseña: antepuesto vs. anexo



terminos tributarios en ingles (3)

Acabo de ver la implementación del hash de contraseñas en Django y me di cuenta de que antes de la sal , por lo que el hash se crea como sha1(salt + password) , por ejemplo.

En mi opinión, las sales son buenas para dos propósitos

  1. Evitar búsquedas de tabla arcoíris

    De acuerdo, anteponer / agregar la sal realmente no hace una diferencia para las tablas de arcoiris.

  2. Endurecimiento contra ataques de fuerza bruta / diccionario

    De esto se trata mi pregunta. Si alguien quiere atacar una sola contraseña de una base de datos de contraseñas robada, debe probar muchas contraseñas (por ejemplo, palabras del diccionario o [A-Za-z0-9] permutaciones).

    Supongamos que mi contraseña es "abcdef", la sal es "salt" y el atacante prueba todas las [az] {6} contraseñas.

    Con una sal añadida, uno debe calcular el hash("salt") , almacenar el estado del algoritmo hash y luego continuar desde ese punto para cada permutación. Es decir, pasar por todas las permutaciones requeriría 26 ^ 6 operaciones copy-hash-algorithm''s-state-struct y 26 ^ 6 operaciones hash(permutation of [az]{6}) . Como copiar el estado del algoritmo hash es extremadamente rápido, la sal apenas agrega complejidad aquí, sin importar cuánto tiempo sea.

    Pero, con una sal añadida, el atacante debe calcular hash(permutation of [az]{6} + salt) para cada permutación, lo que lleva a 26 ^ 10 operaciones hash. Entonces, obviamente, agregar sales agrega complejidad dependiendo de la longitud de la sal.

No creo que esto sea por razones históricas porque Django es bastante nuevo. Entonces, ¿cuál es el sentido de anteponer las sales?


Estás haciendo un punto válido, por supuesto; pero, en realidad, si desea aumentar el tiempo que le lleva calcular el hash, solo use el hash más largo. SHA256 en lugar de SHA1, por ejemplo.


Tampoco use una función de derivación de clave estándar como PBKDF2 . Nunca mueva su propia criptografía. Es demasiado fácil equivocarse. PBKDF2 utiliza muchas iteraciones para proteger contra la fuerza bruta, que es una mejora mucho mayor que la simple ordenación.

Y su truco de cálculo previo del estado interno de la función hash después del procesamiento de la sal probablemente no sea tan fácil de llevar a cabo a menos que la longitud de la sal corresponda a la longitud del bloque del código de bloque subyacente.


Si la sal se antepone, el atacante puede hacer una base de datos de estado de hash para las sales (suponiendo que la sal es lo suficientemente larga como para hacer un paso de hash) y luego ejecutar un ataque de diccionario.

Pero si se agrega sal, el atacante puede crear dicha base de datos para el diccionario de contraseñas y, además, calcular solo el hash de sal. Dado que la sal suele ser más corta que la contraseña (como la sal de 4 caracteres y la contraseña de 8 caracteres), será un ataque más rápido.