A giudicare dalla domanda e dai commenti, parafrasò la tua domanda come:
I'd like to encrypt a file, but part of my file has a predictable format. Will this make it easier to crack the encryption? Should I leave the structured parts out and encrypt only the minimum?
Prima di tutto: non è una domanda sciocca. Intuitivamente, penseresti che conoscere la struttura del messaggio ti aiuterà a decifrarlo, e questo è vero, ad un certo punto.
Fortunatamente, questo problema è stato a lungo anticipato dalla crittografia. Gli algoritmi di crittografia "moderni" hanno un alto fattore di ramificazione : un piccolo tweak nell'input, un singolo bit modificato, creerà un output irriconoscibilmente diverso. Per questo motivo, conoscere la struttura di una parte del tuo file non mi aiuterà molto, perché qualsiasi variazione nel contenuto porterà a un risultato molto diverso.
Alti fattori di ramificazione sono essenziali per una crittografia strong. Ecco un breve esempio di (1) in azione:
> echo HELO1 | openssl aes-128-cbc -k meep -S 0
∙╞X╟ε╜i§B÷FÄ│Γat
> echo HELO2 | openssl aes-128-cbc -k meep -S 0
╩ ëhnw²╜╗ç1L▀≡☼·
(1) Sintassi: openssl <algorithm> -k <passphrase> -S <salt>
Si noti che HELO1
e HELO2
hanno una struttura simile, differiscono solo di due bit, ma producono un output molto diverso. Questo fa sì che, se inizio a indovinare per la tua chiave di crittografia, non avrò idea di quanto io sia 'vicino'. Fondamentalmente, a meno che non ottenga un hit esatto e indovino la tua passphrase, avrò difficoltà a decifrare qualsiasi cosa dal tuo file.
A meno che, naturalmente, tu non mi dia informazioni lasciando le tue intestazioni scoperte. Non solo ora conosco il tipo di file, ma ho anche accesso all'albero di Huffman, che è stato creato da, e quindi contiene informazioni su, il messaggio che ha codificato. Potrei essere in grado di formulare un'ipotesi sul contenuto senza mai tentare di decrittografarlo.
Analogia: HTTP (S)
Anche l'HTTP è un protocollo strutturato: ogni richiesta inizia con un "metodo" (GET, POST, PUT ...) e termina con HTTP/1.X
con X un certo numero. Ancor più: ogni linea che segue ha una struttura prevedibile, così come alcune linee che potrebbero essere indovinate con precisione ( Host:
). Mi sembra un sacco di informazioni da usare.
Tuttavia HTTPS crittografa l'intera conversazione, perché non farlo mi darebbe molte più informazioni. Diamine, con tutte le intestazioni, non potrei nemmeno ho bisogno di decifrare il carico utile: posso ricattarti con i soli dati dell'intestazione.