He utilizado md5/sha1 sin sal durante mucho tiempo, pero como este método no es realmente seguro (y se está volviendo incluso menos seguro con el paso del tiempo) decidí cambiar a un sha512 salado. Además, quiero ralentizar la generación de hash down mediante el uso de muchas iteraciones (por ejemplo, 100).Muchas iteraciones de hash: agregue sal cada vez?
Mi pregunta es si debo añadir la sal en cada iteración o solo una vez al principio. Estos son los dos códigos posibles:
Anexar cada vez que:
// some nice big salt
$salt = hash($algorithm, $salt);
// apply $algorithm $runs times for slowdown
while ($runs--) {
$string = hash($algorithm, $string . $salt, $raw);
}
return $string;
Anexar una vez:
// add some nice big salt
$string .= hash($algorithm, $salt);
// apply $algorithm $runs times for slowdown
while ($runs--) {
$string = hash($algorithm, $string, $raw);
}
return $string;
primera vez que quería utilizar la segunda versión (se añade una vez) pero luego encontré algunos scripts que añaden sal cada vez.
Por lo tanto, me pregunto si si se agrega cada vez se agrega algo de fuerza al hash. Por ejemplo, ¿sería posible que un atacante encontrara alguna manera inteligente de crear una función 100timesSha512 que fuera mucho más rápida que simplemente ejecutar sha512 100 veces?
+1 No entiendo por qué esto tiene un voto negativo. Realmente apreciaría si pudieras encontrar esa referencia;) – NikiC
+1 por la vulnerabilidad DoS. Aún creo que estás recomendando un error. – rook
@ The Rook: Considerando que la gran mayoría de los documentos de seguridad que he leído de investigadores de renombre sugieren que se estiren las teclas antes de usarlas (ya sea para almacenamiento o cifrado). Y teniendo en cuenta que necesita estirar para el cumplimiento de PCI, no estoy seguro de cómo este es un mal consejo ... – ircmaxell