Estoy intentando implementar un sistema de archivos encriptado.
El sistema de archivos consta de sectores de 512 bytes. Encripto / desencripto los contenidos de un sector de la siguiente manera:
-
Calcule la suma SHA256 de la contraseña de usuario. Esto da como resultado una clave de usuario de 32 bytes.
-
Calcule el ESSIV para un sector calculando la suma SHA256 de la Clave de usuario y el Número de sector. Esto da como resultado una clave de sector de 32 bytes.
-
La clave de sector XOR con los datos de sector simple para obtener los datos de cifrado de la siguiente manera:
sector[0] = sector[0] ^ key[0] sector[1] = sector[1] ^ key[1] ... sector[31] = sector[31] ^ key[31] sector[32] = sector[32] ^ key[0] sector[33] = sector[33] ^ key[1] ... sector[63] = sector[63] ^ key[31] ... sector[511] = sector[511] ^ key[31]
Al volver a leer el sector más tarde, YO XO la clave de sector con los datos de cifrado para recuperar mis datos de sector simple.
Ahora, se supone que el enfoque ESSIV previene los ataques de marca de agua. Sin embargo, cuando examino los sectores cifrados correspondientes a un archivo muy grande (> > 512-bytes) lleno de solo ceros ( 0x00
) ...
- Veo que no hay dos sectores cifrados de este archivo grande que sean idénticos, ¡lo cual es genial!
- Veo patrones repetitivos (cada patrón de 32 bytes de longitud) dentro del mismo sector, ¡lo cual no es tan bueno! Obviamente, estos vienen de XOR paso arriba.
Mi pregunta es doble:
-
¿Puede un adversario romper el cifrado del sistema de archivos anterior copiando los archivos cuidadosamente construidos en este sistema de archivos? O, ¿es suficiente el esquema anterior?
-
Cuando copio el archivo anterior a un volumen de TrueCrypt, no veo patrones repetitivos. (Utilicé AES y RIPEMD-160 como algoritmos de cifrado y hash, respectivamente.) Entonces, aparte de usar AES, ¿qué puedo hacer para lograr un resultado similar a TrueCrypt a través de alguna operación simple y liviana similar a XOR?