Domanda:
Crittografia e compressione dei dati
Ali Ahmad
2012-09-10 16:25:49 UTC
view on stackexchange narkive permalink

Se vogliamo sia la crittografia che la compressione durante la trasmissione, quale sarà l'ordine più preferibile.

  1. Crittografa quindi comprimi
  2. Comprimi quindi crittografa
  3. ol>
Non dimenticare la protezione dell'integrità. Nella maggior parte delle impostazioni è importante quanto la crittografia. Può essere fatto con MAC (ad esempio [HMAC] (http://en.wikipedia.org/wiki/Hmac)) in un ambiente simmetrico o firme in un ambiente asimmetrico.
Sembra una domanda degli esami del corso di crittografia Coursera.
Cinque risposte:
Polynomial
2012-09-10 16:31:57 UTC
view on stackexchange narkive permalink

Dovresti comprimerlo prima della crittografia.

La crittografia trasforma i tuoi dati in dati ad alta entropia, solitamente indistinguibili da un flusso casuale. La compressione si basa su modelli per ottenere qualsiasi riduzione delle dimensioni. Poiché la crittografia distrugge tali schemi, l'algoritmo di compressione non sarebbe in grado di darti una riduzione significativa (se del caso) delle dimensioni se lo applichi a dati crittografati.

La compressione prima della crittografia aumenta anche leggermente la tua resistenza pratica contro la crittoanalisi differenziale (e alcuni altri attacchi) se l'aggressore può controllare solo il testo in chiaro non compresso, poiché l'output risultante potrebbe essere difficile da dedurre.

EDIT: sto modificando questo anni dopo perché questo consiglio è effettivamente scarso in un caso interattivo. Nella maggior parte dei casi non dovresti comprimere i dati prima di crittografarli. Un metodo di attacco a canale laterale noto come "oracolo di compressione" può essere utilizzato per dedurre dati di testo in chiaro nei casi in cui l'autore dell'attacco può far sì che le stringhe vengano inserite in modo interattivo in un flusso di dati di testo in chiaro altrimenti sconosciuto. Gli attacchi a SSL / TLS come CRIME e BREACH ne sono un esempio.

