데이터 보호를 구성합니다.Configuring data protection

<a name=data-protection-configuring>

데이터 보호 시스템 초기화 될 때 일부 적용 기본 설정 운영 환경에 따라 합니다.When the data protection system is initialized it applies some default settings based on the operational environment. 이 설정은 일반적으로 단일 컴퓨터에서 실행 중인 응용 프로그램에 유용 합니다.These settings are generally good for applications running on a single machine. 개발자는 이러한 변경 해야 할 수는 있는 경우에 따라 (아마도 규정 준수 상의 이유로 또는 여러 컴퓨터 간에 분산 되는 응용 프로그램 때문에), 이러한 시나리오에 대 한 데이터 보호 시스템 풍부한 구성 API를 제공 합니다.There are some cases where a developer may want to change these (perhaps because their application is spread across multiple machines or for compliance reasons), and for these scenarios the data protection system offers a rich configuration API.

<a name=data-protection-configuration-callback>

확장 메서드가 AddDataProtection는 IDataProtectionBuilder 반환 하는 확장 메서드를 함께 결합할 수 옵션을 다양 한 데이터 보호를 구성 하려면 논리 노출 합니다.There is an extension method AddDataProtection which returns an IDataProtectionBuilder which itself exposes extension methods that you can chain together to configure various data protection options. 예를 들어 % LOCALAPPDATA % (기본값) 대신 UNC 공유에서 키를 저장 하려면 시스템이 다음과 같이 구성.For instance, to store keys at a UNC share instead of %LOCALAPPDATA% (the default), configure the system as follows:

