La interfaz de programación de aplicaciones de protección de datos ( DPAPI ) es una interfaz de programación de aplicaciones criptográficas simple disponible como un componente integrado en Windows 2000 y versiones posteriores de los sistemas operativos Microsoft Windows . En teoría, la API de protección de datos puede permitir el cifrado simétrico de cualquier tipo de datos; en la práctica, su uso principal en el sistema operativo Windows es realizar el cifrado simétrico de claves privadas asimétricas, utilizando un secreto de usuario o sistema como una contribución significativa de entropía. En 2011, Bursztein et al. publicaron un análisis detallado del funcionamiento interno de DPAPI [1] .
Para casi todos los criptosistemas , uno de los desafíos más difíciles es la " gestión de claves ", en parte, cómo almacenar de forma segura la clave de descifrado. Si la clave se almacena en texto sin formato , entonces cualquier usuario que pueda acceder a la clave puede acceder a los datos cifrados. Si la clave se va a cifrar, se necesita otra clave, y así sucesivamente. DPAPI permite a los desarrolladores cifrar claves utilizando una clave simétrica derivada de los secretos de inicio de sesión del usuario o, en el caso del cifrado del sistema, utilizando los secretos de autenticación del dominio del sistema.
Las claves DPAPI que se utilizan para cifrar las claves RSA%APPDATA%\Microsoft\Protect\{SID} del usuario se almacenan en un directorio, donde {SID} es el identificador de seguridad de ese usuario. La clave DPAPI se almacena en el mismo archivo que la clave maestra que protege las claves privadas del usuario. Normalmente son 64 bytes de datos aleatorios.
Propiedades de seguridad
DPAPI no almacena ningún dato persistente para sí mismo; en cambio, simplemente recibe texto simple y devuelve texto cifrado (o viceversa).
La seguridad de DPAPI depende de la capacidad del sistema operativo Windows para proteger la clave maestra y las claves privadas RSA de ser comprometidas, lo que en la mayoría de los escenarios de ataque depende en gran medida de la seguridad de las credenciales del usuario final. La función PBKDF2 deriva una clave de cifrado/descifrado principal de la contraseña del usuario . [2] Los objetos binarios de datos grandes se pueden cifrar de forma que se añada sal y/o se requiera una contraseña externa solicitada por el usuario (también conocida como "Protección de clave fuerte"). El uso de una sal es una opción por implementación, es decir, bajo el control del desarrollador de la aplicación, y no es controlable por el usuario final o el administrador del sistema.
Se puede otorgar acceso delegado a las claves mediante el uso de un objeto COM+ . Esto permite que los servidores web de IIS utilicen DPAPI.
Claves de respaldo de Active Directory
Cuando un equipo es miembro de un dominio, DPAPI cuenta con un mecanismo de respaldo para permitir la desprotección de datos en caso de pérdida de la contraseña del usuario, que se denomina "Credential Roaming". Al instalar un nuevo dominio en un controlador de dominio, se genera un par de claves pública y privada, asociadas a DPAPI. Cuando se genera una clave maestra en una estación de trabajo cliente, el cliente se comunica a través de una llamada RPC autenticada con un controlador de dominio para recuperar una copia de la clave pública del dominio. El cliente encripta la clave maestra con la clave pública del controlador de dominio. Finalmente, almacena esta nueva clave maestra de respaldo en su directorio AppData, al igual que el almacenamiento de claves maestras tradicional.
Uso de DPAPI por parte del software de Microsoft
Si bien no se ha implementado de manera universal en todos los productos de Microsoft, el uso de DPAPI por parte de los productos de Microsoft ha aumentado con cada versión sucesiva de Windows. Sin embargo, muchas aplicaciones de Microsoft y de desarrolladores externos aún prefieren utilizar su propio enfoque de protección o recientemente han comenzado a utilizar DPAPI. Por ejemplo, las versiones 4.0 a 6.0 de Internet Explorer , Outlook Express y MSN Explorer usaban la antigua API Protected Storage (PStore) para almacenar credenciales guardadas, como contraseñas, etc. Internet Explorer 7 ahora protege las credenciales de usuario almacenadas mediante DPAPI. [3]
- Contraseña con imagen, PIN y huella dactilar en Windows 8
- Cifrado del sistema de archivos en Windows 2000 y versiones posteriores
- Cifrado de clave maestra del servicio de cifrado de datos transparente (TDE) de SQL Server [4]
- Internet Explorer 7 , tanto en la versión independiente disponible para Windows XP como en las versiones integradas disponibles en Windows Vista y Windows Server 2008
- Microsoft Edge
- Windows Mail y Windows Live Mail
- Perspectivas para S/MIME
- Servicios de información de Internet para SSL/TLS
- Cliente de Windows Rights Management Services v1.1 y posteriores
- Windows 2000 y versiones posteriores para EAP/TLS ( autenticación VPN ) y 802.1x ( autenticación WiFi )
- Windows XP y versiones posteriores para nombres de usuario y contraseñas almacenados [5] (también conocido como Administrador de credenciales)
- .NET Framework 2.0 y versiones posteriores para System.Security.Cryptography.ProtectedData [6]
- Autenticación Microsoft.Owin (Katana) de forma predeterminada cuando se aloja por cuenta propia (incluida la autenticación mediante cookies y tokens OAuth ) [7] [8]
Referencias
- ^ Bursztein, Elie; Picod, Jean Michel (2010). "Recuperación de secretos de Windows y certificados EFS sin conexión". WoOT 2010. Usenix.
- ^ "Recuperación de contraseña de Windows: análisis de clave maestra DPAPI". Passcape.com . Consultado el 6 de mayo de 2013 .
- ^ Mikhael Felker (8 de diciembre de 2006). "Problemas de administración de contraseñas con IE y Firefox, primera parte". SecurityFocus.com , Symantec.com . Consultado el 28 de marzo de 2010 .
- ^ "Jerarquía de cifrado". Msdn.microsoft.com . Abril de 2012. Consultado el 14 de octubre de 2017 .
- ^ "Novedades en seguridad para Windows XP Professional y Windows XP Home Edition". Technet.microsoft.com . 11 de septiembre de 2009 . Consultado el 14 de octubre de 2017 .
- ^ "Clase ProtectedData (System.Security.Cryptography)". Msdn2.microsoft.com . Consultado el 14 de octubre de 2017 .
- ^ "Propiedad CookieAuthenticationOptions.TicketDataFormat (Microsoft.Owin.Security.Cookies)" . Consultado el 15 de enero de 2015 .
- ^ "Propiedad OAuthAuthorizationServerOptions.AccessTokenFormat (Microsoft.Owin.Security.OAuth)". 27 de octubre de 2015. Consultado el 26 de noviembre de 2018 .
Enlaces externos
- Le fonctionnement de DPAPI par Processus Thief (FR) Archivado el 20 de octubre de 2022 en Wayback Machine.
- Documento técnico sobre la API de protección de datos de Windows (DPAPI) elaborado por NAI Labs
- Cifrado de datos con DPAPI
- Cómo utilizar DPAPI (almacén de usuarios) desde ASP.NET 1.1 con Enterprise Services
- System.Security.Cryptography.ProtectedData en .NET Framework 2.0 y versiones posteriores
- Discusión sobre el uso del protocolo remoto MS BackupKey por parte de DPAPI para proteger los secretos de los usuarios
- La tienda de Windows