2009-03-17 10 views
6

Necesito guardar el nombre/contraseña de mis usuarios en algún lugar (preferiblemente el Registro) para que mi aplicación .Net pueda usarlos para iniciar sesión en algún servicio remoto en nombre del usuario. Sé que es posible almacenar valores en el registro como "secretos", lo que significa que están encriptados con el token de usuario de dominio de Windows o algo así. En otras palabras, no quiero tener que lidiar con la encriptación yo mismo.Mantener contraseñas en el registro como "secretos"

Para aclarar: No puedo almacenar hashes de la contraseña ni saltearlos ni nada. Estas credenciales son para un sistema de terceros y la forma única para que pueda iniciar sesión en este sistema en nombre de mis usuarios es de alguna manera conservar sus credenciales y poder restaurarlas.

De todos modos, recuerdo vagamente que hay tal lugar en el registro, pero los detalles son turbios. Y necesito hacerlo en C# (aunque si se trata de un simple acceso de registro, no debería importar).

Editar: Una cosa más, se debe persistir entre las sesiones de usuario de Windows (OIA que no me ayuda si la contraseña en ilegible después de que el usuario cierra la sesión en adelante).

+0

@Assaf - sí, la funcionalidad de cifrado es una parte de Windows, y los elementos se conservan entre sesiones de usuario. – overslacked

Respuesta

10

Probablemente esté pensando en la API de protección de datos. Busque MSDN o read some blogs y vea si eso funciona para usted.

+0

Sí, buena captura! DPAPI parece ser de lo que está hablando el OP. – Cerebrus

+0

¿Sería el cifrado persistente en las sesiones de los usuarios? (es decir, si el usuario cierra la sesión y la vuelve a encender o si pasa el tiempo suficiente, ¿los datos seguirán siendo legibles)? –

5

Puede intentar usar System.Security.Cryptography.ProtectedData, que puede encriptar utilizando una clave por usuario. http://msdn.microsoft.com/en-us/library/system.security.cryptography.protecteddata.aspx.

No es completamente seguro, ya que el código que se ejecuta como usuario puede descifrar los datos.

+0

¿Sería el cifrado persistente en las sesiones de los usuarios? (es decir, si el usuario cierra la sesión y la vuelve a encender o si pasa el tiempo suficiente, los datos seguirán siendo legibles) –

+0

Sí, es una clave de cifrado por usuario. – Michael

0
  • Nunca debe almacenar las credenciales como texto sin formato. Use un cifrado de clave simétrica. Elimine la contraseña en tiempo de ejecución. Consulte el MSDN reference sobre funciones de criptografía.
+0

¿A qué te refieres con quitar la contraseña en tiempo de ejecución? Si uso una clave simétrica, cualquiera que examine el binario puede sacarla. –

+0

Fudge el binario. Usa hashes múltiples. Sacar la contraseña significará descifrado. Esto es mucho, mucho mejor que la contraseña de texto sin formato cualquier día. – dirkgently

+0

@dirkgently Eso es genial, pero, ¿dónde almacena la clave simétrica? En el registro? En un archivo? ¿Cómo es eso más seguro? – Dan

1

Tenga en cuenta que no está almacenando de forma segura nada si puede recuperar automáticamente la contraseña (sin intervención del usuario). El uso de encriptación RSA, simétrica u otra no hace una diferencia siempre que almacene la clave de decodificación dentro de su aplicación. Una vez que alguien obtiene la clave, el secreto está fuera.

Sin embargo, la API de protección de datos mencionada anteriormente debe proteger las contraseñas de otros usuarios en la misma máquina. (Es sounds like DPAPI utiliza sus credenciales de inicio de sesión para el cifrado.)

Para obtener más opciones, consulte la página msdn para Threat Mitigation.

Cuestiones relacionadas