Schützen von Daten mit Verschlüsselung

Abgeschlossen

Die Datenverschlüsselung bildet die Grundlage der Datenbanksicherheit. Auch wenn Angreifer Zugriff auf Ihren zugrunde liegenden Speicher erhalten, behält die Verschlüsselung Ihre vertraulichen Informationen unlesbar. Die SQL-Plattformen von Microsoft bieten mehrere Verschlüsselungsoptionen, von dem Schutz ruhender Daten bis zum Sichern von Daten während der Verarbeitung.

Wenn Sie wissen, wann jede Methode verwendet werden soll, können Sie den Schutz mit der Leistung in Einklang bringen. Sehen wir uns die Verschlüsselungstechnologien an, die in SQL Server-, Azure SQL- und SQL-Datenbanken in Microsoft Fabric verfügbar sind.

Grundlegendes zu Verschlüsselungsebenen

Die Datenbankverschlüsselung arbeitet auf unterschiedlichen Ebenen, wobei jedes Problem gelöst wird. Transparente Datenverschlüsselung (TDE) verschlüsselt ruhende Daten – denken Sie daran, dass sie Ihre Datenbankdateien auf dem Datenträger schützen. Die Verschlüsselung auf Spaltenebene zielt auf bestimmte vertrauliche Spalten ab, während Always Encrypted weitergeht, indem Daten während des gesamten Lebenszyklus geschützt werden, auch während der Abfrageverarbeitung.

Diagramm, das drei Verschlüsselungsebenen vergleicht: TDE auf Datenbankdateiebene, Verschlüsselung auf Spaltenebene bei bestimmten Spalten und Always Encrypted mit Verschlüsselungsschlüsseln, die außerhalb der Datenbank auf Clientanwendungsebene gespeichert sind.

Wenn Sie TDE aktivieren, verschlüsselt SQL Server automatisch Datenbankdateien, Transaktionsprotokolle und Sicherungen. Ihre Anwendungen benötigen keine Codeänderungen – die Verschlüsselung erfolgt transparent hinter den Kulissen. TDE verwendet einen Datenbankverschlüsselungsschlüssel, der durch ein in der master Datenbank gespeichertes Zertifikat geschützt ist.

Verschlüsselung auf Spaltenebene funktioniert anders. Sie verschlüsseln und entschlüsseln Daten in Ihrem T-SQL-Code oder Ihrer Anwendung explizit, sodass Sie präzise steuern können, welche Spalten vertrauliche Daten enthalten und wer sie entschlüsseln kann.

Always Encrypted verwendet noch einen anderen Ansatz, indem Verschlüsselungsschlüssel außerhalb des Datenbankmoduls vollständig beibehalten werden. Die Datenbank sieht niemals Ihre Nur-Text-Daten, was bedeutet, dass sogar Datenbankadministratoren mit hohem Zugriff geschützte Informationen nicht anzeigen können.

Konfigurieren von Always Encrypted

Always Encrypted stellt sicher, dass das Datenbankmodul niemals Nur-Text-Werte verarbeitet. Ihre Clientanwendungen enthalten die Verschlüsselungsschlüssel und behandeln alle Verschlüsselungs- und Entschlüsselungs-Vorgänge. Diese Trennung bedeutet, dass auch jemand mit Administratorzugriff auf die Datenbank die geschützten Daten nicht anzeigen kann.

Diagramm mit dem Datenfluss für Always Encrypted, in dem Clientanwendungen Daten verschlüsseln und entschlüsseln, während das Datenbankmodul nur Chiffretext verarbeitet.

Um mit Always Encrypted zu beginnen, erstellen Sie zuerst einen Spaltenmasterschlüssel (CMK), der Ihre Spaltenverschlüsselungsschlüssel schützt. Speichern Sie die CMK in einem sicheren Schlüsselspeicher wie Azure Key Vault, Windows Certificate Store oder einem Hardwaresicherheitsmodul.

Die folgende T-SQL-Anweisung erstellt einen Metadateneintrag, der auf Ihren Schlüssel im Azure Key Vault verweist. Das eigentliche Schlüsselmaterial verbleibt im Tresor, nie in der Datenbank gespeichert.

CREATE COLUMN MASTER KEY MyCMK
WITH (
    KEY_STORE_PROVIDER_NAME = 'AZURE_KEY_VAULT',
    KEY_PATH = 'https://mykeyvault.vault.azure.net/keys/MyCMK/abc123'
);

Erstellen Sie als Nächstes einen durch den Spaltenmasterschlüssel geschützten Spaltenverschlüsselungsschlüssel (Column Encryption Key, CEK):

CREATE COLUMN ENCRYPTION KEY MyCEK
WITH VALUES (
    COLUMN_MASTER_KEY = MyCMK,
    ALGORITHM = 'RSA_OAEP',
    ENCRYPTED_VALUE = 0x01700000016C006F00...
);

Beachten Sie, dass der CEK selbst in verschlüsselter Form gespeichert ist. Wenn Ihre Anwendung mit verschlüsselten Daten arbeiten muss, ruft sie diesen Wert ab und verwendet die CMK, um sie lokal zu entschlüsseln.

Beim Erstellen oder Ändern von Tabellen geben Sie den Verschlüsselungstyp für vertrauliche Spalten an:

