Compatibilidad con directivas para toda la máquina de Protección de datos 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 para toda la máquina para todas las aplicaciones que consumen ASP.NET Core Protección de datos. La idea general es que un administrador podría querer 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 aplicaciones siempre puede invalidar cualquier valor con una de sus propias opciones. 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:

HKLMSOFTWARE\Microsoft\DotNetPackages\Microsoft.AspNetCore.DataProtection

Si está en un sistema operativo de 64 bits y quiere afectar al comportamiento de las aplicaciones de 32 bits, recuerde configurar el equivalente wow6432Node de la clave anterior.

Los valores admitidos se muestran a continuación.

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 completo del 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 CNG de Windows (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 del tipo CngCbcAuthenticatedEncryptionSettings.

Value Tipo Descripción
EncryptionAlgorithm string Nombre de un algoritmo de cifrado de bloques 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 va a derivar para el algoritmo de cifrado de bloques 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 Galois/Counter Mode 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 del tipo CngGcmAuthenticatedEncryptionSettings.

Valor Tipo Descripción
EncryptionAlgorithm string Nombre de un algoritmo de cifrado de bloques simétrico comprendido por CNG. Este algoritmo se abre en el 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 va a derivar para el algoritmo de cifrado de bloques 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.

Valor Tipo Descripción
EncryptionAlgorithmType string Nombre completo del ensamblado de un tipo que implementa SymmetricAlgorithm.
EncryptionAlgorithmKeySize DWORD Longitud (en bits) de la clave que se va a derivar para el algoritmo de cifrado simétrico.
ValidationAlgorithmType string Nombre completo del 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 al 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.