In der Praxis bietet Tink Key
-Objekte an,
keys- und Parameters
-Objekte zur Darstellung von Parameters
.
In Java gibt es beispielsweise AesGcmKey
-Objekte,
AES-GCM-Schlüssel darstellen.
In diesem Abschnitt wird erläutert, wie diese Objekte in Java entworfen werden und wie sie interagieren.
Parameters
-Objekte
Sehen wir uns zum Beispiel AES GCM an, ein weit verbreitetes AEAD-Verschlüsselungsschema.
Tink liefert einem AesGcmParameters
-Objekt die erforderlichen Informationen, um
Erstellen eines AesGcmKey
, wie weiter unten erläutert wird.
Die Parameterhierarchie in Java sieht so aus:
public abstract class Parameters {
public abstract boolean hasIdRequirement();
}
public abstract class AeadParameters extends Parameters {}
public final class AesGcmParameters extends AeadParameters {
/**
* The Variant specified how ciphertexts are [tagged](/tink/design/keysets#tagging_ciphertexts).
*/
public static final class Variant {...}
/** A helper object to create new AesGcmParameters. */
public static final class Builder {...}
public int getKeySizeBytes() {...}
public int getIvSizeBytes() {...}
public int getTagSizeBytes() {...}
public Variant getVariant() {...}
public OutputPrefixType getOutputPrefixType() {...}
public boolean equals(Object object) {...}
public int hashCode() {...}
}
Wie im Abschnitt
Schlüsselsätze, Tagging von Geheimtexten
Für manche Schlüssel wird eine Anforderung an ihre ID gestellt, wenn sie sich in einem Schlüsselsatz befinden. Jeden
Das Parameters
-Objekt hat die hasIdRequirement
-Methode, die angibt,
Schlüssel, der von diesem Parameters
-Objekt erstellt wurde, hat eine solche erforderliche ID oder nicht.
Das AesGcmParameters
-Objekt bietet als Nächstes die Methoden getKeySizeBytes()
,
getIvSizeBytes()
und getTagSizeBytes()
. Diese geben die Längen
den verwendeten Schlüssel, die Länge des verwendeten IV
und die Länge des erzeugten Tags,
in Byte. Obwohl Tink einige dieser Funktionen der Vollständigkeit halber bietet,
erlaubt nicht immer das Erstellen von Aead
s für jede Auswahl. Ein Beispiel:
nur 12-Byte-IVs werden für AES GCM unterstützt.
Das AesGcmParameters
-Objekt bietet auch Überschreibungen für den vorherigen
definierten Methoden (sowie die Java-Standardmethoden equals
und hashCode
)
Das gilt als bewährte Methode).
Schließlich bietet es statische Methoden zum Erstellen neuer AeadParameters
-Objekte.
Diese validieren die Eingaben, d.h., sie prüfen, ob die Größe 16, 24,
oder 32.
Schlüsselobjekte
Tink hat auch eine Schlüsselhierarchie. Bei unserem Beispiel von AES GCM sieht es wie hier:
public abstract class Key {
public abstract Parameters getParameters();
public abstract @Nullable Integer getIdRequirementOrNull();
public abstract boolean equalsKey(Key other);
}
public abstract class AeadKey extends Key {
public abstract AeadParameters getParameters();
public abstract Bytes getOutputPrefix();
}
public final class AesGcmKey implements AeadKey {
public SecretBytes getKeyBytes();
public abstract Bytes getOutputPrefix();
public AesGcmParameters getParameters();
public @Nullable Integer getIdRequirementOrNull();
public boolean equalsKey(Key object);
}
Die Methode getIdRequirementOrNull
gibt die ID zurück, die dieser Schlüssel haben muss.
oder null
, wenn es keine Anforderung gibt.
Diese Anforderung in Bezug auf den Schlüssel beruht darauf, dass Tink in einigen Fällen
Geheimtexten oder Signaturen den String 0x01<id>
vorangestellt, siehe Abschnitt
zum Tagging von Geheimtext).
Dies entspricht immer dem Ergebnis
getParameters().hasIdRequirement()
und Implementierer neuer
wichtige Klassen dies gewährleisten müssen.
Implementierungen von Key
müssen außerdem eine equalsKey
-Methode zur Verfügung stellen,
verschiedene Schlüssel vergleichen. Ein solches
ist häufig nützlich: Zum Beispiel ist beim Testen der Schlüsselableitung ein Beispiel für eine
die sicherstellen möchten, dass eine wiederholte Anwendung der Ableitung zu
Schlüsselobjekt zu erhalten. Ein KMS kann auch prüfen,
gleichwertig sind. Dies ist manchmal der Fall, wenn Nutzer
Schlüssel und laden sie mehrmals in denselben KMS hoch. Bemerkenswert ist, dass wir
die Java-Methode equals
nicht außer Kraft setzen, da wir sonst
hashCode
überschreiben und es gibt keine Möglichkeit, hashCode
in einem sicheren
mit equals
kompatibel, ohne dass Annahmen getroffen werden müssen.
Als Nächstes benötigen wir die Methode getParameters()
. So erhalten Nutzende die
ursprünglichen Informationen zu den Parametern, mit denen der Schlüssel erstellt wurde.
Schließlich hat AesGcmKey
die Methode getKeyBytes
, die das Rohschlüsselmaterial zurückgibt.
Solche Methoden sind sehr typisch für Schlüsselklassen: Sie sind typspezifisch,
und Zugriff auf das zugrunde liegende Schlüsselmaterial bieten. Damit können Nutzende
prinzipiell möglich, z.B. das durch den Schlüssel
repräsentierte Primitive
oder serialisieren Sie den Schlüssel, um ihn auf der Festplatte zu speichern, oder senden Sie ihn über das
Netzwerk. Der Schlüssel selbst ist für den Schutz des Schlüsselmaterials vor
unautorisierten Zugriff. Für SecretBytes
ist beispielsweise ein Zugriffstoken erforderlich, um
das Material tatsächlich
Weitere Informationen finden Sie unter Zugriffssteuerung.
Asymmetrische Schlüssel
Für asymmetrische Primitive verwendet Tink zwei Schlüsselklassen: eine für private und eine für private. für öffentliche Schlüssel. Für die Parameter ist es praktischer, die gleichen -Klasse, da es nur eine Klasse gibt, die zum Generieren der Schlüssel verwendet werden kann.
Tink hat auch eine Schnittstelle PrivateKey
mit den zusätzlichen
Funktion getPublicKey()
.