šifrování klíčů v klidovém Windows a Azure pomocí ASP.NET Core

Systém ochrany dat ve výchozím nastavení využívá mechanismus zjišťování , aby určil, jak by měly být šifrovací klíče zašifrované v klidovém stavu. Vývojář může přepsat mechanismus zjišťování a ručně zadat, jak by měly být klíče zašifrované v klidovém stavu.

Upozornění

Pokud zadáte explicitní umístění trvalosti klíčů, systém ochrany dat zruší registraci výchozího šifrování klíče v mechanismu REST. V důsledku toho klíče už nejsou zašifrované v klidovém stavu. Pro produkční nasazení doporučujeme zadat explicitní šifrovací mechanismus klíčů . V tomto tématu jsou popsány možnosti mechanismu šifrování v klidovém umístění.

Azure Key Vault

Pokud chcete ukládat klíče v Azure Key Vault, nakonfigurujte systém pomocí ProtectKeysWithAzureKeyVault ve Startup třídě:

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

další informace najdete v tématu konfigurace ASP.NET Core ochrany dat: ProtectKeysWithAzureKeyVault.

Windows NEMOHL

vztahuje se pouze na nasazení Windows.

je-li použit Windows DPAPI, klíč materiálu je před trvalým uložením do úložiště zašifrovaný pomocí funkce CryptProtectData . DPAPI je vhodný šifrovací mechanismus pro data, která se nikdy nepřečetla mimo aktuální počítač (i když je možné tyto klíče do služby Active Directory obnovit). informace o řešení potíží s data Protection API (DPAPI)najdete v části rozhraní DPAPI a cestovní profily . Pokud chcete nakonfigurovat šifrování v rámci neaktivního klíče DPAPI, zavolejte jednu z metod rozšíření ProtectKeysWithDpapi :

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

pokud ProtectKeysWithDpapi je zavolána bez parametrů, je možné trvale dešifrovat zadržený klíčový prstenec pouze v aktuálním Windowsm uživatelském účtu. Volitelně můžete určit, že každý uživatelský účet v počítači (nikoli jenom aktuální uživatelský účet) může dekódovat klíčového prstence:

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

Certifikát X. 509

Pokud je aplikace rozdělená mezi několik počítačů, může být vhodné distribuovat sdílený certifikát X. 509 napříč počítači a nakonfigurovat hostované aplikace tak, aby používaly certifikát pro šifrování neaktivních klíčů:

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

vzhledem k omezením .NET Framework podporují se jenom certifikáty s privátními klíči CAPI. V níže uvedeném obsahu se můžete podívat na možná řešení těchto omezení.

Windows DPAPI – NG

tento mechanismus je k dispozici pouze v Windows 8/Windows Server 2012 nebo novějším.

počínaje Windows 8 Windows operační systém podporuje rozhraní dpapi-NG (označuje se také jako CNG DPAPI). Další informace najdete v tématu o CNG DPAPI.

Objekt zabezpečení je kódovaný jako pravidlo popisovače ochrany. V následujícím příkladu, který volá ProtectKeysWithDpapiNG, může dešifrovat klíč Ring jenom uživatel připojený k doméně se zadaným identifikátorem 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);
}

Existuje také přetížení bez parametrů ProtectKeysWithDpapiNG . tuto metodu použijte k zadání pravidla "SID = {CURRENT_ACCOUNT_SID}", kde CURRENT_ACCOUNT_SID je identifikátor sid aktuálního Windows uživatelského účtu:

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

V tomto scénáři zodpovídá řadič domény služby AD za distribuci šifrovacích klíčů používaných operacemi DPAPI-NG. Cílový uživatel může dešifrovat šifrovanou datovou část z libovolného počítače připojeného k doméně (za předpokladu, že proces běží pod svou identitou).

šifrování založené na certifikátech s Windows DPAPI-NG

pokud je aplikace spuštěná na Windows 8.1/Windows Server 2012 R2 nebo novějším, můžete k provádění šifrování založeného na certifikátech použít Windows DPAPI-NG. Použijte řetězec deskriptoru pravidel "CERTIFICATE = HashId: kryptografický otisk", kde kryptografický otisk je hex kódovaný otisk certifikátu SHA1:

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

všechny aplikace, na které se odkazuje v tomto úložišti, musí běžet na Windows 8.1/Windows Server 2012 R2 nebo novějším, aby se klíče dešifroval.

Šifrování vlastních klíčů

Pokud nejsou mechanismy v krabici vhodné, může vývojář zadat vlastní šifrovací mechanismus klíče tím, že poskytuje vlastní IXmlEncryptor.