Crittografia dei dati per parti e crittografia dell'intero dato

12

Supponiamo di avere un file con record e ho due opzioni per crittografarlo:

  • crittografa il file nel suo complesso
  • crittografa ogni record separatamente e li memorizza insieme.

Quale modo è generalmente preferibile e perché?

Ad esempio, penso che il secondo approccio sia peggiore perché implementato in modo ingenuo rivelerebbe informazioni su numero e dimensioni dei record. Ma cosa succede se aggiungo dati casuali alla fine di ogni record?

    
posta Andrew T 15.07.2011 - 16:51
fonte

4 risposte

11

Prima di crittografare, devi prima definire quale tipo di proprietà vuoi ottenere e quali sono i percorsi che un attaccante putativo può usare.

La crittografia è uno strumento per ottenere riservatezza. La maggior parte dei modelli di sicurezza richiede anche una sorta di controllo dell'integrità controllata (gli aggressori "solo passivi" sono molto rari). Esistono modalità di crittografia che combinano la crittografia (per riservatezza) e l'integrità verificata, vedi EAX e GCM . La crittografia per record implica quanto segue:

  • Il numero e la dimensione delle perdite dei record.
  • L'integrità strutturale del file completo non è più garantita: un utente malintenzionato attivo può rimuovere alcuni record o modificarne l'ordine senza essere rilevato.
  • C'è un overhead di dimensioni. Ogni singola crittografia ha un overhead di dimensione fissa, che dipende dalla modalità di crittografia (necessaria per il controllo di integrità e per un parametro essenziale chiamato Vettore di inizializzazione ). Avere questo overhead per ogni record richiede più spazio per un singolo overhead per l'intero file.
  • È possibile verificare l'integrità di un singolo record senza elaborare l'intero file.
  • È complesso.

Quest'ultima conseguenza dovrebbe essere vista come un motivo convincente non per usare la crittografia per-record: la complessità è il peggior nemico dell'ingegnere della sicurezza. Quindi, a meno che tu non abbia una reale necessità di processare il file in parti parziali (ovvero è troppo grande per essere decrittografato e controllato nella RAM nel suo insieme), dovresti astenervi dal tentativo di implementare la crittografia per-record.

    
risposta data 15.07.2011 - 18:07
fonte
8

Molto dipenderà esattamente da quello che vuoi fare con i dati, e quali sono le tue esigenze intorno alla larghezza di banda ecc.

Come dici tu, la perdita di dati si verificherà intorno al numero e alla dimensione dei file con la tua seconda opzione, tuttavia questo potrebbe non essere un problema e l'accesso ai file potrebbe essere più veloce.

Nel dire che, tuttavia, la maggior parte delle soluzioni di crittografia del volume crittografano l'intero volume e in situazioni in cui l'accesso al disco non è il collo di bottiglia, questa potrebbe essere una soluzione adatta a te.

La mia preferenza in ambienti in cui il livello di sicurezza richiede che i file siano crittografati consiste nel crittografare l'intero volume in quanto ciò aiuta a rimuovere la possibilità di salvare accidentalmente i file in chiaro, oltre a ridurre la perdita di dati.

    
risposta data 15.07.2011 - 17:03
fonte
2

Il secondo metodo non è ingenuo a causa del motivo per cui hai citato poiché la crittografia fornirà un testo crittografato della stessa dimensione purché la dimensione del blocco non venga violato. Fondamentalmente, se l'input è di 2 byte o 16 byte, l'output sarà di 128 bit in AES-128 supponendo che si riempirà l'input per portarlo alla dimensione del blocco. Ma questo metodo può facilmente rivelare il numero di record.

La ragione per cui il secondo metodo è ingenuo è perché implica più operazioni di I / O. Ma se hai le risorse, non ci sono problemi. Inoltre, quando la crittografia è molto strong come AES, l'approccio non è certo una preoccupazione. Unica preoccupazione è il tempo che verrà impiegato per crittografare individualmente 1000 campi quando possono essere ospitati in 50 righe in un singolo file e crittografati / decodificati molto più velocemente.

La scelta ti è stata data. Entrambi sono forti, mentre il secondo è un po 'debole nel rivelare il numero di record. In caso contrario, solo i parametri esterni come il tempo disponibile per crittografare / decodificare il conteggio in questo caso.

    
risposta data 15.07.2011 - 18:09
fonte
1

Le funzioni di crittografia (codici a blocchi) non possono contenere un input lungo e arbitrario. Quindi, anche se si cripta l'intero file, la funzione di crittografia stessa lo romperà in blocchi e crittograferà i blocchi individualmente. Questo è simile alla crittografia di singoli record, tranne per il fatto che la modalità operativa determinerà se / come questi blocchi sono mescolati tra loro.

Crittando individualmente ogni record, si sta facendo qualcosa di simile alla modalità di funzionamento della BCE. La differenza è che hai partizionato i dati da solo. Ciò preserva le informazioni sulla struttura e qualsiasi attacco contro la BCE si applicherà anche all'approccio di crittografia dei record individualmente (senza riempimento casuale). Ad esempio, se due record sono uguali, sarai in grado di vederlo nel testo cifrato.

Inoltre, crittografando ogni record individualmente, non riempirai completamente i blocchi, il che sarà meno efficiente in termini di velocità e spazio di archiviazione.

Quindi la risposta breve è: è molto meglio crittografare l'intero file e usare una buona modalità di operazione per farlo (CBC o XTS per esempio).

L'unica ragione per cui non si considera la crittografia dell'intero file è se è necessario decrittografare in modo selettivo i record in modo efficiente o sostituire i record. Crittografare l'intero file significa recuperare un record, è necessario decrittografare l'intero file fino al record che ti interessa. E modificare qualsiasi parte di un singolo record significa ricodificare il resto dei dati. Se questo è un problema, esistono metodi standard per la crittografia settore per settore.

    
risposta data 15.07.2011 - 18:04
fonte

Leggi altre domande sui tag