L'unico miglioramento della sicurezza del tuo schema (oltre la situazione in cui non lo applichi) si trova su quanto segue:
An attacker would have to copy the entire file to be able to decrypt files offline.
Il resto è solo considerazioni secondarie su problemi di prestazioni. Il nucleo dell'idea, dal punto di vista della "sicurezza", è che si rende difficile ottenere l'intero file chiave attraverso la sua dimensione pura. In effetti, ci sono due tipi di attacchi di cui ti preoccupi:
-
Attacchi online : l'utente malintenzionato sovverte il server e, poiché il server può decodificare tutti i file di dati, l'utente malintenzionato online può eseguire lo stesso finché mantiene il controllo del server .
-
Attacchi offline : l'utente malintenzionato prende alcuni dati dal server e li utilizza per decodificare i file dopo l'attaccante è stato sfrattato dal server.
Il tuo punto è di rendere più difficile per gli aggressori offline, cioè renderli rigorosamente meno potenti degli aggressori online. Quindi direi che la tua idea non funziona bene. In effetti, non è vero che l'autore dell'attacco dovrebbe "copiare l'intero file". L'utente malintenzionato avrebbe bisogno dell'intero file per poter decodificare i file tutti ; ma se ottiene solo 128 MB dall'intero file, può comunque decodificare un file ogni migliaia. Inoltre, a seconda di come si rompe l'aggressore, "scaricare" l'intero file chiave potrebbe non essere un problema per lui. In particolare, gli hacker recuperano i vecchi dischi rigidi scartati dai cassonetti: se l'elettronica del disco non funziona, non è possibile cancellare facilmente il contenuto, ma un utente malintenzionato può recuperare il disco, sostituire la scheda elettronica e leggere l'intero file. 128 GB non sono più grandi di 128 byte in queste condizioni: è solo un disco, che si adatta al palmo della mano.
Qui c'è una soluzione migliore, che comporta l'utilizzo di hardware anti-manomissione, ad es. una smart card o un hardware modulo di sicurezza (quest'ultimo è molto più costoso, ma offre prestazioni molto migliori). Quel dispositivo decodificherà felicemente i BLOB asimmetrici-criptati per conto del tuo server, ma mai non darà la sua chiave privata. In questa configurazione, il dispositivo contiene una coppia di chiavi asimmetriche (ad esempio, RSA); quando un file deve essere crittografato, viene generata una chiave simmetrica casuale K e tale chiave viene utilizzata per crittografare il file con un algoritmo di crittografia simmetrica. Anche la chiave simmetrica è asimmetricamente crittografata con la chiave pubblica del dispositivo RSA. Quando un file deve essere decrittografato, il dispositivo viene richiamato per recuperare la chiave simmetrica K e decodificare il file. K è conservato nella RAM solo per i pochi millisecondi necessari per la crittografia o la decrittografia dei dati del file, e ogni file riceve il proprio K .
Per costruzione, un utente malintenzionato online può utilizzare il dispositivo per decodificare i file, ma una volta offline non ha più nulla. Questo è un sistema di protezione molto più completo rispetto alle assunzioni sulla presunta difficoltà di scaricare alcuni gigabyte da un server connesso a Internet.