Datos seguros en la memoria (aplicación C # .Net)

0

Uno de los requisitos del proyecto .Net en el que estoy trabajando ahora es proteger la información privada como SSN, DOB y Contraseña. Estamos realizando el cifrado requerido cuando estamos guardando los datos, pero ¿cuáles son las cosas que debemos hacer? ¿Proteger los datos en la memoria antes de que se almacenen en la base de datos?

¿Cuál es el mejor algoritmo de cifrado para nuestro caso?

    
pregunta Rithu Bimasha 19.01.2017 - 04:20
fuente

2 respuestas

2

Lo primero que debe considerar es cómo está administrando la información confidencial en su código. Como ejemplo, si administra su contraseña (texto sin formato) utilizando un tipo de datos de cadena, existe un alto riesgo de que alguien pueda tomar su contraseña de la memoria. Debido a que en .Net, el tipo de datos String es inmutable y no tiene ningún control sobre él.

Por lo tanto, la mejor manera de administrar datos de cadenas confidenciales en una aplicación .Net es usar SecureString class. Administra los datos de cadena como matrices de bytes y no tiene que preocuparse por las conversiones de datos, etc. Puede usar el método Dispose () cuando termine su trabajo con datos confidenciales.

        // 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();
        } 
  

¿Cuál es el mejor algoritmo de cifrado para nuestro caso?

¿Espero que no esté utilizando el cifrado en las contraseñas? Las contraseñas deben estar en hash usando un buen algoritmo de sal y buen hash. No utilice MD5 o SHA1 porque son hashes débiles según a las normas vigentes. Por el momento, podemos considerar que PBKDF2 es uno de los mejores algoritmos de hashing disponibles. El marco de Identidad de AspNet que utiliza el PBKDF2.

Puede usar el algoritmo AES para cifrar sus otros datos confidenciales. Pero ten en cuenta asegurar tus llaves. Puede usar .Net Contenedor de claves para ese propósito

    
respondido por el user3496510 19.01.2017 - 07:03
fuente
0

Si está utilizando C #, puede usar la clase SecureString bajo la directiva System.Security . Más información en MSDN . Esta API garantiza que los contenidos sean más difíciles, aunque no imposibles de obtener. Este cifrado / ofuscación evitará los volcados de memoria de grep'ing para los patrones SSN / DOB o incluso las contraseñas (es decir, la propia contraseña del atacante para encontrar el área de memoria).

Suponiendo que tiene su cifrado en reposo (DB) resuelto, asegúrese de que la seguridad general de su sistema esté a la altura. Cualquier persona con acceso de superusuario podría leer archivos de memoria / intercambio; que es lo que quieres evitar.

    
respondido por el ndrix 19.01.2017 - 07:04
fuente

Lea otras preguntas en las etiquetas