Datenbanken

Sichern Sie Ihre Daten mit Actian Vector, Teil 2

Martin Fuerderer

Januar 13, 2025

Sichern Sie Ihre Daten mit Actian Vector hero image

Anknüpfend an meinen ersten Blog-Beitrag über Actian Vector's Funktionen, erklärt der nächste Blog-Beitrag in der Serie über Datensicherheit die funktionsbasierte Verschlüsselung in Actian Vector.

Funktionsbasierte Verschlüsselung in Actian Vector

Die Verschlüsselung, die vollständig von einer Datenbankanwendung gesteuert wird, wird in Actian Vector als funktionsbasierte Verschlüsselung bezeichnet. Die Anwendung verwendet ein Paar eingebauter SQL-Funktionen, um einzelne Datenwerte in Tabellenspalten zu verschlüsseln und zu entschlüsseln. Abgesehen von der Anwendung dieser Funktionen auf die Daten gemäß den SQL-Anweisungen, behandelt der Datenbankserver die verschlüsselten Daten auf keine besondere Weise. Insbesondere ist der Datenbankserver nicht in der Lage, die verschlüsselten Daten eigenständig zu entschlüsseln.

Die Anwendung gibt eine Passphrase mit der Verschlüsselungsfunktion an und muss dieselbe Passphrase erneut mit der Entschlüsselungsfunktion angeben. Der Datenbankserver leitet aus der angegebenen Passphrase einen symmetrischen Verschlüsselungsschlüssel ab und verwendet diesen Schlüssel zur Ver- oder Entschlüsselung der Daten. Weder die Passphrase noch der abgeleitete Chiffrierschlüssel werden irgendwo im Datenbankserver gespeichert. Die Anwendung ist immer dafür verantwortlich, der Ver- und Entschlüsselungsfunktion die richtige Passphrase zu liefern.

In der Regel wählt die Anwendung eine Passphrase und verwendet die Verschlüsselungsfunktion beim Einfügen von Datenwerten in eine Tabelle. Die Daten werden auf der Grundlage der gewählten Passphrase verschlüsselt und dann gespeichert. Beim Zugriff auf die gespeicherten Daten, entweder beim Auswählen oder Aktualisieren, verwendet die Anwendung die Entschlüsselungsfunktion mit der gleichen gewählten Passphrase, um die Daten im Klartext zu erhalten. Beim Zugriff auf verschlüsselte Daten ohne die Entschlüsselungsfunktion werden einfach die verschlüsselten Daten abgerufen, was normalerweise nicht sehr nützlich ist.

Die Anwendung kann bei einzelnen Aufrufen der Verschlüsselungs- und Entschlüsselungsfunktionen verschiedene Passphrasen angeben. So können zum Beispiel verschiedene Datenbankbenutzer jeweils ihre eigene Passphrase verwenden, um Daten verschlüsselt in dieselbe Tabelle einzufügen. Die Benutzer können sicher sein, dass kein anderer Nutzer den Klartext ihrer eigenen Daten sehen kann. Oder eine Anwendung kann Daten für verschiedene Tabellenspalten mit verschiedenen Passphrasen verschlüsseln und die verschiedenen Passphrasen an verschiedene Gruppen von Benutzern weitergeben. Auf diese Weise kann eine Gruppe von Benutzern die Klartextdaten nur in einer Spalte sehen, während eine andere Gruppe von Benutzern den Klartext der Daten in der anderen Spalte sehen kann.

Die Verschlüsselungsfunktion kann mehrfach mit unterschiedlichen Passphrasen auf dieselben Daten angewendet werden. Um auf die Daten im Klartext zuzugreifen, müssen dieselben Passphrasen in umgekehrter Reihenfolge zur Entschlüsselung der Daten verwendet werden. Bei der Aktualisierung verschlüsselter Daten wird zunächst die Entschlüsselungsfunktion angewendet, der Klartextwert aktualisiert und dann die Verschlüsselungsfunktion verwendet, um die aktualisierten Daten neu zu verschlüsseln. Dies sind nur einige Beispiele für die endlosen Möglichkeiten, die Verwendung der Verschlüsselungs- und Entschlüsselungsfunktionen zu kombinieren, die alle von der Anwendung gesteuert werden.

Die gesamte funktionsbasierte Verschlüsselung erfolgt durch Verwendung der Kryptofunktionen in regulären SQL-Anweisungen. Dies bedeutet auch, dass die Klartext-Passphrasen den Kryptofunktionen in den SQL-Anweisungen zur Verfügung gestellt werden. Bei der ordnungsgemäßen Verwendung der funktionsbasierten Verschlüsselung sollte daher darauf geachtet werden, dass die SQL-Anweisungen ausreichend sicher sind, z. B. dass sie nicht zurückverfolgt oder in einem SQL-Befehlsverlauf sichtbar gemacht werden.

Auch die Kommunikation zwischen der Anwendung und dem Datenbankserver sollte gesichert sein, um ein Durchsickern der Passphrasen zu vermeiden. In dieser Hinsicht ist das Terminal-Monitor-Dienstprogramm "sql" nicht wirklich ein sicheres Beispiel für eine Anwendung, da die eingegebenen Klartext-Passphrasen in den SQL-Anweisungen im Terminalfenster sichtbar wiedergegeben werden.

