Sdílet prostřednictvím


Vytvoření a uložení hlavních klíčů sloupců pro funkci Always Encrypted

platí pro:SQL ServerAzure SQL Databaseazure SQL Managed Instance

Hlavní klíče sloupců jsou klíče pro ochranu klíčů, které se používají v Always Encrypted k šifrování šifrovacích klíčů sloupců. Hlavní klíče sloupců musí být uložené v důvěryhodném úložišti klíčů a klíče musí být přístupné pro aplikace, které potřebují šifrovat nebo dešifrovat data, a nástroje pro konfiguraci funkce Always Encrypted a správu klíčů Always Encrypted.

Tento článek obsahuje podrobnosti o výběru úložiště klíčů a vytvoření hlavních klíčů sloupců pro funkci Always Encrypted. Podrobný přehled najdete v tématu Přehled správy klíčů proAlways Encrypted .

Výběr úložiště klíčů pro hlavní klíč sloupce

Funkce Always Encrypted podporuje více úložišť klíčů pro ukládání hlavních klíčů sloupce Always Encrypted. Podporovaná úložiště klíčů se liší v závislosti na používaném ovladači a verzi.

Existují dvě základní kategorie úložišť klíčů, které je potřeba vzít v úvahu – místní úložiště klíčůa centralizované úložiště klíčů.

Místní nebo centralizované úložiště klíčů?

  • místní úložiště klíčů – můžou je používat jenom aplikace v počítačích, které obsahují místní úložiště klíčů. Jinými slovy, musíte replikovat úložiště klíčů a klíč do každého počítače, na kterém běží vaše aplikace. Příkladem místního úložiště klíčů je Windows Certificate Store. Pokud používáte místní úložiště klíčů, musíte se ujistit, že úložiště klíčů existuje na každém počítači, který je hostitelem vaší aplikace, a že počítač obsahuje hlavní klíče sloupců, které vaše aplikace potřebuje pro přístup k datům chráněným pomocí funkce Always Encrypted. Když zřídíte hlavní klíč sloupce poprvé nebo když klíč změníte (otočíte), musíte se ujistit, že se klíč nasadí na všechny počítače hostující vaše aplikace.

  • centralizované úložiště klíčů – obsluhují aplikace na více počítačích. Příkladem centralizovaného úložiště klíčů je azure Key Vault. Centralizované úložiště klíčů obvykle usnadňuje správu klíčů, protože nemusíte udržovat více kopií hlavních klíčů sloupců na více počítačích. Ujistěte se, že jsou vaše aplikace nakonfigurované pro připojení k centralizovanému úložišti klíčů.

Která úložiště klíčů jsou podporována v klientských ovladačích s podporou Always Encrypted?

Klientské ovladače s podporou Funkce Always Encrypted jsou klientské ovladače SQL Serveru, které mají integrovanou podporu pro začlenění funkce Always Encrypted do klientských aplikací. Ovladače s podporou Funkce Always Encrypted zahrnují několik předdefinovaných poskytovatelů pro oblíbená úložiště klíčů. Některé ovladače také umožňují implementovat a zaregistrovat vlastního správce hlavního úložiště klíčů pro sloupce, abyste mohli použít libovolné úložiště klíčů, i když pro něj není k dispozici žádný integrovaný poskytovatel. Při rozhodování mezi integrovaným poskytovatelem a vlastním poskytovatelem zvažte, že použití integrovaného poskytovatele obvykle znamená méně změn v aplikacích (v některých případech se vyžaduje pouze změna připojovacího řetězce databáze).

Dostupní integrovaní poskytovatelé závisejí na tom, který ovladač, verze ovladače a operační systém jsou vybrány. Pokud chcete zjistit, která úložiště klíčů jsou podporována předem a jestli váš ovladač podporuje vlastní poskytovatele úložiště klíčů, projděte si dokumentaci ke službě Always Encrypted. Vyvíjejte aplikace pomocí funkce Always Encrypted.

Která úložiště klíčů jsou podporována v nástrojích SQL?

