La interfaz de protección de datos
El otro mecanismo de Windows: cifrar cualquier cantidad de datos con una clave que el sistema deriva de la cuenta del usuario. Qué resuelve, sus dos ámbitos, y la entropía adicional que casi nadie usa.
Qué hace
Dos funciones simétricas. Le das bytes y te devuelve bytes cifrados; le devuelves los cifrados y te da los originales — si eres el mismo usuario en la misma máquina.
// cifrar unos bytes con la protección del sistemalet protegido = dpapi::proteger(datos, Some(entropia))?;std::fs::write(ruta, &protegido)?; // esto ya se puede dejar en el disco// y descifrarlos: solo funciona con la misma cuenta, en la misma máquinalet datos = dpapi::desproteger(&std::fs::read(ruta)?, Some(entropia))?;La clave la gestiona el sistema, derivada del material de la cuenta del usuario, y nunca la ves. Ése es el punto: cierra el círculo del nivel 34.2 —el problema de la clave raíz— porque la raíz la custodia el sistema operativo, atada al inicio de sesión.
Y no tiene límite práctico de tamaño, a diferencia del almacén de credenciales.
Los dos ámbitos
Para una aplicación de escritorio, ámbito de usuario y punto. El de máquina existe para servicios del sistema y elegirlo por inercia es un fallo silencioso: todo funciona igual y el dato queda legible para cualquier cosa en esa máquina.
La entropía adicional
El parámetro que casi nadie usa y que merece la pena: además de los datos, se puede pasar unos bytes extra que también harán falta para descifrar.
No es una clave secreta —irá en tu binario, y el nivel 34.4 ya explicó lo que eso vale— y sirve para otra cosa: hace que los datos cifrados por tu aplicación no los pueda descifrar otro programa del mismo usuario simplemente llamando a la función.
Aun así, ponerla es correcto: sin ella, el fichero cifrado que dejas en el disco lo descifra cualquier programa del usuario con dos líneas de código, sin saber nada de tu aplicación. Con ella, hace falta al menos molestarse en mirar tu binario. Es exactamente el escalón que el nivel 34.2 llamaba «mal y peor no es lo mismo», usado a conciencia y sin llamarlo seguridad.
Combinarlo con el almacén
El patrón completo de Windows, que es el del árbol del nivel 34.5 con nombres concretos:
- Secreto pequeño —un testigo— al almacén de credenciales. Simple, visible para el usuario en su administrador, y con su límite de tamaño.
- Datos grandes —una base de datos, un fichero de estado— cifrados con la protección del sistema, con ámbito de usuario y entropía. La clave no existe como objeto tuyo: la gestiona Windows.
- Y una tercera vía, cuando quieres cifrar tú con una clave concreta —porque el mismo formato debe funcionar en los tres sistemas—: generas la clave, la ciframos o la guardas en el almacén de credenciales, y ciframos el fichero con ella. Es más código y es lo que hace una librería multiplataforma, precisamente porque la protección del sistema es de Windows y no tiene equivalente en los otros dos.