Sto cercando di implementare un sistema di file crittografato.
Il file system è costituito da settori da 512 byte. Cifrare / decifrare il contenuto di un settore come segue:
-
Calcola la somma SHA256 della password dell'utente. Questo risulta in una chiave utente di 32 byte.
-
Calcola l'ESSIV per un settore calcolando la somma SHA256 della chiave utente e il numero di settore. Ciò si traduce in una chiave di settore a 32 byte.
-
XOR Settore Chiave con i dati di settore semplici per ottenere i dati di crittografia come segue:
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]
Quando leggo il settore più tardi, I XOR la chiave del settore con i dati cifrati per recuperare i dati del settore normale indietro.
Ora, l'approccio ESSIV dovrebbe impedire attacchi con filigrana. Tuttavia, quando esamino i settori cifrati corrispondenti a un file molto grande (> > 512-byte) pieno di soli zero ( 0x00
) ...
- Vedo che non esistono due settori cifrati di questo grande file identici, il che è fantastico!
- Vedo schemi ripetuti (ogni pattern lungo 32 byte) all'interno dello stesso settore, che non è così eccezionale! Questi sono ovviamente derivanti dal passo XOR sopra.
La mia domanda è doppia:
-
È possibile che un avversario interrompa la suddetta crittografia del file system copiando file attentamente costruiti in questo file system? Oppure, lo schema sopra è abbastanza buono?
-
Quando copio il file sopra in un volume TrueCrypt, non vedo pattern ripetuti. (Ho usato AES e RIPEMD-160 come algoritmi di crittografia e hashing, rispettivamente.) Quindi, oltre all'utilizzo di AES, cosa posso fare per ottenere un risultato simile a TrueCrypt tramite un'operazione semplice e leggera simile a XOR?