In vielen kryptografischen Bibliotheken werden Schlüssel oft nur durch einige Bytefolgen identifiziert. Denken Sie zum Beispiel an OpenSSL-Funktionen wie EVP_EncryptInit_ex
, die neben den Schlüsselbytes auch die IV für die Berechnung benötigt, oder an die javax.crypto-Methode Cipher.init
, die sowohl eine Schlüsselsequenz als auch eine AlgorithmParameterSpec
annimmt. Solche Funktionen sind oft schwierig korrekt zu verwenden und das Übergeben der falschen Parameter kann schwerwiegende Folgen haben.
Tink möchte sich von anderen Anbietern abheben und erwartet, dass ein Schlüssel immer aus dem Schlüsselmaterial und den Metadaten (den Parametern) besteht.
Ein vollständiger AEAD-Schlüssel gibt beispielsweise genau an, wie Verschlüsselung und Entschlüsselung funktionieren. Er gibt die beiden Funktionen \(\mathrm{Enc}\) und\(\mathrm{Dec}\)an und wie der Geheimtext codiert wird (z. B. Initialisierungsvektor, gefolgt von der Verschlüsselung, gefolgt vom Tag).
Ein AES-Schlüssel in Tink ist nicht nur eine Bytefolge mit einer Länge von 128, 192 oder 256 Bit, sondern enthält 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 in Tink unterschiedliche Objekte.