Si toma un archivo cifrado con CBC y modifica un bit (es decir, cambia un bit cero a uno, o viceversa), luego, al descifrarlo, esto:
- mezclar más o menos aleatoriamente el bloque correspondiente en los datos de texto simple;
- voltear exactamente un bit en el siguiente bloque (es decir, 128 bits más);
- cambiar nada más que nada . En particular, el descifrado no "fallará".
Vea el esquema en la página de Wikipedia para CBC para entender por qué funciona esto manera.
Lo que está viendo es que cuando usa el cifrado (por confidencialidad), por lo general, también desea verificar la integridad, con un MAC algoritmo como HMAC. Sucede que la combinación correcta de cifrado y un MAC es difícil . Lo mejor sería usar un formato de cifrado que ya haga las cosas correctamente. Si, por alguna razón, debe hacer su propio cifrado, intente utilizar un modo de cifrado que incluya inherentemente un MAC, por ejemplo. GCM o EAX . Si por razones técnicas (por ejemplo, la falta de implementación disponible) aún debe utilizar CBC, a continuación, agregue algunos HMAC con las siguientes reglas:
- Hash su clave maestra K (la que "almacena de forma segura") con SHA-256. Divida el resultado de 256 bits en dos mitades de 128 bits, K1 y K2 .
- Use AES-128 en modo CBC, con K1 como clave, para cifrar los datos. Asegúrese de usar un IV aleatorio, generado de nuevo para cada archivo, con un PRNG criptográficamente seguro.
- Calcule HMAC / SHA-256, con K2 como clave, sobre la concatenación de la IV y el archivo encriptado .
- Almacene el archivo en algún formato que incluirá el IV, la salida HMAC y el resultado del cifrado. La concatenación simple funcionaría, ya que la salida IV y HMAC tienen longitudes fijas conocidas (16 bytes para el IV, 32 bytes para HMAC / SHA-256).
- Al descifrar, verifique el valor HMAC primero , y continúe con el descifrado de datos solo si el valor HMAC parece ser correcto.
Puede observar que abogo por AES-128, no AES-256. Esto se debe a que la clave de cifrado de 256 bits es exceso innecesario e incurre en una penalización de velocidad del 40%. Si aún desea una clave de cifrado de 256 bits, p. porque necesita atraer a un administrador despistado con el tamaño de su clave, luego use SHA-512 para codificar su clave maestra K en una salida de 512 bits, que se puede dividir en dos mitades de 256 bits .
También recomiendo HMAC / SHA-256, que debería ser "lo suficientemente rápido". Una PC básica puede hacer AES-128 y HMAC / SHA-256 combinados a más de 60 megabytes por segundo. Si necesita más velocidad y tiene una plataforma de 64 bits, entonces HMAC / SHA-512 puede darle una ventaja, pero a costa de hacerlo más difícil para los sistemas de 32 bits. En cualquier caso, la red de 100 Mbit / s alcanzará los 11 megabytes por segundo, por lo que la velocidad de encriptación probablemente no sea un problema de todos modos.