In larga misura, la domanda non ha senso, perché i dati sono opachi per il server. Poiché il server non sarà in grado, in ogni caso, di leggere i file decrittografati, se due file sono identici o meno non dovrebbe avere alcun impatto. In effetti lo scenario completo deve essere reso più chiaro.
Hai un server. Il server memorizza "dati crittografati" per conto di alcuni utenti che invieranno a vicenda le chiavi di decodifica; tutta la decrittazione e la crittografia avvengono altrove, e il tuo server non può farlo. Dobbiamo assumere che esista un meccanismo fuori banda tramite il quale gli utenti scambiano le chiavi di decifrazione.
Quello che vuoi, in quanto proprietario del server, è riconoscere quando diverse istanze dello stesso file vengono caricate sul tuo server, in modo che tu possa pagare per lo spazio di archiviazione solo una volta (ho appena letto da qualche parte che "The Hobbit" è stato il film più copiato del 2013, quindi potresti presumere che la tua piattaforma prevista contenga diverse centinaia di copie di quel file di film multi-gigabyte). La crittografia normale e sicura dovrebbe impedire agli estranei di essere in grado di formulare qualsiasi asserzione sui contenuti dei dati, inclusa la possibilità di riconoscere se due file crittografati hanno lo stesso contenuto. In questo senso, la deduplicazione che stai cercando è un indebolimento del modello di sicurezza. Possiamo prevedere che alcuni utenti non gradirebbero; ad esempio, se la deduplicazione funziona, allora tu (come il server) puoi rilevare quando un utente sta caricando "Lo Hobbit".
(Quando la deduplicazione funziona, allora è possibile fare una ricerca esauriente sui contenuti del file, questo è facile da fare per i file che sono duplicati molto, perché un file noto a molti utenti non può essere quel segreto, e nel contesto dell '"enforcement della proprietà intellettuale", i file pesantemente ingannati sono di primario interesse.)
Se parliamo in termini generici, non è possibile applicare la deduplicazione , perché qualsiasi utente che voglia evaderlo può semplicemente crittografare i propri dati. L'utente 1 prima crittografa il file con una chiave segreta extra, che condividerà con l'utente 2; quella chiave viene scelta in modo casuale, quindi il file crittografato non corrisponderà a nessun'altra istanza degli stessi dati; il file crittografato viene quindi criptato di nuovo con il tuo servizio. Gli utenti possono fare una tale doppia crittografia perché i dati sono solo, in fine , un file sul loro disco, e abbiamo ipotizzato che gli utenti possano parlare tra loro indipendentemente dal proprio server. Finché gli utenti possono parlare tra loro, possono scambiarsi le chiavi segrete che non conosci.
In alcuni contesti molto specifici , è possibile dimostrare che alcuni dati crittografati soddisfano alcune proprietà algebriche senza rivelarlo. Vedi prove Zero-Knowledge non interattive . Questo viene utilizzato in alcuni protocolli di votazione elettronica, in modo che il dimostrante possa dimostrare che ciò che ha crittografato è in realtà uno 0 o un 1, non un qualsiasi altro intero, ma senza divulgare il valore effettivo del voto. Questo non si applica a un sistema di archiviazione di file generico, perché i "file normali" non seguono una struttura matematica distinguibile.
Pertanto , se vuoi applicare la deduplicazione agli utenti non collaborativi, allora devi renderlo in modo che gli utenti non possano parlare tra loro . È più facile dirlo ... e sembra difficilmente fattibile, poiché il sito è davvero utile, il mittente e il destinatario devono essere in grado di concordare almeno una chiave di riferimento, utilizzata per localizzare il file sul server.