PostgreSQL-Datenbankverschlüsselung

Bilal Shahid 20 Juni 2023
  1. Einführung in die Verschlüsselung
  2. PostgreSQL-Datenbankverschlüsselung
PostgreSQL-Datenbankverschlüsselung

Dieses Tutorial beschreibt verschiedene Möglichkeiten, wie Sie Ihre Daten in PostgreSQL verschlüsseln können.

Einführung in die Verschlüsselung

Verschlüsselung ist, vereinfacht gesagt, eine Methode, mit der man Daten sichern kann. Es wird systematisch geändert, um den Inhalt zu verbergen und ihn für niemanden außer den beabsichtigten Benutzern unlesbar zu machen.

Es ist möglich, dass nur die beabsichtigten Empfänger einen Schlüssel haben, um die Daten zu entschlüsseln, um sie zu lesen. Infolgedessen werden alle sensiblen Informationen immer verborgen.

Es wird empfohlen, Daten in jedem Fall zu verschlüsseln. Es ist jedoch von entscheidender Bedeutung, wenn vertrauliche Informationen auf einem ungesicherten Server gesendet oder empfangen werden oder in einer anderen Situation, in der Daten bedroht sind.

PostgreSQL-Datenbankverschlüsselung

Eine Datenbank kann je nach Anforderung auf drei verschiedenen Schichten verschlüsselt werden. Es beinhaltet Folgendes:

  • Client-Anwendung
  • Speichermedium
  • Die Datenbank selbst

Denken Sie daran, dass die Selbstverschlüsselung der Datenbank oft die beste Form der Verschlüsselung ist, da bekannt ist, dass sie die meisten Bedrohungsmodelle abdeckt.

Wir können andere Methoden anwenden, aber das Hauptziel sollte der Schutz der Client-Anwendung sein. Hier sind also einige Ansätze, aus denen Sie wählen können, um Ihre Daten in PostgreSQL zu verschlüsseln.

Systemfestplattenverschlüsselung

Wie der Name schon sagt, ist die Systemfestplattenverschlüsselung ein Prozess, bei dem Festplattenverschlüsselungssoftware/-hardware jedes Datenbit verschlüsselt, das auf Ihrer Festplatte gespeichert wird.

Das bedeutet, dass wir die Daten eines Benutzers verschlüsseln könnten, sobald sie erstellt werden, wenn die Software oder Hardware gleichzeitig dafür programmiert ist.

Dazu müssen Sie Ihr PostgreSQL-Setup nicht ändern, da Ihre Festplatte verschlüsselt ist. Eine einfache Möglichkeit, die Systemfestplattenverschlüsselung durchzuführen, ist die Verwendung einer VM unter Linux.

Folgendes müssen Sie tun:

Erstellen Sie zunächst eine temporäre VM, die ein Duplikat Ihres Zielcomputers sein wird. Die Zielfestplatte kann eine vorhandene sein, aber am besten erstellen Sie eine neue und fügen Ihre Datenbank später hinzu.

Unabhängig von Ihrer Entscheidung muss die Zielfestplatte mindestens 256MB größer sein als die Quellfestplatte. Als nächstes können Sie die folgenden Anweisungen befolgen:

  1. Muss die Ziel- und Quellfestplatten auf der temporären VM mounten.

  2. Verbinden Sie die VM über eine serielle Schnittstelle. Sie müssen eine serielle Portverbindung aktivieren, um diesen Schritt auszuführen. Sie können serial-port-enable mit dem Wert TRUE unter Metadaten hinzufügen, um die serielle Port-Verbindung zu ermöglichen.

  3. Als nächstes müssen Sie grub zugänglich machen. Verwenden Sie dazu den folgenden Befehl:

    grub2-mkconfig -o/boot/grub2/grub.cfg
    

    Starten Sie danach das System neu und grub ist auf der seriellen Konsole verfügbar.

  4. Formatieren Sie die Festplatte, um ein unverschlüsseltes (Boot-) und ein verschlüsseltes System zu erstellen. Es ermöglicht dem System, grub zu booten, damit der Benutzer einen Schlüssel eingeben kann, um Daten zu entschlüsseln.

    Wir können dies mit dem Befehl fdisk /dev/sdb tun.

  5. Verwenden Sie cryptsetup, um die Festplatte zu verschlüsseln. Sie können auch einen bestimmten Teil der zu verschlüsselnden Festplatte zuordnen. Anschließend können Sie Ihre Datenbank verschlüsseln, solange sie auf dieser Festplatte vorhanden ist.

