DAT प्रमाणपत्र

1. अवलोकन

DAT प्रमाणपत्र एक ऐसा विनिर्देश है जो DAT जारी करने के अधिकार को नियंत्रित करता है और टोकन के हस्ताक्षर व एन्क्रिप्शन एल्गोरिदम तथा कुंजी (Key) की जानकारी का प्रबंधन करता है।

प्रत्येक प्रमाणपत्र की एक अद्वितीय ID (CID) होती है, और DAT की जारी करने योग्य अवधि तथा बनने वाले टोकन की वैधता अवधि (TTL) को अनिवार्य करके वह टोकन के जीवनचक्र का सुरक्षित प्रबंधन करता है।

DAT में की रोलिंग कोई विकल्प नहीं है। प्रमाणपत्र में जारी करने योग्य अवधि विनिर्देश के स्तर पर ही अंकित होती है, इसलिए वह अवधि बीत जाने पर उस प्रमाणपत्र से नया टोकन नहीं बनाया जा सकता।


2. प्रमाणपत्र संरचना

प्रमाणपत्र वायर फ़ॉर्मैट
cid
uint64 (हेक्साडेसिमल)
.
start
uint64 (दशमलव)
.
duration
uint64 (दशमलव)
.
ttl
uint64 (दशमलव)
.
sig-alg
String
.
crypto-alg
String
.
sig-key
Base64Url
.
crypto-key
Base64Url
प्रत्येक फ़ील्ड पर माउस ले जाने पर उसका विवरण दिखता है।
cid . start . duration . ttl . sig-alg . crypto-alg . sig-key . crypto-key
संरचना
उदाहरणrefresh

2.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. प्रमाणपत्र का जीवनचक्र

प्रमाणपत्र के चार खंड
निर्माण
जारी करना शुरू
जारी करना समाप्त
अंतिम समाप्ति
जारी करने में देरी (delay)
जारी करने योग्य (duration)
DAT TTL
सभी नोड्स को प्रमाणपत्र मिल जाने का समय
DAT जारी करना + सत्यापन दोनों संभव
जारी करना असंभव, केवल सत्यापन संभव
प्रमाणपत्र जारी करने में देरी → जारी करने योग्य → DAT TTL शेष — इन सभी खंडों से गुज़रने के बाद ही अंतिम रूप से समाप्त होता है।
खंडजारी करनासत्यापननिर्धारण
जारी करने में देरी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-GCM128-bitIV(96bit) + एन्क्रिप्शन परिणाम
IV-AES256-GCM256-bitIV(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 एक्सपोर्ट उपलब्ध कराता है।

पूर्ण प्रमाणपत्र और verify-only प्रमाणपत्र का वितरण मार्ग
DAT CMS
जारीकर्ता सर्वर
केवल सत्यापन वाला सर्वर
GET /v1/certs
पूर्ण प्रमाणपत्र (हस्ताक्षर निजी कुंजी सहित)
GET /v1/certs/verify-only
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 में नहीं डालना चाहिए।