SQL Server Management Studio, Azure Data Studio a modul SqlServer PowerShell podporují hlavní klíče sloupců uložené v:

  • Ve službě Azure Key Vault jsou trezory klíčů a spravované moduly HSM .

    Poznámka

    Spravované moduly HSM vyžadují SSMS 18.9 nebo novější a modul PowerShellu SqlServer verze 21.1.18235 nebo novější. Azure Data Studio v současné době nepodporuje spravované HSM.

  • Windows Certificate Store.

  • Úložiště klíčů, jako je modul hardwarového zabezpečení, který poskytuje rozhraní API CNG (Cryptography Next Generation) nebo rozhraní CAPI (Cryptography API).

Vytváření hlavních klíčů sloupců ve Službě Windows Certificate Store

Hlavní klíč sloupce může být certifikát uložený ve službě Windows Certificate Store. Ovladač s povolenou funkcí Always Encrypted neověřuje datum vypršení platnosti ani řetěz certifikační autority. Certifikát se jednoduše používá jako pár klíčů skládající se z veřejného a privátního klíče.

Aby byl platný hlavní klíč sloupce, musí certifikát:

  • být certifikátem X.509.
  • být uložen v jednom ze dvou umístění úložiště certifikátů: místní počítač nebo aktuální uživatel. (Chcete-li vytvořit certifikát v umístění úložiště certifikátů místního počítače, musíte být správcem na cílovém počítači.)
  • obsahují privátní klíč (doporučená délka klíčů v certifikátu je 2048 bitů nebo vyšší).
  • má být vytvořeno pro výměnu klíčů.

Existuje několik způsobů, jak vytvořit certifikát, který je platným hlavním klíčem sloupce, ale nejjednodušší možností je vytvořit certifikát podepsaný svým držitelem.

Vytvoření certifikátu podepsaného svým držitelem pomocí PowerShellu

K vytvoření certifikátu podepsaného svým držitelem použijte rutinu New-SelfSignedCertificate. Následující příklad ukazuje, jak vygenerovat certifikát, který lze použít jako hlavní klíč sloupce pro Always Encrypted.

# New-SelfSignedCertificate is a Windows PowerShell cmdlet that creates a self-signed certificate. The below examples show how to generate a certificate that can be used as a column master key for Always Encrypted.
$cert = New-SelfSignedCertificate -Subject "AlwaysEncryptedCert" -CertStoreLocation Cert:CurrentUser\My -KeyExportPolicy Exportable -Type DocumentEncryptionCert -KeyUsage KeyEncipherment -KeySpec KeyExchange -KeyLength 2048 

# To create a certificate in the local machine certificate store location you need to run the cmdlet as an administrator.
$cert = New-SelfSignedCertificate -Subject "AlwaysEncryptedCert" -CertStoreLocation Cert:LocalMachine\My -KeyExportPolicy Exportable -Type DocumentEncryptionCert -KeyUsage KeyEncipherment -KeySpec KeyExchange -KeyLength 2048

Vytvoření certifikátu podepsaného svým držitelem pomocí aplikace SQL Server Management Studio (SSMS)

Podrobnosti najdete v tématu Zřízení klíčů Always Encrypted pomocí aplikace SQL Server Management Studio. Podrobný kurz, který používá SSMS a ukládá klíče Always Encrypted v úložišti certifikátů Windows, najdete v kurzu průvodce Always Encrypted (Windows Certificate Store).

Zpřístupnění certifikátů aplikacím a uživatelům

Pokud je hlavním klíčem sloupce certifikát uložený v umístění úložiště certifikátů místního počítače , musíte certifikát s jeho soukromým klíčem exportovat a importovat do všech počítačů, které hostují aplikace nebo nástroje určené pro šifrování či dešifrování dat uložených v šifrovaných sloupcích, nebo pro konfiguraci a správu klíčů Always Encrypted. Každý uživatel musí mít také udělené oprávnění ke čtení certifikátu uloženého v úložišti certifikátů místního počítače, aby mohl certifikát používat jako hlavní klíč sloupce.

Pokud je hlavním klíčem sloupce certifikát uložený v aktuálním uživatelském umístění úložiště certifikátů, musíte certifikát exportovat s privátním klíčem a importovat ho do umístění aktuálního uživatelského úložiště certifikátů všech uživatelských účtů, na kterých se očekává, že budou používat aplikace pro šifrování nebo dešifrování dat uložených v šifrovaných sloupcích, nebo nástroje pro konfiguraci a správu klíčů Always Encrypted (na všech počítačích obsahujících tyto aplikace či nástroje). Nevyžaduje se žádná konfigurace oprávnění – po přihlášení k počítači má uživatel přístup ke všem certifikátům v aktuálním umístění úložiště uživatelských certifikátů.

