Rischi per la sicurezza della crittografia simmetrica con compressione per i dati del database

2

Vorrei comprimere i dati prima di crittografarli e archiviarli in un database MySQL per ridurre in particolare i requisiti della larghezza di banda. In futuro, il DB potrebbe essere accessibile tramite un'interfaccia web.

Diversi commenti sull'insicurezza della compressione in testo semplice prima della crittografia, relativi a violazioni della sicurezza come CRIME o BREACH, mi rendono incerto su come farlo. Inoltre, alcuni sostengono che la compressione prima della crittografia sia in realtà una buona pratica di sicurezza. Mi rendo conto che gli attacchi come CRIME o BREACH sono scenari specifici, ma temo che la mia applicazione potrebbe essere troppo vicina (o alla fine avvicinarsi troppo) a uno scenario simile in cui la compressione potrebbe costituire un rischio per la sicurezza (il contenuto del DB può essere rubato, server compromesso ecc.). Inoltre, non sono abbastanza esperto per comprendere appieno tutti gli aspetti, i dettagli e le sfumature di CRIME o BREACH.

Dopo aver letto questa discussione sull'argomento, con la raccomandazione di riempire il testo in chiaro con un nonce casuale prima della compressione, mi chiedo se la seguente implementazione (in PHP) farà sicuramente il lavoro:

    $plaintext = gzcompress ($plaintext . openssl_random_pseudo_bytes (64));
    $cipher_text = openssl_encrypt ($plaintext, 'aes-256-cbc', $key, 0, $iv);

L'integrità dei dati è garantita da una procedura di firma / verifica HMAC sul testo e sulla chiave di crittografia.

È un'implementazione sicura?

Ci sarebbe qualche vantaggio nel fatto che il nonce sia di lunghezza casuale, e quindi aggiungendo le informazioni sulla lunghezza alla fine del padding per rimuovere il padding dopo la decrittazione? O dovrebbe la lunghezza del nonce essere in relazione alla lunghezza del testo in chiaro (che sarebbe in genere di almeno 512 byte)?

NOTA: per quanto posso dire, la mia applicazione specifica e la soluzione proposta non sembrano rispondere al possibile duplicato suggerito nei commenti.

    
posta azenz 27.10.2015 - 08:45
fonte

1 risposta

1

CRIME e BREACH dipendono dall'attaccante per controllare parte dei dati e quindi vedere come cambia la lunghezza dei dati crittografati. Nel caso di un'applicazione web, l'utente malintenzionato può spesso controllare parte dei dati ma non ha alcuna conoscenza di quanto spazio occorrono i dati dopo la compressione e la crittografia.

DB contents can be stolen

Per far funzionare questi attacchi basati sulla compressione, l'attaccante deve essere in grado di controllare l'input nel database e quindi rubare il database ancora e ancora dopo ogni modifica nell'input controllato. Se l'autore dell'attacco è in grado di rubare il database ancora e ancora, allora potresti avere altri seri problemi (come l'autore dell'attacco che ha accesso diretto alla chiave di crittografia) e la crittografia probabilmente non ti aiuterà comunque.

server compromised etc

Il server deve essere compromesso in modo che l'utente malintenzionato possa controllare le parti di input nel database ed è in grado di leggere l'input crittografato o almeno determinarne la dimensione. Questo è uno scenario molto specifico e nella maggior parte dei casi l'autore dell'attacco sarà probabilmente più profondo nel sistema e avrà comunque accesso alle chiavi di crittografia. Oppure quell'attaccante non è così in profondità nel sistema e non ha accesso ai dati crittografati o alle dimensioni dei dati crittografati.

...I also do wonder whether my proposed solution will in fact protect the encrypted data against attacks related to compression

No, non lo farà. Dato che all'inizio si aggiunge un numero fisso di byte casuali, si aggiungerà semplicemente una stringa che nella maggior parte dei casi non può essere ulteriormente compressa. E quindi basta aggiungere una lunghezza fissa al contenuto compresso che non rende questo tipo di attacchi più difficile. Un modo migliore sarebbe aggiungere una quantità casuale di dati, ma questo rallenterà anche l'attacco.

Per una discussione più dettagliata vedi È possibile contrastare BREAK aggiungendo semplicemente una sorta di" sale "nella pagina in fase di compressione? .

    
risposta data 27.10.2015 - 09:24
fonte

Leggi altre domande sui tag