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.