Skapa och lagra kolumnhuvudnycklar för Always Encrypted

gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Kolumnhuvudnycklar är nyckelskyddande nycklar som används i Always Encrypted för att kryptera kolumnkrypteringsnycklar. Kolumnhuvudnycklar måste lagras i ett betrott nyckelarkiv och nycklarna måste vara tillgängliga för program som behöver kryptera eller dekryptera data och verktyg för att konfigurera Always Encrypted och hantera Always Encrypted-nycklar.

Den här artikeln innehåller information om hur du väljer ett nyckelarkiv och skapar kolumnhuvudnycklar för Always Encrypted. En detaljerad översikt finns i Översikt över nyckelhantering för Always Encrypted.

Välja ett nyckelarkiv för din kolumnhuvudnyckel

Always Encrypted stöder flera nyckellager för lagring av always encrypted-kolumnhuvudnycklar. Vilka nyckellager som stöds varierar beroende på vilken drivrutin och vilken version du använder.

Det finns två kategorier av viktiga butiker på hög nivå att tänka på – Lokala nyckellager och Centraliserade nyckellager.

Lokalt eller centraliserat nyckelarkiv?

  • Lokala nyckellager – kan endast användas av program på datorer som innehåller det lokala nyckelarkivet. Med andra ord måste du replikera nyckelarkivet och nyckeln till varje dator som kör programmet. Ett exempel på ett lokalt nyckelarkiv är Windows Certificate Store. När du använder ett lokalt nyckelarkiv måste du se till att nyckelarkivet finns på varje dator som är värd för ditt program och att datorn innehåller kolumnhuvudnycklarna som programmet behöver för att få åtkomst till data som skyddas med Always Encrypted. När du etablerar en kolumnhuvudnyckel för första gången, eller när du ändrar (roterar) nyckeln, måste du se till att nyckeln distribueras till alla datorer som är värdar för dina program.

  • Centraliserade nyckellager – hanterar program på flera datorer. Ett exempel på ett centraliserat nyckelarkiv är Azure Key Vault. Ett centraliserat nyckelarkiv gör vanligtvis nyckelhanteringen enklare eftersom du inte behöver underhålla flera kopior av kolumnhuvudnycklarna på flera datorer. Se till att dina program är konfigurerade för att ansluta till det centraliserade nyckelarkivet.

Vilka nyckellager stöds i Always Encrypted-aktiverade klientdrivrutiner?

Always Encrypted-aktiverade klientdrivrutiner är SQL Server-klientdrivrutiner som har inbyggt stöd för att införliva Always Encrypted i dina klientprogram. Always Encrypted-aktiverade drivrutiner innehåller några inbyggda leverantörer för populära nyckelarkiv. Med vissa drivrutiner kan du även implementera och registrera en anpassad leverantör av huvudnyckellagring för kolumner, så att du kan använda valfri nyckellagring, även om det inte finns någon inbyggd leverantör för den. När du bestämmer dig för mellan en inbyggd provider och en anpassad provider bör du tänka på att användning av en inbyggd provider vanligtvis innebär färre ändringar i dina program (i vissa fall krävs endast ändring av en databasanslutningssträng).

Vilka inbyggda leverantörer som är tillgängliga beror på vilken drivrutin, drivrutinsversion och operativsystem som väljs. Se Always Encrypted-dokumentationen för din specifika drivrutin för att avgöra vilka nyckellager som stöds direkt och om din drivrutin stöder anpassade nyckellagringsleverantörer – Utveckla program med Always Encrypted.

Vilka nyckellager stöds i SQL-verktyg?

SQL Server Management Studio, Azure Data Studio och SqlServer PowerShell-modulen stöder kolumnhuvudnycklar som lagras i:

  • Nyckelvalv och hanterade HSM:er i Azure Key Vault.

    Anmärkning

    Hanterade HSM:er kräver SSMS 18.9 eller senare och SqlServer PowerShell-modulversion 21.1.18235 eller senare. Azure Data Studio stöder för närvarande inte hanterade HSM:er.

  • Windows Certificate Store.

  • Nyckellager, till exempel maskinvarusäkerhetsmodul, som tillhandahåller CNG-API (Cryptography Next Generation) eller Kryptografi-API (CAPI).

