Schlüssel

In vielen kryptografischen Bibliotheken werden Schlüssel oft nur durch einige Bytesequenzen identifiziert. Hier ein Beispiel für OpenSSL-Funktionen wie EVP_EncryptInit_ex, die unabhängig von den Schlüsselbyte auch IV für die Berechnung benötigen, oder die Javax.Crypto-Methode Cipher.init, die sowohl eine Schlüsselsequenz als auch eine AlgorithmParameterSpec verwendet. Die Verwendung dieser Funktionen ist oft schwierig und die Weitergabe der falschen Parameter kann schwerwiegende Folgen haben.

Tink geht anders vor und erwartet, dass ein Schlüssel immer sowohl aus dem Schlüsselmaterial als auch aus den Metadaten (den Parametern) besteht.

Ein vollständiger AEAD-Schlüssel gibt beispielsweise genau an, wie Verschlüsselung und Entschlüsselung funktioniert. Er gibt die beiden Funktionen \(\mathrm{Enc}\) und\(\mathrm{Dec}\)sowie die Codierung des Geheimtextes an (z. B. Initialisierungsvektor, gefolgt von der Verschlüsselung, gefolgt vom Tag).

Ein AES-Schlüssel in Tink ist nicht nur eine Bytesequenz der Länge 128, 192 oder 256 Bit, sondern speichert auch die entsprechenden Algorithmusspezifikationen, die zum Berechnen des Schlüssels erforderlich sind, in Form eines parameters-Objekts. Daher sind ein vollständiger AES-EAX-Schlüssel und ein vollständiger AES-GCM-Schlüssel unterschiedliche Objekte in Tink.