Übersicht über die Schlüsselverwaltung für Always Encrypted

Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed Instance

Always Encrypted verwendet zwei Arten von kryptografischen Schlüsseln zum Schutz Ihrer Daten: einen Schlüssel zum Verschlüsseln Ihrer Daten und einen anderen Schlüssel zum Verschlüsseln des Schlüssels, der Ihre Daten verschlüsselt. Der Spaltenverschlüsselungsschlüssel verschlüsselt Ihre Daten, der Spaltenhauptschlüssel verschlüsselt den Spaltenverschlüsselungsschlüssel. Dieser Artikel enthält eine ausführliche Übersicht über die Verwaltung dieser Verschlüsselungsschlüssel.

Wenn es um Always Encrypted-Schlüssel und Schlüsselmanagement geht, ist es wichtig, den Unterschied zwischen den tatsächlichen kryptografischen Schlüsseln und den Metadatenobjekten zu verstehen, die die Schlüssel beschreiben . Die Begriffe Spaltenverschlüsselungsschlüssel und Spaltenhauptschlüssel beziehen sich auf die tatsächlichen kryptografischen Schlüssel, während sich die Begriffe Spaltenverschlüsselungsschlüssel-Metadaten und Spaltenhauptschlüssel-Metadaten auf die Beschreibungen der Always Encrypted-Schlüssel in der Datenbank beziehen.

  • Spaltenverschlüsselungsschlüssel sind Inhaltsverschlüsselungsschlüssel, die zum Verschlüsseln von Daten verwendet werden. Wie der Name schon sagt, verwenden Sie die Spaltenverschlüsselungsschlüssel zum Verschlüsseln von Daten in Datenbankspalten. Je nach den Anforderungen Ihrer Anwendung können Sie eine oder mehrere Spalten mit demselben Spaltenverschlüsselungsschlüssel verschlüsseln oder mehrere Spaltenverschlüsselungsschlüssel verwenden. Die Spaltenverschlüsselungsschlüssel sind selbst verschlüsselt, und nur die verschlüsselten Werte der Spaltenverschlüsselungsschlüssel werden in der Datenbank gespeichert (als Teil der Spaltenverschlüsselungsschlüssel-Metadaten). Die Spaltenverschlüsselungsschlüssel-Metadaten werden in den Katalogsichten sys.column_encryption_keys (Transact-SQL) und sys.column_encryption_key_values (Transact-SQL) gespeichert. Spaltenverschlüsselungsschlüssel, die mit dem AES-256-Algorithmus verwendet werden, sind 256 Bit lang.

  • Spaltenhauptschlüssel sind Schlüsselschutzschlüssel, die zur Verschlüsselung von Spaltenverschlüsselungsschlüsseln verwendet werden. Spaltenhauptschlüssel müssen in einem vertrauenswürdigen Schlüsselspeicher, wie z.B. Windows-Zertifikatspeicher, Azure Key Vault oder einem Hardwaresicherheitsmodul gespeichert werden. Die Datenbank enthält nur Metadaten zu Spaltenhauptschlüsseln (der Schlüsselspeichertyp und -ort). Die Spaltenhauptschlüssel-Metadaten befinden sich in der Katalogsicht sys.column_master_keys (Transact-SQL) .

Die Schlüsselmetadaten im Datenbanksystem enthalten keine Spaltenhauptschlüssel im Klartext und keine Spaltenverschlüsselungsschlüssel im Klartext. Die Datenbank enthält nur Informationen über den Typ und den Speicherort von Spaltenhauptschlüsseln sowie verschlüsselte Werte von Spaltenverschlüsselungsschlüsseln. Dies bedeutet, dass Nur-Text-Schlüssel dem Datenbanksystem niemals zur Verfügung gestellt werden, wodurch sichergestellt wird, dass das Schützen von Daten mithilfe von Always Encrypted sicher ist, selbst wenn das Datenbanksystem kompromittiert wird. Um sicherzustellen, dass das Datenbanksystem keinen Zugriff auf die Nur-Text-Schlüssel erhalten kann, stellen Sie sicher, dass Sie Ihre Schlüsselverwaltungstools auf einem anderen Computer ausführen als die, die Ihre Datenbank hosten. Ausführliche Informationen finden Sie im Abschnitt " Sicherheitsüberlegungen für die Schlüsselverwaltung " weiter unten.

