Posso crittografare un file in modo incrementale?

4

C'è un modo per crittografare un file in modo incrementale? Il problema è che ricevo un file un blocco alla volta via Internet (è un'applicazione client-server e mando array di byte tramite un servizio WCF) e non so quando il prossimo pezzo arriverà (se presente) e qual è la sua dimensione. Tutto quello che so è che non riesco a salvarlo nella RAM, ho bisogno immediatamente di cifrarlo e aggiungerlo ai blocchi precedenti.

Vincoli:

  • Non posso imporre una dimensione del blocco;
  • Vorrei (se possibile) decodificare il file come se fosse crittografato come un singolo file;
  • Non riesco a memorizzare i blocchi senza criptarli;
  • Non riesco a memorizzare le varie dimensioni dei blocchi né a memorizzare i blocchi in file diversi;
  • Sto utilizzando un algoritmo AES;
  • Non posso cambiare il mio lavoro.

Qualche idea o suggerimento?

    
posta Fabio 05.11.2012 - 18:27
fonte

1 risposta

8

Sì. La maggior parte degli algoritmi di crittografia a chiave simmetrica supportano una modalità di streaming, in cui si cripta il messaggio in modo incrementale man mano che arriva. Ciò include la modalità CTR, la modalità CBC e la maggior parte delle altre modalità.

Allo stesso modo, la maggior parte dei codici di autenticazione dei messaggi (MAC) supporta una modalità di streaming di operazione durante la generazione del MAC. D'altra parte, quando si verifica un MAC, mentre è possibile elaborare i dati in modalità streaming, non è possibile verificare se il MAC è valido finché non si sono elaborati tutti i dati, quindi non è possibile agire sul contenuto di alcun blocco finché non si li abbiamo ricevuti tutti e verificato che il MAC sull'intero file è valido.

Nella tua situazione, c'è un'altra soluzione che è probabilmente più semplice: crittografare ogni porzione di dati non appena arriva e memorizzare tutti i pezzi crittografati. Quando si desidera decodificare, decrittografare ogni blocco, quindi concatenare i risultati. Se segui questo approccio, assicurati di includere un numero di sequenza e il nome file in ciascun blocco, in modo che non possano essere ri-ordinati. Inoltre, assicurati di utilizzare la crittografia autenticata (come sempre). Questo approccio è probabilmente più semplice e quindi potrebbe essere più adatto alle tue esigenze.

    
risposta data 05.11.2012 - 19:08
fonte

Leggi altre domande sui tag