En primer lugar, contexto: estoy tratando de crear una herramienta basada en línea de comandos (Linux) que requiere iniciar sesión. Las cuentas en esta herramienta no tienen nada que ver con las cuentas de nivel de sistema ; nada de esto se ve en/etc/passwd.Módulo de cripta Python: ¿cuál es el uso correcto de sales?
Estoy planeando almacenar cuentas de usuario en un archivo de texto usando el mismo formato (más o menos) que/etc/passwd.
A pesar de no utilizar los archivos de contraseñas de nivel de sistema, usar crypt parecía como una buena práctica de usar, en lugar de almacenar contraseñas en texto sin formato. (Mientras que la cripta es ciertamente mejor que el almacenamiento de contraseñas en texto plano , estoy abierto a otras formas de hacer esto.)
Mi conocimiento de la cripta se basa en esto: https://docs.python.org/2/library/crypt.html
La documentación parece pedir algo eso no es posible: "se recomienda usar la contraseña criptada completa como sal al marcar para obtener una contraseña".
¿Huh? Si estoy creando la contraseña cifrada (como en, al crear un registro de usuario ) ¿cómo puedo usar la contraseña cifrada como un sal? No existe . (Supongo que debe usar la misma sal para crear y verificar una contraseña.)
He intentado utilizar la contraseña de texto plano como una sal. Esto hace que funcione, pero tiene dos problemas; uno fácil de superar, y uno serio:
1) Las primeras dos letras de la contraseña de texto plano se incluyen en la contraseña cifrada . Puede solucionar este problema al no escribir los dos primeros caracteres al archivo:
user_record = '%s:%s:%s' % (user_name, crypted_pw[2:], user_type)
2) Mediante el uso de la contraseña en texto plano en forma de sal, que parecería ser reducir la cantidad de entropía en el sistema. Posiblemente estoy malentendiendo el propósito de la sal.
La mejor práctica que he podido derivar es utilizar los primeros dos caracteres del nombre de usuario como sal. ¿Esto sería apropiado, o hay algo que he echado de menos que hace que sea un mal movimiento?
Mi comprensión de una sal es que previene contraseñas de hash de un diccionario. Podría utilizar una sal estándar para todas las contraseñas (como mis iniciales, "JS"), pero eso parece menos carga de para un atacante que el uso de dos caracteres del nombre de usuario de cada usuario.
prefiera PBKDF2 para guardar contraseñas: aplique la sal con HMAC e itere – orip