Sichere Kryptographie mit Google Tink

Ich habe Euch inzwischen sehr viele lauffähige Beispiele für die Anwendung der Kryptographie unter Java bereitgestellt. Grundsätzlich ist es gut, die kryptografischen Funktionen sehr nahe an der Programmiersprache einsetzen zu können, aber das „Selberprogrammieren“ hat unter Umständen den Preis, durch eine fehlerhafte Implementierung die Sicherheit der Anwendung und Daten aufs Spiel zu setzen.

Es reicht aus, eine Variable mit einem Passwort nach der Nutzung nicht wieder zu löschen und schon kann ein Trojaner z.B. durch das Auslesen des Programmspeichers („heap dumping“) an den geheimen Schlüssel gelangen. Neben der berüchtigten „Padding Oracle Attacke“ (kann die AES CBC-Verschlüsselung komplett aushebeln) gibt es weitere Angriffe (z.B. den „Seitenkanalangriff“). Hier misst der Angreifer die benötigten CPU-Zyklen und ist dadurch in der Lage, ein Passwort zu berechnen.

Ebenfalls passieren viele Fehler bei der richtigen Erzeugung und Nutzung von Initialisierungsvektoren, Nonces, privaten und öffentlichen Schlüsseln und und und. Weiterhin ist es nicht einfach, ein vernünftiges Schlüsselmanagement zu betreiben, was auch die sichere Speicherung von Schlüsseln beinhaltet.

Alle diese möglichen Angriffs-Szenarien können von den meisten Programmierern kaum und sicher abgefangen und verhindert werden, daher rate auch ich zur Nutzung einer externen Bibliothek namens Google Tink. Im Jahre 2018 wurde die erste Version veröffentlicht und Ihr habt Zugriff auf den kompletten Code über das Github-Depot https://github.com/google/tink. Da der Download der Bibliothek auch viele Unit4-Testroutinen enthält, rate ich Euch zum Herunterladen des Quellcodes.

Mir selber ist allerdings die Kompilierung des Quellcodes zu mühselig und daher nutze ich gerne die fertigen Jar-Dateien, welche im Maven-Archiv vorgehalten werden. Neben der Tink Bliothek ist eine zusätzliche Bibliothek notwendig, die sogenannte Google Protobuf-Anwendung. Ladet Euch immer die aktuellsten Jar-Dateien herunter: für Tink ist es derzeit (Januar 2019) die Version 1.2.1: https://mvnrepository.com/artifact/com.google.crypto.tink/tink und bei Protobuf die Version 3.6.1: https://mvnrepository.com/artifact/com.google.protobuf/protobuf-java.

Beide Dateien bindet Ihr in Eclipse als externe Jar-Datei ein und das war es schon (ein Beispiel ist in A06 Einbindung und Nutzung von Bouncy Castle beschrieben).

Analog zu BouncyCastle wird die Tink-Bibliothek beim Programmstart initialisiert. Möchtet Ihr nur die symmetrische Verschlüsselung nutzen reicht ein

für alle anderen Nutzungen ist ein

notwendig.

Jetzt wünsche ich Euch viel Spaß bei der Nutzung von Google Tink.

Letzte Aktualisierung: 22.01.2019