सुरक्षा से जुड़ी FIPS 140-2 से जुड़ी शर्तें पूरी करने के लिए Tink इस्तेमाल करें

Tink अपने-आप FIPS 140-2 की पुष्टि नहीं हुई है. हालांकि, यह कई FIPS 140-2 मंज़ूरी वाले एल्गोरिदम के साथ काम करता है. इसे लागू करने के असल तरीके में, BoringSSLsboringCrypto जैसे पुष्टि किए गए क्रिप्टोग्राफ़िक मॉड्यूल का इस्तेमाल किया जा सकता है. Tink में FIPS मोड में बोरिंगएसएसएल बनाने के लिए, एक WorkspaceSPACE शामिल है.

ध्यान दें कि फ़ाइल फ़ोल्डर इस बात की गारंटी नहीं देता कि आपका BoingSSL, FIPS के नियमों का पालन करता है. हमारा सुझाव है कि आप BoeringCrypto की आधिकारिक सुरक्षा नीति पढ़ें.

इस्तेमाल किए जा सकने वाले एल्गोरिदम

Tink में इन एल्गोरिदम को FIPS 140-2 के मुताबिक मंज़ूरी दी गई है (ज़्यादा जानकारी FIPS 140-2 ऐनेक्स A पर देखें):

  • पुष्टि किया गया एन्क्रिप्ट (सुरक्षित) करने का तरीका
    • AES-GCM
    • AES-CTR-HMAC-SHA256
  • एमएसी
    • एचएमएसी-SHA256
    • एईएस-कैमक
  • डिजिटल हस्ताक्षर
    • ECDSA
    • आरएसए-एसएसए-पीकेसीएस1
    • आरएसए-एसएसए-पीएसएस

C++ में सिर्फ़ FIPS मोड

अगर आपके लिए FIPS 140-2 के मंज़ूरी मिले हुए एल्गोरिदम और लागू किए गए मान्य एल्गोरिदम इस्तेमाल करना ज़रूरी है, तो सिर्फ़ FIPS वाले मोड में Tink बनाएं. इससे अनुमति वाले एल्गोरिदम के इस्तेमाल पर पाबंदी लग जाती है और यह जांच की जाती है कि Tink पुष्टि किए गए क्रिप्टोग्राफ़िक मॉड्यूल का इस्तेमाल कर रहा है या नहीं.

इससे, Tink ऐप्लिकेशन के काम करने के तरीके में ये बदलाव होते हैं:

  • Register() फ़ंक्शन सिर्फ़ ऐसे एल्गोरिदम रजिस्टर करते हैं जिनमें FIPS पुष्टि हो चुकी है. इसका मतलब है कि आप सिर्फ़ उन एल्गोरिदम के लिए कीसेट इस्तेमाल कर पाएंगे जो पुष्टि किए गए क्रिप्टोग्राफ़िक मॉड्यूल का इस्तेमाल करते हैं.
  • Tink यह जांच करता है कि Bose को BooringCrypto मॉड्यूल की मदद से बनाया गया है या नहीं. मॉड्यूल उपलब्ध न होने पर, प्रिमिटिव को किए जाने वाले कॉल INTERNAL की गड़बड़ी दिखाते हैं.
  • subtle/ में प्रिमिटिव का इस्तेमाल उन एल्गोरिदम तक सीमित है जो पुष्टि किए गए क्रिप्टोग्राफ़िक मॉड्यूल का इस्तेमाल करते हैं.

BoringCrypto

Tink पुष्टि किए गए क्रिप्टोग्राफ़िक मॉड्यूल का ऐक्सेस देने के लिए, C++ में BoringCrypto का इस्तेमाल करता है. इसकी मौजूदा पुष्टि की स्थिति, सिर्फ़ FIPS वाले मोड में उपलब्ध एल्गोरिदम पर नीचे दी गई अतिरिक्त पाबंदियां लागू करती है:

  • AES-CMAC की पुष्टि नहीं की गई है और यह उपलब्ध नहीं है
  • आरएसए-एसएसए-पीकेसीएस1, 3072-बिट मॉड्यूलस पर प्रतिबंधित है
  • आरएसए-एसएसए-पीएसएस, 3072-बिट मॉड्यूलस पर लागू नहीं होता

Bazel के साथboringCrypto मॉड्यूल का इस्तेमाल करने के लिए, C++ वर्कस्पेस में जाकर, boringssl की local_repository परिभाषा पर टिप्पणी हटाएं.

कंपाइल करते समय चालू करें

सिर्फ़ FIPS वाले मोड में Tink बनाने के लिए, कंपाइल करने के समय फ़्लैग सेट करें:

bazel build ... --//third_party/tink/cc/config:use_only_fips=True

अगर आपको रनटाइम के दौरान यह देखना है कि Tink को सिर्फ़ FIPS मोड में बनाया गया है या नहीं, तो आपके पास internal/fips_utils.h हेडर शामिल करने का विकल्प है, जो कि kUseOnlyFips की जानकारी देता है.

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

रन टाइम के दौरान चालू करें

सिर्फ़ FIPS वाले मोड में Tink बनाने के बजाय, config/tink_fips.h से crypto::tink::RestrictToFips() को कॉल किया जा सकता है. इससे, रनटाइम पर फ़्लैग सेट करके, FIPS प्रिमिटिव के लिए पाबंदियां लागू की जा सकती हैं.

चेतावनी: अगर रनटाइम का विकल्प इस्तेमाल किया जाता है, तो किसी भी मुख्य कॉन्टेंट को मैनेज करने, मुख्य मैनेजर को रजिस्टर करने या Tink की अन्य सुविधाओं को मैनेज करने से पहले, crypto::tink::RestrictToFips() को कॉल करना ज़रूरी है. इसके अलावा, आपको यह भी पक्का करना होगा कि BoningSSL कोboringCrypto मॉड्यूल की मदद से बनाया गया हो, नहीं तो Tink आपको किसी भी डेटा को प्रोसेस करने की अनुमति नहीं देता.