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