API de protección de datos
# API de protección de datos

DPAPI (Interfaz de programación de aplicaciones de protección de datos) es una sencilla interfaz de programación de aplicaciones criptográficas 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 un cifrado simétrico de claves privadas asimétricas, utilizando un usuario o sistema secreto como una contribución significativa de entropía. Un análisis detallado del funcionamiento interno de DPAPI fue publicado en 2011 por Bursztein et al.

Para casi todos los criptosistemas, uno de los desafíos más difíciles es la "administración de claves", en parte, cómo almacenar de forma segura la clave de descifrado. Si la clave se almacena en un texto sin formato, 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 de dominio del sistema.

Las claves DPAPI utilizadas para cifrar las claves RSA del usuario se almacenan en el directorio %APPDATA%\Microsoft\Protect\{SID}, 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 de los usuarios. Suele ser 64 bytes de datos aleatorios.

## Propiedades de seguridad

DPAPI no almacena ningún dato persistente por sí mismo; en su lugar, simplemente recibe un texto sin formato y devuelve un texto cifrado (o viceversa).

La seguridad de DPAPI se basa en la capacidad del sistema operativo Windows para proteger la clave maestra y las claves privadas RSA del riesgo, que en la mayoría de los escenarios de ataque depende en gran medida de la seguridad de las credenciales del usuario final. Una clave principal de cifrado/descifrado se deriva de la contraseña del usuario mediante la función PBKDF2. Los objetos binarios grandes de datos particulares se pueden cifrar de manera que se agregue sal y/o se requiera una contraseña externa solicitada por el usuario (también conocida como "Protección de clave segura"). 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.

## Uso de DPAPI por software de Microsoft

Si bien no se implementó universalmente en todos los productos de Microsoft, el uso de DPAPI por los productos de Microsoft ha aumentado con cada versión sucesiva de Windows. Sin embargo, muchas aplicaciones de Microsoft y desarrolladores de terceros todavía prefieren usar su propio enfoque de protección o solo recientemente han cambiado para usar DPAPI. Por ejemplo, las versiones 4.0-6.0 de Internet Explorer, Outlook Express y MSN Explorer utilizaron la API de almacenamiento protegido (PStore) anterior para almacenar las credenciales guardadas, como contraseñas, etc. Internet Explorer 7 ahora protege las credenciales de usuario almacenadas mediante DPAPI.

* Contraseña de imagen, PIN y huella digital en Windows 8
* Cifrar el sistema de archivos (EFS) en Windows 2000 y posterior
* Cifrado de clave maestra del servicio de cifrado transparente de datos (TDE) de SQL Server
* 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
* Windows Mail y Windows Live Mail
* Outlook para S/MIME
* Servicios de Información del internet para SSL/TLS
* Los Servicios de administración de derechos de Active Directory de Windows cliente v1.1 y posteriores
* Windows 2000 y posteriores para EAP/TLS (VPN autentificación) y 802.1x (WiFi autentificación)
* Windows XP y posteriores para nombres de usuario y contraseñas almacenados (aka Credential Director)
* .Marco NETO 2.0 y posterior para System Security Cryptography ProtectedData
* Autentificación de Microsoft.Owin (Katana) de forma predeterminada cuando se realiza un alojamiento propio (incluyendo la autentificación de cookies y tokens OAuth)
