Objectversleuteling en beveiligde enclaves uitleggen

Voltooid

Naast het ondersteunen van versleuteling-at-rest ondersteunt SQL Server het versleutelen van gegevens in kolommen met Always Encrypted. Zodra de gegevens zijn versleuteld, moet de toepassing die toegang heeft tot de database het juiste certificaat hebben om de waarden voor tekst zonder opmaak van de gegevens weer te geven.

Altijd versleuteld

Met Always Encrypted kunt u gegevens in de clienttoepassing versleutelen, gevoelige gegevens beschermen tegen malware en gebruikers met hoge bevoegdheden, zoals Database Beheer istrators (DBA's), serverbeheerders, cloudbeheerders of degenen die de gegevens beheren, maar geen toegang hebben. Deze versleuteling gebeurt automatisch op basis van de instellingen in de Microsoft SQL Server-database, die de toepassing vertellen wat de versleutelingsinstellingen in de databasekolom zijn.

De volgende tabel bevat enkele scenario's voor Always Encrypted-gebruik:

Scenario Definitie
Client en gegevens on-premises Voor scenario's waarin u uw on-premises database moet beveiligen tegen gebruikers met hoge bevoegdheden, bijvoorbeeld externe leveranciers die SQL Server beheren.
On-premises client met gegevens in Azure In dit scenario, om ervoor te zorgen dat Microsoft-cloudbeheerders geen toegang hebben tot de gegevens, worden Always Encrypted-sleutels opgeslagen in het sleutelarchief dat on-premises wordt gehost, voor SQL Database of SQL Server die wordt uitgevoerd op een virtuele machine in Microsoft Azure.
Client en gegevens in Azure In dit scenario wordt de omgeving volledig gehost in Azure. Hoewel Always Encrypted gegevens niet volledig isoleert van cloudbeheerders, profiteert de klant nog steeds van het feit dat de gegevens in de database zijn versleuteld.

Always Encrypted is gebaseerd op een hoofdversleutelingssleutel en een kolomversleutelingssleutel. Als u beide sleutels hebt, kan elke kolom worden versleuteld met behulp van een andere versleutelingssleutel voor maximale gegevensbeveiliging. Always Encrypted heeft verschillende sleutelarchieven waarmee het certificaat kan worden opgeslagen dat wordt gebruikt door versleuteling.

Hier volgt een voorbeeld van het inschakelen van Always Encrypted. Zoals hieronder wordt weergegeven, ziet u dat de kolommen NationalIDNumber en BirthDate beide in tekst zonder opmaak staan.

Query from Unencrypted table for Always Encrypted.

In de volgende afbeeldingen ziet u hoe we beide kolommen kunnen versleutelen met Always Encrypted. De versleuteling kan worden uitgevoerd met behulp van T-SQL, maar in dit voorbeeld ziet u de wizard van SQL Server Management Studio. U kunt de wizard bereiken door met de rechtermuisknop op de tabelnaam in Objectverkenner te klikken, zoals hieronder wordt weergegeven.

Launching the Encryption Wizard in SQL Server Management Studio.

Wanneer u Kolommen versleutelen selecteert ..., wordt de wizard gestart.

Always Encrypted Wizard launch screen from SSMS.

In de onderstaande afbeelding ziet u het startscherm Always Encrypted. Selecteer Volgende om de kolommen te kiezen die u wilt versleutelen.

Column selection screen for Always Encrypted Wizard.

In de bovenstaande afbeelding zijn er twee verschillende typen versleuteling opgegeven. De kolom NationalIDNumber wordt versleuteld met deterministische versleuteling en de kolom BirthDate wordt versleuteld met behulp van gerandomiseerde versleuteling.

Gerandomiseerde versleuteling is veiliger dan deterministische versleuteling, maar is beperkter. Het type versleuteling kan niet worden gewijzigd nadat de kolom is gemaakt. Het is raadzaam om willekeurige versleuteling te gebruiken voor kolommen met enkele bekende afzonderlijke waarden die mogelijk kunnen worden geraden door iemand met toegang tot de versleutelde waarden. Een voorbeeld van een mogelijk denkbare kolom is een verificatiecode van drie cijfers voor creditcards.

Het gebruik van Always Encrypted met gerandomiseerde versleuteling is beperkter omdat de randomisatie betekent dat dezelfde waarde niet altijd op dezelfde manier wordt versleuteld. Het enige wat u kunt doen met kolommen met willekeurige versleuteling, is om ze in uw resultaten te retourneren. Deterministische versleuteling codeert altijd een waarde als dezelfde tekenreeks, waarmee we kolommen kunnen vergelijken met een constante met behulp van gelijkheids- en ongelijkheidsoperators, en kolommen met elkaar vergelijken om joins, groepering en indexering uit te voeren.

Een ander belangrijk punt is dat de wizard een kolomversleutelingssleutel genereert. Dit is de sleutel waarmee de gegevensversleuteling daadwerkelijk wordt uitgevoerd. Elke kolom die wordt versleuteld, kan een eigen sleutel hebben, of zoals hier wordt weergegeven, kunt u dezelfde sleutel gebruiken om beide kolommen te versleutelen.

Nadat u de kolommen hebt geïdentificeerd die u versleutelt, kunt u Volgende selecteren en ziet u het scherm Hoofdsleutelconfiguratie:

Master Key Configuration for Always Encrypted Wizard.

In dit scherm maakt u de kolomhoofdsleutel, die wordt gebruikt om de kolomversleutelingssleutels te versleutelen. U kunt uw eigen sleutel opgeven als u T-SQL gebruikt om de kolommen te versleutelen. Deze sleutel moet worden opgeslagen in een sleutelarchief, zoals het Windows-certificaatarchief, Azure Key Vault of een hardwarebeveiligingsmodule. De database-engine slaat nooit de hoofdsleutel van de kolom op en bevat alleen de metagegevens over waar deze wordt opgeslagen. Als u de hoofdsleutel niet opslaat, worden gegevenstoegang beschermd tegen gebruikers die volledige toegang tot de database hebben.

Voor het hoogste beveiligingsniveau moet de sleutel worden opgeslagen in een sleutelarchief van derden, zoals Azure Key Vault. Genereer nooit de sleutels op de server die als host fungeert voor uw database, omdat de sleutel mogelijk kan worden geëxtraheerd uit het geheugen op die server.

In het onderstaande voorbeeld wordt de sleutel opgeslagen in Azure Key Vault. In het volgende scherm geeft de wizard u de mogelijkheid om het versleutelingsproces nu te voltooien of om een PowerShell-script te genereren. Zodra u het proces hebt voltooid, worden de gegevens weergegeven als versleuteld voor iedereen die de gegevens opvraagt zonder de sleutel.

Employees Table with Encrypted Data from SSMS.

Als u gegevens wilt ontsleutelen vanuit een Always Encrypted-kolom, heeft uw toepassing een Always Encrypted-stuurprogramma nodig om verbinding te maken met de database, gevolgd door de onderstaande acties:

  1. De toepassing heeft toegang tot het sleutelarchief waar de Always Encrypted-sleutels worden opgeslagen
  2. De toepassing haalt vervolgens de gegevens op
  3. Gegevens die naar de database worden teruggeschreven, worden versleuteld op de client via het stuurprogramma

Naast het stuurprogramma moet de verbindingsreeks van de toepassing de instelling Kolomversleutelingsinstelling =ingeschakeld hebben. Deze instelling zorgt ervoor dat er een metagegevenszoekactie wordt uitgevoerd voor elke kolom die door de toepassing wordt gebruikt.

Notitie

Als u het opzoeken van metagegevens wilt minimaliseren, moet de toepassing de SqlCommandColumnEncryptionSetting op de Sql Verbinding maken ion-objecten in de .NET-toepassing bijwerken. Deze instellingen moeten worden ingesteld voor elke databasequery die door de toepassing wordt verzonden.

Beveiligde enclaves

Always Encrypted biedt ondersteuning voor een functie genaamd beveiligde enclaves, waardoor er krachtiger query's kunnen worden uitgevoerd op versleutelde gegevens.

Een beveiligde enclave is een beveiligd geheugengebied binnen het SQL Server-proces dat fungeert als een vertrouwde uitvoeringsomgeving voor het verwerken van versleutelde gegevens. Deze enclave wordt weergegeven als een zwarte doos voor SQL Server en het is niet mogelijk om gegevens of code weer te geven, zelfs niet met een foutopsporingsprogramma.

In de onderstaande afbeelding ziet u de architectuur van dit proces:

Secure Enclaves Architecture for Always Encrypted.

Always Encrypted met beveiligde enclaves heeft ook betrekking op enkele beperkingen van gerandomiseerde versleuteling, waardoor patroonkoppeling, vergelijkingsbewerkingen en indexering van kolommen mogelijk zijn met behulp van dit versleutelingstype.