H03 Symmetrische Verschlüsselung via Tink mit AAD-Daten und einer Datei

Dieses Beispiel ist bereits eine vollwertige symmetrische Dateiverschlüsselungsroutine, welche die Nutzung von zusätzlichen AAD-Daten unterstützt und diese in der verschlüsselten Datei am Anfang mit abspeichert. Ein etwas abgewandeltes Beispiel ist in H03b Symmetrische Verschlüsselung via Tink ohne AAD-Daten und einer Datei zu finden, dort werden keine AAD-Daten verarbeitet. Weiterhin wird der erzeugte Schlüssel in Form einer JSON-formatierten Datei gespeichert und dann wieder eingelesen.

Der Hinweis bei der Konsolenausgabe besagt, dass mit diesem Programm nur kleinere Dateien verschlüsselt werden sollten, denn das Programm liest die Original- wie auch später die verschlüsselte Datei komplett in den Programmspeicher ein. Geht dort der Speicherplatz zu Ende oder (was vermutlich früher geschieht) ist der Platz auf dem Java Heap erschöpft, bricht das Programm unvermittelt ab. Auf Grund der Authentifizierung beim GCM-Verfahren wird eher die Entschlüsselung als die Verschlüsselung scheitern – das wäre zum Beispiel bei der Rückgewinnung eines verschlüsselten Backup-Archives fatal). Eine universelle Lösung findet Ihr im Beispiel H04 Symmetrische Streamverschlüsselung via Tink mit AAD-Daten für große Dateien – dort spielt die Dateigröße keine Rolle mehr.

Im Beispielcode habe ich den AES GCM-Modus mit 256 Byte Schlüssellänge eingestellt, probiert aber einmal die übrigen Verfahren aus (einfach im Template-Namen mittels copy/paste den gewünschten Modus reinkopieren).

Ihr benötigt für dieses Beispiel eine „plaintext“-Datei, hierfür nutzt Ihr am einfachsten die mit Beispiel A11 Erzeuge eine Datei mit definierter Größe generierte Datei. Probiert einfach mal deutlich größere Dateien aus und testet, wo die Schmerzgrenze bei Euch ist (immer daran denken: auf einem anderen Rechner oder Handy kann die Grenze deutlich niedriger liegen).

Bitte die nachfolgende Routine nur nach einer gründlichen Überprüfung für den Echteinsatz nutzen. Aus kryptographischer Sicht dürfte sie für viele Einsatzgebiete nutzbar sein.

Die Konsole informiert Euch kurz und knapp über die einzelnen Schritte:

Alle Quellcodes zu Google Tink findet Ihr zum Download in meinem Github-Repository, welches Ihr über diesen Link erreicht: https://github.com/java-crypto/H-Google-Tink. Alle Programme sind sowohl unter Java 8 als auch unter Java 11 lauffähig.

Die Lizenz zum obigen Beispiel findet Ihr auf der eigenen Lizenz-Seite.

Letzte Aktualisierung: 23.01.2019