Compatibilidad con directivas de protección de datos en toda la máquina en ASP.NET Core

Por Rick Anderson

Cuando se ejecuta en Windows, el sistema de protección de datos tiene compatibilidad limitada para establecer una directiva predeterminada de todo el equipo para todas las aplicaciones que consumen ASP.NET Core data protection. La idea general es que un administrador quiera cambiar una configuración predeterminada, como los algoritmos usados o la duración de la clave, sin necesidad de actualizar manualmente todas las aplicaciones del equipo.

Advertencia

El administrador del sistema puede establecer la directiva predeterminada, pero no puede aplicarla. El desarrollador de la aplicación siempre puede invalidar cualquier valor con uno de sus propios valores. La directiva predeterminada solo afecta a las aplicaciones en las que el desarrollador no ha especificado un valor explícito para una configuración.

Establecimiento de la directiva predeterminada

Para establecer la directiva predeterminada, un administrador puede establecer valores conocidos en el Registro del sistema en la siguiente clave del Registro:

HKLM\SOFTWARE\Microsoft\DotNetPackages\Microsoft.AspNetCore.DataProtection

Si está en un sistema operativo de 64 bits y desea afectar al comportamiento de las aplicaciones de 32 bits, no olvide configurar el equivalente Wow6432Node de la clave anterior.

A continuación se muestran los valores admitidos.

Value Tipo Descripción
EncryptionType string Especifica qué algoritmos se deben usar para la protección de datos. El valor debe ser CNG-CBC, CNG-GCM o Administrado y se describe con más detalle a continuación.
DefaultKeyLifetime DWORD Especifica la duración de las claves recién generadas. El valor se especifica en días y debe ser >= 7.
KeyEscrowSinks string Especifica los tipos que se usan para la custodia de claves. El valor es una lista delimitada por punto y coma de receptores de custodia de claves, donde cada elemento de la lista es el nombre calificado por el ensamblado de un tipo que implementa IKeyEscrowSink.

Tipos de cifrado

Si EncryptionType es CNG-CBC, el sistema está configurado para usar un cifrado de bloque simétrico en modo CBC para la confidencialidad y HMAC para la autenticidad con los servicios proporcionados por Windows CNG (consulte Especificación de algoritmos CNG de Windows personalizados para obtener más detalles). Se admiten los siguientes valores adicionales, cada uno de los cuales corresponde a una propiedad en el tipo CngCbcAuthenticatedEncryptionSettings.

Value Tipo Descripción
EncryptionAlgorithm string Nombre de un algoritmo de cifrado de bloque simétrico comprendido por CNG. Este algoritmo se abre en modo CBC.
EncryptionAlgorithmProvider string Nombre de la implementación del proveedor de CNG que puede generar el algoritmo EncryptionAlgorithm.
EncryptionAlgorithmKeySize DWORD Longitud (en bits) de la clave que se derivará para el algoritmo de cifrado de bloque simétrico.
HashAlgorithm string Nombre de un algoritmo hash comprendido por CNG. Este algoritmo se abre en modo HMAC.
HashAlgorithmProvider string Nombre de la implementación del proveedor de CNG que puede generar el algoritmo HashAlgorithm.

Si EncryptionType es CNG-GCM, el sistema está configurado para usar un cifrado de bloque simétrico de modo Galois/Counter para la confidencialidad y la autenticidad con los servicios proporcionados por Windows CNG (consulte Especificación de algoritmos CNG de Windows personalizados para obtener más detalles). Se admiten los siguientes valores adicionales, cada uno de los cuales corresponde a una propiedad en el tipo CngGcmAuthenticatedEncryptionSettings.

Value Tipo Descripción
EncryptionAlgorithm string Nombre de un algoritmo de cifrado de bloque simétrico comprendido por CNG. Este algoritmo se abre en modo Galois/Counter.
EncryptionAlgorithmProvider string Nombre de la implementación del proveedor de CNG que puede generar el algoritmo EncryptionAlgorithm.
EncryptionAlgorithmKeySize DWORD Longitud (en bits) de la clave que se derivará para el algoritmo de cifrado de bloque simétrico.

Si EncryptionType es Administrado, el sistema está configurado para usar un SymmetricAlgorithm administrado para la confidencialidad y KeyedHashAlgorithm para la autenticidad (consulte Especificación de algoritmos administrados personalizados para obtener más detalles). Se admiten los siguientes valores adicionales, cada uno de los cuales corresponde a una propiedad en el tipo ManagedAuthenticatedEncryptionSettings.

Value Tipo Descripción
EncryptionAlgorithmType string Nombre calificado por el ensamblado de un tipo que implementa SymmetricAlgorithm.
EncryptionAlgorithmKeySize DWORD Longitud (en bits) de la clave que se derivará para el algoritmo de cifrado simétrico.
ValidationAlgorithmType string Nombre calificado por el ensamblado de un tipo que implementa KeyedHashAlgorithm.

Si EncryptionType tiene cualquier otro valor distinto de null o vacío, el sistema de protección de datos produce una excepción en el inicio.

Advertencia

Al configurar una configuración de directiva predeterminada que implique nombres de tipo (EncryptionAlgorithmType, ValidationAlgorithmType, KeyEscrowSinks), los tipos deben estar disponibles para la aplicación. Esto significa que, para las aplicaciones que se ejecutan en CLR de escritorio, los ensamblados que contienen estos tipos deben estar presentes en la caché global de ensamblados (GAC). Para ASP.NET Core aplicaciones que se ejecutan en .NET Core, se deben instalar los paquetes que contienen estos tipos.