Voglio memorizzare un gran numero di chiavi simmetriche relativamente di breve durata

0

Ogni blob crittografato avrà una durata ben definita, ma diversa. Alcuni saranno in giro per 5 minuti, alcuni per un giorno, alcuni per una settimana, nessuno per oltre un mese.

Vorrei poter "cancellare" il file scartando la chiave, anche se il file non è più sotto il mio controllo, ad es. su un supporto di backup da qualche parte, o rubato da un utente malintenzionato (oh mio!).

D'altra parte, ho bisogno che ogni chiave resista di fronte a un arresto anomalo fino alla scadenza del suo ciclo di vita.

La riservatezza è più importante della disponibilità: "È andata per sempre" di solito è meglio di "Eva ce l'ha".

Quindi ho questa pazza idea:

  • Un file 128 GiB viene generato da un PRNG sicuro. Il seme viene memorizzato in modo sicuro offline. (Eve ottiene il seme = game over)  
  • Quando è necessaria una nuova chiave, verrà generato un numero casuale a 32 bit. (o 31 bit più un bit G per la generazione corrente).  
  • Questo numero a 32 bit è un indice in questo file di chiavi in cui è archiviato il materiale chiave effettivo.

Vantaggi:

  • Un utente malintenzionato dovrebbe copiare l'intero file per poter decodificare i file offline.
  • 4 byte è potenzialmente più facile da archiviare / cancellare atomicamente di 32 byte
  • Il file chiave potrebbe essere memorizzato in un dispositivo a blocchi non formattato senza livelli di file system.
  • La generazione di chiavi online potrebbe richiedere meno entropia.

    Svantaggi:

  • Potrebbe essere più complesso della semplice memorizzazione di una chiave da / dev / {u,} casuale in un file così come viene generato.
  • Il disco cercherebbe di esporre un canale laterale? Ho in programma di eseguire l'applicazione esclusivamente su bare metal, quindi non sono estremamente preoccupato per questo.
  • Lo spazio occupato dal file di chiavi potrebbe essere trasferito su altri (migliori) usi.

    Perderò il mio tempo cercando di implementarlo perché c'è un modo migliore noto?

        
  • posta Terrel Shumway 21.08.2013 - 00:52
    fonte

    1 risposta

    3

    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.

        
    risposta data 21.08.2013 - 17:31
    fonte

    Leggi altre domande sui tag