He leído aquí que hacer hashing con diferentes algoritmos sería una buena idea idea.
¿Puedes confirmar eso?
En su experiencia, ¿es útil y seguro? ¿Implica algún agujero de seguridad?
He leído aquí que hacer hashing con diferentes algoritmos sería una buena idea idea.
¿Puedes confirmar eso?
En su experiencia, ¿es útil y seguro? ¿Implica algún agujero de seguridad?
En términos generales, los algoritmos en cascada rara vez son una buena idea. La conexión en cascada funciona muy bien para hacer que el software sea más complejo y con menos capacidad de respuesta, lo cual no es deseable La "justificación" habitual de la conexión en cascada es que de alguna manera (posiblemente mágicamente) debe resistir la rotura completa de uno de los algoritmos, pero no del otro. En la práctica, esto no es así, por varias razones:
Hay varias formas de "conectar en cascada" y no hacen lo mismo. Por ejemplo, si tiene las funciones hash f y g , y desea protegerse contra las imágenes previas, en cascada como f (g (x)) podría funcionar; pero si desea protegerse contra colisiones, es f (x) || g (x) lo que tiene sentido (es decir, concatenación, no composición). Las personas que solicitan en cascada rara vez piensan en lo que realmente quieren con suficiente profundidad al respecto.
Seamos realistas, esto ya no es 1938. El algoritmo en sí nunca es el punto débil; lo que es débil es cómo se usa (mal). La conexión en cascada es como mirar una puerta de acero en una cabaña de madera y afirmar que debe tener además un candado adicional y pesado. Es una manera excelente y honrada de evitar enfrentar problemas de seguridad reales.
En el caso específico del hashing de contraseña, hay una debilidad evidente, que es la contraseña en sí misma: las contraseñas son adivinables. Así que queremos funciones hash lentas , y derrotamos al atacante poniéndonos más CPU (es decir, aumentamos el número de iteraciones, de modo que el hash sea lo más caro posible; la ventaja del atacante se convierte en cómo mucho más CPU que puede reunir en comparación con el servidor honesto). La CPU del servidor es su línea de defensa. Cascada significa perder precisamente esa fuerza vital, solo por la sensación confusa de que hará que las cosas sean más resistentes a las roturas criptoanalíticas legendarias.
Así que no, no en cascada. En el mejor de los casos, solo hará tu vida más difícil. Más a menudo, disminuirá más o menos directamente la seguridad.
Al ver que escribí esa publicación en el blog, pensé que iba a intervenir. Primero, permítame explicarle que fue un breve repaso de 5 minutos, así que no fue una teoría bien analizada, sino más bien un comentario de primera. Lo escribí porque había visto varias discusiones en ese momento argumentando qué algoritmo específico era el mejor.
El punto original era, en lugar de argumentar cuál es mejor, solo usa ambos y termina con eso.
Desde que escribí eso, he investigado bastante más en el área y claramente he exagerado los beneficios. Simplemente hacer algo como sha256 (blowfish (datos)) no es tan resistente al ataque como parece. Hay formas de lograrlo, pero hacerlo correctamente requiere cierta comprensión sólida de la criptografía, hay algunas ventajas y desventajas, y sería demasiado fácil desordenar. Es muy poco probable que lo haga menos seguro, pero las ganancias son mínimas para los ataques más probables.
Ese post mío ilustra perfectamente lo difícil que es hacer la criptografía correctamente y cómo se debe tener mucho cuidado al implementarla. El concepto de combinar algoritmos parece perfectamente lógico, pero cuando se sienta y lo analiza adecuadamente, los resultados no son tan buenos como se esperaba, o en algunos casos, incluso podrían ser peores.