Použití PowerShellu

K importu a exportu certifikátu použijte rutiny Import-PfxCertificate a Export-PfxCertificate.

Použití konzoly Microsoft Management Console

Pokud chcete uživateli udělit oprávnění Číst pro certifikát uložený v místním úložišti certifikátů počítače, postupujte takto:

  1. Otevřete příkazový řádek a zadejte mmc.
  2. V konzole MMC v nabídce Soubor klepněte na tlačítko Přidat nebo odebrat modul snap-in.
  3. V dialogovém okně Přidat nebo odebrat modul snap-in klepněte na tlačítko Přidat.
  4. V dialogovém okně Přidat samostatný modul snap-in klikněte na Certifikátya poté na Přidat.
  5. V dialogovém okně Certifikáty snap-in modulu klepněte na Účet počítačea poté klepněte na Dokončit.
  6. V dialogovém okně Přidat samostatný modul snap-in klepněte na tlačítko Zavřít.
  7. V dialogovém okně Přidat nebo odebrat modul snap-in klepněte na tlačítko OK.
  8. V modulu snap-in Certifikáty vyhledejte certifikát ve složce Certifikáty > Osobní, klikněte pravým tlačítkem myši na certifikát, přejděte na Všechny úkolya potom klikněte na Spravovat privátní klíče.
  9. V dialogovém okně Zabezpečení přidejte v případě potřeby oprávnění ke čtení uživatelského účtu.

Vytváření hlavních klíčů sloupců ve službě Azure Key Vault

Azure Key Vault pomáhá chránit kryptografické klíče a tajné kódy a je to vhodná možnost pro ukládání hlavních klíčů sloupců pro Always Encrypted, zejména pokud jsou vaše aplikace hostované v Azure. Pokud chcete vytvořit klíč v Azure Key Vault, potřebujete předplatné Azure a Azure Key Vault. Klíč může být uložen v trezoru klíčů nebo v spravovaném HSM. Aby byl platný hlavní klíč sloupce, musí být klíč spravovaný ve službě Azure Key Vault klíčem RSA.

Použití Azure CLI, portálu nebo PowerShellu

Informace o tom, jak vytvořit klíč v trezoru klíčů, najdete tady:

Informace o tom, jak vytvořit klíč ve spravovaném HSM, najdete tady:

SQL Server Management Studio (SSMS)

Podrobnosti o tom, jak pomocí SSMS vytvořit hlavní klíč sloupce v úložišti klíčů nebo spravovaném HSM ve službě Azure Key Vault, najdete v tématu Zřízení klíčů Always Encrypted pomocí aplikace SQL Server Management Studio. Podrobný kurz, který používá SSMS a ukládá klíče Always Encrypted do trezoru klíčů, najdete v Průvodce Always Encrypted (Azure Key Vault).

Zpřístupnění klíčů služby Azure Key Vault pro aplikace a uživatele

Aby mohla vaše aplikace přistupovat k šifrovaným sloupcům, musí mít přístup ke službě Azure Key Vault a k dešifrování šifrovacího klíče sloupce, který chrání sloupec, potřebuje také konkrétní oprávnění k hlavnímu klíči sloupce.

Ke správě klíčů pro funkci Always Encrypted potřebujete oprávnění k výpisu a vytvoření hlavních klíčů sloupců ve službě Azure Key Vault a k provádění kryptografických operací pomocí klíčů.

Trezory klíčů

Pokud ukládáte hlavní klíče sloupců do trezoru klíčů a k autorizaci používáte oprávnění role:

  • Identita vaší aplikace musí být členem rolí, které umožňují následující akce datového plánu v úložišti klíčů:

    • Microsoft.KeyVault/vaults/keys/decrypt/action
    • Microsoft.KeyVault/vaults/keys/read
    • Microsoft.KeyVault/vaults/keys/verify/action

    Nejjednodušší způsob, jak aplikaci udělit požadovaná oprávnění, je přidat její identitu do role kryptografických uživatelů služby Key Vault. Můžete také vytvořit vlastní roli s požadovanými oprávněními.

  • Uživatel, který spravuje klíče pro Always Encrypted, musí být členem nebo mít role, které umožňují následující akce datové roviny v trezoru klíčů:

    • Microsoft.KeyVault/vaults/keys/create/action
    • Microsoft.KeyVault/vaults/keys/decrypt/action (Použijte pro dešifrování)
    • Microsoft.KeyVault/vaults/keys/encrypt/action
    • Microsoft.KeyVault/vaults/keys/read (číst klíče)
    • Microsoft.KeyVault/vaults/keys/sign/action
    • Microsoft.KeyVault/vaults/keys/verify/action

    Nejjednodušší způsob, jak uživateli udělit požadovaná oprávnění, je přidat uživatele do role Key Vault Crypto User. Můžete také vytvořit vlastní roli s požadovanými oprávněními.