Skapa kolumnhuvudnycklar i Windows Certificate Store

En kolumnhuvudnyckel kan vara ett certifikat som lagras i Windows Certificate Store. En Always Encrypted-aktiverad drivrutin verifierar inte ett förfallodatum eller en certifikatutfärdarkedja. Ett certifikat används helt enkelt som ett nyckelpar som består av en offentlig och privat nyckel.

För att vara en giltig kolumnhuvudnyckel måste ett certifikat:

  • vara ett X.509-certifikat.
  • lagras på någon av de två certifikatarkivplatserna: lokal dator eller aktuell användare. (Om du vill skapa ett certifikat på den lokala datorns certifikatarkivsplats måste du vara administratör på måldatorn.)
  • innehåller en privat nyckel (den rekommenderade längden på nycklarna i certifikatet är 2 048 bitar eller större).
  • skapas för nyckelutbyte.

Det finns flera sätt att skapa ett certifikat som är en giltig kolumnhuvudnyckel, men det enklaste alternativet är att skapa ett självsignerat certifikat.

Skapa ett självsignerat certifikat med PowerShell

Använd cmdleten New-SelfSignedCertificate för att skapa ett självsignerat certifikat. I följande exempel visas hur du genererar ett certifikat som kan användas som en kolumnhuvudnyckel för 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

Skapa ett självsignerat certifikat med SQL Server Management Studio (SSMS)

Mer information finns i Etablera Always Encrypted-nycklar med SQL Server Management Studio. En stegvis självstudiekurs som använder SSMS och lagrar Always Encrypted-nycklar i Windows Certificate Store finns i Guiden Always Encrypted (Windows Certificate Store).

Göra certifikat tillgängliga för program och användare

Om din kolumnhuvudnyckel är ett certifikat som lagras på platsen för certifikatarkivet på den lokala datorn måste du exportera certifikatet med den privata nyckeln och importera det till alla datorer som är värdar för program som förväntas kryptera eller dekryptera data som lagras i krypterade kolumner, eller verktyg för att konfigurera Always Encrypted och för att hantera Always Encrypted-nycklarna. Dessutom måste varje användare beviljas läsbehörighet för certifikatet som lagras på den lokala datorns certifikatarkivplats för att kunna använda certifikatet som en kolumnhuvudnyckel.

Om din kolumnhuvudnyckel är ett certifikat som lagras på den aktuella platsen för användarcertifikatarkivet måste du exportera certifikatet med den privata nyckeln och importera det till den aktuella platsen för användarcertifikatarkivet för alla användarkonton som kör program som förväntas kryptera eller dekryptera data som lagras i krypterade kolumner eller verktyg för att konfigurera Always Encrypted och hantera Always Encrypted-nycklar (på alla datorer som innehåller dessa program/verktyg). Ingen behörighetskonfiguration krävs – efter att ha loggat in på en dator kan en användare komma åt alla certifikat på den aktuella platsen för användarcertifikatarkivet.

Med hjälp av PowerShell

Använd cmdletarna Import-PfxCertificate och Export-PfxCertificate för att importera och exportera ett certifikat.

Använda Microsoft Management Console

Följ dessa steg om du vill ge en användare läsbehörighet för ett certifikat som lagras på den lokala datorns certifikatarkivplats:

  1. Öppna en kommandotolk och skriv mmc.
  2. I MMC-konsolen går du till Arkiv och klickar på Lägg till/ta bort snapin-modul.
  3. I dialogrutan Lägg till/ta bort snapin-modul klickar du på Lägg till.
  4. I dialogrutan Lägg till fristående snapin-modul klickar du på Certifikat och klickar på Lägg till.
  5. I dialogrutan Snapin-modul för certifikat klickar du på Datorkonto och klickar sedan på Slutför.
  6. I dialogrutan Lägg till fristående snapin-modul klickar du på Stäng.
  7. I dialogrutan Lägg till/ta bort snapin-modul klickar du på OK.
  8. Från snapin-modulen Certifikat letar du upp certifikatet i mappen Certifikat personligt, högerklickar > på certifikatet, pekar på Alla uppgifter och klickar sedan på Hantera privata nycklar.
  9. I dialogrutan Säkerhet lägger du till läsbehörighet för ett användarkonto om det behövs.

