Prise en charge de la stratégie au niveau de l’ordinateur de protection des données dans ASP.NET Core

Par Rick Anderson

Lors de l’exécution sur Windows, le système de protection des données offre une prise en charge limitée de la définition d’une stratégie par défaut à l’échelle de l’ordinateur pour toutes les applications qui consomment ASP.NET Core protection des données. L’idée générale est qu’un administrateur peut souhaiter modifier un paramètre par défaut, tel que les algorithmes utilisés ou la durée de vie des clés, sans avoir à mettre à jour manuellement chaque application sur l’ordinateur.

Avertissement

L’administrateur système peut définir une stratégie par défaut, mais il ne peut pas l’appliquer. Le développeur d’application peut toujours remplacer n’importe quelle valeur avec l’une de ses propres choix. La stratégie par défaut affecte uniquement les applications pour lesquelles le développeur n’a pas spécifié de valeur explicite pour un paramètre.

Définition de la stratégie par défaut

Pour définir la stratégie par défaut, un administrateur peut définir des valeurs connues dans le Registre système sous la clé de Registre suivante :

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

Si vous utilisez un système d’exploitation 64 bits et que vous souhaitez affecter le comportement des applications 32 bits, n’oubliez pas de configurer l’équivalent Wow6432Node de la clé ci-dessus.

Les valeurs prises en charge sont indiquées ci-dessous.

Valeur Type Description
EncryptionType string Spécifie les algorithmes à utiliser pour la protection des données. La valeur doit être CNG-CBC, CNG-GCM ou Gérée et est décrite plus en détail ci-dessous.
DefaultKeyLifetime DWORD Spécifie la durée de vie des clés nouvellement générées. La valeur est spécifiée en jours et doit être >= 7.
KeyEscrowSinks string Spécifie les types utilisés pour l’entiercement de clé. La valeur est une liste délimitée par des points-virgules de récepteurs d’entiercement de clé, où chaque élément de la liste est le nom qualifié d’assembly d’un type qui implémente IKeyEscrowSink.

Types de chiffrement

Si EncryptionType est CNG-CBC, le système est configuré pour utiliser un chiffrement de blocs symétriques en mode CBC pour la confidentialité et HMAC pour l’authenticité avec les services fournis par Windows CNG (pour plus d’informations, consultez Spécification d’algorithmes de GNC Windows personnalisés ). Les valeurs supplémentaires suivantes sont prises en charge, chacune correspondant à une propriété sur le type CngCbcAuthenticatedEncryptionSettings.

Valeur Type Description
EncryptionAlgorithm string Nom d’un algorithme de chiffrement de blocs symétriques compris par CNG. Cet algorithme est ouvert en mode CBC.
EncryptionAlgorithmProvider string Nom de l’implémentation du fournisseur CNG qui peut produire l’algorithme EncryptionAlgorithm.
EncryptionAlgorithmKeySize DWORD Longueur (en bits) de la clé à dériver pour l’algorithme de chiffrement de blocs symétriques.
HashAlgorithm string Nom d’un algorithme de hachage compris par CNG. Cet algorithme est ouvert en mode HMAC.
Classe HashAlgorithmProvider string Nom de l’implémentation du fournisseur CNG qui peut produire l’algorithme HashAlgorithm.

Si EncryptionType est CNG-GCM, le système est configuré pour utiliser un chiffrement de blocs symétriques Galois/Counter Mode pour la confidentialité et l’authenticité avec les services fournis par Windows CNG (pour plus d’informations, consultez Spécification d’algorithmes de GNC Windows personnalisés ). Les valeurs supplémentaires suivantes sont prises en charge, chacune correspondant à une propriété sur le type CngGcmAuthenticatedEncryptionSettings.

Valeur Type Description
EncryptionAlgorithm string Nom d’un algorithme de chiffrement de blocs symétriques compris par CNG. Cet algorithme est ouvert en mode Galois/Compteur.
EncryptionAlgorithmProvider string Nom de l’implémentation du fournisseur CNG qui peut produire l’algorithme EncryptionAlgorithm.
EncryptionAlgorithmKeySize DWORD Longueur (en bits) de la clé à dériver pour l’algorithme de chiffrement de blocs symétriques.

Si EncryptionType est géré, le système est configuré pour utiliser un SymmetricAlgorithm managé pour la confidentialité et KeyedHashAlgorithm pour l’authenticité (voir Spécification d’algorithmes managés personnalisés pour plus d’informations). Les valeurs supplémentaires suivantes sont prises en charge, chacune correspondant à une propriété sur le type ManagedAuthenticatedEncryptionSettings.

Valeur Type Description
EncryptionAlgorithmType string Nom qualifié d’assembly d’un type qui implémente SymmetricAlgorithm.
EncryptionAlgorithmKeySize DWORD Longueur (en bits) de la clé à dériver pour l’algorithme de chiffrement symétrique.
ValidationAlgorithmType string Nom qualifié d’assembly d’un type qui implémente KeyedHashAlgorithm.

Si EncryptionType a une autre valeur que null ou vide, le système de protection des données lève une exception au démarrage.

Avertissement

Lors de la configuration d’un paramètre de stratégie par défaut qui implique des noms de types (EncryptionAlgorithmType, ValidationAlgorithmType, KeyEscrowSinks), les types doivent être disponibles pour l’application. Cela signifie que pour les applications s’exécutant sur le CLR de bureau, les assemblys qui contiennent ces types doivent être présents dans le Global Assembly Cache (GAC). Pour ASP.NET Core applications s’exécutant sur .NET Core, les packages qui contiennent ces types doivent être installés.