Pokud ukládáte hlavní klíče sloupců do trezoru klíčů a k autorizaci používáte zásady přístupu:

  • Identita vaší aplikace potřebuje v trezoru klíčů následující oprávnění zásad přístupu: získat, rozbalit klíča ověřit.
  • Uživatel, který spravuje klíče pro funkci Always Encrypted, potřebuje v trezoru klíčů následující oprávnění zásad přístupu: vytvořit, získat, vypsat, podepsat, rozbalitKlíč, zabalitKlíč, ověřit.

Obecné informace o konfiguraci ověřování a autorizace pro trezory klíčů najdete v tématu Autorizace objektu zabezpečení pro přístup ke službě Key Vault.

Spravované hsmy

Identita vaší aplikace musí být členem rolí, které umožňují následující akce v datové rovině ve spravovaném HSM.

  • Microsoft.KeyVault/managedHsm/keys/decrypt/action
  • Microsoft.KeyVault/managedHsm/keys/read/action
  • Microsoft.KeyVault/managedHsm/keys/ověřit/akce

Microsoft doporučuje vytvořit vlastní roli, která bude obsahovat pouze výše uvedená oprávnění.

Uživatel, který spravuje klíče pro funkci Always Encrypted, musí být členem nebo mít role, které u klíče povolují následující akce v datovém plánu:

  • Microsoft.KeyVault/managedHsm/keys/create/action
  • Microsoft.KeyVault/managedHsm/keys/decrypt/action
  • Microsoft.KeyVault/managedHsm/keys/encrypt/action
  • Microsoft.KeyVault/managedHsm/keys/read
  • Microsoft.KeyVault/managedHsm/keys/sign/action
  • Microsoft.KeyVault/managedHsm/keys/verify/action

Nejjednodušší způsob, jak uživateli udělit výše uvedená oprávnění, je přidat uživatele do role spravovaného uživatele kryptografických modulů HSM. Můžete také vytvořit vlastní roli s požadovanými oprávněními.

Další informace o řízení přístupu pro spravované HSM najdete v tématu:

Vytváření hlavních klíčů sloupců v modulech hardwarového zabezpečení pomocí CNG

Hlavní klíč sloupce pro Always Encrypted je možné uložit v úložišti klíčů, který implementuje rozhraní API CNG (Cryptography Next Generation). Tento typ úložiště je obvykle modulem hardwarového zabezpečení (HSM). HSM je fyzické zařízení, které chrání a spravuje digitální klíče a poskytuje kryptografické zpracování. Moduly hardwarového zabezpečení se tradičně dodávají ve formě karty plug-in nebo externího zařízení, které se připojuje přímo k počítači (místním modulům HSM) nebo k síťovému serveru.

Aby byl modul HSM dostupný pro aplikace na daném počítači, musí být na počítači nainstalovaný a nakonfigurovaný zprostředkovatel úložiště klíčů ( KSP), který implementuje CNG. Ovladač klienta Always Encrypted (poskytovatel úložiště hlavního klíče sloupce uvnitř ovladače) používá KSP k šifrování a dešifrování šifrovacích klíčů sloupců chráněných hlavním klíčem sloupce uloženým v úložišti klíčů.

Systém Windows zahrnuje Microsoft Software Key Storage Provider - softwarový KSP, který můžete použít pro účely testování. Viz poskytovatelé úložiště klíčů CNG.

Vytvoření hlavních klíčů sloupců v úložišti klíčů pomocí CNG/KSP

Hlavní klíč sloupce by měl být asymetrický klíč (pár veřejného a privátního klíče) pomocí algoritmu RSA. Doporučená délka klíče je 2048 nebo vyšší.

