Mcrypt: ¿es más segura una clave larga que una clave corta?

3

Uso MCRYPT_RIJNDAEL_256 en modo CBC usando mcrypt en PHP. Esto admite tamaños de clave de 16, 24 o 32.

¿Es un tamaño de clave de 32 más seguro que un tamaño de clave de 16 o 24? Si lo es, ¿realmente importa o es un poco mejor? ¿Y una clave más grande tiene un impacto notable en el rendimiento en este caso?

La búsqueda en Google o aquí en Information Security no me ayuda, no puedo encontrar una respuesta a esta pregunta.

Supongo que una clave más larga es más segura y que realmente no afecta el rendimiento, pero me gustaría una confirmación (preferiblemente junto con algunas fuentes).

    
pregunta Louis Matthijssen 15.06.2014 - 17:00
fuente

2 respuestas

3

Más a menudo, escuchará el tamaño de las claves en bits en lugar de bytes. Entonces, 32 bytes = 256 bits. 16 = 128, 24 = 192.

En teoría, sí, las longitudes de clave más largas son más seguras, ya que hay más permutaciones posibles de la clave. Cada bit adicional significa el doble de claves posibles, por lo que duplica la cantidad de tiempo necesario para forzar la clave bruta. Dicho esto, la física sugiere que es imposible incluso fuerza bruta de 128 bits . Así que, en realidad, las situaciones en las que se utiliza el criptografía de 256 bits por una de dos razones: 1) quieren un margen de seguridad adicional si se encuentran debilidades (pero no una interrupción completa) en AES, o 2) quieren poder comercializarlo como "256 bit crypto!" En otras palabras, a menudo se usa para la sensación cálida y difusa de "mejor" criptografía.

La forma en que crea su clave es más importante que la longitud de la clave que elija. Si un humano ha creado sus claves en un teclado que elige una contraseña, es muy poco probable que aparezcan 128 bits. De acuerdo con NIST , basado en estudios de contraseña común En las prácticas, una contraseña elegida por un humano tendría que tener una longitud de 112 caracteres para dar 128 bits de entropía. Dado que es poco probable que los usuarios escriban 112 caracteres, su estrategia de generación de claves puede ser el punto débil (nuevamente, asumiendo que las claves son generadas por el usuario). Considere usar algo como PBKDF2 para reforzar la entrada del usuario en las claves.

Si está generando las claves, asegúrese de utilizar una fuente de entropía de calidad, como /dev/urandom o openssl_random_pseudo_bytes en PHP. No utilice rand o mt_rand , ya que no son criptográficamente seguros y son predecibles para un atacante.

    
respondido por el David 15.06.2014 - 17:19
fuente
3

Las claves más largas no son más seguras, no cuando la clave "corta" ya es demasiado larga para poder romperse por la fuerza bruta. No puedes estar más seguro que seguro. No importa si el tiempo necesario para romper tu clave es 10 veces o 10 mil millones de veces la vida útil del Universo.

Rijndael es mejor conocido como AES . Cuando usa una clave de 256 bits (32 bytes), es un 40% más lento que cuando usa una clave de 128 bits (16 bytes); el tiempo extra es una peculiaridad de la forma en que se define el algoritmo (14 rondas con una clave de 256 bits en lugar de 10 rondas para una clave de 128 bits). Sin embargo, rara vez importa en la práctica.

Por lo tanto, lo consiguió a la inversa: una clave más larga no es "más segura", pero puede afectar el rendimiento.

(En la práctica, el tamaño de la clave es la parte más sólida de su sistema; será el momento de preocuparse por las computadoras cuánticas cuando cada otra porción de software y hardware en su aplicación haya sido llevada a tales niveles de seguridad, que es no es probable que ocurra en ningún software real, especialmente uno que contenga un sistema operativo de propósito general, un servidor web y PHP.)

    
respondido por el Tom Leek 15.06.2014 - 17:14
fuente

Lea otras preguntas en las etiquetas