Relación entre la fuerza de la contraseña y la fuerza de la clave

7

Acabo de empezar a informarme sobre la criptografía y, si bien en general tiene sentido, todavía me están eludiendo algunas cosas. Un ser:

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 fortaleza de esa contraseña y la solidez de la clave? Sé que la seguridad de la contraseña importa en la autenticación; ¿Es un punto discutible en el cifrado?

Según mi entendimiento, las contraseñas creadas por el hombre tienden a tener una entropía muy baja, y es por eso que las claves se derivan de ellas. Suponiendo entonces que tanto la clave como el algoritmo son (relativamente) seguros, el cifrado es (relativamente) seguro.

Pero mientras que esa clave de 128 bits (o lo que sea) puede ser muy buena y elegante, ¿qué puede evitar que un atacante ejecute listas de contraseñas débiles a través de la función de derivación de claves y luego intente usar la clave producida para descifrar el mensaje?

Mi corazonada es que tiene algo que ver con el costo computacional ... pero tengo curiosidad por saber si es tan seguro usar la letra "a" como la contraseña, así como usar una contraseña muy segura, es decir, Si la clave derivada será igual de fuerte independientemente de la entrada, ¿la composición de la contraseña es importante?

    
pregunta Marcus Hughes 11.03.2014 - 09:12
fuente

4 respuestas

1

Descripción general

  1. Algunos ejemplos para revisión / discusión.
  2. Alternativa: clave generada por contraseña local para uso interno en la API de control de acceso de clave de cifrado.
  3. 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).

    
respondido por el machine yearning 30.03.2014 - 07:01
fuente
0
  

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 fortaleza de esa contraseña y la solidez de la clave? Sé que la seguridad de la contraseña importa en la autenticación; ¿Es un punto discutible en el cifrado?

De wikipedia : la fortaleza de la contraseña es una medida de la efectividad de una contraseña para resistir la adivinación y la brutalidad. ataques de fuerza. En su forma habitual, calcula la cantidad de intentos que un atacante que no tiene acceso directo a la contraseña necesitaría, en promedio, para adivinarla correctamente. La fortaleza de una contraseña es una función de longitud, complejidad e imprevisibilidad.

Entonces, usted supuso correctamente que la fortaleza de la contraseña es relevante para la autenticación. Si estamos expandiendo nuestra contraseña para que coincida con el tamaño de la clave mediante una función hash criptográfica como SHA-1 , entonces la fortaleza de la contraseña no es relevante para el cifrado.

  

Pero mientras que esa clave de 128 bits (o lo que sea) puede ser muy buena y elegante, ¿qué puede evitar que un atacante ejecute listas de contraseñas débiles a través de la función de derivación de claves y luego intente usar la clave producida para descifrar el mensaje?

El costo del tiempo es el principal oponente de este tipo de ataque de fuerza bruta.

Por wikipedia , Los recursos necesarios para un ataque de fuerza bruta crecen exponencialmente a medida que aumenta el tamaño de la clave. , no linealmente. Aunque las regulaciones de exportación de EE. UU. Han restringido históricamente las longitudes de clave a claves simétricas de 56 bits (por ejemplo, Estándar de cifrado de datos), estas restricciones ya no están vigentes, por lo que los algoritmos simétricos modernos suelen utilizar claves de 128 a 256 bits computacionalmente más fuertes. / p>

La misma página postula que romper una clave simétrica de 128 bits (como AES) requeriría alrededor de 10 ^ 18 julios de energía, o alrededor de 30 gigavatios de potencia durante un período de un año. Esto es más de una centésima parte de la producción mundial de energía.

Por supuesto, la única forma de garantizar la seguridad de los datos codificados es simplemente evitar que caiga en manos maliciosas.

  

Mi corazonada es que tiene algo que ver con el costo computacional ... pero SÍ tengo curiosidad por saber si es tan seguro usar la letra "a" como la "contraseña", así como usar una contraseña muy segura.

