¿Hashing en SHA512 usando una sal? – Python

He estado revisando la documentación de hashlib, pero no he encontrado nada sobre el uso de sal cuando se trata de datos de hash .

La ayuda sería genial.

La respuesta de Samir es correcta pero algo críptica. Básicamente, la sal es solo un bit de datos derivados al azar con el que prefieres o fijas tus datos para boost dramáticamente la complejidad de un ataque de diccionario en tu valor de hash. Entonces, dada la sal y los datos d , harías lo siguiente para generar un hash salado de los datos:

 import hashlib hashlib.sha512( s + d ).hexdigest() 

Vea este artículo de wikipedia para más detalles.

Solo agrega la sal a tus datos sensibles:

 >>> import hashlib >>> m = hashlib.sha512() >>> m.update('salt') >>> m.update('sensitive data') >>> m.hexdigest() '70197a4d3a5cd29b62d4239007b1c5c3c0009d42d190308fd855fc459b107f40a03bd427cb6d87de18911f21ae9fdfc24dadb0163741559719669c7668d7d587' >>> n = hashlib.sha512() >>> n.update('%ssensitive data' % 'salt') >>> n.hexdigest() '70197a4d3a5cd29b62d4239007b1c5c3c0009d42d190308fd855fc459b107f40a03bd427cb6d87de18911f21ae9fdfc24dadb0163741559719669c7668d7d587' >>> hashlib.sha512('salt' + 'sensitive data').hexdigest() '70197a4d3a5cd29b62d4239007b1c5c3c0009d42d190308fd855fc459b107f40a03bd427cb6d87de18911f21ae9fdfc24dadb0163741559719669c7668d7d587' 

El uso de sal no es un proceso mágico en el que la biblioteca necesita ayudarlo, solo se trata de datos adicionales para que las tablas de arco iris no funcionen.

 >>> import hashlib >>> m = hashlib.sha512() >>> m.update(b"Nobody inspects") >>> m.update(b" the spammish repetition") >>> m.digest() b'\xd0\xf4\xc1LH\xadH7\x90^\xa7R\x0c\xc4\xafp\x0fd3\xce\t\x85\xe6\xbb\x87\xb6\xb4a|\xb9D\xab\xf8\x14\xbdS\x96M\xdb\xf5[A\xe5\x81+:\xfe\x90\x89\x0c\nM\xb7\\\xb0Cg\xe19\xfdb\xea\xb2\xe1' >>> m.update(b"My super-secret salt.") >>> m.digest() b'\xcd\xd7K\xd9!~\xa8\x1d6\x9b\xa6\xde\x06\t\x02\xa1+}\xaeNA\x94a`\xaa\xf4\xe9\xb5\xff\x1f\x9cE\x84m\xbb\x98U\xb4z\x92\x9e\xe8\xc9\xc2\xc8\x8f\x068e\xb0\r\xed\xb7\xde\x80\xa6,\n\x111w{\xa2\x9b' 

Si está buscando un reemplazo para crypt (), las versiones más nuevas de glibc tienen “$ 6 $” basados ​​en SHA-512 con un recuento de iteraciones variables (consulte la página de Ulrich Drepper , que tiene una descripción y enlaces a una implementación completa de C sha512_crypt_r() ).

Escribir tu propio criptografía no es aconsejable: el sha512(salt+password) anterior sha512(salt+password) no ayuda contra un ataque de fuerza bruta.

Para generar sal, use algo como os.urandom(16) para bytes aleatorios o ''.join(map(lambda x:'./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'[ord(x)%64], os.urandom(16))) al azar base 64-por igual caracteres (para uso con crypt () – alikes).

(Yo digo que la base 64-similar no es lo mismo que la Base64 en PEM / MIME).

use passlib, escribir su propia contraseña criptográfica es una forma casi segura de fallar.

SHA512 no es una buena manera de almacenar contraseñas con hash en estos días. Deberías estar usando bcrypt o algo similar. Lo importante es que la salazón está incorporada y que el algoritmo tiene un factor de trabajo significativo.

Si agrega sus contraseñas SHA512 simplemente agregando (o agregando) la sal al texto simple, cualquiera que tenga en sus manos un conjunto de contraseñas con hash y aplique una herramienta de descifrado moderna ( http://arstechnica.com/security/2013/ 05 / how-crackers-make-minced-meat-out-of-your-passwords / ) podrá ver la contraseña concatenada + los valores de sal y probablemente, a través de la coincidencia de patrones triviales, podrá separar la parte de la contraseña de la Parte de sal para la mayoría si no todas las cuentas en cuestión.

No he pensado en esto todo el tiempo, y de ninguna manera soy un experto en seguridad, pero me parece que si tuviera que cifrar (usando, por ejemplo, AES256) la contraseña usando la sal como clave, y luego hash que con SHA512, estarías a salvo de la vulnerabilidad que describí anteriormente.

Sin embargo, en ese momento ha puesto más esfuerzo del que hubiera requerido cambiar a bcrypt y aún no tendría la protección de un factor de trabajo, por lo que solo recomendaría un enfoque como ese si el entorno en el que se encuentra. Trabajar en no ofrece esa opción.