Da die Datenbank nur verschlüsselte Daten (in Always Encrypted geschützte Spalten) enthält und nicht auf die Nur-Text-Schlüssel zugreifen kann, können die Daten nicht entschlüsselt werden. Dies bedeutet, dass beim Abfragen von Always Encrypted-Spalten einfach nur verschlüsselte Werte zurückgegeben werden. Clientanwendungen, die geschützte Daten ver- oder entschlüsseln müssen, benötigen Zugriff auf den Spaltenhauptschlüssel und die verknüpften Spaltenverschlüsselungsschlüssel. Weitere Informationen finden Sie unter Entwickeln von Anwendungen mithilfe von Always Encrypted.

Schlüsselverwaltungsaufgaben

Der Prozess der Schlüsselverwaltung kann in die folgenden grundlegenden Tasks unterteilt werden:

  • Schlüsselbereitstellung: Erstellen der physischen Schlüssel in einem vertrauenswürdigen Schlüsselspeicher (z. B. im Windows Zertifikatspeicher, Azure Key Vault oder einem Hardwaresicherheitsmodul), Verschlüsseln von Spaltenverschlüsselungsschlüsseln mit Spaltenmasterschlüsseln und Erstellen von Metadaten für beide Schlüsseltypen in der Datenbank.

  • Schlüsseldrehung: Ersetzt regelmäßig einen vorhandenen Schlüssel durch einen neuen Schlüssel. Möglicherweise müssen Sie einen Schlüssel rotieren, wenn er kompromittiert wurde oder um die Richtlinien oder Compliance-Bestimmungen Ihrer Organisation einzuhalten, die vorschreiben, dass kryptografische Schlüssel rotiert werden müssen.

Wichtige Verwaltungsrollen

Es gibt zwei unterschiedliche Rollen von Benutzern, die Always Encrypted-Schlüssel verwalten; Sicherheitsadministratoren und Datenbankadministratoren (DBAs):

  • Sicherheitsadministrator: Generiert Spaltenverschlüsselungsschlüssel und Spaltenmasterschlüssel und verwaltet Schlüsselspeicher, die die Spaltenmasterschlüssel enthalten. Um diese Aufgaben auszuführen, muss ein Sicherheitsadministrator auf die Schlüssel und den Schlüsselspeicher zugreifen können, aber keinen Zugriff auf die Datenbank benötigt.
  • DBA: verwaltet Metadaten zu den Schlüsseln in der Datenbank. Ein DBA muss zum Durchführen von Schlüsselverwaltungsaufgaben in der Lage sein, Schlüsselmetadaten in der Datenbank zu verwalten, benötigt jedoch keinen Zugriff auf die Schlüssel oder den Schlüsselspeicher, der die Spaltenhauptschlüssel enthält.

Unter Berücksichtigung der oben erwähnten Rollen gibt es zwei unterschiedliche Arten, Verwaltungsaufgaben für Always Encrypted durchzuführen: per Rollentrennungund ohne Rollentrennung. Je nach den Bedürfnissen Ihrer Organisation können Sie den Schlüsselverwaltungsprozess auswählen, der sich für Ihre Anforderungen am besten eignet.

Verwalten von Schlüsseln mit Rollentrennung

Wenn Always Encrypted-Schlüssel unter Rollentrennung verwaltet werden, übernehmen unterschiedliche Personen in einer Organisation die Rollen des Sicherheitsadministrators und des DBAs. Ein Schlüsselverwaltungsprozess mit Rollentrennung stellt sicher, dass DBAs keinen Zugriff auf die Schlüssel oder Schlüsselspeicher haben, die die tatsächlichen Schlüssel enthalten, und Sicherheitsadministratoren haben keinen Zugriff auf die Datenbank, die vertrauliche Daten enthält. Die Schlüsselverwaltung per Rollentrennung wird empfohlen, wenn Sie erreichen möchten, dass DBAs in Ihrer Organisation keinen Zugriff auf sensible Daten haben.

Note

Sicherheitsadministratoren generieren und arbeiten mit den Nur-Text-Schlüsseln, sodass sie ihre Aufgaben nicht auf denselben Computern ausführen sollten, auf denen ein Datenbanksystem gehostet wird, oder Computer, auf die von DBAs oder anderen Personen zugegriffen werden kann, die potenzielle Gegner sein könnten.

Verwalten von Schlüsseln ohne Rollentrennung

