कुंजी और पैरामीटर ऑब्जेक्ट

व्यावहारिक तौर पर, Tink प्रतिनिधित्व के लिए Key ऑब्जेक्ट देता है Parameters को दिखाने के लिए, कुंजी और Parameters ऑब्जेक्ट. उदाहरण के लिए, Java में हमारे पास AesGcmKey ऑब्जेक्ट हैं AES GCM कुंजियों का प्रतिनिधित्व करता है.

इस सेक्शन में, हमने बताया है कि इन ऑब्जेक्ट को Java में कैसे डिज़ाइन किया जाता है और बातचीत करें.

Parameters ऑब्जेक्ट

बड़े पैमाने पर इस्तेमाल की जाने वाली AEAD एन्क्रिप्शन स्कीम AES GCM का इस्तेमाल करें. Tink ज़रूरी जानकारी के साथ AesGcmParameters ऑब्जेक्ट मुहैया कराता है, ताकि एक AesGcmKey बना सकता है, जिसके बारे में हम बाद में बताएंगे. Java में पैरामीटर की हैरारकी इस तरह दिखती है:

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

जैसा कि इस सेक्शन में बताया गया है कीसेट, साइफ़रटेक्स्ट टैग करना, कीसेट में होने पर, कुछ कुंजियों के आईडी पर उनकी ज़रूरत होती है. कई Parameters ऑब्जेक्ट में hasIdRequirement तरीका है, जो बताता है कि इस Parameters ऑब्जेक्ट के ज़रिए बनाई गई 'की' में ऐसा ज़रूरी आईडी होगा या नहीं होगा.

इसके बाद, AesGcmParameters ऑब्जेक्ट में getKeySizeBytes() वाले तरीके मिलते हैं, getIvSizeBytes() और getTagSizeBytes(). ये लंबे समय तक चलने वाले इस्तेमाल की गई कुंजी, इस्तेमाल किए गए IV की लंबाई, और बनाए गए टैग की लंबाई, बाइट में. Tink इनमें से कुछ फ़ंक्शन को पूरा करने के लिए उपलब्ध कराता है, लेकिन हर विकल्प के लिए, हमेशा Aead बनाने की अनुमति नहीं होती है. उदाहरण के लिए, फ़िलहाल AES GCM के साथ सिर्फ़ 12 बाइट IVs काम करता है.

AesGcmParameters ऑब्जेक्ट, पिछले इवेंट के लिए भी बदलाव करता है परिभाषित विधियां (और Java मानक विधियां equals और hashCode इसे अच्छा तरीका माना जाता है).

आखिर में, यह नए AeadParameters ऑब्जेक्ट बनाने के लिए स्टैटिक तरीके उपलब्ध कराता है. ये इनपुट की पुष्टि करते हैं. इसका मतलब है कि ये इस बात की जांच करते हैं कि साइज़ 16, 24, या 32.

मुख्य ऑब्जेक्ट

Tink में एक मुख्य क्रम भी होता है. AES GCM के हमारे उदाहरण से मिली जानकारी के मुताबिक, ऐसा लगता है कि इस तरह:

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 वह आईडी लौटाता है जो इस कुंजी के लिए आवश्यक है, या अगर कोई ज़रूरत न हो, तो null का इस्तेमाल करें. (मुख्य बात यह है कि कुछ मामलों में Tink इस्तेमाल करने की ज़रूरत पड़ती है) 0x01<id> स्ट्रिंग के साथ सादे टेक्स्ट या हस्ताक्षर के प्रीफ़िक्स, सेक्शन देखें साइफ़रटेक्स्ट टैगिंग पर लागू होता है.

यह हमेशा इन चीज़ों के परिणाम के साथ संगत होगा getParameters().hasIdRequirement() और इसे लागू करने वाले नए कुंजी क्लास को भी यह पक्का करने की ज़रूरत है.

Key को लागू करने के लिए, equalsKey तरीका भी उपलब्ध कराना होगा, ताकि अलग-अलग कुंजियों की तुलना करें. इस तरह तरीका अक्सर उपयोगी होता है: उदाहरण के लिए, कुंजी व्युत्पन्न की जांच करते समय, किसी एक यह पक्का करने में दिलचस्पी है कि व्युत्पन्न के बार-बार इस्तेमाल से फ़ायदा हो कुंजी ऑब्जेक्ट मौजूद रहेगा. इसके अलावा, केएमएस यह जांच कर सकता है कि क्या अलग-अलग उपयोगकर्ताओं को दिया जाता है और बराबर होता है (कभी-कभी ऐसा तब होता है, जब उपयोगकर्ता और उन्हें एक ही केएमएस (KMS) पर कई बार अपलोड किया जा सकता है. ध्यान देने वाली बात यह है कि को Java प्रणाली equals को ओवरराइड नहीं करता, क्योंकि इसके लिए हमें hashCode को ओवरराइड करें. hashCode को किसी सुरक्षित तरीके से लागू करने का कोई तरीका नहीं है यह बिना किसी अनुमान के, equals के साथ काम करता है.

इसके बाद, आपको एक तरीका getParameters() चाहिए. इससे उपयोगकर्ताओं को कुंजी बनाने के लिए इस्तेमाल किए गए पैरामीटर के बारे में मूल जानकारी.

आखिर में, AesGcmKey में getKeyBytes तरीका होता है, जो मुख्य कॉन्टेंट के लिए इस्तेमाल किया जाने वाला रॉ कॉन्टेंट दिखाता है. कुंजी क्लास के लिए ये तरीके काफ़ी आम हैं: वे हर टाइप के हिसाब से होते हैं, और बुनियादी तौर पर अहम जानकारी का ऐक्सेस उपलब्ध करा सके. उनका इस्तेमाल करके, उपयोगकर्ता कर सकते हैं, उदा. कुंजी से दिखाए जाने वाले प्रिमिटिव को लागू करें, या कुंजी को डिस्क पर संग्रहित करने या उस पर भेजने के लिए उसे सीरियल नेटवर्क. कुंजी की ज़िम्मेदारी, अहम कॉन्टेंट को सुरक्षित रखने की होती है अनुमति नहीं है. उदाहरण के लिए, SecretBytes को ऐक्सेस टोकन की ज़रूरत होती है, ताकि उन्हें असल में कॉन्टेंट और (ऐक्सेस कंट्रोल देखें).

एसिमेट्रिक कुंजियां

एसिमेट्रिक प्रिमिटिव के लिए, Tink दो की क्लास का इस्तेमाल करता है, एक प्राइवेट के लिए और एक सार्वजनिक पासकोड के लिए. पैरामीटर के लिए, इसका इस्तेमाल करना ज़्यादा आसान है क्लास (क्योंकि यहां सिर्फ़ एक क्लास होती है जिसका इस्तेमाल पासकोड जनरेट करने के लिए किया जा सकता है).

Tink में एक और इंटरफ़ेस PrivateKey भी है getPublicKey() फ़ंक्शन.