¿Qué tan grande debe ser la sal?

26

Usaré scrypt para almacenar contraseñas en mi aplicación. Como tal, estaré usando SHA-256 y primitivas criptográficas Salsa20 (con PBKDF2).

Teniendo eso en cuenta, ¿qué cantidad de sal debo usar? ¿Debería ser igual al tamaño de la salida SHA-256: 256 bits o debería ser igual al número de bits que obtendré de esta función de extensión de contraseña: 512 bits?

Teniendo en cuenta que SSHA como la utiliza OpenLDAP solo tiene sal de 32 bits y Linux crypt () usa sal de 48 bits que mis sales parecen bastante grandes ...

En general: ¿Cuál es la regla general para el tamaño de la sal?

Relacionados:

¿Qué se debe usar como sal?

¿Qué es una sal lo suficientemente buena para un SaltedHash? ?

    
pregunta Hubert Kario 31.01.2012 - 13:45
fuente

2 respuestas

29

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.

    
respondido por el Thomas Pornin 31.01.2012 - 15:11
fuente
6

"Debe tener al menos ocho octetos (64 bits) de largo". desde: enlace

    
respondido por el woliveirajr 31.01.2012 - 14:52
fuente

Lea otras preguntas en las etiquetas