Windows administra certificados y claves privadas por separado. Cada certificado puede apuntar a una clave privada; Varios certificados pueden apuntar a la misma clave. Cada uno de estos "punteros" se proporciona como el nombre del proveedor de servicios criptográficos (que contiene moralmente la clave) y el nombre de la clave dentro de ese CSP. Windows no realiza un seguimiento de cuántos certificados apuntan a una clave privada dada, y de hecho esto no está completamente definido (especialmente porque los almacenes de certificados pueden extenderse con DLL personalizados). La consecuencia principal es que cuando elimina un certificado, la clave privada permanece allí.
Las claves privadas pueden ser destruidas, pero esto requiere llamar a la función Win32 CryptAcquireContext () con el indicador CRYPT_DELETEKEYSET
. Alternativamente, puede usar el comando certutil -key
para listar las claves privadas, y certutil -delkey
para eliminarlas. Ninguno de estos comandos se describe en la documentación de Certutil pero puede obtener ayuda con certutil -key -?
y certutil -delkey -?
. En ambos casos, es posible que deba especificar un nombre de CSP explícito con la opción -csp
(use certutil -csplist
para obtener la lista de CSP instalada en su máquina).
De todos modos, la implicación de seguridad es la siguiente: no confíe en la eliminación de la clave privada . Una clave privada es un objeto sensible; debe ser manejado con cuidado. El ciclo de vida normal para una "clave de máquina" se debe generar en la máquina donde se usará, y nunca se debe dejar. Debe hacer que nunca tenga que eliminar una clave privada. La necesidad de eliminar una clave privada generalmente se debe a que las personas generan claves en su sistema de escritorio, para administrar la inscripción de certificados desde la comodidad de su escritorio y luego transferir la clave privada y el certificado al sistema que realmente lo usará. Esta es una mala práctica, ya que puede dejar rastros de la clave privada en el sistema de escritorio.
La eliminación de la clave privada no es muy fácil (como se muestra arriba: programa C personalizado o comando no documentado), e incluso cuando funciona, es realmente una eliminación de archivos, lo que no garantiza que los datos ya no existan; la eliminación de archivos simplemente marca el espacio correspondiente como "libre para reutilizar", pero no lo borra de forma proactiva.