टिंक क्या है?

Tink एक ओपन सोर्स क्रिप्टोग्राफ़ी लाइब्रेरी है, जिसे Google के क्रिप्टोग्राफ़र और सुरक्षा इंजीनियरों ने लिखा है. Tink के सुरक्षित और आसान एपीआई, उपयोगकर्ता को ध्यान में रखकर बनाए गए डिज़ाइन, सही से लागू करने, कोड की समीक्षा, और बड़े स्तर पर टेस्टिंग के ज़रिए सामान्य गलतियों को कम करते हैं. इस पेज पर मौजूद लक्ष्य सेक्शन में देखें कि Tink किन मकसद को पूरा करने के लिए डिज़ाइन किया गया था.

Tink की मदद से, जिन लोगों के पास क्रिप्टोग्राफ़ी बैकग्राउंड नहीं है वे सामान्य क्रिप्टोग्राफ़ी टास्क को सुरक्षित तरीके से कर सकते हैं. Google में, Tink को सैकड़ों प्रॉडक्ट और सिस्टम में डिप्लॉय किया गया है.

मुझे Tink इस्तेमाल क्यों करना चाहिए?

Tink इस्तेमाल करने की सबसे अहम वजहें ये हैं:

  • इसे इस्तेमाल करना आसान है

    क्रिप्टोग्राफ़ी का इस्तेमाल करना मुश्किल है. Tink इस्तेमाल करके, सिर्फ़ कुछ लाइनों के कोड का इस्तेमाल करके, पहले से मौजूद सुरक्षा की गारंटी के साथ डेटा को एन्क्रिप्ट (सुरक्षित) या साइन किया जा सकता है. Tink से आपको कुंजी मैनेज करने वाले बाहरी सिस्टम (KMS) का इस्तेमाल करके, कुंजियों या सुरक्षित कुंजियों को बदलने में मदद मिलती है.

  • यह सुरक्षित है

    Tink में, BooringSSL और Java क्रिप्टोग्राफ़ी आर्किटेक्चर जैसी जानी-पहचानी लाइब्रेरी पर सुरक्षा की सुविधाएं जोड़ी गई हैं. साथ ही, उन्हें सीधे इंटरफ़ेस में दिखाया जाता है, ताकि ऑडिटर और टूल आसानी से गड़बड़ियों का पता लगा सकें. Tink उन एपीआई को भी अलग करता है जो संभावित रूप से खतरनाक होते हैं, ताकि आप उनकी निगरानी कर सकें.

  • यह ऐप्लिकेशन के साथ काम करता है

    टिंक साइफ़रटेक्स्ट, मौजूदा क्रिप्टोग्राफ़ी लाइब्रेरी के साथ काम करते हैं. Tink, Amazon केएमएस, Google Cloud केएमएस, Android Keystore, और iOS Keychain में कुंजी को एन्क्रिप्ट करने या सेव करने की सुविधा देता है.

Tink इस्तेमाल करने वाला व्यक्ति कौन है?

Tink का इस्तेमाल ज़्यादातर कंपनियों में किया जाता है. इनमें Google, Square, और Citadel शामिल हैं. साथ ही, Google Cloud के सैकड़ों ग्राहक और Google Pay पार्टनर भी इसका इस्तेमाल करते हैं. Tink, Jetpack Security लाइब्रेरी को भी काम करता है. इससे Slack, Adidas, AirBnb, और Nextdoor जैसे कई लोकप्रिय Android ऐप्लिकेशन सुरक्षित बनाए जाते हैं.

टिंक गोल

अन्य क्रिप्टोग्राफ़िक लाइब्रेरी की तुलना में Tink के मुख्य मकसद क्या हैं? साथ ही, इन लक्ष्यों को हासिल करने के लिए, Tink किन मुख्य तरीकों का इस्तेमाल करता है?

कम शब्दों में कहें, तो Tink के दो लक्ष्य हैं:

  1. क्रिप्टोग्राफ़िक गतिविधि को बढ़ावा दें: उपयोगकर्ताओं को पासकोड और एल्गोरिदम आसान तरीके से बदलने की सुविधा मिलनी चाहिए.
  2. सुरक्षा समीक्षाएं चालू करना: Tink का मकसद है कि उपयोगकर्ता, ऐसे इंटरफ़ेस का इस्तेमाल करके कोड लिख सकें जिनकी सुरक्षा की स्थानीय तौर पर समीक्षा की जा सके. इसके लिए, उपयोगकर्ताओं को ऐसे इंटरफ़ेस दिए जाते हैं जो सुरक्षा की साफ़-साफ़ गारंटी देते हैं.

इन लक्ष्यों को हासिल करने के लिए, Tink इन मुख्य तरीकों का इस्तेमाल करता है:

  1. Tink, प्रिमिटिव और इंटरफ़ेस को अहम ऐब्स्ट्रैक्टेशन के तौर पर उपलब्ध कराता है. इस तरह की ऐब्स्ट्रैक्शन, उपयोगकर्ताओं को ऐसा कोड लिखने की अनुमति देते हैं जो इस्तेमाल किए जाने वाले सटीक एल्गोरिदम के बारे में नहीं बताता है. इसके बजाय, वे सुरक्षा से जुड़े सही अनुमान के बारे में बताते हैं.
  2. Tink "कीसेट" के सिद्धांत का इस्तेमाल करता है. यह कुंजियों का ऐसा सेट है जो किसी खास प्रिमिटिव से जुड़ा होता है. इससे उपयोगकर्ता, कई कुंजियों के साथ काम करने वाला कोड लिखते हैं.
  3. Tink में, कुंजियों के बारे में सिर्फ़ बताए गए मुख्य कॉन्टेंट ही नहीं, बल्कि क्रिप्टोग्राफ़िक एल्गोरिदम के साथ-साथ सभी पैरामीटर से भी जानकारी मिलती है. इसका मतलब है कि Tink कुंजी, सभी संभावित फ़ंक्शन में से हमेशा एक यूनीक क्रिप्टोग्राफ़िक फ़ंक्शन चुनती है. साथ ही, जानकारी समझने के लिए कोई जगह नहीं छोड़ती.

