ASP.NET Core のマシン全体に適用されるデータ保護ポリシーのサポート

作成者: Rick Anderson

データ保護システムを Windows 上で実行する場合、ASP.NET Core のデータ保護を使うすべてのアプリに既定のマシン全体のポリシーを設定をするためのサポートは限定的です。 一般的な考え方として、管理者は、マシン上のすべてのアプリを手動で更新することなく、使うアルゴリズムやキーの有効期限などの既定の設定を変更したい場合があります。

警告

システム管理者は、既定のポリシーを設定することはできますが、それを強制することはできません。 アプリ開発者は、いつでも任意の値を選んだ値でオーバーライドすることができます。 既定のポリシーは、開発者が設定に明示的な値を指定していないアプリにのみ影響します。

既定のポリシーの設定

管理者が既定のポリシーを設定するには、システム レジストリの次のレジストリ キー以下に既知の値を設定します。

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

64 ビット オペレーティング システムを使っていて、32 ビット アプリの動作に影響を与えたい場合は、必ず上のキーに相当する Wow6432Node を構成してください。

サポートされている値を次に示します。

種類 説明
EncryptionType string データ保護に使うアルゴリズムを指定します。 この値には、CNG-CBC、CNG-GCM、Managed のいずれかを指定する必要があります。詳細については後述します。
DefaultKeyLifetime DWORD 新しく生成されるキーの有効期間を指定します。 値は日単位で指定し、>=7 にする必要があります。
KeyEscrowSinks string キー エスクローに使われる型を指定します。 この値は、キー エスクロー シンクのセミコロン区切りリストです。リストの各要素は IKeyEscrowSink を実装した型のアセンブリ修飾名です。

暗号化の種類

EncryptionType が CNG-CBC の場合、Windows CNG によって提供されるサービスと共に、機密性のためには CBC モードの対称ブロック暗号を、信頼性のためには HMAC を使うようにシステムが構成されます (詳細については、「カスタム Windows CNG アルゴリズムの指定」を参照してください)。 その他に次の値がサポートされており、それぞれ CngCbcAuthenticatedEncryptionSettings 型のプロパティに対応しています。

種類 説明
[EncryptionAlgorithm] string CNG によって認識される対称ブロック暗号アルゴリズムの名前。 このアルゴリズムは CBC モードで開かれます。
EncryptionAlgorithmProvider string アルゴリズム EncryptionAlgorithm を生成できる CNG プロバイダーの実装の名前。
EncryptionAlgorithmKeySize DWORD 対称ブロック暗号アルゴリズムのために派生させるキーの長さ (ビット単位)。
HashAlgorithm string CNG によって認識されるハッシュ アルゴリズムの名前。 このアルゴリズムは HMAC モードで開かれます。
HashAlgorithmProvider string アルゴリズム HashAlgorithm を生成できる CNG プロバイダーの実装の名前。

EncryptionType が CNG-GCM の場合、Windows CNG によって提供されるサービスと共に、機密性と信頼性のために Galois/Counter モードの対称ブロック暗号を使うようにシステムが構成されます (詳細については、「カスタム Windows CNG アルゴリズムの指定」を参照してください)。 その他に次の値がサポートされており、それぞれ CngGcmAuthenticatedEncryptionSettings 型のプロパティに対応しています。

種類 説明
[EncryptionAlgorithm] string CNG によって認識される対称ブロック暗号アルゴリズムの名前。 このアルゴリズムは Galois/Counter モードで開かれます。
EncryptionAlgorithmProvider string アルゴリズム EncryptionAlgorithm を生成できる CNG プロバイダーの実装の名前。
EncryptionAlgorithmKeySize DWORD 対称ブロック暗号アルゴリズムのために派生させるキーの長さ (ビット単位)。

EncryptionType が Managed の場合、機密性のためにはマネージド SymmetricAlgorithm を、信頼性のためには KeyedHashAlgorithm を使うように構成されます (詳細については、「カスタム マネージド アルゴリズムの指定」を参照してください)。 その他に次の値がサポートされており、それぞれ ManagedAuthenticatedEncryptionSettings 型のプロパティに対応しています。

種類 説明
EncryptionAlgorithmType string SymmetricAlgorithm を実装する型のアセンブリ修飾名。
EncryptionAlgorithmKeySize DWORD 対称暗号化アルゴリズムのために派生させるキーの長さ (ビット単位)。
ValidationAlgorithmType string KeyedHashAlgorithm を実装する型のアセンブリ修飾名。

EncryptionType の値が null または空以外の場合、データ保護システムによって起動時に例外がスローされます。

警告

型名 (EncryptionAlgorithmType、ValidationAlgorithmType、KeyEscrowSinks) を含む既定のポリシー設定を構成する場合は、その型をアプリから使用できる必要があります。 つまり、Desktop CLR 上で動作するアプリの場合、これらの型を含むアセンブリはグローバル アセンブリ キャッシュ (GAC) に存在する必要があります。 また、.NET Core 上で動作する ASP.NET Core アプリの場合、これらの型を含むパッケージがインストールされている必要があります。