simple example encrypt decrypt crypto code and c# .net encryption

example - simple encryption c#



¿Qué tan seguro es ProtectedData.Protect(DPAPI)? (3)

Vea este artículo sobre Seguridad DPAPI . Básicamente, es tan seguro como su contraseña de Windows: si un administrador reinicia su contraseña, la clave de descifrado se perderá. Los principales vectores de ataque que deberás mirar son:

  • Divulgación de contraseña: "hombro navegando", notas adhesivas, etc.
  • Captura de la base de datos de cuentas de la computadora y el uso de un cracker de contraseñas
  • Ataque en línea mediante "descarga directa", medios extraíbles Reproducción automática, etc.
  • Captura de un disco de restablecimiento de contraseña, si ha creado uno
  • Instalación física de un dispositivo de registro de claves u otro "error"

Supongamos que alguien tiene acceso a todo mi disco duro, creo que el punto débil sería mi contraseña de Windows. Sin saber / ser capaz de recuperar eso, los datos deberían ser bastante seguros, ¿no es así?

Pregunto específicamente por la entrada de EFS en wikipedia que dice que

En Windows 2000, el administrador local es el agente de recuperación de datos predeterminado, capaz de descifrar todos los archivos cifrados con EFS por cualquier usuario local.

y EFS pasa a usar DPAPI. Entonces lo mismo se aplica a mis propios datos protegidos usando esto:

ProtectedData.Protect(plain, null, DataProtectionScope.CurrentUser);

Y si ese es realmente el caso, ¿cómo podría prevenirlo?

[Editar] NB Estoy tratando de almacenar credenciales para una aplicación de winforms para que el usuario no tenga que ingresar su contraseña cada vez que inicie sesión. En otras palabras, si alguien puede iniciar sesión como ese usuario (es decir, conocer la contraseña del usuario), entonces también podría leer los datos encriptados.

Lo cual, al no proceder de un fondo de Windows, ahora me pregunto, ¿no puede el administrador local iniciar sesión como cualquier usuario local de todos modos? En ese caso, no debería preocuparme que el administrador pueda recuperar las contraseñas de todos modos ...

[Editar2] Como revela Google, parece que un administrador no puede simplemente iniciar sesión como cualquier usuario sin restablecer / cambiar su contraseña primero. Entonces mi pregunta todavía parece relevante ...


DPAPI se puede usar con y sin entropía opcional. Solo hay dos formas en que los blobs de DPAPI sin entropía opcional pueden verse comprometidos:

  1. Un administrador de dominio puede recuperar directamente el historial de cualquiera de las claves maestras DPAPI en cualquier momento. No se requiere nada más. Estos pueden usarse para descifrar todos los blobs. Los administradores locales no pueden hacer esto.

  2. Las credenciales de Windows del usuario están comprometidas.

Si usa entropía opcional, los datos no pueden ser descifrados por ninguna persona que no conozca el valor. La entropía puede derivarse de una contraseña requerida para iniciar la aplicación, etc. Sin el valor, los datos se pierden para siempre.

EFS funciona de manera diferente. La clave del usuario está protegida mediante DPAPI para su perfil, pero la clave de descifrado del archivo también se codifica directamente con la clave pública del administrador. Por lo tanto, un administrador de dominio puede acceder a los archivos.


EFS usa DPAPI, no al revés. Y el Administrador no puede leer su clave simplemente así.

Antes de olvidarme de DPAPI, consideraría las alternativas. Si encriptas el archivo tú mismo,

  1. Debe seleccionar un algoritmo fuerte e implementarlo bien.
  2. Necesitarás una clave. Donde estará ?
  3. Almacenará la clave en un archivo en algún lugar de su disco.
  4. Esa clave es sensible, obviamente, querrás encriptarla
  5. Ir a 1

DPAPI hace 1 a 3 bien. 4 y 5 son discutibles. Si una contraseña de Windows no es suficiente para proteger los datos, pregúntese por qué es suficiente para CRUD esos datos en primer lugar.

Para mayor seguridad, puede considerar no guardar los datos, sino un hash (salado), si es posible. Sin embargo, hace que tus datos sean solo de escritura. Por ejemplo, si quiere verificar un número de licencia de cliente:

  • Guarde un valor hash salado de él
  • Ejecute el mismo hash en el número de licencia salado que desea verificar,
  • Compara los dos. Si coinciden, la licencia es válida.

Si debe volver a leer los datos cifrados y una clave encriptada localmente no es suficiente, considere encriptar su clave de aplicación (paso 2 anterior) con una clave privada almacenada en una tarjeta inteligente.

De cualquier manera, recuerda que las cosas pasan. Siempre necesita una clave de respaldo en alguna parte.