public void ConfigureServices(IServiceCollection services)
{
    services.AddDataProtection()
        .PersistKeysToFileSystem(new DirectoryInfo(@"\\server\share\directory\"));
}
경고

지 속성 키 위치를 변경 하면 시스템 더 이상 자동으로 암호화 키 미사용 DPAPI는 적절 한 암호화 메커니즘 인지 알 수 없기 때문.If you change the key persistence location, the system will no longer automatically encrypt keys at rest since it doesn't know whether DPAPI is an appropriate encryption mechanism.

<a name=configuring-x509-certificate>

시스템을 미사용 키는 ProtectKeysWith 중 하나를 호출 하 여 보호를 구성할 수 있습니다* 구성 Api입니다.You can configure the system to protect keys at rest by calling any of the ProtectKeysWith* configuration APIs. 아래 예제에서는 UNC 공유에서 키를 저장 하 고 저장 된 상태의 특정 X.509 인증서와 해당 키를 암호화 하는 것이 좋습니다.Consider the example below, which stores keys at a UNC share and encrypts those keys at rest with a specific X.509 certificate.

public void ConfigureServices(IServiceCollection services)
{
    services.AddDataProtection()
        .PersistKeysToFileSystem(new DirectoryInfo(@"\\server\share\directory\"))
        .ProtectKeysWithCertificate("thumbprint");
}

참조 미사용 데이터 암호화 키 추가 예제 및 기본 제공 키 암호화 메커니즘에 대 한 토론 합니다.See key encryption at rest for more examples and for discussion on the built-in key encryption mechanisms.

14 일의 기본 키 수명 90 일 대신 사용 하도록 시스템을 구성 하려면 다음 예제를 참조 하세요.To configure the system to use a default key lifetime of 14 days instead of 90 days, consider the following example:

public void ConfigureServices(IServiceCollection services)
{
    services.AddDataProtection()
        .SetDefaultKeyLifetime(TimeSpan.FromDays(14));
}

기본적으로 데이터 보호 시스템에서는 다른 응용 프로그램이 동일한 물리적 키 저장소를 공유 하는 경우에 합니다.By default the data protection system isolates applications from one another, even if they're sharing the same physical key repository. 이렇게 하면 다른 사용자의 보호 된 페이로드를 이해 하는에서 응용 프로그램을 않습니다.This prevents the applications from understanding each other's protected payloads. 두 개의 서로 다른 응용 프로그램 간에 보호 된 페이로드를 공유 하려면 두 응용 프로그램에서 같이 동일한 응용 프로그램 이름을 전달 하는 시스템 구성의 아래 예제:To share protected payloads between two different applications, configure the system passing in the same application name for both applications as in the below example:

<a name=data-protection-code-sample-application-name>

public void ConfigureServices(IServiceCollection services)
{
    services.AddDataProtection()
        .SetApplicationName("my application");
}

<a name=data-protection-configuring-disable-automatic-key-generation>

마지막으로, 여기서 원하지 않는 만료 거의 도달 하면 자동으로 키를 롤백하기 위해 응용 프로그램 시나리오를 할 수 있습니다.Finally, you may have a scenario where you do not want an application to automatically roll keys as they approach expiration. 이러한 예로 여기서 기본 응용 프로그램은 키 관리 문제를 담당 하 고 키 링의 읽기 전용 보기를 단순히 포함 하는 모든 보조 응용 프로그램 기본 / 보조 관계를 설정 하는 응용 프로그램을 수 있습니다.One example of this might be applications set up in a primary / secondary relationship, where only the primary application is responsible for key management concerns, and all secondary applications simply have a read-only view of the key ring. 아래와 같이 시스템을 구성 하 여 키 링 읽기 전용으로 처리 하도록 보조 응용 프로그램을 구성할 수 있습니다.The secondary applications can be configured to treat the key ring as read-only by configuring the system as below:

public void ConfigureServices(IServiceCollection services)
{
    services.AddDataProtection()
        .DisableAutomaticKeyGeneration();
}

<a name=data-protection-configuration-per-app-isolation>

응용 프로그램 격리Per-application isolation

데이터 보호 시스템 ASP.NET Core 호스트에 의해 제공 되 면 해당 응용 프로그램이 동일한 작업자 프로세스 계정에서 실행 되 고 동일한 마스터 키 자료를 사용 하는 경우에 응용 프로그램을 서로 격리 자동으로 됩니다.When the data protection system is provided by an ASP.NET Core host, it will automatically isolate applications from one another, even if those applications are running under the same worker process account and are using the same master keying material. 이 비슷합니다는 IsolateApps 한정자 System.Web의에서 요소입니다.This is somewhat similar to the IsolateApps modifier from System.Web's element.

고유한 테 넌 트로 로컬 컴퓨터에서 각 응용 프로그램을 고려 하 여 격리 메커니즘 작동 하므로 자동으로 지정된 된 응용 프로그램에 대 한 루트 IDataProtector ID를 포함 응용 프로그램 판별자로 합니다.The isolation mechanism works by considering each application on the local machine as a unique tenant, thus the IDataProtector rooted for any given application automatically includes the application ID as a discriminator. 응용 프로그램의 고유 ID 두 위치 중 하나에서 제공 됩니다.The application's unique ID comes from one of two places.

  1. 응용 프로그램을 IIS에서 호스트 하는 경우 고유 식별자는 응용 프로그램의 구성 경로입니다.If the application is hosted in IIS, the unique identifier is the application's configuration path. 팜 환경에 응용 프로그램을 배포한 경우 팜의 모든 컴퓨터에 IIS 환경 비슷하게 구성 있다고 가정할 경우이 값을 안정적 이어야 합니다.If an application is deployed in a farm environment, this value should be stable assuming that the IIS environments are configured similarly across all machines in the farm.

  2. 응용 프로그램은 IIS에서 호스트 되지 않는, 고유 식별자는 응용 프로그램의 실제 경로입니다.If the application is not hosted in IIS, the unique identifier is the physical path of the application.

고유 식별자는 다시 설정-개별 응용 프로그램 및 컴퓨터 자체의 유지 되도록 설계 되었습니다.The unique identifier is designed to survive resets - both of the individual application and of the machine itself.

이 격리 메커니즘에서는 응용 프로그램은 악성이 아닌지 가정 합니다.This isolation mechanism assumes that the applications are not malicious. 악성 응용 프로그램 같은 작업자 프로세스 계정에서 실행 중인 다른 응용 프로그램에 항상 영향을 줄 수 있습니다.A malicious application can always impact any other application running under the same worker process account. 응용 프로그램 상호 신뢰할 수 없는 공유 호스팅 환경에서 호스팅 공급자는 여러 응용 프로그램에서 분리 응용 프로그램의 기본 키 저장소를 포함 하 여 운영 체제 수준 격리를 보장 하는 단계를 수행 해야 합니다.In a shared hosting environment where applications are mutually untrusted, the hosting provider should take steps to ensure OS-level isolation between applications, including separating the applications' underlying key repositories.

데이터 보호 시스템 (예: 경우 개발자 인스턴스화하지 자신 DataProtectionProvider 구체적인 형식을 통해) ASP.NET Core 호스트에서 제공 하지 않는, 응용 프로그램 격리 기본적으로 비활성화 되 고 동일한 키 지정에서 지 원하는 모든 응용 프로그램 자료 적절 한 목적으로 제공으로 페이로드를 공유할 수 있습니다.If the data protection system is not provided by an ASP.NET Core host (e.g., if the developer instantiates it himself via the DataProtectionProvider concrete type), application isolation is disabled by default, and all applications backed by the same keying material can share payloads as long as they provide the appropriate purposes. 이 환경에서 응용 프로그램 격리를 제공 하려면 구성 개체에서 SetApplicationName 메서드를 호출, 참조는 코드 샘플 위에 있습니다.To provide application isolation in this environment, call the SetApplicationName method on the configuration object, see the code sample above.

<a name=data-protection-changing-algorithms>

알고리즘 변경Changing algorithms

데이터 보호 스택의 새로 생성 된 키로 사용 되는 기본 알고리즘을 변경 하는 허용 합니다.The data protection stack allows changing the default algorithm used by newly-generated keys. 이 작업을 수행 하는 가장 간단한 방법은에서 같이 구성 콜백에서 UseCryptographicAlgorithms를 호출 하는 것은 아래 예제입니다.The simplest way to do this is to call UseCryptographicAlgorithms from the configuration callback, as in the below example.

services.AddDataProtection()
    .UseCryptographicAlgorithms(new AuthenticatedEncryptorConfiguration()
    {
        EncryptionAlgorithm = EncryptionAlgorithm.AES_256_CBC,
        ValidationAlgorithm = ValidationAlgorithm.HMACSHA256
    });

기본 EncryptionAlgorithm 및 ValidationAlgorithm은 AES-256-CBC 및 HMACSHA256, 각각입니다.The default EncryptionAlgorithm and ValidationAlgorithm are AES-256-CBC and HMACSHA256, respectively. 기본 정책을 통해 시스템 관리자가 설정할 수 있습니다 컴퓨터 넓은 정책, 하지만 UseCryptographicAlgorithms 하기 위해 명시적 호출이 기본 정책을 재정의 합니다.The default policy can be set by a system administrator via Machine Wide Policy, but an explicit call to UseCryptographicAlgorithms will override the default policy.

UseCryptographicAlgorithms 호출을 사용 하면 미리 정의 된 기본 제공 목록), (에서 원하는 알고리즘을 지정 하려면 개발자 및 개발자는 알고리즘의 구현에 걱정할 필요가 없습니다.Calling UseCryptographicAlgorithms will allow the developer to specify the desired algorithm (from a predefined built-in list), and the developer does not need to worry about the implementation of the algorithm. 예를 들어, 데이터 보호 시스템 위의 시나리오에서 사용 하도록 시도할 AES의 CNG 구현을 Windows에서 실행 되는 경우, 그렇지 않으면 대체 됩니다 관리 되는 System.Security.Cryptography.Aes 클래스에 있습니다.For instance, in the scenario above the data protection system will attempt to use the CNG implementation of AES if running on Windows, otherwise it will fall back to the managed System.Security.Cryptography.Aes class.

에 표시 된 대로 UseCustomCryptographicAlgorithms에 대 한 호출을 통해 원하는 경우 개발자 구현을 직접 지정할 수는 아래 예제입니다.The developer can manually specify an implementation if desired via a call to UseCustomCryptographicAlgorithms, as show in the below examples.

알고리즘 변경 키 링의 기존 키 영향을 주지 않습니다.Changing algorithms does not affect existing keys in the key ring. 새로 생성 된 키를만 영향을 줍니다.It only affects newly-generated keys.

<a name=data-protection-changing-algorithms-custom-managed>

관리 되는 사용자 지정 알고리즘을 지정Specifying custom managed algorithms

관리 되는 사용자 지정 알고리즘을 지정 하려면 구현 형식을 가리키는 ManagedAuthenticatedEncryptorConfiguration 인스턴스를 만듭니다.To specify custom managed algorithms, create a ManagedAuthenticatedEncryptorConfiguration instance that points to the implementation types.

serviceCollection.AddDataProtection()
    .UseCustomCryptographicAlgorithms(new ManagedAuthenticatedEncryptorConfiguration()
    {
        // a type that subclasses SymmetricAlgorithm
        EncryptionAlgorithmType = typeof(Aes),

        // specified in bits
        EncryptionAlgorithmKeySize = 256,

        // a type that subclasses KeyedHashAlgorithm
        ValidationAlgorithmType = typeof(HMACSHA256)
    });

일반적으로 *형식 속성 콘크리트를 가리켜야 SymmetricAlgorithm 및 KeyedHashAlgorithm을 구현의 (공용 매개 변수가 없는 생성자)를 통해 인스턴스화할 수 있는 경우에 시스템 특수 한 경우와 같은 일부 값 typeof(Aes) 편의 위해 .Generally the *Type properties must point to concrete, instantiable (via a public parameterless ctor) implementations of SymmetricAlgorithm and KeyedHashAlgorithm, though the system special-cases some values like typeof(Aes) for convenience.

참고

≥ 128 비트의 키 길이 및 ≥ 64 비트의 블록 크기는 SymmetricAlgorithm 있어야 하 고 PKCS #7 안쪽 여백 사용 하 여 CBC 모드 암호화를 지원 해야 합니다.The SymmetricAlgorithm must have a key length of ≥ 128 bits and a block size of ≥ 64 bits, and it must support CBC-mode encryption with PKCS #7 padding. KeyedHashAlgorithm 다이제스트 크기인 있어야 합니다. > = 128 비트 키 길이 해시 알고리즘의 다이제스트 길이 지원 해야 하 고 있습니다.The KeyedHashAlgorithm must have a digest size of >= 128 bits, and it must support keys of length equal to the hash algorithm's digest length. KeyedHashAlgorithm HMAC를 엄격 하 게 필요 하지 않습니다.The KeyedHashAlgorithm is not strictly required to be HMAC.

<a name=data-protection-changing-algorithms-cng>

사용자 지정 Windows CNG 알고리즘 지정Specifying custom Windows CNG algorithms

CBC 모드 암호화 + HMAC 유효성 검사를 사용 하 여 사용자 지정 Windows CNG 알고리즘을 지정 하려면 알고리즘 정보를 포함 하는 CngCbcAuthenticatedEncryptorConfiguration 인스턴스를 만듭니다.To specify a custom Windows CNG algorithm using CBC-mode encryption + HMAC validation, create a CngCbcAuthenticatedEncryptorConfiguration instance that contains the algorithmic information.

services.AddDataProtection()
    .UseCustomCryptographicAlgorithms(new CngCbcAuthenticatedEncryptorConfiguration()
    {
        // passed to BCryptOpenAlgorithmProvider
        EncryptionAlgorithm = "AES",
        EncryptionAlgorithmProvider = null,

        // specified in bits
        EncryptionAlgorithmKeySize = 256,

        // passed to BCryptOpenAlgorithmProvider
        HashAlgorithm = "SHA256",
        HashAlgorithmProvider = null
    });
참고

블록 대칭 암호화 알고리즘 ≥ 128 비트의 키 길이 ≥ 64 비트의 블록 크기 있고 PKCS #7 안쪽 여백 사용 하 여 CBC 모드 암호화를 지원 해야 합니다.The symmetric block cipher algorithm must have a key length of ≥ 128 bits and a block size of ≥ 64 bits, and it must support CBC-mode encryption with PKCS #7 padding. 해시 알고리즘의 다이제스트 크기 있어야 합니다. > = 128 비트 및 BCRYPT_ALG_HANDLE_HMAC_FLAG 플래그로 열기를 지원 해야 합니다.The hash algorithm must have a digest size of >= 128 bits and must support being opened with the BCRYPT_ALG_HANDLE_HMAC_FLAG flag. *공급자 속성은 지정된 된 알고리즘에 대 한 기본 공급자를 사용 하려면 null로 설정할 수 있습니다.The *Provider properties can be set to null to use the default provider for the specified algorithm. 참조는 BCryptOpenAlgorithmProvider 자세한 정보에 대 한 설명서입니다.See the BCryptOpenAlgorithmProvider documentation for more information.

Galois/카운터 모드 암호화 + 유효성 검사를 사용 하 여 사용자 지정 Windows CNG 알고리즘을 지정 하려면 알고리즘 정보를 포함 하는 CngGcmAuthenticatedEncryptorConfiguration 인스턴스를 만듭니다.To specify a custom Windows CNG algorithm using Galois/Counter Mode encryption + validation, create a CngGcmAuthenticatedEncryptorConfiguration instance that contains the algorithmic information.

services.AddDataProtection()
    .UseCustomCryptographicAlgorithms(new CngGcmAuthenticatedEncryptorConfiguration()
    {
        // passed to BCryptOpenAlgorithmProvider
        EncryptionAlgorithm = "AES",
        EncryptionAlgorithmProvider = null,

        // specified in bits
        EncryptionAlgorithmKeySize = 256
    });
참고

블록 대칭 암호화 알고리즘 ≥ 128 비트의 키 길이 정확 하 게 128 비트의 블록 크기 있고 GCM 암호화를 지원 해야 합니다.The symmetric block cipher algorithm must have a key length of ≥ 128 bits and a block size of exactly 128 bits, and it must support GCM encryption. 지정된 된 알고리즘에 대 한 기본 공급자를 사용 하려면 null로 EncryptionAlgorithmProvider 속성을 설정할 수 있습니다.The EncryptionAlgorithmProvider property can be set to null to use the default provider for the specified algorithm. 참조는 BCryptOpenAlgorithmProvider 자세한 정보에 대 한 설명서입니다.See the BCryptOpenAlgorithmProvider documentation for more information.

다른 사용자 지정 알고리즘을 지정Specifying other custom algorithms

경우에 첫 번째 클래스 API로 노출 되지 데이터 보호 시스템은 거의 모든 종류의 알고리즘을 지정할 수 있을 만큼 확장 가능 합니다.Though not exposed as a first-class API, the data protection system is extensible enough to allow specifying almost any kind of algorithm. 예를 들어 HSM 내에 포함 된 모든 키를 유지 하 고 암호화 및 암호 해독 루틴의 핵심 사용자 지정 구현을 제공 됩니다.For example, it is possible to keep all keys contained within an HSM and to provide a custom implementation of the core encryption and decryption routines. IAuthenticatedEncryptorConfiguration 핵심 암호화 확장성 섹션에 대 한 자세한 내용은 참조 하십시오.See IAuthenticatedEncryptorConfiguration in the core cryptography extensibility section for more information.

참고 항목See also