Skapa kolumnhuvudnycklar i Azure Key Vault

Azure Key Vault hjälper till att skydda kryptografiska nycklar och hemligheter, och det är ett praktiskt alternativ för att lagra kolumnhuvudnycklar för Always Encrypted, särskilt om dina program finns i Azure. Om du vill skapa en nyckel i Azure Key Vault behöver du en Azure-prenumeration och ett Azure Key Vault. En nyckel kan lagras i ett nyckelvalv eller i en hanterad HSM. För att vara en giltig kolumnhuvudnyckel måste nyckeln som hanteras i Azure Key Vault vara en RSA-nyckel.

Använda Azure CLI, Portal eller PowerShell

Information om hur du skapar en nyckel i ett nyckelvalv finns i:

Information om hur du skapar en nyckel i en hanterad HSM finns i:

SQL Server Management Studio (SSMS)

Mer information om hur du skapar en kolumnhuvudnyckel i ett nyckelvalv eller en hanterad HSM i Azure Key Vault med SSMS finns i Etablera Always Encrypted-nycklar med SQL Server Management Studio. En stegvis självstudiekurs som använder SSMS och lagrar Always Encrypted-nycklar i ett nyckelvalv finns i Always Encrypted Wizard tutorial (Azure Key Vault).

Göra Azure Key Vault-nycklar tillgängliga för program och användare

För att få åtkomst till en krypterad kolumn måste ditt program kunna komma åt Azure Key Vault och det behöver även specifika behörigheter för kolumnhuvudnyckeln för att dekryptera kolumnkrypteringsnyckeln som skyddar kolumnen.

För att hantera nycklar för Always Encrypted behöver du behörighet att lista och skapa kolumnhuvudnycklar i Azure Key Vault och utföra kryptografiska åtgärder med hjälp av nycklarna.

Nyckelvalv

Om du lagrar dina kolumnhuvudnycklar i ett nyckelvalv och du använder rollbehörigheter för auktorisering:

  • Programmets identitet måste vara medlem i roller som tillåter följande åtgärder på dataplanet i nyckelvalvet:

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

    Det enklaste sättet att ge programmet den behörighet som krävs är att lägga till dess identitet i Key Vault Crypto User-rollen . Du kan också skapa en anpassad roll med de behörigheter som krävs.

  • En användare som hanterar nycklar för Always Encrypted måste vara medlem eller roller som tillåter följande dataplansåtgärder i nyckelvalvet:

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

    Det enklaste sättet att ge användaren den behörighet som krävs är att lägga till användaren i Key Vault Crypto User-rollen . Du kan också skapa en anpassad roll med de behörigheter som krävs.

Om du lagrar kolumnhuvudnycklarna i ett nyckelvalv och du använder åtkomstprinciper för auktorisering:

  • Programmets identitet behöver följande behörigheter för åtkomstpolicy i nyckelvalvet: hämta, packa upp nyckel, och verifiera.
  • En användare som hanterar nycklar för Always Encrypted behöver följande behörigheter för åtkomstprinciper i nyckelvalvet: skapa, hämta, lista, signera, unwrapKey, wrapKey, verifiera.

Allmän information om hur du konfigurerar autentisering och auktorisering för nyckelvalv finns i Auktorisera ett säkerhetsobjekt för åtkomst till Key Vault.

Hanterade HSM:er

Din applikations identitet måste vara medlem i roller som tillåter följande dataplansåtgärder på din hanterade HSM:

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

Microsoft rekommenderar att du skapar en anpassad roll som bara innehåller ovanstående behörigheter.

En användare som hanterar nycklar för Always Encrypted måste vara medlem eller roller som tillåter följande dataplansåtgärder på nyckeln:

  • 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

Det enklaste sättet att ge användaren ovanstående behörighet är att lägga till användaren i rollen Hanterad HSM-kryptoanvändare. Du kan också skapa en anpassad roll med de behörigheter som krävs.

Mer information om åtkomstkontroll för hanterade HSM:er finns i:

Skapa kolumnhuvudnycklar i maskinvarusäkerhetsmoduler med CNG

