AES Playground PointyCastle

In diesem Beitrag zeige ich Euch, wie Ihr die Verschlüsselung eines Strings mit dem AES Algorithmus nutzen könnt. Die App nutzt die beiden meistgenutzten Modi CBC und GCM.

Der für die Verschlüsselung notwendige Schlüssel wird aus einem Passwort abgeleitet („derived“), die App nutzt dafür den PBKDF2 Algorithmus mit 15.000 Durchläufen („Iterationen“, Voreinstellung).

Zur Entschlüsselung ist es notwendig, den richtigen Algorithmus bzw. Modus auszuwählen sowie dasselbe Passwort wie bei der Verschlüsselung einzugeben – ausgewählte Anzahl der Iterationen wird den verschlüsselten Daten entnommen. Die technischen Spezifikationen zu den verwendeten Algorithmen findet Ihr auf der Seite AES Spezifikationen.

Diese App benutzt die Bibliothek PointyCastle *1) für die Schlüsselableitung und die Verschlüsselung.

Der Blick auf den Startbildschirm:

Startbildschirm

Mein Demonstrations-Datensatz sieht so aus:

Klartext: Mein wichtiges Geheimnis
Passwort: Passwort12345
Iterationen: 15000

Ich habe die verschlüsselten Daten in eine JSON-Struktur eingebaut, welche u.a. den verwendeten Algorithmus und die Zahl der Interaktionen beinhaltet. Hier ein Beispiel-Datensatz für den AES Modus „CBC“:

{
"algorithm": "AES-256 CBC PBKDF2",
"iterations": "15000",
"salt": "XQkEDt4zwD40XUCptd6+5CN0QPZzbZC1HTqHIEUzHck=",
"iv": "A8fzhLGhKawsFGcIfgVJxw==",
"ciphertext": "6y+VjfrwGpJ7n1vCR4AfHxyI98BJX+ey+GFI+iloFUA=",
"gcmTag": "nicht benutzt"
}

Dieses Beispiel zeigt eine Verschlüsselung mit dem AES „GCM“ Modus:

{
"algorithm": "AES-256 GCM PBKDF2",
"iterations": "15000",
"salt": "0S8BuLEaJuu+yH3SiiGtasHN7FOc/knVzLAzCXJrqd0=",
"iv": "8NUeqLS/UAoswd8W",
"ciphertext": "Ug0pBrGVItcDvE5b3N8TMLOAoTQm+txF",
"gcmTag": "C9GozpcyHiu/LQtdj3P+qw=="
}

Hier noch ein paar Screenshots:

Der komplette Programmiercode ist in meinem GitHub Ordner https://github.com/FlutterCrypto/aes_playground abrufbar.

Hinweis *1): Die Krypto-Bibliothek PointyCastle gehört zu BouncyCastle, welche die vielbenutzte Java- und C#- Bibliotheken betreuen.

Letzte Bearbeitung dieser Seite: 10.12.2021