Tuttavia, la compressione potrebbe consentire nuovi attacchi in alcuni [contesti] (http://security.stackexchange.com/a/19914/655).
Wow, non ho mai nemmeno saputo di quell'attacco. Ottimo anche il commento!
Il tentativo di comprimere i dati crittografati è un modo per testare la proprietà di diffusione dell'algoritmo di crittografia, è anche un test per il materiale chiave; nessuno dei due dovrebbe comprimersi affatto in un mondo perfetto.
@lynks Non è, tuttavia, un test definitivo di casualità. Se il file crittografato non si comprime, il tuo codice non è uno scherzo completo, ma potrebbe comunque essere estremamente insicuro. Se il file crittografato si comprime, ogni speranza è persa e puoi anche consegnare il testo in chiaro ai cattivi.
Aggiungete anche che la vera casualità dovrebbe contenere schemi casuali di volta in volta, quindi in un campione abbastanza grande si dovrebbe essere in grado di comprimere comunque alcuni byte qua e là.
@ewanm89 Potenzialmente. In realtà, sono necessarie esecuzioni ragionevoli per comprimere e la maggior parte degli algoritmi ha una sorta di overhead di metadati per "blocco" di testo compresso. In quanto tale, è improbabile che tu raggiunga il pareggio.
@ewanm89: Il numero di possibili messaggi compressi di lunghezza * n * non può essere maggiore del numero di possibili messaggi di lunghezza * n *. Quindi, se facciamo una media sull'insieme di tutti i messaggi possibili, il rapporto di compressione medio (dimensione compressa divisa per dimensione non compressa) non può essere inferiore al 100%. Gli algoritmi di compressione raggiungono rapporti di compressione del mondo reale inferiori al 100% prendendo di mira modelli comuni a * spese * di quelli non comuni; quindi, un messaggio veramente generato in modo casuale avrà solitamente un rapporto di compressione maggiore del 100%.
@ruakh solo quando si contrappone nei metadati come dice Polynomial, sì, è improbabile che il pattern si ripeta abbastanza perché il dizionario sia maggiore della quantità di compressione nei dati effettivi. Ovviamente un cifrario a blocchi in modalità ECB tende ad essere altamente comprimibile ma poi tende a non dare un output casuale ed è aperto ad attacchi di dizionario.
Thomas Pornin
2012-09-15 20:23:32 UTC
view on stackexchange narkive permalink

Se comprimi dopo la crittografia e la compressione fa qualcosa di buono (cioè riduce davvero la lunghezza di una quantità non trascurabile), puoi abbandonare la crittografia, è terribilmente debole. Il testo crittografato dovrebbe essere indistinguibile dalla casualità; anche i dati crittografati male non possono essere compressi di solito.

Pertanto, comprimilo prima della crittografia. Questo è il motivo per cui i protocolli che si occupano della crittografia di solito includono un supporto per la compressione, ad es. OpenPGP (sezione 5.6) e SSL / TLS. In alcuni scenari, la compressione può far trapelare informazioni sui dati riservati (poiché la compressione riduce la lunghezza a seconda dei dati e la lunghezza crittografata corrisponde più o meno alla lunghezza del testo in chiaro); questa è l'idea alla base del nuovo attacco CRIME su SSL / TLS.


Eccezione marginale: se si crittografa un messaggio con OpenPGP e poi "ACSII armor" il risultato , cioè codificalo in Base64, quindi questa codifica ingrandisce i dati del 34%: 3 byte diventano 4 caratteri (più la nuova riga dispari). La compressione con DEFLATE sarà efficace per annullare questo ingrandimento (grazie ai codici di Huffman). Questo è un caso di utilità della compressione dopo la crittografia, ma, in realtà, è più compressione su Base64, piuttosto che compressione su crittografia.

Raphael Ahrens
2012-09-10 16:39:03 UTC
view on stackexchange narkive permalink

Suggerirei di comprimere prima i dati e poi di crittografarli.

  1. L'algoritmo di compressione potrebbe trarre vantaggio dalla conoscenza della struttura dei dati e tale struttura sarebbe mascherata dalla crittografia . Un esempio potrebbe essere mp3 che può solo comprimere dati audio.

  2. dovresti crittografare meno dati. Mentre quando si crittografa e poi si comprime per la prima volta non si guadagna velocità.

hobs
2019-04-21 03:17:38 UTC
view on stackexchange narkive permalink

Nessuno dei due: comprimi durante la crittografia con uno strumento di crittografia progettato per eseguire entrambe le operazioni in modo sicuro, come GPG / OpenPGP.

Questa è fondamentalmente la risposta di Thomas Pornin solo più diretta, quindi i lettori di fretta non fraintendono le sottigliezze di ciò che Thomas Pornin spiega nella sua risposta. La domanda esprime una falsa dicotomia. Se l'OP (e il lettore) sta pensando che il primo e il secondo passaggio siano l'esecuzione di due diversi strumenti come gzip e gpg:

  1. Se si crittografa prima, la compressione non farà molto, oltre a spremere l'inflazione Base64 del 34% di "armatura ASCII" menzionata da @ThomasPornin.

  2. Se comprimi prima, la crittografia è meno sicura, vulnerabile ad attacchi come quelli menzionati da @ThomasPornin.

user466720
2019-11-06 08:19:12 UTC
view on stackexchange narkive permalink

La compressione dopo la crittografia potrebbe non svolgere la funzione effettiva di compressione dei dati perché non ridurrà molto le dimensioni. Ma la crittografia dopo la compressione riduce le dimensioni ma non eseguirà il corretto funzionamento della crittografia perché possono verificarsi attacchi come CRIME.

Come esempio nelle intestazioni delle richieste Web, le intestazioni contengono cookie Web segreti, quindi la compressione delle intestazioni prima della crittografia rivelare quelle informazioni segrete all'esterno.

Pertanto è saggio fare una compressione selettiva che comprima solo i dati non segreti nella pagina e quindi la crittografia avrà senso e impedirà l'estrazione di informazioni segrete.

Dipende davvero un po 'dai dati.La compressione può certamente far perdere informazioni, ma dipende dall'applicazione / protocollo se questo tipo di informazioni è sensibile.Si noti che anche i dati non compressi perdono informazioni sulla dimensione del messaggio di testo normale.Tuttavia, la compressione può anche far perdere informazioni sul contenuto del messaggio di testo normale, poiché alcuni dati sono più facili da comprimere rispetto ad altri dati.


Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 3.0 con cui è distribuito.
Loading...