Crittografia file con crittografia AES-256-CBC vs Chunk

0

Fondamentalmente sto progettando un protocollo che richiede una trasmissione di file sincrona e ordinata da un server (implementato in Node.js) a un dispositivo, su TCP . Lo streaming del file non è un'opzione, quindi ogni chunk di file è incapsulato in un messaggio che contiene altri campi non crittografati, che non rientrano nell'ambito di questa domanda.

Uno dei requisiti è che il contenuto del file non può essere inviato in testo normale, quindi è necessario scegliere uno schema di crittografia, in questo caso ho optato per AES-256-CBC , assumo ai fini di questa domanda l'algoritmo non può essere modificato.

A causa dei vincoli del dispositivo (RAM ~ 10KB), è necessario dividere il file ( < 5 MB ) in chunk, che verrà quindi inviato al dispositivo secondo il protocollo citato, in seguito uno schema send / [ack | repeat] . Alla ricezione, il dispositivo è in grado di memorizzare il blocco sul disco.

Quindi la mia domanda principale qui è che nel back-end devo scegliere tra:

  • Crittografia del file completo e successiva suddivisione in blocchi

    - > Sul dispositivo di ricezione aggiungerebbe ciascun blocco in un file e quindi decrittalo quando tutti i blocchi sono stati ricevuti.

vs

  • Dividere il file in blocchi e quindi crittografarli.

    - > Richiede l'invio del vettore di inizializzazione (IV) utilizzato su ogni crittografia del blocco per decrittografarlo.

    - > Alla ricezione del chunk il dispositivo dovrebbe decifrare il chunk o memorizzarne ciascuno con il rispettivo IV e quindi decrittografarli dopo aver ricevuto l'ultimo chunk.

L'obiettivo qui è capire quali sono i problemi di sicurezza derivanti da ciascun approccio e anche un confronto di overhead tra di essi.

PS: ho anche uno schema di convalida dell'integrità ma è fuori dall'ambito della domanda.

    
posta SerDom 24.05.2018 - 13:34
fonte

1 risposta

1

Per quanto riguarda la sicurezza, non vedo alcuna differenza.

Poiché si presume che l'integrità e la disponibilità siano gestite correttamente, l'unica preoccupazione è la riservatezza. La soluzione 1 utilizza solo un IV, supponendo che sia possibile generare buoni IV (casuali e abbastanza lunghi), quindi va bene. La soluzione 2 utilizza più IV, ma non aggiungono altro alla sicurezza (gli IV sono tutti pubblici). Infatti gli IV sono usati per randomizzare il testo cifrato in modo tale che l'attacco del testo in chiaro scelto non sia possibile. Uno IV per l'intero file è sufficiente per questo scopo. Nella soluzione 1 tutti i dati sono crittografati sotto una chiave. Questo è lo stesso nella soluzione 2. Quindi la riservatezza si riduce alla sicurezza di questa chiave. Non c'è differenza in entrambe le soluzioni.

Ci potrebbe essere qualche differenza quando si tratta di prestazioni. La soluzione 2 consente di eseguire la crittografia e la decrittografia in parallelo. Questo non è il caso della soluzione 1. D'altro canto, la soluzione 2 richiede un po 'più spazio / calcolo / larghezza di banda a causa degli IV aggiuntivi.

    
risposta data 24.05.2018 - 18:25
fonte

Leggi altre domande sui tag