Crittografia di file in .NET?

0

Sono in una situazione in cui vorrei crittografare file audio e di testo per un'applicazione su cui sto lavorando. Ho fatto un po 'di ricerche e da quello che ho visto l'algoritmo di crittografia Rijndal avrebbe funzionato bene per questo. Ho trovato un'implementazione che utilizza .NET RijndaelManaged class here .

Nel mio sito accetterò file audio da clienti e genererò file di testo da essi. Vorrei criptare entrambi questi file mentre sono sui miei server, in questo modo se un utente malintenzionato è in grado di accedere al file system non sarà in grado di accedere al contenuto dei file.

Da quanto ho capito, è molto facile rovinare la crittografia, quindi speravo di ottenere alcune opinioni sul esempio di crittografia che ho collegato a è un modo efficace per crittografare i file? Ci sono dei potenziali punti deboli in questo esempio? Se sì, suggerimenti su come rendere questo esempio più sicuro?

    
posta Abe Miessler 21.04.2014 - 18:05
fonte

2 risposte

2

La crittografia non è un tuo problema in quanto molti esempi di crittografia C # faranno la cosa giusta con la classe CryptoStream . Ma dopo aver consultato rapidamente l'articolo CodeProject che hai collegato , posso di 'con certezza che è meglio che non usi il codice come presentato. Elencherò i problemi nell'ordine in cui appaiono nel codice.

  1. private void EncryptFile(string inputFile, string outputFile)
    Il metodo di crittografia richiede un nome del percorso . Ciò significa che i file si troveranno sul tuo file system in un modulo vulnerabile non crittografato finché non verrà crittografato con questo metodo e eliminato. Dovrebbe essere crittografato nella memoria del server mentre viene tirato attraverso la connessione prima di toccare qualsiasi dispositivo di archiviazione!
  2. string password = @"myKey123"; // Your Key Here
    UnicodeEncoding UE = new UnicodeEncoding();
    byte[] key = UE.GetBytes(password);
    Che diavolo? La password dovrebbe mai essere usata direttamente dalla stringa grezza! Dovrebbe essere sottoposto a hash con qualcosa di sicuro!
  3. CryptoStream cs = new CryptoStream(fsCrypt, RMCrypto.CreateEncryptor(key, key), CryptoStreamMode.Write);
    Perché è il vettore di inizializzazione uguale alla chiave? C'è un metodo per questo: RijndaelManaged.GenerateIV();
  4. catch { MessageBox.Show("Encryption failed!", "Error"); }
    Se lo stai eseguendo su un server senza un'interfaccia utente, questo causerà problemi. Ma il problema più grande è che questo blocco catch non è abbastanza specifico per determinare come gestire il problema! Vedi Best practice per la gestione delle eccezioni in Java o C # .

A parte questo, il altro potenziale punto debole è il modo in cui generi le chiavi, dove le mantieni e come viene controllato l'accesso ai tasti.

Nel tuo caso, chi detiene le chiavi del testo cifrato: tu o il cliente o entrambi? Se possiedi anche le chiavi, dovrai capire come un utente malintenzionato che ha violato il tuo server e ottenere il tuo testo cifrato non avrà le tue chiavi.

La soluzione migliore è archiviare i dati crittografati sul server con la chiave crittografata. La chiave stessa deve essere crittografata utilizzando le credenziali dell'utente. In questo modo, il server può solo decodificare i dati e inviarli all'utente quando l'utente esegue il login e decrittografa la chiave con la password e il server può crittografare e decrittografare i dati con la chiave decrittografata fino a quando l'utente non si disconnette, a quel punto la chiave dovrebbe essere cancellata dalla memoria. Se hai implementato questo sistema e i tuoi dati sono stati rubati, l'utente malintenzionato avrebbe un set di chiavi crittografate (che sono inutili fino alla decrittazione con la password dei clienti) e blob di dati crittografati (che sono anche inutili senza le chiavi di decrittografia).

    
risposta data 22.04.2014 - 08:54
fonte
0

Personalmente, ho più fiducia negli articoli MSDN su qualsiasi altra cosa. Detto questo, vorrei iniziare con Servizi di crittografia , quindi Procedura dettagliata: creazione di un'applicazione crittografica , che spiega il processo piuttosto bene.

    
risposta data 22.04.2014 - 07:56
fonte

Leggi altre domande sui tag