Las sales deben ser únicas ; Ese es su único trabajo. Debe esforzarse, tanto como sea posible, por nunca reutilizar un valor de sal; la reutilización ocasional rara vez es crítica pero aún así debe evitarse). Con esquemas de contraseña razonablemente diseñados, no hay otra propiedad útil en las sales, aparte de la singularidad; puede elegirlos como quiera, siempre y cuando no reproduzca la misma secuencia de bits. La singularidad debe ser entendida en todo el mundo.
(Con esquemas de hashing de contraseña mal diseñados, el salt puede tener algunas propiedades adicionales requeridas, pero si usa un esquema de contraseñas de mal diseño ya tiene problemas mayores. Tenga en cuenta que un salt no es exactamente lo mismo que un Vector de inicialización para el cifrado simétrico, donde normalmente se aplican requisitos estrictos como aleatoriedad uniforme impredecible.)
Una manera común de tener más o menos valores de sal únicos es generarlos al azar, con un buen generador (por ejemplo, uno que sea adecuado para usos criptográficos, como /dev/urandom
). Si la sal es lo suficientemente larga, los riesgos de colisiones (es decir, reutilizar un valor de sal) son bajos. Si usa las sales de bits n , es posible que una colisión no sea despreciable una vez que alcance los valores generados por 2n/2 . Hay alrededor de 7 billones de personas en este planeta, y parece seguro asumir que, en promedio, poseen menos de 1000 contraseñas cada una, por lo que el número mundial de contraseñas con hash debe ser algo menor que 2 42.7 . Por lo tanto, 86 bits de sal deberían ser suficientes. Ya que somos como los llamados "márgenes de seguridad" y, además, como los programadores simplemente aman potencias de dos, vamos a 128 bits . Según el análisis anterior, eso es más que suficiente para asegurar la singularidad mundial con una probabilidad suficientemente alta, y no hay nada más que queramos de la sal que la singularidad.
La singularidad también se puede asegurar por otros medios, por ejemplo, utilizando como sal la concatenación del nombre del servidor (el sistema DNS mundial ya garantiza que todos puedan obtener su propio nombre de servidor, distinto del de cualquier otra persona en el planeta) y un contador de todo el servidor. Esto plantea algunos problemas prácticos, por ejemplo, manteniendo un valor de contador que no se repite, incluso en el caso de un bloqueo y reinicio del servidor inoportuno, y / o varios front-end con equilibrio de carga. Una sal aleatoria de longitud fija es más fácil.