Pregunta

He estado buscando a través de THS documentación hashlib pero no he encontrado nada de hablar sobre el uso de Sal cuando hash de datos.

ayuda sería grande.

¿Fue útil?

Solución

La respuesta de Samir es correcta, pero un tanto críptica. Básicamente, la sal es sólo un poco al azar derivada de los datos que previa o posteriormente sus datos con aumentar drásticamente la complejidad de un ataque de diccionario en su valor hash. Así que dado un s sal y datos d que usted acaba de hacer lo siguiente para generar un hash con sal de los datos:

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

Wikipedia artículo para más detalles

Otros consejos

Sólo tiene que añadir la sal a sus 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 salado no es un proceso mágico que las necesidades de la biblioteca para ayudarle a con-es simplemente los datos adicionales proporcionados a las tablas del arco iris parada de trabajo.

>>> 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 usted está buscando un reemplazo para crypt (), las nuevas versiones de glibc hemos basado SHA-512 "$ 6 $" con un recuento variable de iteración (ver página de Ulrich Drepper, que tiene una descripción y enlaces a una implementación completa de sha512_crypt_r() C).

Escribir su propio criptográfico es altamente desaconsejable -. sha512(salt+password) la anterior no ayuda contra un ataque de fuerza bruta

Para la generación de la sal, el uso algo como os.urandom(16) para bytes aleatorios o ''.join(map(lambda x:'./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'[ord(x)%64], os.urandom(16))) para caracteres base64-igual al azar (para uso con crypt () - alikes).

(digo base64 por igual no es la misma que la base 64 en PEM / MIME.)

El uso passlib, escribir su propia contraseña de cifrado es una manera casi seguro al fracaso.

SHA512 no es una gran manera de almacenar contraseñas hash estos días. Debería utilizar bcrypt o algo similar. Lo que es importante es que la salazón se basa en el algoritmo y que tiene un factor importante trabajo.

Si usted sala sus contraseñas SHA512 simplemente añadiendo (o anteponiendo) la sal con el texto en claro, cualquiera que se ponga sus manos sobre un conjunto de contraseñas hash y se aplica una herramienta de cracking moderna ( http://arstechnica.com/security/2013/05/how -crackers-make-picada de carne-hacia fuera-de-su-contraseñas / ) será capaz de ver los valores concatenados contraseña + sal y probablemente, a través de la coincidencia de patrones trivial, ser capaz de separar la parte de la contraseña de la porción de sal para la mayoría, si no todas las cuentas en cuestión.

No he pensado esto a través de todo el camino, y yo soy de ninguna manera un experto en seguridad, pero me parece que si se va a cifrar (utilizando, por ejemplo, AES256) la contraseña utilizando la sal como el clave, y luego de hash que con SHA512, que estaría a salvo de la vulnerabilidad que he descrito anteriormente.

Sin embargo, en ese momento has puesto más esfuerzo de lo que habría llevado a cambiar a Bcrypt y todavía no tendría la protección de un factor de trabajo, por lo que sólo recomendaría un enfoque como el que si el entorno que está trabajando en no ofrece esa opción.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top