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

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

Always Encrypted verwendet zwei Typen von kryptografischen Schlüsseln zum Schützen 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.

Bei der Diskussion über Immer verschlüsselte Schlüssel und die Schlüsselverwaltung 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. Sie können eine oder mehrere Spalten mit demselben Spaltenverschlüsselungsschlüssel verschlüsseln oder je nach Anwendungsanforderungen 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) .

Beachten Sie, dass die Schlüsselmetadaten im Datenbanksystem keine Nur-Text-Spaltenmasterschlüssel oder Verschlüsselungsschlüssel für Nur-Text-Spalten enthalten. 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 als dem ausführen, auf dem Ihre Datenbank gehostet wird. 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 protected columns) enthält und nicht auf die Nur-Text-Schlüssel zugreifen kann, kann sie die Daten nicht entschlüsseln. 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üsselverwaltungs-Tasks

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

  • Schlüsselbereitstellung – Erstellen des physischen Schlüssels in einem vertrauenswürdigen Schlüsselspeicher (z.B. im Windows-Zertifikatspeicher, Azure Key Vault oder einem Hardwaresicherheitsmodul), Verschlüsseln von Spaltenverschlüsselungsschlüsseln mithilfe von Spaltenhauptschlüsseln und Erstellen von Metadaten für beide Schlüsseltypen in der Datenbank

  • Schlüsselrotation – Ersetzen eines vorhandenen Schlüssels mit einem neuen Schlüssel in regelmäßigen Abständen Sie müssen einen Schlüssel möglicherweise rotieren, wenn er kompromittiert wurde, oder um die Richtlinien und Kompatibilitätsbestimmungen Ihrer Organisation einzuhalten, die die Rotation kryptografischer Schlüssel vorschreiben.

Schlüsselverwaltungsrollen

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

  • Sicherheitsadministrator : generiert Spaltenverschlüsselungsschlüssel und Spaltenhauptschlüssel und verwaltet die Schlüsselspeicher, die die Spaltenhauptschlü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 die Metadaten zu den Schlüsseln in der Datenbank. Zum Ausführen von Schlüsselverwaltungsaufgaben muss ein DBA in der Lage sein, Schlüsselmetadaten in der Datenbank zu verwalten, jedoch keinen Zugriff auf die Schlüssel oder den Schlüsselspeicher, der die Spaltenmasterschlü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 per Rollentrennung

Wenn Always Encrypted-Schlüssel per Rollentrennung verwaltet werden, übernehmen verschiedene Personen in einer Organisation die Rollen des Sicherheits- und Datenbankadministrators. Ein Schlüsselverwaltungsprozess mit Rollentrennung gewährleistet, dass DBAs keinen Zugriff auf den Schlüssel oder die Schlüsselspeicher haben, die die tatsächlichen Schlüssel enthalten, und dass Sicherheitsadministratoren keinen Zugriff auf die Datenbank haben, die sensible Daten enthält. Das Verwalten von Schlüsseln mit Rollentrennung wird empfohlen, wenn Ihr Ziel darin besteht, sicherzustellen, dass DBAs in Ihrer Organisation nicht auf vertrauliche Daten zugreifen können.

Hinweis: Sicherheitsadministratoren generieren die Nur-Text-Schlüssel und arbeiten mit ihnen. Daher sollten sie ihre Aufgaben nie auf den gleichen Computern ausführen, auf denen auch ein Datenbanksystem gehostet wird, oder auf die von Datenbankadministratoren oder anderen Personen zugegriffen werden kann, die potenziell gefährlich sein könnten.

Verwalten von Schlüsseln ohne Rollentrennung

Wenn Always Encrypted-Schlüssel ohne Rollentrennung verwaltet werden, kann eine einzelne Person sowohl Sicherheitsadministrator- als auch DBA-Rollen annehmen, was bedeutet, dass die Person auf die Schlüssel-/Schlüsselspeicher und die Schlüsselmetadaten zugreifen und diese verwalten muss. Die Schlüsselverwaltung ohne Rollentrennung wird für Organisationen empfohlen, die das DevOps-Modell verwenden, oder für Fälle, in denen die Datenbank in der Cloud gehostet wird und das primäre Ziel ist, Cloudadministratoren (nicht jedoch lokalen DBAs) den Zugriff auf sensible Daten zu verweigern.

Tools zum Verwalten 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 nicht autorisierter Administrator eines Computers, der eine SQL Server-Instanz hostet, der den Arbeitsspeicher oder Abbilddateien 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.

Um sicherzustellen, dass Always Encrypted wirksam ist, um diese Arten von Angriffen zu verhindern, muss Ihr Schlüsselverwaltungsprozess sicherstellen, dass die Spaltenmasterschlüssel und Spaltenverschlüsselungsschlüssel sowie Anmeldeinformationen für einen Schlüsselspeicher, der die Spaltenmasterschlüssel enthält, niemals einem potenziellen Angreifer offenbart werden. 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.
  • Um sicherzustellen, dass Ihr Schlüsselverwaltungsprozess nicht versehentlich Spaltenmasterschlüssel oder Spaltenverschlüsselungsschlüssel offenlegt, ist es wichtig, potenzielle Gegner und Sicherheitsbedrohungen zu identifizieren, bevor sie einen Schlüsselverwaltungsprozess definieren und implementieren. Wenn Sie beispielsweise sicherstellen möchten, dass DBAs keinen Zugriff auf vertrauliche Daten haben, kann ein DBA nicht für die Generierung der Schlüssel verantwortlich sein. Ein DBA kann jedoch Schlüsselmetadaten in der Datenbank verwalten, da die Metadaten nicht die Nur-Text-Schlüssel enthalten.

Nächste Schritte