Wenn Immer verschlüsselte Schlüssel ohne Rollentrennung verwaltet werden, kann eine einzelne Person sowohl Sicherheitsadministrator- als auch DBA-Rollen annehmen. Dies bedeutet, dass die Person sowohl auf die Schlüssel-/Schlüsselspeicher als auch auf die Schlüsselmetadaten zugreifen und diese verwalten muss. Die Schlüsselverwaltung ohne Rollentrennung wird für Organisationen empfohlen, die das DevOps-Modell verwenden, oder wenn die Datenbank in der Cloud gehostet wird und das primäre Ziel darin besteht, den Zugriff von Cloudadministratoren auf sensible Daten einzuschränken (nicht jedoch den von On-Premises-DBAs).

Tools für die Verwaltung von Always Encrypted-Schlüsseln

Always Encrypted-Schlüssel können mithilfe von SQL Server Management Studio (SSMS) und PowerShellverwaltet werden:

Sicherheitsüberlegungen für die Schlüsselverwaltung

Das primäre Ziel von Always Encrypted ist es, zu gewährleisten, dass in einer Datenbank gespeicherte sensible Daten sicher sind, selbst wenn das Datenbanksystem oder seine Hostumgebung kompromittiert werden. Beispiele für Sicherheitsangriffe, bei denen Always Encrypted dabei helfen kann, den Verlust von sensiblen Daten zu verhindern, sind u.a. folgende:

  • Ein böswilliger Datenbankbenutzer mit erhöhten Rechten, wie z.B. ein DBA, der Spalten mit sensiblen Daten abfragt.
  • Ein böswilliger Administrator eines Computers, auf dem eine SQL Server-Instanz gehostet wird, der den Speicher eines SQL Server-Prozesses oder die Dumpdateien eines SQL Server-Prozesses scannt.
  • Ein böswilliger Rechenzentrumsoperator, der eine Kundendatenbank abfragt, SQL Server-Dumpdateien oder den Arbeitsspeicher eines Computers liest, der Kundendaten in der Cloud hostet.
  • Schadsoftware, die auf einem Computer ausgeführt wird, auf dem die Datenbank gehostet wird.

Ihr Schlüsselverwaltungsprozess muss sicherstellen, dass die Spaltenhauptschlüssel und die Spaltenverschlüsselungsschlüssel sowie die Anmeldeinformationen für einen Schlüsselspeicher, der die Spaltenhauptschlüssel enthält, niemals einem potenziellen Angreifer angezeigt werden, um zu gewährleisten, dass Always Encrypted diese Arten von Angriffen effektiv verhindert. Im Folgenden finden Sie einige Richtlinien, die Sie befolgen sollten:

  • Generieren Sie niemals Spaltenhauptschlüssel oder Spaltenverschlüsselungsschlüssel auf einem Computer, der Ihre Datenbank hostet. Generieren Sie die Schlüssel stattdessen auf einem separaten Computer, der entweder für die Schlüsselverwaltung vorgesehen ist oder auf dem Anwendungen gehostet werden, die ohnehin Zugriff auf die Schlüssel benötigen. Dies bedeutet, dass Sie niemals Tools ausführen sollten, die für das Generieren der Schlüssel auf dem Computer verwendet werden, der die Datenbank hostet. Wenn nämlich ein Angreifer auf einen Computer zugreift, der für die Bereitstellung oder Verwaltung Ihrer Always Encrypted-Schlüssel verwendet wird, kann er Ihre Schlüssel möglicherweise abrufen, selbst wenn die Schlüssel nur für kurze Zeit im Arbeitsspeicher des Tools angezeigt werden.
  • Es ist wichtig, potenzielle Angreifer und Sicherheitsbedrohungen zu identifizieren, bevor ein Schlüsselverwaltungprozess definiert und implementiert wird, um sicherzustellen, dass ihr Schlüsselverwaltungsprozess nicht aus Versehen Spaltenhauptschlüssel oder Spaltenverschlüsselungsschlüssel offenlegt. Wenn Sie z.B. möchten, dass DBAs keinen Zugriff auf sensible Daten haben, darf ein DBA nicht für das Generieren von Schlüsseln verantwortlich sein. Ein DBA kann jedoch Schlüsselmetadaten in der Datenbank verwalten, da die Nur-Text-Schlüssel in den Metadaten nicht enthalten sind.