¿Con qué frecuencia debo restablecer mi sal?

6

Estoy pensando en implementar un esquema de reciclaje de sal en mi base de datos de credenciales de usuario. La motivación detrás de esta decisión es que incluso si el atacante consigue poner sus manos en la base de datos y tiene tiempo suficiente para descifrar una contraseña o dos, en el momento en que lo haga, la sal se habrá restablecido y su Los resultados serán inútiles.

Mi código de registro de usuario actual es el siguiente (pseudocódigo de PHP):

function getSalt($username){
    $salt=$username.getFromUrandom($SALT_RANDOM_READ); //64 bytes
    $salt=sha256($salt);
    return $salt;
}

function setPass($username, $salt, $pass){
    $pass=bcrypt($BCRYPT_WORK_FACTOR, $pass, $salt); //factor is set to 8 for now
    store_to_db($username, $pass);
}

setPass($username, getSalt($username), $plainpass);

Lo que me propongo hacer es, en lugar de simplemente cambiar el factor para mantenerse al día con la ley de Moore, también cambiar la sal cada pocos días más o menos. Por supuesto, eso solo beneficiaría a los usuarios regulares que inician sesión cada dos días. En código:

if(today() - getLastLogin() > $SALT_CHANGE_THRESHOLD || /*work factor increased*/)
    setPass($username, getSalt($username), $plainpass); //as above

Mis preguntas:

  • ¿Con qué frecuencia debe cambiar una sal? Estoy tentado a hacerlo todos los días, pero me preocupa que pueda ser un poco excesivo
  • ¿Es suficiente con cambiar la sal sin restablecer la contraseña cada dos meses? No lo implementaré porque sé que a los usuarios les resulta molesto, y puede obligarlos a seleccionar una contraseña que luego puedan olvidar.

Como dije anteriormente, los usuarios que no regresan no se beneficiarán de esto. Los usuarios que usan la misma contraseña con otro servicio comprometido tampoco se beneficiarán, pero eso no me preocupa.

También estoy muy tentado de usar la lista de contraseñas más comunes y evitar que los usuarios seleccionen cualquiera de ellos para evitar el uso de contraseñas comprometidas (aunque el uso de todos los 10000 es un poco extremo).

    
pregunta rath 31.07.2013 - 05:31
fuente

3 respuestas

17

Es probable que su sal no necesite cambiar más a menudo que su contraseña. Rotar a través de sales no te protege de nada en particular.

Tenga en cuenta que el salt que usa el atacante para forzar una fuerza bruta no tiene que ser el mismo que el salt que usa cuando usa la contraseña. Sólo la contraseña debe ser la misma. Y dado que el resultado de su ataque es determinar la contraseña correcta, esa contraseña seguirá funcionando sin importar la frecuencia con la que gire su sal.

    
respondido por el tylerl 31.07.2013 - 05:38
fuente
9

Nunca. Restablecer la sal no proporciona ninguna mejora de seguridad. Su motivación es que "incluso si el atacante consigue poner sus manos en la base de datos y tiene tiempo suficiente para descifrar una o dos contraseñas, para cuando lo haga, la sal se habrá restablecido y sus resultados serán inútiles". Pero eso es completamente ¡incorrecto! El atacante está tratando de encontrar la contraseña. Sus resultados serán útiles independientemente de qué hash con sal de la misma contraseña que atacó. En términos de proteger directamente la contraseña o el acceso a la cuenta, cambiar la sal es neutral, no tiene ningún impacto en la seguridad.

El restablecimiento general de la sal reduce la seguridad. Principalmente, reduce la seguridad porque agrega complejidad: es una nueva fuente de errores potenciales. También reduce la seguridad al hacer que el trabajo del atacante sea más fácil, aunque de una manera bastante teórica: si el atacante obtiene múltiples copias de la base de datos de contraseñas en diferentes momentos, entonces puede obtener la misma contraseña con diferentes sales. Llevado a un extremo, el atacante puede esperar hasta que encuentre una sal para la que se haya calculado previamente como una mesa de arco iris. Esto no es una preocupación práctica porque lleva un tiempo exponencial obtener una reducción lineal en el efecto de la sal (la exposición de 2 hashes n con sales distintas es equivalente a hacer que la sal y los bits sean más cortos). No obstante, ha disminuido la seguridad.

Piénselo de esta manera: al incluir la contraseña con varias sales, estará exponiendo la contraseña más. Esto va en contra del objetivo de mantener la contraseña en secreto.

Cambie la sal solo cuando cambie la contraseña o cuando aumente el número de iteraciones en la función de derivación de hash de contraseña.

    
respondido por el Gilles 31.07.2013 - 13:04
fuente
1

Hay dos posibilidades: el atacante ha encontrado la contraseña real o el atacante ha encontrado una colisión de hash.

En el primer caso, cambiar la sal no tiene sentido, en el último caso podría ayudar. Si ayudaría depende en gran medida de si encontraron el emparejamiento mediante la aplicación bruta de la contraseña (comenzando con "" y terminando con "password1") o si probaron varias posibilidades conocidas y encontraron un emparejamiento (es decir, comenzaron con "password" y terminó con "contraseña1"). Si es más tarde, entonces es casi seguro que tienen la contraseña, y no solo una colisión de hash.

Además, recuerda que la seguridad real no depende de que el atacante ignore tus defensas: si el atacante sabe que cambias la sal, una falla le da dos vías de ataque para la misma contraseña. Y con el acceso continuo, cuanto más cambie la sal, más información sobre la contraseña que le está dando al atacante.

    
respondido por el jmoreno 31.03.2014 - 09:57
fuente

Lea otras preguntas en las etiquetas