Použití nástrojů specifických pro HSM

Projděte si dokumentaci k vašemu HSM.

Použití PowerShellu

Pomocí rozhraní .NET API můžete vytvořit klíč v úložišti klíčů pomocí CNG v PowerShellu.

$cngProviderName = "Microsoft Software Key Storage Provider" # If you have an HSM, you can use a KSP for your HSM instead of a Microsoft KSP
$cngAlgorithmName = "RSA"
$cngKeySize = 2048 # Recommended key size for Always Encrypted column master keys
$cngKeyName = "AlwaysEncryptedKey" # Name identifying your new key in the KSP
$cngProvider = New-Object System.Security.Cryptography.CngProvider($cngProviderName)
$cngKeyParams = New-Object System.Security.Cryptography.CngKeyCreationParameters
$cngKeyParams.provider = $cngProvider
$cngKeyParams.KeyCreationOptions = [System.Security.Cryptography.CngKeyCreationOptions]::OverwriteExistingKey
$keySizeProperty = New-Object System.Security.Cryptography.CngProperty("Length", [System.BitConverter]::GetBytes($cngKeySize), [System.Security.Cryptography.CngPropertyOptions]::None);
$cngKeyParams.Parameters.Add($keySizeProperty)
$cngAlgorithm = New-Object System.Security.Cryptography.CngAlgorithm($cngAlgorithmName)
$cngKey = [System.Security.Cryptography.CngKey]::Create($cngAlgorithm, $cngKeyName, $cngKeyParams)

Použití aplikace SQL Server Management Studio

Viz Zřízení klíčů Always Encrypted pomocí aplikace SQL Server Management Studio.

Zpřístupnění klíčů CNG pro aplikace a uživatele

Informace o tom, jak nakonfigurovat KSP na počítači a jak udělit aplikacím a uživatelům přístup k hsM, najdete v dokumentaci k hsM a KSP.

Vytváření hlavních klíčů sloupců v modulech hardwarového zabezpečení pomocí CAPI

Hlavní klíč sloupce pro funkci Always Encrypted je možné uložit do úložiště klíčů, které implementuje rozhraní API kryptografie (CAPI). Takové úložiště je obvykle modul hardwarového zabezpečení (HSM) – fyzické zařízení, které chrání a spravuje digitální klíče a poskytuje kryptografické zpracování. Moduly hardwarového zabezpečení se tradičně dodávají ve formě karty plug-in nebo externího zařízení, které se připojuje přímo k počítači (místním modulům HSM) nebo k síťovému serveru.

Aby byl modul HSM dostupný pro aplikace na daném počítači, musí být na počítači nainstalovaný a nakonfigurovaný poskytovatel kryptografických služeb (CSP), který implementuje CAPI. Ovladač klienta Always Encrypted (poskytovatel úložiště hlavního klíče sloupce uvnitř ovladače) používá CSP k šifrování a dešifrování šifrovacích klíčů sloupců chráněných hlavním klíčem sloupce uloženým v úložišti klíčů.

Poznámka

CAPI je zastaralé rozhraní API. Pokud je pro váš HSM k dispozici KSP, měli byste ho použít místo CSP/CAPI.

CSP musí podporovat algoritmus RSA, který se má použít s funkcí Always Encrypted.

Systém Windows obsahuje následující softwarově založené (nepodpořené hsm) CSP, které podporují RSA a můžou se používat pro účely testování: Microsoft Enhanced RSA a AES Cryptographic Provider.

Vytvoření hlavních klíčů sloupců v úložišti klíčů pomocí CAPI/CSP

Hlavní klíč sloupce by měl být asymetrický klíč (pár veřejného a privátního klíče) pomocí algoritmu RSA. Doporučená délka klíče je 2048 nebo vyšší.

Použití nástrojů specifických pro HSM

Projděte si dokumentaci k vašemu HSM.

Použití aplikace SQL Server Management Studio (SSMS)

Viz Zřízení klíčů Always Encrypted pomocí aplikace SQL Server Management Studio.

Zpřístupnění klíčů CNG pro aplikace a uživatele

Informace o tom, jak nakonfigurovat poskytovatele CSP na počítači a jak udělit aplikacím a uživatelům přístup k HSM, najdete v dokumentaci k vašemu HSM a CSP.

Další kroky

Viz také