ASP.NET Core 对数据保护的计算机范围策略支持

作者:Rick Anderson

在 Windows 上运行时,数据保护系统对以下操作提供有限支持:为使用 ASP.NET Core 数据保护的所有应用设置默认计算机范围策略。 一般的想法是,管理员可能希望更改默认设置,例如所用算法或密钥生存期,而不需要手动更新计算机上的每个应用。

警告

系统管理员可以设置默认策略,但不能强制执行。 应用开发人员始终可以使用自己选择的值来替代任何值。 默认策略仅影响开发人员尚未为设置指定显式值的应用。

设置默认策略

若要设置默认策略,管理员可以在系统注册表中的以下注册表项下设置已知值:

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

如果你使用的是 64 位操作系统并希望影响 32 位应用的行为,请记住配置与上述注册表项等效的 Wow6432Node。

支持的值如下所示。

类型 说明
EncryptionType 字符串 指定应使用哪些算法进行数据保护。 该值必须为 CNG-CBC、CNG-GCM 或 Managed,下面将详细说明。
DefaultKeyLifetime DWORD 指定新生成的密钥的生存期。 该值以天为单位指定,并且必须 >= 7。
KeyEscrowSinks 字符串 指定用于密钥托管的类型。 该值是以分号分隔的密钥托管接收器列表,列表中的每个元素都是实现 IKeyEscrowSink 的类型的程序集限定名称。

加密类型

如果 EncryptionType 为 CNG-CBC,则系统配置为使用 CBC 模式对称分组加密来保证机密性,并使用 HMAC 来保证 Windows CNG 提供的服务的真实性(有关更多详细信息,请参阅指定自定义 Windows CNG 算法)。 支持以下附加值,其中每个值对应于 CngCbcAuthenticatedEncryptionSettings 类型上的一个属性。

类型 说明
EncryptionAlgorithm 字符串 CNG 理解的对称分组加密算法的名称。 此算法在 CBC 模式下打开。
EncryptionAlgorithmProvider 字符串 可以生成 EncryptionAlgorithm 算法的 CNG 提供程序实现的名称。
EncryptionAlgorithmKeySize DWORD 要为对称分组加密算法派生的密钥的长度(以位为单位)。
HashAlgorithm 字符串 CNG 理解的哈希算法的名称。 此算法在 HMAC 模式下打开。
HashAlgorithmProvider 字符串 可以生成 HashAlgorithm 算法的 CNG 提供程序实现的名称。

如果 EncryptionType 为 CNG-GCM,则系统配置为使用 Galois/Counter Mode 对称分组加密来保证 Windows CNG 提供的服务的机密性和真实性(有关更多详细信息,请参阅指定自定义 Windows CNG 算法)。 支持以下附加值,其中每个值对应于 CngGcmAuthenticatedEncryptionSettings 类型上的一个属性。

类型 说明
EncryptionAlgorithm 字符串 CNG 理解的对称分组加密算法的名称。 此算法在 Galois/Counter Mode 下打开。
EncryptionAlgorithmProvider 字符串 可以生成 EncryptionAlgorithm 算法的 CNG 提供程序实现的名称。
EncryptionAlgorithmKeySize DWORD 要为对称分组加密算法派生的密钥的长度(以位为单位)。

如果 EncryptionType 为 Managed,则系统配置为使用托管 SymmetricAlgorithm 来保证机密性,并使用 KeyedHashAlgorithm 来保证真实性(有关更多详细信息,请参阅指定自定义托管算法)。 支持以下附加值,其中每个值对应于 ManagedAuthenticatedEncryptionSettings 类型上的一个属性。

类型 说明
EncryptionAlgorithmType 字符串 实现 SymmetricAlgorithm 的类型的程序集限定名称。
EncryptionAlgorithmKeySize DWORD 要为对称加密算法派生的密钥的长度(以位为单位)。
ValidationAlgorithmType 字符串 实现 KeyedHashAlgorithm 的类型的程序集限定名称。

如果 EncryptionType 具有除 null 或空值之外的任何其他值,数据保护系统将在启动时引发异常。

警告

配置涉及类型名称(EncryptionAlgorithmType、ValidationAlgorithmType、KeyEscrowSinks)的默认策略设置时,这些类型必须可供应用使用。 这意味着,对于在桌面 CLR 上运行的应用,包含这些类型的程序集应存在于全局程序集缓存 (GAC) 中。 对于在 .NET Core 上运行的 ASP.NET Core 应用,应安装包含这些类型的包。