En kolumnhuvudnyckel för Always Encrypted kan lagras i ett nyckelarkiv som implementerar CNG-API:et (Cryptography Next Generation). Den här typen av butik är vanligtvis en maskinvarusäkerhetsmodul (HSM). En HSM är en fysisk enhet som skyddar och hanterar digitala nycklar och tillhandahåller krypteringsbearbetning. HSM:er kommer traditionellt i form av ett plugin-kort eller en extern enhet som ansluter direkt till en dator (lokala HSM:er) eller en nätverksserver.

För att göra en HSM tillgänglig för program på en viss dator måste en nyckellagringsprovider (KSP), som implementerar CNG, installeras och konfigureras på datorn. En Always Encrypted-klientdrivrutin (en kolumnnyckellagringsprovider i drivrutinen) använder KSP:n för att kryptera och dekryptera kolumnkrypteringsnycklar som skyddas med kolumnhuvudnyckeln som lagras i nyckelarkivet.

Windows innehåller Microsoft Software Key Storage Provider – en programvarubaserad KSP som du kan använda i testsyfte. Se CNG-nyckellagringsleverantörer.

Skapa kolumnhuvudnycklar i ett nyckelarkiv med CNG/KSP

En kolumnhuvudnyckel ska vara en asymmetrisk nyckel (ett offentligt/privat nyckelpar) med hjälp av RSA-algoritmen. Den rekommenderade nyckellängden är 2048 eller högre.

Använda HSM-specifika verktyg

Läs dokumentationen för din HSM.

Med hjälp av PowerShell

Du kan använda .NET-API:er för att skapa en nyckel i ett nyckelarkiv med hjälp av CNG i PowerShell.

$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)

Använda SQL Server Management Studio

Se Etablera Always Encrypted-nycklar med SQL Server Management Studio.

Göra CNG-nycklar tillgängliga för program och användare

Se HSM- och KSP-dokumentationen för hur du konfigurerar KSP på en dator och hur du beviljar program och användare åtkomst till HSM.

Skapa kolumnhuvudnycklar i maskinvarusäkerhetsmoduler med CAPI

En kolumnhuvudnyckel för Always Encrypted kan lagras i ett nyckelarkiv som implementerar kryptografi-API:et (CAPI). Vanligtvis är en sådan butik en maskinvarusäkerhetsmodul (HSM) – en fysisk enhet som skyddar och hanterar digitala nycklar och tillhandahåller krypteringsbearbetning. HSM:er kommer traditionellt i form av ett plugin-kort eller en extern enhet som ansluter direkt till en dator (lokala HSM:er) eller en nätverksserver.

För att göra en HSM tillgänglig för program på en viss dator måste en kryptografitjänstleverantör (CSP), som implementerar CAPI, installeras och konfigureras på datorn. En Always Encrypted-klientdrivrutin (en kolumnnyckellagringsprovider i drivrutinen) använder CSP:en för att kryptera och dekryptera kolumnkrypteringsnycklar som skyddas med kolumnhuvudnyckeln som lagras i nyckelarkivet.

Anmärkning

CAPI är ett äldre, inaktuellt API. Om en KSP är tillgänglig för din HSM bör du använda den i stället för en CSP/CAPI.

En CSP måste ha stöd för RSA-algoritmen som ska användas med Always Encrypted.

Windows innehåller följande programvarubaserade (inte säkerhetskopierade av en HSM) CSP:er som stöder RSA och kan användas i testsyfte: Microsoft Enhanced RSA och AES Cryptographic Provider.

Skapa kolumnhuvudnycklar i ett nyckelarkiv med CAPI/CSP

En kolumnhuvudnyckel ska vara en asymmetrisk nyckel (ett offentligt/privat nyckelpar) med hjälp av RSA-algoritmen. Den rekommenderade nyckellängden är 2048 eller högre.

Använda HSM-specifika verktyg

Läs dokumentationen för din HSM.

Använda SQL Server Management Studio (SSMS)

Se Etablera Always Encrypted-nycklar med SQL Server Management Studio.

Göra CNG-nycklar tillgängliga för program och användare

Se dokumentationen för din HSM och CSP för hur du konfigurerar CSP på en dator och hur du beviljar program och användare åtkomst till HSM.

Nästa steg

Se även