इस पेज में कुंजियों और प्रिमिटिव आउटपुट के लिए, Tink के वायर फ़ॉर्मैट के बारे में बताया गया है. कॉन्टेंट बनाने यह दस्तावेज़ उन क्रिप्टोग्राफ़र के लिए है जो क्रिप्टोग्राफ़िक लिखने वाले लोगों के लिए क्रिप्टो लाइब्रेरी की अन्य हाई-लेवल लाइब्रेरी की टिंक और मेंटेनर जिन्हें तार की ज़रूरत होती है काम करने वाला मोड. यह आम दर्शकों के लिए नहीं बना है.
कीसेट को क्रम में लगाना
Tink अपने कीसेट को क्रम में लगाने के लिए, Google Protobuf का इस्तेमाल करता है.
- बाइनरी सीरियलाइज़्ड कीसेट, सीरियल वाले कीसेट प्रोटो होता है. इसे tink.proto. किसी कुंजी की KeyData वैल्यू प्रॉपर्टी, क्रम के हिसाब से होती है कुंजी के टाइप का प्रोटो इस्तेमाल करें.
- JSON को सीरियल की मदद से बनाया गया कीसेट, एक कीसेट प्रोटो है. इसे JSON फ़ॉर्मैट में क्रम में लगाया जाता है. ध्यान दें कि KeyData वैल्यू अब भी बाइनरी सीरियल वाला प्रोटो है.
- एन्क्रिप्ट (सुरक्षित) किया गया कीसेट, एन्क्रिप्ट (सुरक्षित) किया गया एक सीरियलाइज़्ड कीस्ट प्रोटो है. इसे इसमें परिभाषित किया गया है tink.proto. इसमें एन्क्रिप्ट (सुरक्षित) किया गया बाइनरी सीरियल वाला कीसेट है और वैकल्पिक रूप से कुछ एन्क्रिप्ट नहीं किए गए KeysetInfo मेटाडेटा.
टिंक आउटपुट प्रीफ़िक्स
ज़्यादातर Tink प्रिमिटिव 5 बाइट वाले आउटपुट प्रीफ़िक्स के साथ काम करते हैं. इसमें ये शामिल होते हैं:
- 1 बाइट वाला वर्शन:
0x01
- 4 बाइट की कुंजी का संकेत: यह इस्तेमाल की गई कुंजी का कुंजी आईडी है.
कुछ लेगसी कुंजियां, वर्शन बाइट 0x00
के साथ भी काम कर सकती हैं.
ध्यान दें कि इस प्रीफ़िक्स की पुष्टि नहीं हुई है और सुरक्षा के लिए इस पर भरोसा नहीं किया जा सकता के मकसद से बनाया गया है. Tink इसका इस्तेमाल, जानकारी को डिक्रिप्ट करने या पुष्टि करने की प्रक्रिया को तेज़ करने के लिए संकेत के तौर पर करता है.
AEAD
आम तौर पर, Tink फ़ॉर्मैट AEAD साइफ़रटेक्स्ट को इस तरह फ़ॉर्मैट करता है:
prefix || IV || ciphertext || tag
जब तक कि संबंधित RFC में अलग से न बताया गया हो. prefix
या तो खाली है
या 5 बाइट टिंक आउटपुट प्रीफ़िक्स का इस्तेमाल करें.
AES-CTR-HMAC
AES-CTR-HMAC के लिए, Tink इस तरह से जुड़े डेटा (AD) के साथ MAC का हिसाब इस तरह लगाता है:
AD || IV || ciphertext || bitlen(AD)
जहां bitlen(AD)
, AD की बिट में लंबाई को 64-बिट बिग-एंडियन के तौर पर दिखाता है
साइन नहीं किया गया पूर्णांक. यह एचएमएसी स्कीम,
Mcgrew.
निर्धारित AEAD
Tink, AES-SIV के लिए RFC 5297 लागू करता है सादे टेक्स्ट की शुरुआत में इनिशलाइज़ेशन वेक्टर (SIV). प्रिमिटिव में 5 बाइट वाला टिंक आउटपुट प्रीफ़िक्स जोड़ा जा सकता है.
आरएफ़सी 5297, संबंधित डेटा की सूची के साथ काम करता है, जबकि Tink सिर्फ़ उसी सूची के साथ काम करता है इससे जुड़ा डेटा, जो आरएफ़सी 5297 में एक एलिमेंट वाली सूची से मेल खाता है. डेटा से जुड़ा खाली डेटा वह सूची होती है जिसमें एक खाली एलिमेंट होता है, न कि खाली एलिमेंट सूची.
AEAD स्ट्रीम करना
AES-CTR HMAC देखें और AES-GCM-HKDF.
एन्वेलप एन्क्रिप्शन
एन्वेलप एन्क्रिप्शन की मदद से, डेटा को एन्क्रिप्ट करने के लिए डेटा एन्क्रिप्शन कुंजी DEK
का इस्तेमाल किया जाता है
Tink के AEAD प्रिमिटिव. एन्क्रिप्ट (सुरक्षित) करने की सुविधा इस तरह काम करती है:
- दिए गए मुख्य टेंप्लेट (या मुख्य पैरामीटर) का इस्तेमाल करके, एक नया
DEK
जनरेट किया जाता है. DEK
को एक बाइट स्ट्रिंग में क्रम से लगाया जाता है. सीरियलाइज़ेशन का फ़ॉर्मैट: कुंजी टाइप प्रोटो का प्रोटोकॉल बफ़र सीरियलाइज़ेशन. उदाहरण के लिए, यह क्रम से लगाया गयाAesGcmKey
प्रोटोकॉल बफ़र मैसेज, जिसमें बताया गया है कुंजी टाइप AES GCM के DEK के लिए aes_gcm.proto. क्रम से लगाने के लिए, प्रोटोकॉल बफ़र को क्रम में लगाना देखें एक प्रोटोकॉल बफ़र.- क्रम से लगाए गए
DEK
को, सेवा देने वाली किसी बाहरी कंपनी ने एन्क्रिप्ट (सुरक्षित) किया है, जैसे कि GCP,encrypted DEK
में रखना चाहिए. DEK
का इस्तेमाल, सादे टेक्स्ट को उससे जुड़े डेटा के साथ एन्क्रिप्ट (सुरक्षित) करने के लिए किया जाता हैciphertext
. इसलिए,ciphertext
का फ़ॉर्मैट बिलकुल AEAD प्रिमिटिव जैसा ही हैDEK
के मुताबिक है.
एन्वेलप एन्क्रिप्शन का आउटपुट फ़ॉर्मैट इस प्रकार है:
encrypted DEK length || encrypted DEK || ciphertext
encrypted DEK length
, 4 बाइट का है, जिसमें encrypted DEK
की लंबाई सेव की जा रही है
32-बिट के बिग-एंडियन पूर्णांक के तौर पर.
MAC
Tink, संबंधित RFC को फ़ॉलो करता है. Primitives में 5 बाइट का टिंक आउटपुट जोड़ा जा सकता है प्रीफ़िक्स का इस्तेमाल करें.
पीआरएफ़ सेट किया गया
Tink, संबंधित RFC को फ़ॉलो करता है. ध्यान रखें कि PRF सेट के लिए कुंजी का टाइप अलग होता है का इस्तेमाल करें. PRF सेट की कुंजियों में कभी भी टिंक आउटपुट प्रीफ़िक्स नहीं जोड़ा जाता. इससे यह पक्का होता है कि आउटपुट पीआरएफ़.
हाइब्रिड एन्क्रिप्शन
Tink हाइब्रिड एन्क्रिप्शन के लिए, सामान्य वायर फ़ॉर्मैट इस तरह से बनाया जाता है:
prefix || encapsulated_key || encrypted_data
prefix
खाली या 5 बाइट वाला टिंक आउटपुट प्रीफ़िक्स है. हर कुंजी टाइप में शामिल है
इस बारे में जानकारी कि कितने बाइट पार्स करना है और उन बाइट को कैसे पार्स करना है
encapsulated_key
.
HPKE (हाइब्रिड पब्लिक की एन्क्रिप्शन)
Tink, आरएफ़सी 9180 में बताए गए HPKE स्टैंडर्ड के मुताबिक काम करता है. HPKE साइफ़रसुइट में नीचे दिए गए तीन प्रिमिटिव शामिल होते हैं.
- मुख्य एनकैप्सुलेशन मैकेनिज़्म (केईएम)
- की डेरिवेशन फ़ंक्शन (KDF)
- संबंधित डेटा के साथ पुष्टि किया गया एन्क्रिप्शन (AEAD)
HPKE मानक, आरएफ़सी 9180, सेक्शन में सामान्य वायर फ़ॉर्मैट को तय नहीं करता
10 हैं. Tink लागू करने के लिए HPKE सिस्टम में इनका इस्तेमाल किया जाता है
encapsulated_key
और encrypted_data
वैल्यू.
encapsulated_key
- भेजने वाले की सीरियल के तौर पर सेट की गई सार्वजनिक कुंजी
- इसमें
enc
के रूप में परिभाषित किया गया आरएफ़सी 9180, सेक्शन 4.1 - इस्तेमाल किए गए HPKE KEM के हिसाब से तय किया गया फ़ॉर्मैट
encrypted_data
- सादे टेक्स्ट और टैग (उदाहरण के लिए,
ciphertext || tag
में बिना आईवी के) - इसमें
ct
के रूप में परिभाषित किया गया आरएफ़सी 9180, सेक्शन 4 - इस्तेमाल किए गए HPKE AEAD फ़ॉर्मैट की मदद से तय करें
- सादे टेक्स्ट और टैग (उदाहरण के लिए,
X25519 डिफ़ी-हेलमैन का केईएम
X25519 DHKEM के लिए, enc
मान, भेजने वाले की 32-बाइट वाली डिफ़ी-हेलमैन सार्वजनिक है
बटन दबाएं.
ECIES-AEAD-HKDF
Tink के ECIES-AEAD-HKDF को लागू करने के लिए, encapsulated_key
आउटपुट
की एनकैप्सुलेशन मैकेनिज़्म (केईएम) है और encrypted_data
एक आउटपुट है
का आकलन किया है.
KEM
कुंजी के टाइप के आधार पर, Tink कंप्रेस किए गए और बिना कंप्रेस किए हुए एलिप्टिक कर्व का इस्तेमाल करता है
पॉइंट, आरएफ़सी 8422/ANSI.X9-62.2005
एन्कोडिंग स्टैंडर्ड के मुताबिक होने चाहिए. इसके लिए
बिना कंप्रेस किए पॉइंट इस्तेमाल करने पर, बाइट 0x04
के बाद x
और y
निश्चित आकार वाले पूर्णांकों के रूप में निर्देशांक का इस्तेमाल करें. कंप्रेस किए गए निर्देशांकों के लिए, बाइट 0x02
या 0x03
और एक तय आकार वाले पूर्णांक के तौर पर x
निर्देशांक का इस्तेमाल किया जाता है. X25519
के लिए,
RFC 7748 परिभाषा का इस्तेमाल किया गया है (x
निर्देशांक को एक तय साइज़ वाले पूर्णांक के तौर पर इस्तेमाल किया जाता है).
DEM:
encrypted_data
के लिए, Tink उसी फ़ॉर्मैट का इस्तेमाल करता है जो AEAD में होता है. इसमें ये शामिल हैं
IV दर्ज करें.
की डिरिवेशन
पहले शेयर किए गए पॉइंट के x कोऑर्डिनेट x_ss
को कैलकुलेट किया जाता है. डिजिटल मार्केटिंग के
इसके बाद AEAD इस पर सेट हो जाता है:
HKDF(ikm = encapsulated_key || x_ss, salt = salt_of_key, info = context_info, length = dem_key_size)
जहां encapsulated_key
, बाइट के रूप में पूरा KEM आउटपुट है.
डिजिटल हस्ताक्षर
Tink, संबंधित RFC को फ़ॉलो करता है. Primitives में 5 बाइट का टिंक आउटपुट जोड़ा जा सकता है प्रीफ़िक्स का इस्तेमाल करें.
ECDSA
कुंजी में मौजूद EcdsaSignature एन्कोडिंग फ़ील्ड के आधार पर,
ईसीडीएसए के हस्ताक्षर का फ़ॉर्मैट IEEE P1363
या ASN.1 DER
है.
IEEE P1363
के हस्ताक्षर का फ़ॉर्मैट r || s
है. इसमें r
और s
का फ़ॉर्मैट होता है
शून्य-पैडेड और बाइट में उनका साइज़ कर्व के क्रम के बराबर होना चाहिए. इसके लिए
उदाहरण के लिए, NIST P-256
कर्व के लिए, r
और s
32 बाइट तक ज़ीरो-पैडेड हैं.
DER हस्ताक्षर को ASN.1
का इस्तेमाल करके कोड में बदला गया है:
ECDSA-Sig-Value :: = SEQUENCE { r INTEGER, s INTEGER }
खास तौर पर, कोड में बदलने का तरीका:
0x30 || totalLength || 0x02 || r's length || r || 0x02 || s's length || s
Tink पर हस्ताक्षर की पुष्टि करने के सबसे सही तरीक़े अपनाए जाते हैं. इसके लिए, DER कोड में बदले गए ECDSA हस्ताक्षर (बीईआर कोड में बदले गए दूसरे हस्ताक्षर अमान्य हैं).
यह हस्ताक्षर में मैलेबिलिटी अटैक को रोकने में मदद करता है, जिससे अक्सर अटैक पर असर पड़ता है. क्रिप्टो करंसी सिस्टम.