Lezen in het Engels

Delen via


Overzicht van sleutelbeheer voor Always Encrypted

van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Always Encrypted- gebruikt twee typen cryptografische sleutels om uw gegevens te beveiligen: één sleutel voor het versleutelen van uw gegevens en een andere sleutel om de sleutel te versleutelen waarmee uw gegevens worden versleuteld. De kolomversleutelingssleutel versleutelt uw gegevens, de kolomhoofdsleutel versleutelt de kolomversleutelingssleutel. Dit artikel bevat een gedetailleerd overzicht voor het beheren van deze versleutelingssleutels.

Bij het bespreken van Always Encrypted-sleutels en sleutelbeheer is het belangrijk om inzicht te hebben in het onderscheid tussen de daadwerkelijke cryptografische sleutels en de metagegevensobjecten die beschrijven de sleutels. We gebruiken de termen kolomversleutelingssleutel en kolomhoofdsleutel om te verwijzen naar de werkelijke cryptografische sleutels. We gebruiken metagegevens van kolomversleutelingssleutels en metagegevens van kolomhoofdsleutels om te verwijzen naar de beschrijvingen van de Always Encrypted-sleutel in de database.

  • kolomversleutelingssleutels zijn versleutelingssleutels voor inhoud die worden gebruikt om gegevens te versleutelen. Zoals de naam al aangeeft, gebruikt u kolomversleutelingssleutels om gegevens in databasekolommen te versleutelen. U kunt een of meer kolommen versleutelen met dezelfde kolomversleutelingssleutel of u kunt meerdere kolomversleutelingssleutels gebruiken, afhankelijk van uw toepassingsvereisten. De kolomversleutelingssleutels worden zelf versleuteld en alleen de versleutelde waarden van de kolomversleutelingssleutels worden opgeslagen in de database (als onderdeel van de metagegevens van de kolomversleutelingssleutel). De metagegevens van de kolomversleutelingssleutel worden opgeslagen in de sys.column_encryption_keys (Transact-SQL) en sys.column_encryption_key_values (Transact-SQL) catalogusweergaven. Kolomversleutelingssleutels die worden gebruikt met het AES-256-algoritme zijn 256-bits lang.

  • kolomhoofdsleutels zijn sleutels die worden gebruikt om kolomversleutelingssleutels te versleutelen. Kolomhoofdsleutels moeten worden opgeslagen in een vertrouwd sleutelarchief, zoals Windows Certificate Store, Azure Key Vault of een hardwarebeveiligingsmodule. De database bevat alleen metagegevens over kolomhoofdsleutels (het type sleutelarchief en de locatie). De metagegevens van de kolomhoofdsleutel worden opgeslagen in de sys.column_master_keys (Transact-SQL) catalogusweergave.

Het is belangrijk te weten dat de sleutelmetagegevens in het databasesysteem geen plaintext kolomsleutels of plaintext kolom-encryptiesleutels bevatten. De database bevat alleen informatie over het type en de locatie van kolomhoofdsleutels en versleutelde waarden van kolomversleutelingssleutels. Dit betekent dat niet-versleutelde sleutels nooit worden blootgesteld aan het databasesysteem om ervoor te zorgen dat gegevens die zijn beveiligd met Always Encrypted veilig zijn, zelfs als het databasesysteem wordt aangetast. Als u ervoor wilt zorgen dat het databasesysteem geen toegang krijgt tot de plaintext-sleutels, moet u de hulpprogramma's voor sleutelbeheer uitvoeren op een andere computer dan het systeem dat als host fungeert voor uw database. Raadpleeg de sectie Beveiligingsoverwegingen voor sleutelbeheer hieronder voor details.

Omdat de database alleen versleutelde gegevens bevat (in met Always Encrypted beveiligde kolommen) en geen toegang heeft tot de niet-versleutelde tekstsleutels, kunnen de gegevens niet worden ontsleuteld. Dit betekent dat het uitvoeren van query's op Always Encrypted-kolommen alleen versleutelde waarden retourneert, zodat clienttoepassingen die beveiligde gegevens moeten versleutelen of ontsleutelen toegang moeten hebben tot de hoofdsleutel van de kolom en gerelateerde kolomversleutelingssleutels. Zie Toepassingen ontwikkelen met Always Encryptedvoor meer informatie.

Taken voor sleutelbeheer

Het proces voor het beheren van sleutels kan worden onderverdeeld in de volgende taken op hoog niveau:

  • sleutelinrichting: het maken van de fysieke sleutels in een vertrouwd sleutelarchief (bijvoorbeeld in het Windows-certificaatarchief, Azure Key Vault of een hardwarebeveiligingsmodule), het versleutelen van kolomversleutelingssleutels met kolomhoofdsleutels en het maken van metagegevens voor beide typen sleutels in de database.

  • sleutelrotatie: een bestaande sleutel periodiek vervangen door een nieuwe sleutel. Mogelijk moet u een sleutel vervangen of aanpassen als de sleutel is aangetast, of om te voldoen aan het beleid van uw organisatie of aan de nalevingsregels die vereisen dat cryptografische sleutels regelmatig worden gewijzigd.

Belangrijke beheerrollen

