Quali sono i passaggi consigliati per la creazione di un formato di file crittografato? [chiuso]

0

Sto sviluppando un programma piuttosto standard che consente agli utenti di salvare il proprio lavoro in un formato file personalizzato e riaprirlo in seguito. Ora vorrei aggiungere la possibilità di crittografare il file utilizzando una password definita dall'utente e mi chiedo quali passi intraprendere e quali tecnologie utilizzare.

Da quanto ho letto sull'argomento penso di aver bisogno di un modo per ricavare una chiave di crittografia dalla password, così come un algoritmo di crittografia simmetrica che verrà usato per crittografare il contenuto del file pertinente. Devono esserci alcuni dati non crittografati nel file per necessità (numero magico / versione, parametri di crittografia / sali / IV) e un modo per verificare che quei parametri non crittografati non siano stati manomessi. Infine, per decifrare il file abbiamo bisogno di un modo per verificare che la password inserita fosse effettivamente corretta, senza introdurre un potenziale vettore di attacco.

Quindi quali passi dovrei fare per raggiungere questo obiettivo?

Quali tecnologie dovrei usare?

Quale dovrebbe essere la progettazione generale del formato di file?

Il risultato dovrebbe essere sufficientemente sicuro dagli standard odierni per un target di utenti privati e piccole aziende.

    
posta Askaga 06.06.2016 - 11:59
fonte

2 risposte

2

Dipende esclusivamente da te. Ad esempio, in Java esistono librerie (le funzioni di crittografia non devono essere implementate da zero ) per la crittografia AES che consente di utilizzare questo codice per crittografare un flusso di byte con una determinata chiave e IV. Quindi molto spesso, anche quando usi le librerie, ti rimangono i problemi che hai menzionato:

  • Dove dovrebbero essere archiviate le meta informazioni? (Versione, nome file originale, percorso originale ecc.).
  • Dove devono essere memorizzati i parametri di crittografia?
  • Dove immagazzinare IV
  • Dove conservare il sale

Dipende davvero dall'applicazione che stai creando. Prenderò in considerazione l'archiviazione delle informazioni essenziali (IV, salt) all'interno del file crittografato in un'intestazione personalizzata. L'incorporamento delle informazioni essenziali all'interno del file ha il vantaggio che tutto ciò che è necessario decrittografarlo è il file crittografato stesso e la chiave.

Potresti inserire le meta informazioni anche nell'intestazione, o se la tua applicazione lo richiede, memorizzarlo in un database esterno. Poiché le meta-informazioni non sono essenziali, i file crittografati possono ancora essere decifrati anche se il database viene danneggiato o perso.

There needs to be some unencrypted data in the file out of necessity (magic/version number, encryption parameters/salts/IVs) as well as some way to verify that those unencrypted parameters have not been tampered with.

Non sono sicuro del motivo per cui ne hai bisogno, ma potresti riservare uno spazio extra nell'intestazione personalizzata per un checksum calcolato su parametri di crittografia IV +. In questo modo puoi sempre sapere se i parametri sono stati modificati. Ad esempio, non è possibile ripristinare un IV corrotto, almeno non senza forza bruta.

The result should be secure enough by today's standards for a target audience of private users and small companies.

Se il tuo algoritmo di crittografia è considerato sicuro e stai gestendo correttamente le password degli utenti (questo è il problema più grande !!), allora non c'è molto che tu possa sbagliare nel formato del file. IV, i parametri di sale e di crittografia possono essere resi pubblici (leggi: memorizzati in testo normale). Questo non dovrebbe avere un impatto sulla sicurezza della tua crittografia scelta.

    
risposta data 06.06.2016 - 14:03
fonte
0

Mi piacerebbe che tu usassi una libreria di compressione collaudata in tempo che sia in grado di eseguire una crittografia strong (AES-128/256) per avvolgere l'intero file.

Il motivo è che i progettisti di questi formati di file hanno già valutato i potenziali vettori di attacco e li hanno integrati nei requisiti di formato. Le biblioteche che implementano questi formati hanno quindi uno standard minimo da rispettare. È probabile che anche le implementazioni abbiano ricevuto un grande controllo.

Se il linguaggio di programmazione che stai usando non ha una libreria affidabile che si adatti alla descrizione. È sempre possibile eseguire il shelling di un'utilità della riga di comando esterna e passare i dati tramite pipe. È possibile mantenere l'estensione del file allo stesso modo e utilizzare i numeri magici per verificare se è necessaria la decompressione.

    
risposta data 06.06.2016 - 17:00
fonte

Leggi altre domande sui tag