Anahtar ve Parametre Nesneleri

Pratikte Tink, temsil edilecek Key nesne sağlar Parameters temsil edecek anahtarlar ve Parameters nesneleri. Örneğin, Java'da AesGcmKey nesnemiz var AES GCM anahtarlarını temsil eder.

Bu bölümde, bu nesnelerin Java'da nasıl tasarlandığını ve etkileşimde bulunur.

Parameters nesne

Yaygın olarak kullanılan bir AEAD şifreleme şeması olan AES GCM'yi düşünün. Tink, aşağıdakileri yapmak için gereken bilgilerin bulunduğu bir AesGcmParameters nesnesini sağlar: AesGcmKey oluşturun. Bu konuyu daha sonra açıklayacağız. Java'daki parametre hiyerarşisi şu şekilde görünür:

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() {...}
}

Bu bölümde açıklandığı gibi Anahtar Kümeleri, Şifreli Metinleri Etiketleme, Bir anahtar kümesinde bulunan bazı anahtarların kimliğinde bir zorunluluk bulunur. Hepsini Parameters nesnesi,hasIdRequirement anahtarının böyle bir zorunlu kimliği olur veya olmasın.Parameters

Sonraki AesGcmParameters nesnesi, getKeySizeBytes(), getIvSizeBytes() ve getTagSizeBytes(). Bunlar, kullanılan anahtar, kullanılan IV'ün ve üretilen etiketin uzunluğu, bayt cinsinden. Tink, bu işlevlerden bazılarını eksiksizlik için sağlar. Ancak, her seçenek için Aead oluşturulmasına her zaman izin vermez. Örneğin, şu anda AES GCM için yalnızca 12 baytlık IV'ler desteklenir.

AesGcmParameters nesnesi, daha önce tanımlanmış yöntemler (ve Java standart yöntemleri equals ve hashCode Bu iyi bir uygulama olarak kabul edilir).

Son olarak, yeni AeadParameters nesneleri oluşturmak için statik yöntemler sunar. Bunlar girişleri doğrular, yani boyutun 16, 24 veya veya 32.

Önemli nesneler

Tink'in bir anahtar hiyerarşisi de vardır. AES GCM örneğimize devam edersek, aşağıdaki gibidir:

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);
}

getIdRequirementOrNull yöntemi, bu anahtarın sahip olması gereken kimliği döndürür. veya gerekli değilse null. (Anahtar için böyle bir şart, bazı durumlarda Tink'in şifrelenmiş metinlere veya imzalara 0x01<id> dizesiyle başlarsa bu bölüme bakın şifreli metin etiketleme).

Bu, her zaman getParameters().hasIdRequirement() ve uygulayıcılar önemli sınıfların bunu sağlaması gerekir.

Key uygulamalarında ayrıca equalsKey farklı anahtarları karşılaştırabilirsiniz. Böyle yöntem çoğu zaman yararlıdır: Örneğin, anahtar türevini test ederken türevin tekrar tekrar uygulanmasından elde edilen gelirin aynı anahtar nesnesidir. Ayrıca, bir KMS, içindeki anahtarlardan herhangi birinin kullanıcılara sağladığı faydalar eşittir (bazen, kullanıcılar bir etkinliği anahtarları ve bunları aynı KMS'ye birden çok kez yükleyin). Proje yaşam döngüsünün equals Java yöntemini geçersiz kılmaz çünkü bu işlem hashCode geçersiz kılınır ve hashCode güvenli bir şekilde uygulanmaz ve equals ile uyumlu olması gerekir.

Sonra getParameters() yönteminden yararlanmamız gerekir. Bu sayede kullanıcılar anahtarı oluşturmak için kullanılan Parametreler hakkındaki orijinal bilgileri

Son olarak, AesGcmKey, ham anahtar materyalini döndüren bir getKeyBytes yöntemine sahiptir. Bu tür yöntemler önemli sınıflar için çok tipik yöntemlerdir: türe, temel anahtar materyaline erişim sağlar. Kullanıcılar bu araçları kullanarak yapabilir. Örneğin, anahtarın temsil ettiği temel bileşeni uygulayın. veya seri haline getirerek ya da diskte depolamak veya ağ. Anahtarın kendisi, anahtar materyalini şunlara karşı korumaktan sorumludur: yetkisiz erişim. Örneğin, SecretBytes, şu işlemleri gerçekleştirmek için erişim jetonu gerektirir: gerekli tüm bilgileri (Erişim Denetimi'ne bakın).

Asimetrik Tuşlar

Tink, asimetrik temel öğelerde biri özel, diğeri özel olmak üzere iki Anahtar sınıfı kullanır kullanabilirsiniz. Parametreler için, aynı eşleme türünü kullanmak daha uygundur. sınıfını (anahtarları oluşturmak için kullanılabilecek yalnızca bir sınıf olduğundan) seçin.

Ayrıca, Tink'in ek bilgi içeren PrivateKey arayüzü de işlev getPublicKey().