Verschlüsselung und Passwortschutz in SQLite

Bilal Shahid 21 Juni 2023
  1. Was ist Verschlüsselung
  2. So legen Sie ein Kennwort für SQLite fest
  3. So verschlüsseln Sie eine Datenbank auf SQLite
Verschlüsselung und Passwortschutz in SQLite

Beim Umgang mit großen Datenbanken mit vertraulichen Informationen ist es ziemlich natürlich, diese gut verstecken zu wollen. Wenn es auf einem System verbleibt, reicht normalerweise ein Passwort aus.

Es ist jedoch am besten, Ihre Datenbank zu verschlüsseln, wenn sie über ungesicherte Netzwerke gesendet wird.

Was ist Verschlüsselung

Verschlüsselung ist kurz gesagt der Prozess der Umwandlung Ihrer Daten in Zeichenfolgen nicht lesbarer Daten, die nicht durch einfaches Lesen entschlüsselt werden können. Es erfordert einen Schlüssel, um es zu verschlüsseln und zu entschlüsseln.

Die Entschlüsselung wandelt unlesbare Daten in ihre ursprüngliche Form zurück, während die Verschlüsselung das Gegenteil ist und die lesbaren Daten in eine unlesbare Form umgewandelt werden.

Daten werden basierend auf einem Algorithmus verschlüsselt. Ihre Komplexität kann variieren, und einige sind zuverlässiger als andere.

Daher sollte die von Ihnen verwendete Verschlüsselungsart zuverlässig genug sein, um eine Entschlüsselung ohne Schlüssel zu verhindern.

So legen Sie ein Kennwort für SQLite fest

Um Ihre Datenbank in SQLite zu schützen, verwenden Sie den folgenden Code, bevor Sie andere Vorgänge zum Festlegen eines Kennworts ausführen.

SQLiteConnection conn = new SQLiteConnection("Data Source=MyDatabase.sqlite;Version=3;");
conn.SetPassword("any_password");
conn.open();

Sie können beim nächsten Mal auf Ihre Datenbank (in SQLite-Version 3) zugreifen, indem Sie Folgendes verwenden:

conn = new SQLiteConnection("Data Source=MyDatabase.sqlite;Version=3;Password=any_password;");
conn.Open();

Sie können Ihr Passwort auch hiermit zurücksetzen:

conn.ChangePassword("new_password");

Wenn Sie anstelle des Passworts die Klausel String.Empty hinzufügen, können Sie das Passwort entfernen.

So verschlüsseln Sie eine Datenbank auf SQLite

Es können mehrere Methoden angewendet werden, um Ihre Daten zu verschlüsseln. Fast alle verwenden eine Erweiterung oder Software, die absolut sicher ist und Ihre Daten erfolgreich verschlüsseln kann.

Hier sind ein paar zuverlässige Optionen:

SQLite-Verschlüsselungserweiterung (SEE)

Dies ist ein Standardverschlüsselungsdienst speziell für SQLite. Es ermöglicht Ihnen das Lesen und Schreiben in verschlüsselte und unverschlüsselte Dateien in SQLite.

Darüber hinaus können Sie sogar den Befehl ATTACH verwenden, um mit SEE mit zwei oder mehr Dateien gleichzeitig zu arbeiten.

Das Verschlüsseln der Datei ist in dieser Erweiterung ziemlich einfach. Sie können dies mit dem folgenden Code tun.

int sqlite3_key
(
   sqlite3 *db,
   const void *e_key,
   int key_size
);

Hier stellt die erste Zeile die verwendete Datenbank dar, die zweite den für die Entschlüsselung verwendeten Schlüssel und die letzte Zeile die Anzahl der Bytes, die zum Speichern des Schlüssels verwendet werden.

Sie können den Schlüssel Ihrer Datenbank auch mit dem folgenden Code ändern:

int sqlite3_rekey
(
   sqlite *db,
   const void *e_key, int key_size
);

Hier stellt die erste Zeile die Datenbank dar und die zweite enthält den neuen Schlüssel und die Gesamtgröße des Schlüssels.

Sie können auch sqlite3_rekey() verwenden, um eine zuvor verschlüsselte Datenbank zu entschlüsseln, indem Sie einen NULL-Schlüssel angeben.

So verschlüsselt SEE die Daten und Metadaten der gesamten Datenbank. Es ist jedoch wichtig zu beachten, dass dies derzeit nicht kostenlos verfügbar ist.

wxSQLite.

Dieser Verschlüsselungsdienst steht allen offen. Es kann als C++-Wrapper um die öffentlich zugängliche SQLite-Datenbank betrachtet werden.

