ASP.NET Core를 사용하여 Windows 및 Azure에서 rest 키 암호화

데이터 보호 시스템은 기본적으로 검색 메커니즘을 사용하여 암호화 키를 암호화 rest하는 방법을 결정합니다. 개발자는 검색 메커니즘을 재정의하고 키를 암호화하는 방법을 수동으로 지정할 수 있습니다 rest.

Warning

명시적 키 지속성 위치를 지정하는 경우 데이터 보호 시스템은 메커니즘에서 rest 기본 키 암호화를 등록 취소합니다. 따라서 키는 더 이상 .에서 rest암호화되지 않습니다. 프로덕션 배포에 대한 명시적 키 암호화 메커니즘을 지정하는 것이 좋습니다. 암호화 메커니즘rest 옵션은 이 항목에서 설명합니다.

Azure Key Vault

Azure Key Vault키를 저장하려면 클래스에서 Startup 시스템을 ProtectKeysWithAzureKeyVault 구성합니다.

public void ConfigureServices(IServiceCollection services)
{
    services.AddDataProtection()
        .PersistKeysToAzureBlobStorage(new Uri("<blobUriWithSasToken>"))
        .ProtectKeysWithAzureKeyVault("<keyIdentifier>", "<clientId>", "<clientSecret>");
}

자세한 내용은 ASP.NET Core 데이터 보호 구성: ProtectKeysWithAzureKeyVault를 참조하세요.

Windows DPAPI

Windows 배포에만 적용됩니다.

Windows DPAPI를 사용하는 경우 키 자료는 스토리지에 유지되기 전에 CryptProtectData를 사용하여 암호화됩니다. DPAPI는 현재 컴퓨터 외부에서 읽지 않는 데이터에 적합한 암호화 메커니즘입니다(이러한 키를 Active Directory로 백업할 수는 있지만). 암호화에서rest DPAPI 키를 구성하려면 ) 확장 메서드 중 ProtectKeysWithDpapi하나를 호출합니다.

public void ConfigureServices(IServiceCollection services)
{
    // Only the local user account can decrypt the keys
    services.AddDataProtection()
        .ProtectKeysWithDpapi();
}

매개 변수 없이 ProtectKeysWithDpapi를 호출하면 현재 Windows 사용자 계정만 지속형 키 링을 해독할 수 있습니다. 필요에 따라 현재 사용자 계정뿐만 아니라 머신의 모든 사용자 계정이 키 링을 해독할 수 있도록 지정할 수 있습니다.

public void ConfigureServices(IServiceCollection services)
{
    // All user accounts on the machine can decrypt the keys
    services.AddDataProtection()
        .ProtectKeysWithDpapi(protectToLocalMachine: true);
}

X.509 인증서

앱이 여러 컴퓨터에 분산되어 있는 경우 컴퓨터 간에 공유 X.509 인증서를 배포하고 다음 위치에서 rest키 암호화에 인증서를 사용하도록 호스트된 앱을 구성하는 것이 편리할 수 있습니다.

public void ConfigureServices(IServiceCollection services)
{
    services.AddDataProtection()
        .ProtectKeysWithCertificate("3BCE558E2AD3E0E34A7743EAB5AEA2A9BD2575A0");
}

.NET Framework 제한으로 인해 CAPI 프라이빗 키가 있는 인증서만 지원됩니다. 이러한 제한 사항에 대한 가능한 해결 방법은 아래 콘텐츠를 참조하세요.

Windows DPAPI-NG

이 메커니즘은 Windows 8/Windows Server 2012 이상에서만 사용할 수 있습니다.

Windows 8부터 Windows OS는 DPAPI-NG(CNG DPAPI라고도 함)를 지원합니다. 자세한 내용은 CNG DPAPI 정보를 참조하세요.

보안 주체는 보호 설명자 규칙으로 인코딩됩니다. 다음 예제에서는 ProtectKeysWithDpapiNG지정된 SID를 가진 도메인에 가입된 사용자만 키 링의 암호를 해독할 수 있습니다.

public void ConfigureServices(IServiceCollection services)
{
    // Uses the descriptor rule "SID=S-1-5-21-..."
    services.AddDataProtection()
        .ProtectKeysWithDpapiNG("SID=S-1-5-21-...",
        flags: DpapiNGProtectionDescriptorFlags.None);
}

매개 변수가 없는 ProtectKeysWithDpapiNG 오버로드도 있습니다. 이 편리한 방법을 사용하여 "SID={CURRENT_ACCOUNT_SID}" 규칙을 지정합니다. 여기서 CURRENT_ACCOUNT_SID는 현재 Windows 사용자 계정의 SID입니다.

public void ConfigureServices(IServiceCollection services)
{
    // Use the descriptor rule "SID={current account SID}"
    services.AddDataProtection()
        .ProtectKeysWithDpapiNG();
}

이 시나리오에서 AD 도메인 컨트롤러는 DPAPI-NG 작업에서 사용하는 암호화 키를 배포합니다. 대상 사용자는 도메인에 가입된 컴퓨터에서 암호화된 페이로드를 해독할 수 있습니다(프로세스가 해당 컴퓨터 identity에서 실행되는 경우).

Windows DPAPI-NG를 사용하는 인증서 기반 암호화

앱이 Windows 8.1/Windows Server 2012 R2 이상에서 실행되는 경우 Windows DPAPI-NG를 사용하여 인증서 기반 암호화를 수행할 수 있습니다. 규칙 설명자 문자열 "CERTIFICATE=HashId:THUMBPRINT"를 사용합니다. 여기서 THUMBPRINT는 인증서의 16진수로 인코딩된 SHA1 지문입니다.

public void ConfigureServices(IServiceCollection services)
{
    services.AddDataProtection()
        .ProtectKeysWithDpapiNG("CERTIFICATE=HashId:3BCE558E2...B5AEA2A9BD2575A0",
            flags: DpapiNGProtectionDescriptorFlags.None);
}

키를 해독하려면 이 리포지토리를 가리키는 앱이 Windows 8.1/Windows Server 2012 R2 이상에서 실행되고 있어야 합니다.

사용자 지정 키 암호화

기본 제공 메커니즘이 적절하지 않은 경우 개발자는 사용자 지정 IXmlEncryptor을 제공하여 자체 키 암호화 메커니즘을 지정할 수 있습니다.