DAT प्रमाणपत्र
1. अवलोकन
DAT प्रमाणपत्र एक ऐसा विनिर्देश है जो DAT जारी करने के अधिकार को नियंत्रित करता है और टोकन के हस्ताक्षर व एन्क्रिप्शन एल्गोरिदम तथा कुंजी (Key) की जानकारी का प्रबंधन करता है।
प्रत्येक प्रमाणपत्र की एक अद्वितीय ID (CID) होती है, और DAT की जारी करने योग्य अवधि तथा बनने वाले टोकन की वैधता अवधि (TTL) को अनिवार्य करके वह टोकन के जीवनचक्र का सुरक्षित प्रबंधन करता है।
DAT में की रोलिंग कोई विकल्प नहीं है। प्रमाणपत्र में जारी करने योग्य अवधि विनिर्देश के स्तर पर ही अंकित होती है, इसलिए वह अवधि बीत जाने पर उस प्रमाणपत्र से नया टोकन नहीं बनाया जा सकता।
2. प्रमाणपत्र संरचना
cid . start . duration . ttl . sig-alg . crypto-alg . sig-key . crypto-key2.1. फ़ील्ड-वार विस्तृत विनिर्देश
CID : Hex (uint64)
- प्रमाणपत्र की पहचान करने वाली अद्वितीय प्रमाणपत्र ID है। DAT के
CIDफ़ील्ड से मैप होकर यह तय करती है कि सत्यापन के समय कौन-सा प्रमाणपत्र उपयोग किया जाए। - CID एक अपरिवर्तनीय पहचानकर्ता है। कुंजी बदलते समय वही CID दोबारा इस्तेमाल नहीं किया जाता, बल्कि नए CID के साथ प्रमाणपत्र जारी किया जाता है।
DAT जारी करने का प्रारंभ समय : uint64 (Unix Time)
- इस प्रमाणपत्र का उपयोग करके DAT जारी किए जा सकने के प्रारंभ समय को सेकंड (Seconds) इकाई में दर्शाता है।
DAT जारी करने की अवधि : uint64 (Seconds)
- प्रमाणपत्र की जारी करने की वैध अवधि है।
DAT जारी करने का प्रारंभ समयसे यह अवधि (सेकंड) बीत जाने के बाद इस प्रमाणपत्र से नया DAT जारी नहीं किया जा सकता। - यह निरपेक्ष समय नहीं, बल्कि अवधि (duration) है। समाप्ति का समय
start + durationसे निकाला जाता है।
DAT TTL (वैधता समय) : uint64 (Seconds)
- इस प्रमाणपत्र से जारी होने वाले DAT की वैधता अवधि (Time To Live) है। DAT बनाते समय
expireका मान जारी करने के समय में यह मान जोड़कर तय किया जाता है।
हस्ताक्षर एल्गोरिदम : String / Enum
- DAT के
signatureफ़ील्ड को बनाने और सत्यापित करने में उपयोग होने वाला हस्ताक्षर एल्गोरिदम है।
एन्क्रिप्शन एल्गोरिदम : String / Enum
- DAT के
secureफ़ील्ड को एन्क्रिप्ट और डिक्रिप्ट करने में उपयोग होने वाला एन्क्रिप्शन एल्गोरिदम है।
हस्ताक्षर कुंजी : Base64Url (Binary)
- हस्ताक्षर और सत्यापन में उपयोग होने वाला कुंजी डेटा है। (एल्गोरिदम के अनुसार यह असममित कुंजी की Public/Private Key या सममित कुंजी हो सकती है।)
एन्क्रिप्शन कुंजी : Base64Url (Binary)
secureफ़ील्ड के एन्क्रिप्शन व डिक्रिप्शन में उपयोग होने वाला एन्क्रिप्शन कुंजी डेटा है।
2.2. समय की गणना
end = start + duration जारी करना समाप्त होने का समय
expire = end + ttl प्रमाणपत्र की अंतिम समाप्ति का समय- सभी गणनाएँ uint64 में की जाती हैं और केवल ओवरफ़्लो को त्रुटि मानकर अस्वीकार किया जाता है।
duration = 0औरttl = 0वैध मान हैं। इनसे ऐसा प्रमाणपत्र दर्शाया जा सकता है जिसकी जारी करने की खिड़की तुरंत बंद हो जाए, या ऐसा प्रमाणपत्र जो समाप्ति के साथ ही अमान्य हो जाने वाले टोकन बनाए।- सभी फ़ील्ड अहस्ताक्षरित पूर्णांक होने के कारण ऋणात्मक मान टाइप के स्तर पर अस्तित्व में ही नहीं हैं।
2.3. कंस्ट्रक्टर सिग्नेचर
सभी भाषाओं के कार्यान्वयन नीचे दिए आर्ग्युमेंट क्रम का उपयोग करते हैं।
(cid, dat_issuance_start_seconds, dat_issuance_duration_seconds, dat_ttl_seconds,
signature_key, crypto_key)तीसरा आर्ग्युमेंट समाप्ति का समय नहीं, अवधि है
तीसरे आर्ग्युमेंट में निरपेक्ष समाप्ति समय (end) पास करने पर बिना किसी त्रुटि के ग़लत वैधता खिड़की वाला प्रमाणपत्र बन जाता है, क्योंकि वह मान ज्यों का त्यों start + duration में चला जाता है।
3. प्रमाणपत्र का जीवनचक्र
| खंड | जारी करना | सत्यापन | निर्धारण |
|---|---|---|---|
| जारी करने में देरी | ✕ | ○ | issuable() == false |
| जारी करने योग्य | ○ | ○ | issuable() == true |
| DAT TTL शेष | ✕ | ○ | जारी करने की खिड़की बंद, पर समाप्ति से पहले |
| अंतिम समाप्ति के बाद | ✕ | ✕ | expired() == true |
- जारी करना संभव है या नहीं, यह
signable() && start <= now <= endसे तय होता है और इसमें दोनों सिरे शामिल हैं। - जारी करने की खिड़की बंद होने के बाद भी प्रमाणपत्र
ttlके बराबर और अधिक समय तक जीवित रहता है, क्योंकि खिड़की बंद होने से ठीक पहले जारी हुआ टोकन अपना पूरा जीवनकाल पूरा कर सके, यह आवश्यक है। - जारी करने में देरी (delay) का खंड इसलिए है कि क्लस्टर के सभी नोड्स को नया प्रमाणपत्र प्राप्त करने का समय मिल सके। विस्तृत जानकारी के लिए CMS सिंक दस्तावेज़ देखें।
4. एल्गोरिदम
4.1. हस्ताक्षर एल्गोरिदम
DAT की जालसाज़ी व छेड़छाड़ रोकने के लिए हस्ताक्षर एल्गोरिदम की सूची। सममित और असममित दोनों कुंजी पद्धतियाँ समर्थित हैं।
| नाम | पद्धति | टिप्पणी |
|---|---|---|
ECDSA-P256 | असममित | दीर्घवृत्त वक्र डिजिटल हस्ताक्षर (NIST secp256r1) |
ECDSA-P384 | असममित | दीर्घवृत्त वक्र डिजिटल हस्ताक्षर (NIST secp384r1) |
ECDSA-P521 | असममित | दीर्घवृत्त वक्र डिजिटल हस्ताक्षर (NIST secp521r1) |
HMAC-SHA256-MFS | सममित | 256-bit निश्चित आकार की गुप्त कुंजी आधारित Keyed-Hashing |
HMAC-SHA384-MFS | सममित | 384-bit निश्चित आकार की गुप्त कुंजी आधारित Keyed-Hashing |
HMAC-SHA512-MFS | सममित | 512-bit निश्चित आकार की गुप्त कुंजी आधारित Keyed-Hashing |
MFS (Maximum Fixed Secret): वह पद्धति जिसमें हैश एल्गोरिदम के आउटपुट (Output) आकार के बराबर बिट संख्या वाली निश्चित आकार की गुप्त कुंजी का उपयोग किया जाता है।
4.2. एन्क्रिप्शन एल्गोरिदम
DAT के भीतर के गोपनीय डेटा (secure फ़ील्ड) की सुरक्षा के लिए प्रमाणित एन्क्रिप्शन (Authenticated Encryption) एल्गोरिदम की सूची।
| नाम | कुंजी की लंबाई | संरचना |
|---|---|---|
IV-AES128-GCM | 128-bit | IV(96bit) + एन्क्रिप्शन परिणाम |
IV-AES256-GCM | 256-bit | IV(96bit) + एन्क्रिप्शन परिणाम |
IV (Initialization Vector) का अंतर्निहित होना: हर एन्क्रिप्शन पर बनने वाला अद्वितीय 96-बिट NONCE (IV) एन्क्रिप्शन परिणाम के आगे उपसर्ग (Prefix) के रूप में जोड़ दिया जाता है। डिक्रिप्शन के समय अग्रगामी 96 बिट को IV के रूप में अलग करके डिक्रिप्शन किया जाता है।
4.3. कुंजी की लंबाई का सत्यापन
प्रमाणपत्र पढ़ते समय यह जाँचा जाता है कि घोषित एल्गोरिदम की बिट संख्या और वास्तविक कुंजी की लंबाई मेल खाती है या नहीं।
उदाहरण के लिए, यदि IV-AES256-GCM घोषित करने वाले प्रमाणपत्र में 16 बाइट की कुंजी हो, तो आयात (import) ही अस्वीकार कर दिया जाता है। यह जाँच न हो, तो AES-256 के उपयोग का भरोसा रखते हुए भी वास्तव में AES-128 से काम चलता रहेगा।
5. verify-only एक्सपोर्ट
केवल सत्यापन करने वाले सर्वरों को हस्ताक्षर के लिए निजी कुंजी देने की आवश्यकता नहीं होती। इसी के लिए DAT प्रमाणपत्र verify-only एक्सपोर्ट उपलब्ध कराता है।
| हस्ताक्षर एल्गोरिदम | support_verify_only() | verify-only एक्सपोर्ट का परिणाम |
|---|---|---|
| ECDSA श्रेणी | true | हस्ताक्षर कुंजी में केवल सार्वजनिक कुंजी बाहर जाती है (Base64 130 अक्षर → 87 अक्षर) |
| HMAC श्रेणी | false | स्पष्ट त्रुटि उत्पन्न होती है |
HMAC सममित कुंजी है, इसलिए "केवल सत्यापन के योग्य कुंजी" जैसी कोई चीज़ होती ही नहीं। इसलिए verify-only एक्सपोर्ट का प्रयास करने पर उसे चुपचाप छोड़ा नहीं जाता, बल्कि त्रुटि के रूप में तुरंत सूचित किया जाता है। HMAC प्रमाणपत्र मिलाकर रखे हों और verify-only एक्सपोर्ट कॉल किया जाए तो वह विफल हो जाता है, इसलिए यदि आप केवल सत्यापन वाले नोड चला रहे हैं तो ECDSA श्रेणी का उपयोग करना चाहिए।
एन्क्रिप्शन कुंजी verify-only में भी पूरी बाहर जाती है
secure फ़ील्ड के लिए AES कुंजी सममित कुंजी है, इसलिए verify-only हो या न हो, वह हमेशा पूरी एक्सपोर्ट होती है। डिक्रिप्ट करने के लिए वही कुंजी चाहिए जिससे एन्क्रिप्ट किया गया था।
अर्थात् verify-only प्रमाणपत्र पाने वाला सर्वर:
- हस्ताक्षर की जालसाज़ी नहीं कर सकता — निजी कुंजी न होने के कारण वह नया DAT नहीं बना सकता।
secureपेलोड को डिक्रिप्ट कर सकता है — उनके विरुद्ध गोपनीयता उपलब्ध नहीं कराई जाती।
verify-only जारी करने के अधिकार को बाँटने की व्यवस्था है, गोपनीयता बाँटने की नहीं। यदि कोई मान सत्यापक नोड से छिपाना ज़रूरी हो, तो उसे secure में नहीं डालना चाहिए।