Esta no es realmente una pregunta práctica, sino más bien una cuestión de curiosidad. Escuché a un profesor de CS recomendar pasar de las contraseñas de md5 a SHA1, pero a AES cifrar la contraseña usándola como clave. ¿Alguien tiene alguna idea de si esto es realmente más o menos seguro?
Algunas reflexiones al respecto:
- SHA1 es unidireccional, lo que lo hace más seguro que una función que preserva los datos.
- Por otra parte, el pirata informático no puede aprovechar la naturaleza descifrable de AES porque aún no conoce la contraseña.
- A menos que lo adivine. Pero entonces él estaría en la forma en que lo cifré.
- Como sabe que la contraseña de AES se descifra cuando la clave de descifrado coincide con la salida, podría forzarse con una fuerza bruta en la computadora del pirata informático.
- Pero el pirata informático no sabe cómo está cifrado, por lo que no estaría intentando eso.
- Pero el pirata informático también podría haber obtenido el código de encriptación, en cuyo caso es simplemente una cuestión de qué datos demora más en fuerza bruta.
- La mayoría de los sitios web utilizan md5 o sha1 (¿verdad?), por lo que las tablas de búsqueda para estos hashes serían mucho más extendidas que para el método AES. De este modo, el método AES es más seguro.
- Pero si eliminamos ambos métodos, serían igualmente inmunes a las tablas de búsqueda.
Algunos puntos comunes en las respuestas y contrapuntos:
El cifrado AES no está diseñado para resistir las colisiones y, por lo tanto, probablemente tendrá más colisiones para la misma longitud de cadena de hash.
Si estamos usando un salt más largo, entonces la contraseña cifrada será más larga que un hash SHA1. Esto puede ser suficiente para reducir las colisiones a un nivel comparable, o tal vez no.
El cifrado AES le dice cuánto tiempo estuvo la contraseña, dentro de los 16 bytes.
Podemos agregar al método AES: después de cifrarlo, rellenamos o recortamos a una longitud razonable (que es más larga que la SHA1 para evitar colisiones).