CREATE TABLE Employees (
    EmployeeID int PRIMARY KEY,
    SSN char(11) COLLATE Latin1_General_BIN2
        ENCRYPTED WITH (
            ENCRYPTION_TYPE = DETERMINISTIC,
            ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256',
            COLUMN_ENCRYPTION_KEY = MyCEK
        ),
    Salary money
        ENCRYPTED WITH (
            ENCRYPTION_TYPE = RANDOMIZED,
            ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256',
            COLUMN_ENCRYPTION_KEY = MyCEK
        )
);

Sie haben zwei Verschlüsselungstypen, aus denen Sie wählen können. Verwenden Sie deterministisch, wenn Sie Gleichheitsvergleiche, Verknüpfungen oder Filter mit WHERE Klauseln durchführen müssen – derselbe Klartext erzeugt stets denselben Chiffretext. Verwenden Sie randomisiert für eine stärkere Sicherheit, wenn Sie diese Abfragevorgänge nicht benötigen.

Implementieren der Verschlüsselung auf Spaltenebene

Die Verschlüsselung auf Spaltenebene mit T-SQL-Funktionen bietet Ihnen eine Alternative, wenn Sie mehr Kontrolle über den Verschlüsselungsprozess benötigen oder wenn Always Encrypted nicht in die richtige Form passt. Bei diesem Ansatz verwalten Sie symmetrische oder asymmetrische Schlüssel, die in der Datenbank gespeichert sind.

Erstellen Sie zunächst einen Datenbankmasterschlüssel und ein Zertifikat:

CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'StrongPassword123!';

CREATE CERTIFICATE SensitiveDataCert
WITH SUBJECT = 'Certificate for sensitive data encryption';

Erstellen Sie einen symmetrischen Schlüssel, der durch das Zertifikat geschützt ist:

CREATE SYMMETRIC KEY SensitiveDataKey
WITH ALGORITHM = AES_256
ENCRYPTION BY CERTIFICATE SensitiveDataCert;

Um Daten zu verschlüsseln, öffnen Sie den symmetrischen Schlüssel, und verwenden Sie die ENCRYPTBYKEY Funktion:

OPEN SYMMETRIC KEY SensitiveDataKey
DECRYPTION BY CERTIFICATE SensitiveDataCert;

INSERT INTO CustomerData (CustomerID, CreditCardNumber)
VALUES (1, ENCRYPTBYKEY(KEY_GUID('SensitiveDataKey'), '4111-1111-1111-1111'));

CLOSE SYMMETRIC KEY SensitiveDataKey;

Die Entschlüsselung folgt einem ähnlichen Muster mit DECRYPTBYKEY:

OPEN SYMMETRIC KEY SensitiveDataKey
DECRYPTION BY CERTIFICATE SensitiveDataCert;

SELECT CustomerID, 
       CONVERT(varchar(20), DECRYPTBYKEY(CreditCardNumber)) AS CardNumber
FROM CustomerData;

CLOSE SYMMETRIC KEY SensitiveDataKey;

Ja, dieser Ansatz erfordert mehr Arbeit – Sie verwalten Schlüssel explizit in Ihrem Code. Aber diese Komplexität kommt mit Flexibilität. Sie können dem symmetrischen Schlüssel Berechtigungen erteilen oder verweigern, sodass Sie genau steuern können, wer Ihre Daten entschlüsseln kann.

Auswählen des richtigen Verschlüsselungsansatzes

Welche Verschlüsselungsmethode sollten Sie verwenden? Dies hängt von Ihren Sicherheitsanforderungen und Anwendungseinschränkungen ab.

TDE ist Ihre beste Wahl, wenn Sie ruhende Daten schützen müssen, ohne den Anwendungscode zu berühren. Es eignet sich hervorragend für Complianceanforderungen, die die Verschlüsselung von Datenbankdateien und Sicherungen erfordern. Bedenken Sie jedoch, dass TDE keine Daten vor Benutzern schützt, die eine Verbindung mit der Datenbank mit den richtigen Berechtigungen herstellen können.

Always Encrypted ist ideal, wenn Sie Daten vor Datenbankadministratoren schützen müssen oder wenn sensible Daten auch während der Abfrageverarbeitung verschlüsselt bleiben müssen. Der Kompromiss? Sie benötigen Clienttreiberunterstützung, und Sie sind in den Vorgängen eingeschränkt, die Sie für verschlüsselte Spalten ausführen können.

Die Verschlüsselung auf Spaltenebene funktioniert gut, wenn Sie präzise Kontrolle über Verschlüsselung und Entschlüsselung benötigen oder wenn Sie bestimmte Spalten ohne den Infrastrukturaufwand von Always Encrypted verschlüsseln möchten. Es erfordert mehr Entwicklungsaufwand, aber Sie erhalten maximale Flexibilität in der Schlüsselverwaltung.

Tipp

Sie können Verschlüsselungsmethoden kombinieren. Aktivieren Sie z. B. TDE für den grundlegenden Schutz ruhender Daten, und fügen Sie "Always Encrypted" für Ihre vertraulichsten Spalten hinzu.

Für SQL-Datenbanken in Microsoft Fabric ist TDE standardmäßig aktiviert und automatisch verwaltet. Konzentrieren Sie sich auf Ihre Entscheidungen im Verschlüsselungsentwurf auf Schutz auf Spaltenebene mithilfe der Always Encrypted- oder symmetrischen Schlüsselverschlüsselung basierend auf Ihren Anwendungsanforderungen.