Dela via


Översikt över nyckelhantering för Always Encrypted

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

Always Encrypted använder två typer av kryptografiska nycklar för att skydda dina data – en nyckel för att kryptera dina data och en annan nyckel för att kryptera nyckeln som krypterar dina data. Kolumnkrypteringsnyckeln krypterar dina data. Kolumnhuvudnyckeln krypterar kolumnkrypteringsnyckeln. Den här artikeln innehåller en detaljerad översikt över hur du hanterar dessa krypteringsnycklar.

När du diskuterar Always Encrypted-nycklar och nyckelhantering är det viktigt att förstå skillnaden mellan de faktiska kryptografiska nycklarna och metadataobjekten som beskriva nycklarna. Vi använder termerna kolumnkrypteringsnyckel och kolumnhuvudnyckel för att referera till de faktiska kryptografiska nycklarna, och vi använder kolumnkrypteringsnyckelmetadata och kolumnhuvudnyckelmetadata för att referera till always encrypted-nyckeln beskrivningar i databasen.

  • Kolumnkrypteringsnycklar är innehållskrypteringsnycklar som används för att kryptera data. Som namnet antyder använder du kolumnkrypteringsnycklar för att kryptera data i databaskolumner. Du kan kryptera en eller flera kolumner med samma kolumnkrypteringsnyckel eller använda flera kolumnkrypteringsnycklar beroende på dina programkrav. Själva kolumnkrypteringsnycklarna krypteras och endast de krypterade värdena för kolumnkrypteringsnycklarna lagras i databasen (som en del av kolumnkrypteringsnyckelns metadata). Kolumnkrypteringsnyckelmetadata lagras i sys.column_encryption_keys (Transact-SQL) och sys.column_encryption_key_values (Transact-SQL) katalogvyer. Kolumnkrypteringsnycklar som används med AES-256-algoritmen är 256-bitars långa.

  • Kolumnhuvudnycklar är nyckelskyddande nycklar som används för att kryptera kolumnkrypteringsnycklar. Kolumnhuvudnycklar måste lagras i ett betrott nyckelarkiv, till exempel Windows Certificate Store, Azure Key Vault eller en maskinvarusäkerhetsmodul. Databasen innehåller endast metadata om kolumnhuvudnycklar (typ av nyckelarkiv och plats). Metadata för kolumnhuvudnycklar lagras i sys.column_master_keys (Transact-SQL) katalogvy.

Det är viktigt att observera att nyckelmetadata i databassystemet inte innehåller huvudnycklar för oformaterad textkolumn eller krypteringsnycklar för oformaterad textkolumn. Databasen innehåller endast information om typen och platsen för kolumnhuvudnycklar och krypterade värden för kolumnkrypteringsnycklar. Det innebär att oformaterade nycklar aldrig exponeras för databassystemet, vilket säkerställer att data som skyddas med Always Encrypted är säkra, även om databassystemet komprometteras. Se till att databassystemet inte kan få åtkomst till klartextnycklarna genom att köra dina nyckelhanteringsverktyg på en annan dator än den som är värd för din databas – läs avsnittet Säkerhetsöverväganden för nyckelhantering nedan för mer information.

Eftersom databasen endast innehåller krypterade data (i Always Encrypted-skyddade kolumner) och inte kan komma åt oformaterade nycklar kan den inte dekryptera data. Det innebär att frågor mot Always Encrypted-kolumner helt enkelt returnerar krypterade värden, så klientprogram som behöver kryptera eller dekryptera skyddade data måste kunna komma åt kolumnhuvudnyckeln och relaterade kolumnkrypteringsnycklar. Mer information finns i Utveckla program med Always Encrypted.

Nyckelhanteringsuppgifter

Processen för att hantera nycklar kan delas in i följande uppgifter på hög nivå:

  • Nyckeletablering – Skapa fysiska nycklar i ett betrott nyckelarkiv (till exempel i Windows Certificate Store, Azure Key Vault eller en maskinvarusäkerhetsmodul), kryptera kolumnkrypteringsnycklar med kolumnhuvudnycklar och skapa metadata för båda typerna av nycklar i databasen.

  • nyckelrotation – Ersätt regelbundet en befintlig nyckel med en ny nyckel. Du kan behöva rotera en nyckel om nyckeln har komprometterats, eller för att uppfylla organisationens principer eller efterlevnadsregler som kräver kryptografiska nycklar måste roteras.

Nyckelhanteringsroller

