Dati sicuri in memoria (applicazione C # .Net)

0

Uno dei requisiti del progetto .Net su cui sto lavorando ora è quello di proteggere le informazioni private come SSN, DOB e Password. Stiamo eseguendo la crittografia richiesta quando stiamo salvando i dati, ma quali sono le cose che dobbiamo fare proteggere i dati in memoria prima che siano memorizzati nel DB?

Qual è il miglior algoritmo di crittografia per il nostro caso?

    
posta Rithu Bimasha 19.01.2017 - 04:20
fonte

2 risposte

2

La prima cosa che devi considerare è come gestisci le informazioni sensibili nel tuo codice. Ad esempio se gestisci la tua password (testo normale) usando un tipo di dati stringa, c'è il rischio che qualcuno possa prendere la tua password dalla memoria. Perché in. Net, il tipo di dati String è immutabile e non hai alcun controllo su di esso.

Quindi il modo migliore per gestire i dati sensibili delle stringhe in un'app .Net è utilizzando SecureString classe. Gestisce i dati stringa come array di byte e non è necessario preoccuparsi delle conversioni di dati, ecc. È possibile utilizzare il metodo Dispose () quando si finisce di lavorare con dati sensibili.

        // Instantiate the secure string.
        SecureString securePwd = new SecureString();
        ConsoleKeyInfo key;

        Console.Write("Enter password: ");
        do {
           key = Console.ReadKey(true);

           // Ignore any key out of range.
           if (((int) key.Key) >= 65 && ((int) key.Key <= 90)) {
              // Append the character to the password.
              securePwd.AppendChar(key.KeyChar);
              Console.Write("*");
           }   
        // Exit if Enter key is pressed.
        } while (key.Key != ConsoleKey.Enter);
        Console.WriteLine();

        try {
            Process.Start("Notepad.exe", "MyUser", securePwd, "MYDOMAIN");
        }
        catch (Win32Exception e) {
            Console.WriteLine(e.Message);
        }
        finally {
           securePwd.Dispose();
        } 

What is the best encryption algorithm for our case?

Spero che non stiate utilizzando la crittografia nelle password? Le password devono essere sottoposte a hash con un buon algoritmo di hash e buon sale. Non utilizzare MD5 o SHA1 perché questi sono weak hashes secondo agli standard attuali. Al momento possiamo considerare che PBKDF2 è uno dei migliori algoritmi di hashing disponibili. Il framework AspNet Identity che utilizza PBKDF2.

È possibile utilizzare l'algoritmo AES per crittografare gli altri dati sensibili. Ma tieni a mente per proteggere le tue chiavi. È possibile utilizzare a tal fine il contenitore chiave .Net     

risposta data 19.01.2017 - 07:03
fonte
0

Se stai utilizzando C #, puoi utilizzare la classe SecureString sotto la direttiva System.Security . Maggiori informazioni su MSDN . Questa API garantisce che i contenuti sono più difficili, anche se non impossibili, da ottenere. Questa crittografia / offuscamento impedirà di evitare i salvati di memoria in grep per i modelli SSN / DOB o anche le password (cioè la propria password dell'utente malintenzionato per trovare l'area di memoria).

Supponendo di avere la crittografia a riposo (DB) accertata, assicurarsi che l'igiene generale della sicurezza del sistema sia all'altezza. Chiunque abbia un accesso con un superutente potrebbe potenzialmente leggere file di memoria / scambio; che è quello che vuoi evitare.

    
risposta data 19.01.2017 - 07:04
fonte

Leggi altre domande sui tag