La deduplicazione funziona sulla rilevazione di file o blocchi di dati identici. Tali duplicati si verificano solo con probabilità trascurabile in dati casuali, e i dati crittografati correttamente dovrebbero essere indistinguibili dalla casualità. La crittografia è in grado di garantire riservatezza e ciò include, in particolare, la possibilità di nascondere a chiunque l'intercettazione di due file di dati di origine identici o meno.
In questo senso, la deduplicazione può funzionare su file crittografati solo se il modello di crittografia è indebolito. Questa non è una decisione leggera: nel caso del tuo database, mostra quali "blocchi" sono cambiati e quali non possono essere abbastanza rivelatori su ciò che hai fatto nel tuo database nel frattempo. Il termine generico è analisi del traffico . La pagina di Wikipedia elenca diversi famosi casi militari; l'analisi del traffico è anche molto utile per prevedere le tattiche di business dei concorrenti (ad esempio notando in anticipo i preparativi per il rilascio di nuovi prodotti principali).
Supponendo che si voglia eseguire la deduplicazione a livello di blocco, nonostante le possibili fughe di cui sopra, ci sono buoni modi e cattivi modi per farlo. Per prima cosa è necessario dividere i dati di input in blocchi di dimensioni di blocchi, in realtà un po 'più piccoli a causa della necessità di un'intestazione extra per blocco (per IV e un MAC ). Ogni blocco verrà crittografato separatamente. Ora la parte più difficile è che per la deduplicazione funzioni, gli stessi dati di blocco devono essere ricodificati in modo identico se non cambiano tra le invocazioni, quindi è necessario riutilizzare l'IV. Il riutilizzo del valore IV è un peccato; è mortale quando si usano modi come CTR e in particolare i suoi derivati moderni GCM e EAX . La soluzione qui è una IV calcolata con una funzione unidirezionale dall'offset del blocco nel file e dal suo contenuto; la funzione unidirezionale dovrebbe essere "casuale" e essere codificata, altrimenti gli autori degli attacchi potrebbero tentare una ricerca esauriente sui dati stessi, facendo corrispondere il blocco IV.
Il seguente schema dovrebbe essere sicuro (all'interno del modello indebolito) ma ciò richiederebbe un'analisi attenta:
-
Ci sono due chiavi K 1 e K 2 (probabilmente derivate da un singolo master chiave con una funzione di derivazione chiave .
-
Per il numero di blocco i , con dati d , calcola IV = HMAC ( K 1 , i || d ) (l'IV è il risultato di HMAC / SHA-256 sulla concatenazione di i e dei dati d , usando K 1 come chiave - tronca la IV ai suoi primi 128 bit).
-
Encrypt d con AES, utilizzando IV dal passaggio precedente e il tasto K 2 , in modalità CBC.
-
Metti insieme IV e il risultato della crittografia in un blocco a dimensione di blocco.
Questo usa CBC e MAC-and-encrypt, che non è "ideale" per quanto riguarda la crittografia, ma è un modello indebolito. Ottieni ciò che chiedi.
Modifica: nota importante: sebbene alcuni HMAC vengano utilizzati qui, ciò non garantisce l'integrità dei dati del blocco. È possibile utilizzare l'IV per la decrittografia e quindi ricalcolare l'IV e verificare se corrisponde a quello nel file; ciò impedirà alterazioni generiche, ma un utente malintenzionato attivo potrebbe comunque sostituire un blocco con una versione precedente di questo stesso blocco. Se hai bisogno di un controllo dell'integrità sui tuoi backup, fai quanto segue: oltre a qualsiasi crittografia e MAC sopra descritto, calcola un MAC o una firma sul file completo e verifica prima di utilizzare il backup (se stai ripristinando un backup, allora presumo che lo leggerai comunque in ogni caso, quindi potresti avere la verifica della MAC o della firma "gratuitamente").