ASP.NET Core의 데이터 보호 머신 수준 정책 지원

작성자: Rick Anderson

Windows에서 실행하는 경우 데이터 보호 시스템은 ASP.NET Core 데이터 보호를 사용하는 모든 앱에 대한 기본 머신 수준 정책 설정을 제한적으로 지원합니다. 일반적으로 관리자는 머신의 모든 앱을 수동으로 업데이트하지 않고도 사용되는 알고리즘 또는 키 수명과 같은 기본 설정을 변경할 수 있습니다.

Warning

시스템 관리자는 기본 정책을 설정할 수 있지만 적용할 수는 없습니다. 앱 개발자는 항상 고유한 선택 중 하나를 사용하여 모든 값을 재정의할 수 있습니다. 기본 정책은 개발자가 설정에 대해 명시적 값을 지정하지 않은 앱에만 영향을 줍니다.

기본 정책 설정

기본 정책을 설정하기 위해 관리자는 시스템 레지스트리에서 다음 레지스트리 키를 통해 알려진 값을 설정할 수 있습니다.

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

64비트 운영 체제를 사용할 때 32비트 앱의 동작에 영향을 주려면 위의 키에 해당하는 Wow6432Node를 구성해야 합니다.

지원되는 값은 다음과 같습니다.

Type 설명
EncryptionType string 데이터 보호에 사용할 알고리즘을 지정합니다. 이 값은 CNG-CBC, CNG-GCM 또는 Managed여야 하며 아래에 자세히 설명되어 있습니다.
DefaultKeyLifetime DWORD 새로 생성된 키의 수명을 지정합니다. 값은 일 단위로 지정되며 >= 7(7 이상)이어야 합니다.
KeyEscrowSinks string 키 에스크로에 사용되는 형식을 지정합니다. 값은 세미콜론으로 구분된 키 에스크로 싱크 목록입니다. 여기서 목록의 각 요소는 구현하는 형식의 어셈블리 정규화된 이름입니다 IKeyEscrowSink.

암호화 유형

EncryptionType이 CNG-CBC인 경우 시스템은 Windows CNG에서 제공하는 서비스를 사용하여 기밀성을 위해 CBC 모드 대칭 블록 암호를, 신뢰성을 위해 HMAC를 사용하도록 구성됩니다(자세한 내용은 사용자 지정 Windows CNG 알고리즘 지정 참조). CngCbcAuthenticatedEncryptionSettings 형식의 속성에 해당하는 다음과 같은 추가 값이 지원됩니다.

Type 설명
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 형식의 속성에 해당하는 다음과 같은 추가 값이 지원됩니다.

Type 설명
EncryptionAlgorithm string CNG에서 인식하는 대칭 블록 암호 알고리즘의 이름입니다. 이 알고리즘은 Galois/Counter 모드에서 열립니다.
EncryptionAlgorithmProvider string 알고리즘 EncryptionAlgorithm을 생성할 수 있는 CNG 공급자 구현의 이름입니다.
EncryptionAlgorithmKeySize DWORD 대칭 블록 암호 알고리즘에 대해 파생할 키의 길이(비트)입니다.

EncryptionType이 Managed인 경우 시스템은 기밀성을 위해 관리 SymmetricAlgorithm을, 신뢰성을 위해 KeyedHashAlgorithm을 사용하도록 구성됩니다(자세한 내용은 사용자 지정 관리 알고리즘 지정 참조). ManagedAuthenticatedEncryptionSettings 형식의 속성에 해당하는 다음과 같은 추가 값이 지원됩니다.

Type 설명
EncryptionAlgorithmType string SymmetricAlgorithm을 구현하는 형식의 정규화된 어셈블리 이름입니다.
EncryptionAlgorithmKeySize DWORD 대칭 암호화 알고리즘에 대해 파생할 키의 길이(비트)입니다.
ValidationAlgorithmType string KeyedHashAlgorithm을 구현하는 형식의 정규화된 어셈블리 이름입니다.

EncryptionType에 Null이 아닌 다른 값이 있거나 비어 있는 경우 데이터 보호 시스템은 시작할 때 예외를 throw합니다.

Warning

형식 이름(EncryptionAlgorithmType, ValidationAlgorithmType, KeyEscrowSinks)을 포함하는 기본 정책 설정을 구성하는 경우 앱에서 해당 형식을 사용할 수 있어야 합니다. 즉, 데스크톱 CLR에서 실행되는 앱의 경우 이러한 형식을 포함하는 어셈블리는 GAC(전역 어셈블리 캐시)에 있어야 합니다. .NET Core에서 실행되는 ASP.NET Core 앱의 경우 이러한 형식을 포함하는 패키지를 설치해야 합니다.