इन सेक्शन में, इन सिद्धांतों के बारे में ज़्यादा जानकारी दी गई है.

क्रिप्टोग्राफ़िक एजिलिटी

Google की सॉफ़्टवेयर इंजीनियरिंग, सॉफ़्टवेयर इंजीनियरिंग के क्षेत्र में सीखे गए लेसन के बारे में बताने वाली एक किताब, जिसका सबटाइटल "समय के साथ प्रोग्रामिंग से सीखे गए लेसन" है, को देखें. चीज़ों में बदलाव होने से पड़ने वाले नतीजों को समझाने के लिए, लेखक बहुत मेहनत करते हैं. इस बात से भी Tink के डिज़ाइन पर काफ़ी असर पड़ा. क्रिप्टोग्राफ़ी में, यह ज़रूरी है कि कोई व्यक्ति बदलाव के लिए तैयार हो. कुंजियां लीक हो जाएंगी और एल्गोरिदम काम नहीं करेंगे. कई उपयोगकर्ताओं के लिए कुंजियों और एल्गोरिदम को स्विच आउट कर पाना बहुत ज़रूरी होता है. इसलिए, समझदारी से तैयार रहना ज़रूरी है.

सुरक्षा समीक्षाएं और स्थानीय प्रॉपर्टी

Tink में, AEAD इंटरफ़ेस जैसे इंटरफ़ेस के इस्तेमाल को प्रमोट किया जाता है. इसकी मदद से, उपयोगकर्ता डेटा को एन्क्रिप्ट कर सकते हैं. सुरक्षा की दूसरी गारंटी में, AEAD की गारंटी है कि एक ही स्ट्रिंग को कई बार एन्क्रिप्ट करने पर अलग-अलग सादे टेक्स्ट मिलते हैं.

यह देखने के लिए कि इसका इस्तेमाल कैसे किया जा सकता है, मान लें कि कोई इंजीनियर किसी उपयोगकर्ता कुकी में कुछ संवेदनशील आईडी सेव करना चाहता है. वे इस तरह की क्लास दे सकते हैं:

class IdEncrypter {
  public static IdEncrypter createFromAead(Aead aead);

  public String encrypt(long id) throws GeneralSecurityException;
  public long decrypt(String encrypted) throws GeneralSecurityException;
};

Aead को पास करने पर ये प्रॉपर्टी मिलती हैं:

  1. कोड बताता है कि IdEncrypter अपना काम करने के लिए, इसे Aead से मिलने वाली सुरक्षा प्रॉपर्टी के साथ एन्क्रिप्ट (सुरक्षित) करने की स्कीम की ज़रूरत होती है. इसके अलावा, DeterministicAead भी काफ़ी नहीं होगा. IdEncrypter के लिए ज़रूरी है कि एक ही आईडी के दो एन्क्रिप्शन अलग-अलग हों. दूसरी ओर, AES GCM एन्क्रिप्टर (Aead का एक खास इंस्टेंस) के इंस्टेंस को पैरामीटर के तौर पर लेना बहुत मुश्किल होगा: IdEncrypter के लिए कोई भी Aead काफ़ी है और उसके लिए किसी खास एल्गोरिदम की ज़रूरत नहीं है.
  2. सुरक्षा की समीक्षा में इस बात को ध्यान में रखा जा सकता है. सुरक्षा समीक्षक को यह देखने के लिए पूरे कोड रिपॉज़िटरी को देखने की ज़रूरत नहीं होती कि किसी ने कहीं ने Aead की सब-क्लास तो नहीं बनाई है, जो IdEncrypter के साथ इस्तेमाल करने के लिए सुरक्षित नहीं है. इसके बजाय, Tink सभी सुरक्षा प्रॉपर्टी देता है और समीक्षा करने वाला यह जांच कर सकता है कि ये सभी चीज़ें काफ़ी हैं.

खास तौर पर, दूसरे पॉइंट पर ज़्यादा ध्यान देने की ज़रूरत होती है. उपयोगकर्ता अक्सर ऐसे एल्गोरिदम जोड़ने के लिए कहते हैं जो Aead 'नहीं' होते हैं. पिछले पॉइंट से पता चलता है कि यह खतरनाक क्यों है: अगर Aead को लागू किया गया है, जिससे ज़रूरी सुरक्षा की गारंटी नहीं मिलती, तो IdEncrypter असुरक्षित हो सकता है. साथ ही, सुरक्षा समीक्षा करने वाले इंजीनियर को अतिरिक्त कोड की जांच करनी होगी, ताकि यह जांच की जा सके कि ऑब्जेक्ट सही तरीके से इंस्टैंशिएट हुआ है या नहीं.