ASP.NET Core를 사용하여 Windows 및 Azure에서 미사용 키 암호화
데이터 보호 시스템은 기본적으로 검색 메커니즘을 사용하여 암호화 키를 미사용 상태로 암호화하는 방법을 결정합니다. 개발자는 검색 메커니즘을 재정의하고 키를 미사용 상태로 암호화하는 방법을 수동으로 지정할 수 있습니다.
Warning
명시적 키 지속성 위치를 지정하는 경우 데이터 보호 시스템은 미사용 기본 키 암호화 메커니즘의 등록을 취소합니다. 따라서 키는 더 이상 미사용 시 암호화되지 않습니다. 프로덕션 배포에 대한 명시적 키 암호화 메커니즘을 지정하는 것이 좋습니다. 미사용 암호화 메커니즘 옵션은 이 항목에 설명되어 있습니다.
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로 백업할 수는 있지만). 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 인증서를 배포하고 미사용 키의 암호화에 인증서를 사용하도록 호스트된 앱을 구성하는 것이 편리할 수 있습니다.
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를 사용하여 do기본 조인된 사용자만 키 링의 암호를 해독할 수 있습니다.
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 작업에서 사용하는 암호화 키를 배포합니다. 대상 사용자는 해당 ID로 프로세스가 실행되는 경우 도메인 조인 머신에서 암호화된 페이로드를 해독할 수 있습니다.
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을 제공하여 자체 키 암호화 메커니즘을 지정할 수 있습니다.
ASP.NET Core