Si el atacante puede adivinar correctamente que su clave de cifrado se deriva de una cadena simple, y adivinar correctamente que la cadena de origen era "a" (o una contraseña igualmente tonta), entonces está en problemas. Elegir buenas contraseñas es importante.

También puede emplear una táctica llamada " salting " donde agrega algo de entropía aleatoria a la contraseña . La cadena de sal generalmente se almacena en la misma ubicación que la contraseña y no se encripta, por lo que no lo salvará si, por ejemplo, pierde una base de datos de datos de clientes encriptados; sin embargo, ocultará el proceso de derivación de claves si el atacante accede a sus datos a través de la autenticación y eliminará cualquier tabla de arco iris precalculada que se generó con una sal diferente o sin sal.

    
respondido por el user1066616 11.03.2014 - 10:14
fuente
0

Se pueden poner algunas cosas para frustrar a los atacantes. Las mejores prácticas en el uso de funciones de derivación clave hacen que la función de derivación sea deliberadamente lenta para evitar ataques de fuerza bruta para revelar el valor de entrada. El uso de una sal (por ejemplo, 64 bits en implementaciones modernas) junto con el valor de entrada se utilizaría para complicar los ataques de diccionario. Este enfoque se conoce como "estiramiento clave".

Yendo más allá, el "fortalecimiento clave" utiliza la misma técnica, pero además elimina de forma segura a los atacantes que obligan a la sal, así como a los usuarios, a realizar una búsqueda de fuerza bruta para la sal que complica aún más los ataques de fuerza bruta. Una posible implementación en este caso sería dividir la sal en una parte pública y una parte privada donde la sal privada tendría que ser forzada. Dada la entrada correcta de la contraseña y el bruto de sal público que obliga a la sal privada es factible. Sin embargo, si la fuerza bruta sin la contraseña original tiene que calcular también la sal privada crea un obstáculo adicional.

Por supuesto, la fuerza del valor de entrada elegido (comúnmente la contraseña) es un factor importante en la seguridad.

    
respondido por el user3244085 11.03.2014 - 10:02
fuente
0

Lo que entiendo es que alguien podría usar un ataque de fuerza bruta directamente en la clave (sin usar el uso de adivinar contraseñas para generar claves diferentes), algo más fácil si se generó con una contraseña débil que con una contraseña segura. ? Si esa es su pregunta, entonces la respuesta en la gran mayoría de los casos (y ciertamente con cualquier sistema de cifrado implementado recientemente) no. Las claves se generan (como lo han indicado otras respuestas) con hashes en una combinación de su contraseña y (en la mayoría de los casos) algo de "sal" aleatoria, que es solo un poco de basura aleatoria generada en el momento y almacenada a simple vista. La única razón por la cual Salt es hacerlo es para que las personas no puedan pre-adivinar claves basadas en contraseñas comunes. Sin embargo, incluso sin ella, la clave generada incluso por una contraseña de 1 bit producirá una clave que sigue siendo verdaderamente aleatoria. Esto se debe a que los algoritmos hash modernos son muy efectivos para producir basura aleatoria incluso desde entradas muy pequeñas. Están diseñados de modo que cambiar incluso un bit da como resultado un hash completamente diferente. Ninguna persona sería capaz de ver una clave de este tipo y pensar, oh, que se produjo con una contraseña débil.

Las contraseñas siguen siendo, como otros lo han indicado, muy importantes. Extensión de clave , el acto de tomar una contraseña y ejecutarla a través de un hash muchas (posiblemente miles) de veces para que sea computacional difícil de adivinar muchas contraseñas, puede ayudarlo, pero está sujeto a un valor reducido por la ley de Moore como todo lo demás. Con eso quiero decir que lo que toma mucho tiempo hacer hoy, no necesariamente lleva mucho tiempo mañana. Pero realmente no tiene que preocuparse, con cualquier sistema criptográfico moderno, de que la clave sea directamente atacable. Simplemente elige una buena contraseña.

    
respondido por el Kurt Fitzner 06.04.2014 - 21:41
fuente

Lea otras preguntas en las etiquetas