que password informatica encrypt criptografia contraseñas con encryption hash salt

encryption - password - que es salt en php



¿Cuál es la longitud óptima para la contraseña de usuario sal? (5)

Cualquier salt en absoluto, obviamente, ayudará a salazón y hashing contraseña de un usuario. ¿Existen mejores prácticas sobre cuánto tiempo debe durar la sal? Guardaré la sal en mi tabla de usuarios, por lo que me gustaría obtener el mejor equilibrio entre el tamaño de almacenamiento y la seguridad. ¿Es una sal al azar de 10 caracteres suficiente? ¿O necesito algo más?


Editar: Mi respuesta a continuación responde la pregunta tal como se me pidió, pero la respuesta "real" es: simplemente use bcrypt , scrypt o Argon2 . Si estás haciendo preguntas como esta, casi seguro que estás usando herramientas a un nivel demasiado bajo.

Honestamente, no hay una razón defendible para que la sal no tenga la misma longitud exacta que la contraseña hash. Si está utilizando SHA-256, entonces tiene un hash de 256 bits. No hay razón para no usar una sal de 256 bits.

Más de 256 bits no generarán ninguna mejora en la seguridad, matemáticamente. Pero ir con una sal más corta siempre puede terminar en una situación en la que una tabla de arcoíris alcanza la longitud de la sal, especialmente con sales más cortas.


La mayoría de estas respuestas están un poco equivocadas y demuestran una confusión entre sales y claves criptográficas. El propósito de incluir sales es modificar la función que se utiliza para cifrar la contraseña de cada usuario, de modo que cada hash de contraseña almacenada tenga que ser atacado individualmente. El único requisito de seguridad es que sean únicos por usuario, no hay ningún beneficio en que sean impredecibles o difíciles de adivinar.

Las sales solo necesitan ser lo suficientemente largas para que la sal de cada usuario sea única. Es muy poco probable que las sales aleatorias de 64 bits se repitan incluso con mil millones de usuarios registrados, por lo que debería estar bien. Una sal única repetida es una preocupación de seguridad relativamente menor, que permite a un atacante buscar dos cuentas a la vez, pero en conjunto no acelerará mucho la búsqueda en toda la base de datos. Incluso las sales de 32 bits son aceptables para la mayoría de los propósitos, en el peor de los casos acelerará la búsqueda de un atacante en aproximadamente un 58%. El costo de aumentar las sales más allá de 64 bits no es alto, pero no existe una razón de seguridad para hacerlo.

También es beneficioso utilizar una sal para todo el sitio en la parte superior de la sal por usuario, esto evitará posibles colisiones con hash de contraseñas almacenadas en otros sitios, y evitará el uso de tablas de arcoiris de uso general, aunque incluso 32 bits de la sal es suficiente para hacer que las tablas arcoíris sean un ataque poco práctico.

Incluso más simple, y los desarrolladores siempre pasan por alto esto, si tiene ID de usuario únicos o nombres de inicio de sesión, esos sirven perfectamente como una sal. Si hace esto, debe agregar una sal para todo el sitio para asegurarse de no superponerse con los usuarios de otro sistema que tengan la misma idea brillante.


Los estándares actualmente aceptados para contraseñas hash crean una nueva sal larga de 16 caracteres para cada contraseña y almacenan la sal con el hash de contraseña.

Por supuesto, debe tomarse una atención criptográfica adecuada para crear sal realmente aleatoria.


Una respuesta podría ser usar como tamaño de sal el valor que el hash que va a usar proporciona en términos de seguridad.

Por ejemplo, si va a usar SHA-512, use sales de 256 bits ya que la seguridad proporcionada por SHA-512 es de 256 bits.


Wikipedia :

Los métodos SHA2-crypt y bcrypt, utilizados en Linux, BSD Unixes y Solaris, tienen sales de 128 bits. Estos valores de sal más grandes hacen que los ataques de precomputación para casi cualquier longitud de contraseña no sean factibles contra estos sistemas en el futuro previsible.

Sal de 128 bits (16 bytes) será suficiente. Puede representarlo como una secuencia de 128 / 4 = 32 dígitos hexadecimales.