Beispiele für funktionsbasierte Verschlüsselung:

  • Definition der in den folgenden Beispielen verwendeten Tabelle:

CREATE TABLE t1 (name CHAR(20), gehalt VARCHAR(50)); \g

Obwohl es sich bei dem Gehalt um einen numerischen Wert handelt, ist die Spalte "Gehalt" als ausreichend große Zeichenspalte deffniert, um die Bytes des verschlüsselten Wertes unterzubringen.

  • Einfügen von Daten mit Verschlüsselung in eine Tabelle:

INSERT INTO t1 values ('Joe', AES_ENCRYPT_IV(40000, 'Geheime Passphrase')); \g
INSERT INTO t1 values ('Adam', AES_ENCRYPT_IV(38000, 'Secret passphrase')); \g
INSERT INTO t1 values ('CEO', AES_ENCRYPT_IV(350000, 'Super passphrase')); \g

Die ersten beiden Anweisungen verschlüsseln den Gehaltswert auf der Grundlage der Passphrase "Secret passphrase", während die dritte Anweisung die andere Passphrase "Super passphrase" verwendet.

  • Auswahl der verschlüsselten Daten:

    1. Wählen Sie, ohne die Entschlüsselungsfunktion zu verwenden:
SELECT name, gehalt FROM t1; \g
name gehalt
Joe XnE_msRe1?Uh]!cUUerQn4opT(C[!)O~yTrzE%JS
Adam lyr*M%o53]O(5d$2`!3a:Bg$zW40wMySO5[-E7+u
CEO a*#eE!~p(1-euLx?K$w(2)@FHk+dzM`5}Q#=lD@g
(3 Zeilen)

Die verschlüsselten Daten in der Spalte "Gehalt" werden verschlüsselt angezeigt und sind daher bedeutungslos. Die Länge der Ausgabe für die Spalte "Gehalt" zeigt, dass verschlüsselte Daten in der Regel mehr Platz benötigen als die entsprechenden Klartextwerte.

    1. Wählen Sie die Entschlüsselungsfunktion mit der ersten Passphrase:
SELECT name, AES_DECRYPT_IV(salary, 'Secret passphrase') FROM t1; \g

name col2
Joe 40000
Adam 38000
CEO \020����x���
(3 Zeilen)

Die Werte, die mit der ersten Passphrase verschlüsselt wurden, werden korrekt entschlüsselt. Der Wert, der mit einer anderen Passphrase verschlüsselt wurde, wird nicht im Klartext angezeigt.

    1. Wählen Sie eine bestimmte Aufzeichnung mit der korrekten Passphrase:
SELECT name, AES_DECRYPT_IV(Gehalt, 'Super passphrase')
  FROM t1 WHERE name = 'CEO'; \g

name col2
CEO 350000
(1 Zeile)

Der verschlüsselte Wert wird im Klartext angezeigt.

Wenn verschlüsselte Daten ausgewählt werden, benötigt die Entschlüsselungsfunktion die richtige Passphrase, um den Klartext anzuzeigen. Wenn verschiedene Passphrasen für verschiedene Datensätze verwendet werden, ist es besser, eine WHERE-Klausel zu verwenden, die das Ergebnis auf die Datensätze beschränkt, die mit der in der SELECT-Klausel angegebenen Passphrase verschlüsselt wurden.

  • Aktualisieren verschlüsselter Daten:

Bei der Aktualisierung verschlüsselter Daten müssen die Daten entschlüsselt und nach der Aktualisierung normalerweise wieder verschlüsselt werden. Zu diesem Zweck werden beide Funktionen, Entschlüsselung und Verschlüsselung, in derselben UPDATE-Anweisung verwendet. Gleichzeitig ist es auch möglich, die Passphrase zu ändern.

UPDATE t1 SET Gehalt = AES_ENCRYPT_IV(
AES_DECRYPT_IV(Gehalt, 'Super passphrase') + 20000,
'Secret passphrase' ) WHERE name = 'CEO'; \g

Die Anweisung fügt 20000 zum Gehalt von "CEO" hinzu und ändert gleichzeitig die Passphrase in "Geheime Passphrase". Die Entschlüsselungsfunktion benötigt die ursprüngliche Passphrase und die Verschlüsselungsfunktion wird mit der neuen Passphrase versehen. Da die neue Passphrase dieselbe ist, die zur Verschlüsselung des Gehalts der beiden anderen Datensätze verwendet wurde, kann ein SELECT mit dieser Passphrase nun den Klartext für alle Datensätze anzeigen:

SELECT name, AES_DECRYPT_IV(salary, 'Secret passphrase') FROM t1; \g

name col2
Joe 40000
Adam 38000
GESCHÄFTSFÜHRER 370000
(3 Zeilen)

Der nächste Blog-Beitrag in dieser Serie wird erklären, wie die Schlüssel für die Datenbankverschlüsselung in Actian Vector verwendet werden.

Martin Fuerderer Kopfbild

Über Martin Fuerderer

Martin Fuerderer ist leitender Software-Ingenieur bei HCLSoftware. Er hat in den letzten 25 Jahren in vielen verschiedenen Bereichen der Datenbankserverentwicklung gearbeitet. In den letzten Jahren hat er sich mit dem Thema Sicherheit von Datenbankservern auseinandergesetzt.