Er zijn twee verschillende rollen van gebruikers die Always Encrypted-sleutels beheren; Beveiligingsbeheerders en databasebeheerders (DBA's):

  • beveiligingsbeheerder: genereert kolomversleutelingssleutels en kolomhoofdsleutels en beheert sleutelarchieven die de kolomhoofdsleutels bevatten. Om deze taken uit te voeren, moet een beveiligingsbeheerder toegang hebben tot de sleutels en het sleutelarchief, maar heeft geen toegang tot de database nodig.
  • DBA- : beheert metagegevens over de sleutels in de database. Voor het uitvoeren van sleutelbeheertaken moet een DBA sleutelmetagegevens in de database kunnen beheren, maar heeft geen toegang nodig tot de sleutels of het sleutelarchief met de kolomhoofdsleutels.

Gezien de bovenstaande rollen zijn er twee verschillende manieren om belangrijke beheertaken uit te voeren voor Always Encrypted; met rolscheidingen zonder rolscheiding. Afhankelijk van de behoeften van uw organisatie kunt u het sleutelbeheerproces selecteren dat het beste bij uw behoeften past.

Sleutels beheren met rolscheiding

Wanneer Always Encrypted-sleutels worden beheerd met scheiding van rollen, nemen verschillende personen in een organisatie de rollen Beveiligingsbeheerder en DBA aan. Een sleutelbeheerproces met functiescheiding zorgt ervoor dat DBA's geen toegang hebben tot de sleutels of sleutelarchieven die de werkelijke sleutels bevatten, en beveiligingsbeheerders hebben geen toegang tot de database met gevoelige gegevens. Het beheren van sleutels met scheiding van rollen wordt aanbevolen als u ervoor wilt zorgen dat DBA's in uw organisatie geen toegang hebben tot gevoelige gegevens.

Opmerking: beveiligingsbeheerders de sleutels voor tekst zonder opmaak genereren en ermee werken, zodat ze nooit hun taken mogen uitvoeren op dezelfde computers die als host fungeren voor een databasesysteem, of computers die toegankelijk zijn voor DBA's of andere personen die mogelijk kwaadwillende personen zijn.

Sleutels beheren zonder rolscheiding

Wanneer Always Encrypted-sleutels worden beheerd zonder scheiding van rollen, kan één persoon zowel de rollen Beveiligingsbeheerder als DBA aannemen. Dit betekent dat de persoon zowel de sleutels/sleutelarchieven als de sleutelmetagegevens moet kunnen openen en beheren. Het beheren van sleutels zonder rolscheiding kan worden aanbevolen voor organisaties die het DevOps-model gebruiken, of als de database wordt gehost in de cloud en het primaire doel is om cloudbeheerders (maar niet on-premises DBA's) toegang te geven tot gevoelige gegevens.

Hulpprogramma's voor het beheren van Always Encrypted-sleutels

Always Encrypted-sleutels kunnen worden beheerd met SSMS- (SQL Server Management Studio) en PowerShell-:

Beveiligingsoverwegingen voor sleutelbeheer

Het primaire doel van Always Encrypted is om ervoor te zorgen dat gevoelige gegevens die zijn opgeslagen in een database veilig zijn, zelfs als het databasesysteem of de hostingomgeving wordt aangetast. Voorbeelden van beveiligingsaanvallen waarbij Always Encrypted kan helpen bij het voorkomen van gevoelige gegevenslekken, zijn:

  • Een kwaadwillende databasegebruiker met hoge bevoegdheden, zoals een DBA, die query's uitvoert op gevoelige gegevenskolommen.
  • Een malafide beheerder van een computer die als host fungeert voor een SQL Server-exemplaar, die het geheugen van een SQL Server-proces scant, of die dumpbestanden van SQL Server-processen onderzoekt.
  • Een kwaadwillende datacenteroperator die een query uitvoert op een klantdatabase, SQL Server-dumpbestanden onderzoekt of het geheugen van een computer die klantgegevens host in de cloud onderzoekt.
  • Malware die wordt uitgevoerd op een computer die als host fungeert voor de database.

Om ervoor te zorgen dat Always Encrypted effectief is bij het voorkomen van deze soorten aanvallen, moet uw sleutelbeheerproces ervoor zorgen dat de hoofdsleutels van de kolom en kolomversleutelingssleutels en referenties voor een sleutelarchief met de kolomhoofdsleutels nooit worden onthuld aan een potentiële aanvaller. Hier volgen enkele richtlijnen die je moet volgen:

  • Genereer nooit kolomhoofdsleutels of kolomversleutelingssleutels op een computer die als host fungeert voor uw database. Genereer in plaats daarvan de sleutels op een afzonderlijke computer, die is toegewezen voor sleutelbeheer, of is een computer die toepassingen host die toch toegang nodig hebben tot de sleutels. Dit betekent dat u nooit hulpprogramma's moet uitvoeren die worden gebruikt om de sleutels te genereren op de computer waarop uw database wordt gehost, omdat als een aanvaller toegang heeft tot een computer die wordt gebruikt om uw Always Encrypted-sleutels in te richten of te onderhouden, de aanvaller mogelijk uw sleutels kan ophalen, zelfs als de sleutels slechts een korte tijd in het geheugen van het hulpprogramma worden weergegeven.
  • Om ervoor te zorgen dat uw sleutelbeheerproces niet per ongeluk hoofdsleutels of kolomversleutelingssleutels weergeeft, is het essentieel om potentiële kwaadwillende gebruikers en beveiligingsrisico's te identificeren voordat u een sleutelbeheerproces definieert en implementeert. Als u er bijvoorbeeld voor wilt zorgen dat DBA's geen toegang hebben tot gevoelige gegevens, kan een DBA niet verantwoordelijk zijn voor het genereren van de sleutels. Een DBA kan echter belangrijke metadata in de database beheren, omdat de metadata geen platte tekst sleutels bevatten.

Volgende stappen