Det finns två olika roller för användare som hanterar Always Encrypted-nycklar. Säkerhetsadministratörer och databasadministratörer (DBA):

  • Säkerhetsadministratör – genererar kolumnkrypteringsnycklar och kolumnhuvudnycklar och hanterar nyckellager som innehåller kolumnhuvudnycklarna. För att kunna utföra dessa uppgifter måste en säkerhetsadministratör kunna komma åt nycklarna och nyckelarkivet, men behöver inte åtkomst till databasen.
  • DBA- – hanterar metadata om nycklarna i databasen. För att kunna utföra nyckelhanteringsuppgifter måste en databasadministratör kunna hantera nyckelmetadata i databasen, men behöver inte åtkomst till nycklarna eller nyckelarkivet som innehåller kolumnhuvudnycklarna.

Med tanke på ovanstående roller finns det två olika sätt att utföra viktiga hanteringsuppgifter för Always Encrypted. med rollseparationoch utan rollavgränsning. Beroende på organisationens behov kan du välja den nyckelhanteringsprocess som bäst passar dina behov.

Hantera nycklar med rollavgränsning

När Always Encrypted-nycklar hanteras med rollseparering antar olika personer i en organisation säkerhetsadministratörs- och DBA-rollerna. En nyckelhanteringsprocess med rollavgränsning säkerställer att databasadministratörer inte har åtkomst till de nycklar eller nyckellager som innehåller de faktiska nycklarna, och säkerhetsadministratörer har ingen åtkomst till databasen som innehåller känsliga data. Du rekommenderar att du hanterar nycklar med rollavgränsning om målet är att säkerställa att databasadministratörer i din organisation inte kan komma åt känsliga data.

Obs! säkerhetsadministratörer genererar och arbetar med klartextnycklarna, så att de aldrig ska utföra sina uppgifter på samma datorer som är värdar för ett databassystem, eller datorer som kan nås av databasadministratörer eller någon annan som kan vara potentiella angripare.

Hantera nycklar utan rollavgränsning

När Always Encrypted-nycklar hanteras utan rollseparering kan en enskild person anta både säkerhetsadministratörs- och DBA-roller, vilket innebär att personen måste kunna komma åt och hantera både nycklar/nyckellager och nyckelmetadata. Att hantera nycklar utan rollseparering kan rekommenderas för organisationer som använder DevOps-modellen, eller om databasen finns i molnet och det primära målet är att begränsa molnadministratörer (men inte lokala dbas) från att komma åt känsliga data.

Verktyg för att hantera Always Encrypted-nycklar

Always Encrypted-nycklar kan hanteras med SQL Server Management Studio (SSMS) och PowerShell:

Säkerhetsöverväganden för nyckelhantering

Det primära målet med Always Encrypted är att säkerställa att känsliga data som lagras i en databas är säkra, även om databassystemet eller dess värdmiljö komprometteras. Exempel på säkerhetsattacker där Always Encrypted kan hjälpa till att förhindra känsliga dataläckor är:

  • En skadlig databasanvändare med hög behörighet, till exempel en DBA, som kör frågor mot känsliga datakolumner.
  • En falsk administratör för en dator som är värd för en SQL Server-instans, genomsöker minnet av en SQL Server-process eller SQL Server-processdumpfiler.
  • En operatör med skadligt datacenter som frågar efter en kunddatabas, undersöker SQL Server-dumpfiler eller undersöker minnet av en dator som är värd för kunddata i molnet.
  • Skadlig kod som körs på en dator som är värd för databasen.

För att säkerställa att Always Encrypted är effektivt för att förhindra dessa typer av attacker måste din nyckelhanteringsprocess se till att kolumnhuvudnycklarna och kolumnkrypteringsnycklarna och autentiseringsuppgifterna till ett nyckelarkiv som innehåller kolumnhuvudnycklarna aldrig avslöjas för en potentiell angripare. Här följer några riktlinjer:

  • Generera aldrig kolumnhuvudnycklar eller kolumnkrypteringsnycklar på en dator som är värd för databasen. Generera i stället nycklarna på en separat dator, som antingen är dedikerad för nyckelhantering, eller är en dator som är värd för program som ändå behöver åtkomst till nycklarna. Det innebär att du aldrig ska köra verktyg som används för att generera nycklarna på den dator som är värd för databasen eftersom om en angripare kommer åt en dator som används för att etablera eller underhålla dina Always Encrypted-nycklar kan angriparen potentiellt få dina nycklar, även om nycklarna bara visas i verktygets minne under en kort tid.
  • För att säkerställa att nyckelhanteringsprocessen inte oavsiktligt avslöjar kolumnhuvudnycklar eller kolumnkrypteringsnycklar är det viktigt att identifiera potentiella angripare och säkerhetshot innan du definierar och implementerar en nyckelhanteringsprocess. Om ditt mål till exempel är att säkerställa att databasadministratörer inte har åtkomst till känsliga data kan en databasadministratör inte ansvara för att generera nycklarna. En DBA kan dock hantera viktiga metadata i databasen, eftersom metadata inte innehåller klartextnycklarna.

Nästa steg