Anschließend können weitere Schritte wie die Größenänderung der Festplatte oder das Erstellen von Backups durchgeführt werden.

Transparente Datenverschlüsselung

PostgreSQL TDE ist eine Funktion, die es einem Benutzer ermöglicht, eine PostgreSQL-Verschlüsselung für die gesamte Datenbank unter Verwendung von Cluster-Verschlüsselung durchzuführen. Es verschlüsselt beim Schreiben auf die Festplatte und entschlüsselt beim Lesen von ihr.

Sie können die folgenden Schritte während der PostgreSQL-Installation ausführen, damit dies standardmäßig angewendet wird.

  • Erstellen Sie ein Verzeichnis für PostgreSQL. Der Standardspeicherort wird häufig verwendet.
  • Bibliotheken für bison, readline, flex, zlib, openssl und crypto müssen installiert sein. Sie können bei Bedarf zusätzliche Bibliotheken installieren.
  • Installieren Sie PostgreSQL auf Ihrem System.
  • Wechseln Sie mit su - postgres zum Benutzer postgres.
  • Erstellen Sie einen verschlüsselten Cluster mit -K.

    Zum Beispiel initdb -D /user/pgsql/xyz -K/user/pgsql/key. Hier gibt user/pgsql/key einen Verschlüsselungsschlüssel zurück.

  • initdb speichert den Verschlüsselungs-key-Befehl in postgresql.conf.

Der Cluster wurde erfolgreich erstellt und verschlüsselt nun Ihre Daten. Wenn ein Benutzer Postgres ausführt, unterscheiden sich diese verschlüsselten Cluster nicht von unverschlüsselten.

Der einzige Unterschied besteht darin, dass die Datenverschlüsselungsvariable gesetzt wird.

Verschlüsseln eines bestimmten Abschnitts der Datenbank

Mit den oben genannten Methoden wird die gesamte Datenbank oder alle Datenbanken auf PostgreSQL verschlüsselt. Sie können aber auch einzelne Datenbanken oder sogar einen bestimmten Teil einer Datenbank verschlüsseln.

Verwenden Sie dazu am besten eine Erweiterung wie pgcrypto. So funktioniert die selektive Postgres-Verschlüsselung mit pgcrypto:

  1. Aktivieren Sie die pgcrypto-Erweiterung mit CREATE EXTENSION IF NOT EXISTS pgcrypto.
  2. Im Allgemeinen verschlüsselt der Befehl PGP_SYM_ENCRYPT Daten, während PGP_SYM_DECRYPT sie entschlüsselt.

So können Sie Spalten in PostgreSQL verschlüsseln und entschlüsseln.

Verschlüsselte Daten in eine Spalte einfügen

INSERT INTO temp (x, y)
VALUES
('xx', PGP_SYM_ENCRYPT('yy', 'key')::text);

Bereits verschlüsselte Daten aktualisieren

UPDATE temp
SET y= PGP_SYM_ENCRYPT('content', 'key')::text
WHERE x= 'xx';

Zu lesende Daten entschlüsseln

SELECT x, PGP_SYM_DECRYPT(y::bytea, 'key') as data
FROM temp WHERE x= 'xx';

Das fasst einige der verschiedenen Möglichkeiten zusammen, wie Sie Ihre Datenbank je nach Ihren Anforderungen verschlüsseln können. Die PostgreSQL-Verschlüsselung mag auf den ersten Blick schwierig erscheinen, ist aber ziemlich einfach zu bewerkstelligen.

Wir hoffen, dass wir Ihnen dabei geholfen haben, herauszufinden, welche Art von Verschlüsselungsdienst für Sie am besten geeignet ist, damit Ihre Daten immer geschützt sind.

Bilal Shahid avatar Bilal Shahid avatar

Hello, I am Bilal, a research enthusiast who tends to break and make code from scratch. I dwell deep into the latest issues faced by the developer community and provide answers and different solutions. Apart from that, I am just another normal developer with a laptop, a mug of coffee, some biscuits and a thick spectacle!

GitHub