Schlüssel- und Parameterobjekte

<ph type="x-smartling-placeholder">

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 Aeads 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().