openssl_encrypt openssl_decrypt encrypt decrypt cbc php encryption cryptography

php - openssl_decrypt - ¿Es posible usar AES con un IV en modo ECB?



php encrypt decrypt (4)

Desde http://php.net/manual/en/function.mcrypt-encrypt.php , vi los siguientes códigos usando AES con un IV en modo ECB,

<?php $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB); $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND); $key = "This is a very secret key"; $text = "Meet me at 11 o''clock behind the monument."; echo strlen($text) . "/n"; $crypttext = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $text, MCRYPT_MODE_ECB, $iv); echo strlen($crypttext) . "/n"; ?>

Pero desde el wiki http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation , dice que el BCE no necesita un IV. ¿Es realmente posible usar AES con un IV en modo ECB? En este modo ECB, ¿el IV adicional proporcionará un poco más de seguridad en comparación con cuando no se usa?


Antes que nada, no tendrías ningún lugar para poner este IV. El BCE trabaja tomando bloques de texto claro uno por uno y encriptados con la clave para producir los textos cifrados correspondientes. Simplemente no hay lugar para usar el IV. Esto es lo que dice la teoría.

No conozco los detalles de cómo funciona mcrypt_encrypt, pero sospecho que al usar ECB simplemente no usa el IV. Pruébelo encriptando en ECB proporcionando diferentes IV. Si el resultado es el mismo, la función simplemente no usa IV.


ECB no realiza el encadenamiento entre bloques, por lo que no hay forma de usar IV. mcrypt usa el mismo APi para todos los módulos. El IV simplemente se ignora para ECB porque el módulo ECB tiene la siguiente función definida como,

int _has_iv() { return 0; }


No hay forma de usar un IV en modo ECB. Esto es un poco discutible, sin embargo, como deberías

Nunca use el modo ECB para nada, nunca *.

En términos más generales, es probable que no deba usar primitivas criptográficas directamente, sino más bien usar una biblioteca criptográfica como el keyczar que abstraiga este tipo de decisiones.

** En realidad, hay algunos usos muy especializados para ECB, como las permutaciones pseudoaleatorias ''seguras'', pero ciertamente no deberías estar usando ECB para nada relacionado con el cifrado de datos.