Descripción general
- Algunos ejemplos para revisión / discusión.
- Alternativa: clave generada por contraseña local para uso interno en la API de control de acceso de clave de cifrado.
- Entropía y aumentarla.
1. Algunos ejemplos para revisión / discusión
En los sistemas que toman la contraseña / frase de un usuario para obtener la clave de cifrado, ¿cuál es la relación entre la fuerza de esa contraseña y la fortaleza de la clave?
Esto depende completamente de cómo usa la contraseña para derivar la clave. Si solo has hash, o incluso hashing y tu salado de tu contraseña, tu función podría tener este aspecto:
generateKey(password, salt) := cryptoHash(password, salt)
Si tomara una tabla de las contraseñas más débiles, probablemente podría calcular los posibles hash, y desde allí tendría las claves de cifrado posibles. Luego, dado un message
podría romperlo con esta función:
crack(message, saltLen, weakPassList):=
for salt in 0..saltLen:
for weak in weakPassList:
let k := generateKey(weak, salt)
if decrypt(message, k) looks okay:
return k
Esto puede demorar mucho tiempo en ejecutarse según el tamaño de saltLen
y weakPassList
; sin embargo, puede almacenar en caché el k
generado anteriormente en una tabla y simplemente probarlos uno por uno, para eliminar el factor de generación de clave experimental.
Definitivamente hay mejores formas de generar una contraseña, pero sin una especificación más detallada o un caso de uso, es difícil analizar o recomendar cuál es el mejor método.
2. Alternativa: clave generada por contraseña local para uso interno en la API de control de acceso de clave de cifrado.
Sé que la seguridad de la contraseña importa en la autenticación; ¿Es un punto discutible en el cifrado?
Siento que no hay diferencia a menos que esté hablando sobre un método particular de generación de claves o algún otro caso de uso específico. Una clave es una clave.
Personalmente utilizaría la contraseña para generar una clave de cifrado local kLocal
, utilizada para ocultar una clave criptográfica generada correctamente kMessage
que se puede usar para cifrar mensajes para enviar a través de canales no seguros.
De esta manera, la contraseña es solo un mecanismo de control de acceso para filtrar a los usuarios que pueden escribir comandos en el sistema e impedir que utilicen las claves de cifrado de los demás (si no pueden obtener el kLocal
correcto, no pueden descubrirlo). Los contenidos de kMessage
). Esto es apto porque puede usar una API segura con, por ejemplo, un contenedor con fugas , para evitar que las personas realicen ataques de adivinación de contraseñas en la máquina local.
¡No es tan sencillo prevenir ataques de adivinación de contraseñas contra un mensaje de texto cifrado que ya se ha enviado a la luz! Al hacer que kLocal
generado por contraseña sea solo para uso interno, restringido por API, puede limitar el poder de cómputo efectivo del atacante, lo que es realmente bueno para la seguridad del software.
3. Entropía y aumentándolo.
A mi entender, las contraseñas creadas por humanos tienden a tener una entropía muy baja, y es por eso que las claves se derivan de ellas.
¡Ten cuidado! La entropía es solo la medida de lo impredecible que es algo. Si tomo algunos valores con X
de entropía y los ejecuto a través de alguna función conocida como adversa, los resultados no pueden tener más de X
de entropía. Es decir, si el adversario puede adivinar los valores originales y también conoce la función para manipularlos / extenderlos, tendrá un tiempo tan fácil como adivinar los valores manipulados / extendidos como lo haría con los originales.
No está aumentando el tamaño del dominio a menos que agregue más información; y no está aumentando la entropía a menos que la información que agregue tenga cierta entropía (de alguna manera es impredecible / secreta).