Das Besondere daran ist, dass wxSQLite nicht versucht, die zugrunde liegende Datenbank zu verbergen. Stattdessen unterstützt es alle Funktionen und verschlüsselt alles individuell in UTF-8-Codierung mit automatischer Konvertierung zwischen wxStrings- und UTF-8-Strings.

Für andere ANSI-Builds wird das aktuelle Gebietsschema-Konvertierungsobjekt (wxConvCurrent) für die Konvertierung verwendet. Es ist jedoch wichtig zu beachten, dass Probleme auftreten können, wenn externe Verwaltungstools zum Ändern der Datenbank verwendet werden.

Diese schlüsselbasierte Verschlüsselung ermöglicht es Ihnen, Ihr bevorzugtes Verschlüsselungsschema zur Laufzeit auszuwählen.

SQLCipher

SQLCipher ist eine Open-Source-Erweiterung für SQLite. Es bietet sichere Verschlüsselungsdienste basierend auf Ihren Anforderungen.

Sie bieten beispielsweise verschiedene Pakete wie Community, Commercial und Enterprise an. Jedes wurde entwickelt, um Funktionen bereitzustellen, die Sie benötigen, ohne für zusätzliche Funktionen zu bezahlen.

SQLCipher hat eine hervorragende Leistung und einen geringen Platzbedarf, daher eignet es sich hervorragend zum Schutz eingebetteter Anwendungsdatenbanken und eignet sich gut für die mobile Entwicklung. Zu seinen Merkmalen gehören die folgenden:

  1. Es gibt nur 5-15% Overhead-Verschlüsselung. Dies bedeutet, dass es eine schnelle Verschlüsselung bietet.
  2. Die gesamte Datenbank ist verschlüsselt.
  3. Zu den Sicherheitspraktiken gehören der CBC-Modus und die Schlüsselableitung.
  4. Es bietet Kryptografie auf Anwendungsebene.
  5. Die Peer-Review-Kryptobibliothek OpenSSL stellt die Algorithmen bereit.
  6. Es unterstützt mehrere Plattformen.

SQLiteCrypt

Dieser Dienst verwendet die AES 256-Verschlüsselungsunterstützung, die dieselbe AES wie SQLite ist, ohne zu viel Geschwindigkeit zu beeinträchtigen. Tatsächlich erscheint es dem Benutzer so schnell wie normal.

Hier sind einige der Funktionen, die es bietet.

  1. Es ist unglaublich schnell.
  2. Sie müssen nur die SQLite-Laufzeit ersetzen und 2 PRAGMA hinzufügen, um sie zu verwenden.
  3. Es entschlüsselt einen Block nach dem anderen, sodass Hacker auch nichts aus dem Speicherauszug herausholen können.
  4. Nullkonfiguration ermöglicht Verschlüsselung mit einem einfachen Prozess.

Die verwendeten pragma-Anweisungen sind unten aufgeführt.

PRAGMA key = 'the passphrase'
PRAGMA lic = 'the license key'
PRAGMA rekey = 'new passphrase'

Die erste besteht darin, eine verschlüsselte Datenbank zu erstellen, die zweite besteht darin, eine legale Kopie der Software SQLiteCrypt zu identifizieren, und die letzte besteht darin, die Datenbank mit einer neuen Passphrase neu zu schreiben.

Sleet

Sqleet ist ein transparenter Verschlüsselungsdienst, der auf fortschrittlichen Algorithmen für optimale Sicherheit basiert. Es bietet einen robusten Seitenkanalwiderstand und eine hohe Softwareleistung.

Die Kompilierung ist einfach, da keine Abhängigkeiten vorhanden sind, um die Cross-Kompilierung und die Cross-Plattform-Entwicklung zu erleichtern.

Sie können eine SQLite3-Shell mit sqleet-Verschlüsselungsunterstützung wie folgt kompilieren:

  1. Unix - % gcc sqleet.c shell.c -o sqleet -lpthread -ldl
  2. Windows - % gcc sqleet.c shell.c -o sqleet

System.Daten.SQLite

Dies ist eine .NET-Bibliothek, die Verschlüsselung anbietet. Nachdem Sie das entsprechende Paket heruntergeladen haben, extrahieren Sie SQLite.Interop.dll und benennen Sie es in sqlite3.dll um.

Diese verschlüsselt mit Klartext-Passwörtern oder Verschlüsselungsschlüsseln.

Funktionserstellungsroutinen

Sie können auch die Funktionserstellungsroutinen von SQLite verwenden.

$db_obj->sqliteCreateFunction('Encrypt', 'function_name', 2);
$db_obj->sqliteCreateFunction('Decrypt', 'function_name', 2);

Jetzt können Sie Ihre Datenbanken einfach verschlüsseln und Passwörter hinzufügen.

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