/ / Uso de múltiples hash en PHP: php, cifrado, contraseñas, hash, almacenamiento de contraseñas

Uso de múltiples hash en PHP: PHP, cifrado, contraseñas, hash, almacenamiento de contraseñas

Estoy trabajando en un proyecto y estoy dispuesto a mantener el almacenamiento de contraseñas seguro desde el principio. En la fase de la idea, pero esto es más o menos lo que pretendo usar.

class Crypto {
public function hash1($string, $salt) {
return hash("sha512", $string . $salt);
}

public function hash2($string, $salt) {
return hash("sha512", $salt . $string);
}

public function compareToHash($string, $salt, $hash1, $hash2) {
return($this->hash1($string, $salt) === $hash1 && $this->hash2($string, $salt) === $hash2);
}
}

Como puedes ver estoy intentando evitar colisiones. ¿Es esta una forma efectiva, parece muy simple y me pregunto si me estoy perdiendo algo?

Gracias.

Respuestas

0 para la respuesta № 1

Ya que planea proteger con contraseña posiblemente unsitio web, déjeme explicarle que tendrá que asegurarse de enviar una contraseña del cliente ya codificado o, de lo contrario, cualquier sniffer encontrará la contraseña real, y ya sabe cómo la gente suele usar la contraseña, ¿no? Lo mismo en muchas, muchas cuentas.

Sugeriría echar un vistazo a una publicación que encontré hace algún tiempo y conservar un enlace para ella, ya que explica todos los problemas con el hash y la protección con contraseña: http://www.codinghorror.com/blog/2007/09/rainbow-hash-cracking.html

En breve, use el más fuerte (y sha1 no esmás fuerte) codificador de contraseña como sea posible. No es el más rápido. Deje que el pirata informático pierda un tiempo valioso tratando de entrar. Tanto que la entrada no será atractiva.

Espero que te ayude, y buena suerte.


0 para la respuesta № 2

Eso es bastante básico. Yo echa un vistazo a la Hoja de referencia de almacenamiento de contraseña de OWASP. También hay muchas bibliotecas de hashing de contraseñas ya creadas y revisadas.

Echaré un vistazo a la PHP portátil Hashing Framework por OpenWall. Crea hashes muy seguros y también realiza un número apropiado de iteraciones. También es bastante usado.

Si está haciendo hash con SHA512, no hay "t".Cualquier cosa especial que deba hacer en el momento de evitar colisiones, recuerdo haber leído recientemente que todavía no es posible encontrar colisiones por algún tiempo.

Las dos cosas principales en las que me concentraría son las sales seguras (20+ bytes) y para iterar el hash al menos 64,000 veces para aumentar el tiempo de ataque.


0 para la respuesta № 3

La primera regla de seguridad de contraseña: si no está seguro de si algo es seguro, entonces las probabilidades son que no lo son.

Ya que está comenzando a escribir sus rutinas de contraseña, mi consejo es que se detenga ahora.

PHP5.5 (que saldrá en febrero / marzo de 2013) incluirá un conjunto de nuevas funciones diseñadas específicamente para tratar con contraseñas teniendo en cuenta las mejores prácticas de seguridad. Cuando se publique 5.5, estas funciones se convertirán en el único método recomendado para manejar contraseñas en PHP.

La buena noticia es que no tienes que esperar oactualice a 5.5 para usar estas funciones, ya que se han implementado en versiones anteriores y 5.4, por lo que puede usarlas ahora. Descargue la biblioteca desde aquí: https://github.com/ircmaxell/password_compat

Artículo de referencia: http://www.h-online.com/open/news/item/PHP-5-5-should-reduce-password-sloppiness-1707835.html


0 para la respuesta № 4

Si desea que su almacenamiento de contraseñas sea seguro desde el principio, no debe usar sha512 o cualquier otro algoritmo hash rápido, en lugar de eso use un función de derivación clave me gusta BCrypt.

El problema con los algoritmos rápidos es que puede calcular 80 hash de Mega sha512 por segundo con hardware común (en 2012). ¡Eso hace posible forzar con fuerza bruta un diccionario de inglés completo con aproximadamente 500000 palabras, en unos pocos milisegundos! Otros algoritmos son incluso más rápidos.

BCrypt fue diseñado especialmente para hash de contraseñas, y por lo tanto es lento (necesita algo de tiempo de computación). Con un factor de costo, puede adaptar el tiempo necesario para el hardware futuro (y por lo tanto más rápido).

Usar BCrypt puede ser tan fácil, como usar el hash sha512. Se recomienda utilizar una biblioteca bien establecida como phpass, y si quieres entender cómo se puede implementar, puedes leer esto artículo, donde traté de explicar los puntos más importantes.

Su esquema con dos hashes separados no lo haráAumente la seguridad, porque las colisiones con sha512 nunca son el problema. En el peor de los casos, incluso debilita la seguridad, ya que tiene que almacenar ambos hashes, por lo que un atacante tiene dos informaciones relacionadas sobre la contraseña de hash.