यह अनुवाद मशीन लर्निंग का उपयोग करके उत्पन्न किया गया था और 100% सटीक नहीं हो सकता है। अंग्रेज़ी संस्करण देखें

NTCP 2

Proposal 111
बंद
Author EinMByte, orignal, psi, str4d, zzz
Created 2014-02-13
Last Updated 2019-08-13
Target Version 0.9.36
Implemented In 0.9.36
Supercedes: 106

नोट

प्रस्ताव चरण बंद है। विशिष्ट विवरण के लिए एसपीईसी देखें। यह प्रस्ताव पृष्ठभूमि जानकारी के लिए अभी भी संदर्भित किया जा सकता है।

अवलोकन

यह प्रस्ताव विभिन्न प्रकार की स्वचालित पहचान और हमलों के प्रति एनटीसीपी की प्रतिरोधक क्षमता में सुधार करने के लिए एक प्रमाणित कुंजी समझौता प्रोटोकॉल का वर्णन करता है।

प्रस्ताव निम्नलिखित के रूप में संगठित है: सुरक्षा लक्ष्य प्रस्तुत किए जाते हैं, इसके बाद मूल प्रोटोकॉल पर चर्चा की जाती है। अगला, सभी प्रोटोकॉल संदेशों का एक पूर्ण विशिष्टीकरण दिया जाता है। अंत में, राउटर पते और संस्करण पहचान पर चर्चा की जाती है। सामान्य पैडिंग योजनाओं पर एक जेनेरिक हमले पर एक परिशिष्ट भी शामिल है, साथ ही साथ प्रमाणित सिफर के लिए कई उम्मीदवारों को शामिल किया गया है।

प्रेरणा

एनटीसीपी डेटा पहले संदेश (और पहला संदेश यादृच्छिक डेटा प्रतीत होता है) के बाद एन्क्रिप्ट किया जाता है, जिससे “पेलोड विश्लेषण” के माध्यम से प्रोटोकॉल पहचान को रोका जा सकता है। यह अभी भी “प्रवाह विश्लेषण” के माध्यम से प्रोटोकॉल पहचान के लिए अतिसंवेदनशील है। इसका कारण यह है कि पहले 4 संदेश (अर्थात हैंडशेक) निश्चित लंबाई (288, 304, 448, और 48 बाइट) हैं।

प्रत्येक संदेश में यादृच्छिक मात्रा में यादृच्छिक डेटा जोड़कर, हम इसे बहुत कठिन बना सकते हैं।

डिज़ाइन लक्ष्य

  • एकल बंदरगाह पर एनटीसीपी 1 और 2 का समर्थन करें, स्वचालित रूप से पहचानें और एकल “परिवहन” (अर्थात राउटरएड्रेस) के रूप में नेटडीबी में प्रकाशित करें।
  • नेटडीबी में एक अलग क्षेत्र में केवल संस्करण 1, 2 के लिए समर्थन, या 1 + 2 को प्रकाशित करें, और डिफ़ॉल्ट रूप से केवल संस्करण 1 (राउटर संस्करण के लिए बंधन समर्थन न करें) पर सेट करें।
  • सुनिश्चित करें कि सभी कार्यान्वयन (जावा/आई2पीडी/कोवरी/गो) अपनी समय सारिणी पर संस्करण 2 समर्थन जोड़ सकते हैं (या नहीं)।
  • सभी एनटीसीपी संदेशों में यादृच्छिक पैडिंग जोड़ें, जिसमें हैंडशेक और डेटा संदेश शामिल हैं (अर्थात लंबाई प्रतिरूपण ताकि सभी संदेश 16 बाइट्स के गुणज के नहीं हों)।
  • विकल्प तंत्र प्रदान करें ताकि दोनों पक्ष यादृच्छिक पैडिंग और/या पैडिंग वितरण के लिए न्यूनतम और अधिकतम मांग कर सकें।
  • एन्क्रिप्ट किए गए संदेशों की सामग्री को प्रतिरूपित करें जो पर्याप्त रूप से नहीं हैं ताकि डीपीआई बॉक्स और एवी हस्ताक्षर उन्हें आसानी से वर्गीकृत न कर सकें।
  • सुनिश्चित करें कि एक ही पीयर या पीयर्स के सेट को भेजे जाने वाले संदेशों में समान बिट पैटर्न नहीं होता है।
  • जावा प्रारूप के कारण डीएच में खोए बिट्स की हानि को ठीक करें, संभवतः एक्स25519 में स्विच करके टिकट1112
  • एक वास्तविक कुंजी डेरिवेशन फ़ंक्शन (केडीएफ) में स्विच करें, डीएच परिणाम का उपयोग करने के बजाय जैसा कि यह है।
  • “प्रोबिंग प्रतिरोध” जोड़ें (जैसा कि टोर इसे कहता है); इसमें पुनरावृत्ति प्रतिरोध शामिल है।
  • 2-वे प्रमाणित कुंजी विनिमय (2W-AKE) बनाए रखें। 1W-AKE हमारे अनुप्रयोग के लिए पर्याप्त नहीं है।
  • प्रमाणीकरण के हिस्से के रूप में प्रकाशित राउटरआईडेंटिटी हस्ताक्षर कुंजी से परिवर्तनीय-प्रकार, परिवर्तनीय-लंबाई हस्ताक्षर का उपयोग जारी रखें।
  • भविष्य के विस्तार के लिए हैंडशेक में विकल्प/संस्करण जोड़ें।
  • यदि संभव हो तो दुर्भाग्यपूर्ण मितम टीसीपी सेगमेंटेशन के प्रति प्रतिरोध जोड़ें।
  • कनेक्शन सेटअप के लिए आवश्यक सीपीयू में महत्वपूर्ण रूप से वृद्धि न करें; यदि संभव हो तो इसे कम करें।
  • संदेश प्रमाणीकरण (एमएसी) जोड़ें, संभवतः एचएमएसी - एसएचए256 और पॉली1305, और एडलर चेकसम को हटा दें।
  • आई2एनपी हेडर को छोटा और सरल करें:
  • एसएसयू के समान 4 बाइट्स में समाप्ति को छोटा करें।
  • एक-बाइट ट्रंकेटेड एसएचए256 चेकसम को हटा दें।
  • यदि संभव हो तो 4-संदेश, दो-राउंड-ट्रिप हैंडशेक को 3-संदेश, एक-राउंड-ट्रिप हैंडशेक में कम करें, जैसा कि एसएसयू में।
  • प्रोटोकॉल ओवरहेड को कम से कम रखें जो पैडिंग से पहले होता है। जबकि पैडिंग जोड़ा जाएगा, और संभवतः बहुत सारा, पैडिंग से पहले ओवरहेड अभी भी ओवरहेड है।
  • कम-बैंडविड्थ नोड्स को एनटीसीपी2 का उपयोग करने में सक्षम होना चाहिए।
  • पुनरावृत्ति और तिरछा पता लगाने के लिए टाइमस्टैम्प बनाए रखें।
  • 2038 वर्ष के मुद्दों से बचें जो टाइमस्टैम्प में होते हैं, जो कम से कम 2106 तक काम करना चाहिए।
  • अधिकतम संदेश आकार को 16K से 32K या 64K तक बढ़ाएं।
  • कोई भी नया क्रिप्टोग्राफिक प्रिमिटिव्स जावा (1.7), सी++, और गो राउटर कार्यान्वयन में उपयोग के लिए तैयारी से उपलब्ध होना चाहिए।
  • डिज़ाइन में जावा, सी++, और गो राउटर डेवलपर्स के प्रतिनिधियों को शामिल करें।
  • परिवर्तनों को कम से कम रखें (लेकिन अभी भी बहुत सारे होंगे)।
  • एक ही सेट कोड में दोनों संस्करणों का समर्थन करें (यह कार्यान्वयन-निर्भर है और किसी भी मामले में कार्यान्वयन-निर्भर है)।

गैर-लक्ष्य

  • बुलेट-प्रूफ डीपीआई प्रतिरोध … यह प्लगेबल ट्रांसपोर्ट होगा, प्रोप109
  • एक टीएलएस-आधारित (या एचटीटीपीएस-जैसा दिखने वाला) परिवहन … यह प्रोप104 होगा।
  • यह ठीक है कि सममितिक स्ट्रीम क्रिप्टोग्राफी बदल जाए।
  • समय-आधारित डीपीआई प्रतिरोध (इंटर-मैसेज टाइमिंग/विलंब कार्यान्वयन-निर्भर हो सकता है; इंट्रा-मैसेज विलंब को किसी भी बिंदु पर पेश किया जा सकता है, जिसमें यादृच्छिक पैडिंग भेजने से पहले भी शामिल है)।
  • सत्र में भाग लेने की अस्वीकार्यता (हस्ताक्षर वहां हैं)।

जो गैर-लक्ष्य आंशिक रूप से पुनर्विचार या चर्चा किए जा सकते हैं:

  • गहरे पैकेट निरीक्षण (डीपीआई) के खिलाफ सुरक्षा की डिग्री
  • पोस्ट-क्वांटम (पीक्यू) सुरक्षा
  • अस्वीकार्यता

संबंधित लक्ष्य

  • एक एनटीसीपी 1/2 परीक्षण सेटअप लागू करें

सुरक्षा लक्ष्य

हम तीन पक्षों पर विचार करते हैं:

  • एलिस, जो एक नया सत्र स्थापित करना चाहता है।
  • बॉब, जिसके साथ एलिस एक सत्र स्थापित करना चाहता है।
  • मैलोरी, एलिस और बॉब के बीच “मध्यवर्ती हमलावर”।

दो प्रतिभागी सक्रिय हमलों में शामिल हो सकते हैं।

एलिस और बॉब दोनों एक स्थिर कुंजी जोड़ी के स्वामी हैं, जो उनके राउटरआईडेंटिटी में निहित है।

प्रस्तावित प्रोटोकॉल एलिस और बॉब को निम्नलिखित आवश्यकताओं के तहत एक साझा गुप्त कुंजी (के) पर सहमत होने की अनुमति देने का प्रयास करता है:

  1. निजी कुंजी सुरक्षा: बॉब या मैलोरी एलिस की स्थिर निजी कुंजी के बारे में कुछ भी नहीं सीखते हैं। सममितिक रूप से, एलिस बॉब की स्थिर निजी कुंजी के बारे में कुछ भी नहीं सीखती है।

  2. सत्र कुंजी के केवल एलिस और बॉब को पता है।

  3. पूर्ण आगे की गोपनीयता: सत्र कुंजी के बारे में जानकारी भविष्य में गुप्त रहती है, भले ही एलिस और/या बॉब की स्थिर निजी कुंजी बाद में सत्र कुंजी पर सहमत होने के बाद प्रकट हो जाए।

  4. दो-तरफ़ा प्रमाणीकरण: एलिस को यह यकीन है कि उसने बॉब के साथ एक सत्र स्थापित किया है, और इसके विपरीत।

  5. ऑनलाइन डीपीआई के खिलाफ सुरक्षा: यह सुनिश्चित करें कि यह सीधे गहरे पैकेट निरीक्षण (डीपीआई) तकनीकों का उपयोग करके एलिस और बॉब के बीच प्रोटोकॉल में शामिल होने का पता लगाना मुश्किल है।

  6. सीमित अस्वीकार्यता: एलिस या बॉब सत्र में भाग लेने से इनकार नहीं कर सकते हैं, लेकिन यदि कोई भी साझा कुंजी लीक हो जाती है तो दूसरे पक्ष सत्र में प्रेषित डेटा की प्रामाणिकता से इनकार कर सकते हैं।

वर्तमान प्रस्ताव स्टेशन-टू-स्टेशन (एसटीएस) प्रोटोकॉल पर आधारित है, जो एसएसयू प्रोटोकॉल के लिए भी आधार है।

अतिरिक्त डीपीआई चर्चा

हम दो डीपीआई घटकों पर विचार करते हैं:

1) ऑनलाइन डीपीआई

ऑनलाइन डीपीआई जो वास्तविक समय में सभी प्रवाहों की जांच करता है। कनेक्शन ब्लॉक किए जा सकते हैं या अन्यथा छेड़छाड़ की जा सकती है। कनेक्शन डेटा या मेटाडेटा की पहचान की जा सकती है और बाद के विश्लेषण के लिए संग्रहीत किया जा सकता है। ऑनलाइन डीपीआई के पास आई2पी नेटवर्क डेटाबेस तक पहुंच नहीं है। ऑनलाइन डीपीआई के पास सीमित वास्तविक समय गणना क्षमता है, जिसमें लंबाई गणना, क्षेत्र निरीक्षण और सरल गणना जैसे एक्सओआर शामिल हैं। ऑनलाइन डीपीआई के पास तेज़ वास्तविक समय क्रिप्टोग्राफिक फ़ंक्शन जैसे एईएस, एईएडी और हैशिंग तक क्षमता है, लेकिन वे अधिकांश या सभी प्रवाहों पर लागू करने के लिए बहुत महंगे होंगे। इन क्रिप्टोग्राफिक ऑपरेशनों का केवल तभी उपयोग किया जाएगा जब आईपी/पोर्ट संयोजन पहले से ही ऑफलाइन विश्लेषण द्वारा पहचाना गया हो। ऑनलाइन डीपीआई के पास उच्च-ओवरहेड क्रिप्टोग्राफिक फ़ंक्शन जैसे डीएच या एलिगेटर2 तक क्षमता नहीं है। ऑनलाइन डीपीआई विशेष रूप से आई2पी का पता लगाने के लिए डिज़ाइन नहीं किया गया है, हालांकि इसके पास आई2पी के लिए सीमित वर्गीकरण नियम हो सकते हैं।

यह एक लक्ष्य है कि प्रोटोकॉल पहचान को ऑनलाइन डीपीआई द्वारा रोका जाए।

सीधे डीपीआई की धारणा में निम्नलिखित शामिल हैं:

  1. लक्षित डेटा भेजने या प्राप्त करने वाले डेटा की जांच करने की क्षमता।

  2. ऑपरेशन लागू करने की क्षमता जो देखे गए डेटा पर, जैसे ब्लॉक सिफर या हैश फ़ंक्शन।

  3. पहले से भेजे गए संदेशों की तुलना में संग्रहीत और तुलना करने की क्षमता।

  4. पैकेट को संशोधित करने, देरी करने या खंडित करने की क्षमता।

हालांकि, ऑनलाइन डीपीआई को निम्नलिखित प्रतिबंधों के अधीन माना जाता है:

  1. आईपी पते को राउटर हैश में मैप करने में असमर्थता, जबकि यह वास्तविक समय में नेटवर्क डेटाबेस तक पहुंच के साथ सरल होगा, यह एक डीपीआई प्रणाली के लिए आवश्यक होगा जो विशेष रूप से आई2पी को लक्षित करने के लिए डिज़ाइन की गई है।

  2. प्रोटोकॉल का पता लगाने के लिए समय जानकारी का उपयोग करने में असमर्थता।

  3. आम तौर पर, ऑनलाइन डीपीआई टूलबॉक्स में आई2पी का पता लगाने के लिए विशेष रूप से डिज़ाइन किए गए कोई भी उपकरण शामिल नहीं हैं, जिसमें “शहद के बर्तन” शामिल हैं जो अपने संदेशों में गैर-यादृच्छिक पैडिंग शामिल करेंगे। ध्यान दें कि यह मशीन लर्निंग सिस्टम या उच्च कॉन्फ़िगर करने योग्य डीपीआई टूल को बाहर नहीं करता है, जब तक कि वे अन्य आवश्यकताओं को पूरा करते हैं।

पेलोड विश्लेषण का मुकाबला करने के लिए, यह सुनिश्चित किया जाता है कि सभी संदेश यादृच्छिक डेटा से अंतर्निहित रूप से प्रतिष्ठित हैं। यह भी आवश्यक है कि उनकी लंबाई यादृच्छिक हो, जो केवल यादृच्छिक पैडिंग जोड़ने से ज्यादा जटिल है। वास्तव में, परिशिष्ट ए में लेखकों का तर्क है कि एक निष्क्रिय (यानी, समान वितरण) पैडिंग योजना समस्या का समाधान नहीं करती है। परिशिष्ट ए इसलिए या तो यादृच्छिक देरी शामिल करने का प्रस्ताव करता है या एक वैकल्पिक पैडिंग योजना विकसित करने का प्रस्ताव करता है जो प्रस्तावित हमले के लिए उचित सुरक्षा प्रदान कर सकता है।

प्रोटोकॉल की छठी प्रविष्टि के खिलाफ सुरक्षा के लिए, कार्यान्वयन में प्रोटोकॉल में यादृच्छिक देरी शामिल करनी चाहिए। ऐसी तकनीकें इस प्रस्ताव द्वारा शामिल नहीं हैं, लेकिन वे पैडिंग लंबाई के मुद्दों को भी हल कर सकती हैं। सारांश में, प्रस्ताव पेलोड विश्लेषण (परिशिष्ट ए में विचारों को ध्यान में रखते हुए) के खिलाफ अच्छा संरक्षण प्रदान करता है, लेकिन केवल प्रवाह विश्लेषण के खिलाफ सीमित सुरक्षा प्रदान करता है।

2) ऑफलाइन डीपीआई

ऑफलाइन डीपीआई जो ऑनलाइन डीपीआई द्वारा संग्रहीत डेटा की जांच करता है बाद के विश्लेषण के लिए। ऑफलाइन डीपीआई को आई2पी नेटवर्क डेटाबेस तक वास्तविक समय में पहुंच प्राप्त है। ऑफलाइन डीपीआई के पास आई2पी विशिष्टताओं तक पहुंच है। ऑफलाइन डीपीआई के पास असीमित गणना क्षमता है, जिसमें इस विशिष्टीकरण में परिभाषित सभी क्रिप्टोग्राफिक फ़ंक्शन शामिल हैं।

ऑफलाइन डीपीआई मौजूदा कनेक्शन को ब्लॉक करने में सक्षम नहीं है। ऑफलाइन डीपीआई निकट वास्तविक समय (सेटअप के भीतर कुछ मिनट) में होस्ट/पोर्ट को पार्टियों को भेजने में सक्षम है, उदाहरण के लिए, टीसीपी आरएसटी। ऑफलाइन डीपीआई निकट वास्तविक समय (सेटअप के भीतर कुछ मिनट) में पिछले संदेशों (संशोधित या नहीं) को “प्रोबिंग” या अन्य कारणों से पुनः प्रसारित करने में सक्षम है।

यह एक लक्ष्य नहीं है कि ऑफलाइन डीपीआई द्वारा प्रोटोकॉल पहचान को रोका जाए।

सभी डिकोडिंग ऑफस्केटेड डेटा जो आई2पी राउटर द्वारा किया जाता है, ऑफलाइन डीपीआई द्वारा भी किया जा सकता है।

यह एक लक्ष्य है कि पिछले संदेशों की पुनरावृत्ति का उपयोग करके प्रयास किए गए कनेक्शन को अस्वीकार किया जाए।

भविष्य का काम

  • हमलावर द्वारा पैकेट को गिराने या पुनर्व्यवस्थित करने पर प्रोटोकॉल के व्यवहार पर विचार करें। इस क्षेत्र में हाल के दिलचस्प कार्य आईएसीआर-1150 में पाए जा सकते हैं।

  • डीपीआई प्रणालियों का एक अधिक सटीक वर्गीकरण प्रदान करें, विषय से संबंधित मौजूदा साहित्य को ध्यान में रखते हुए।

  • प्रस्तावित प्रोटोकॉल की औपचारिक सुरक्षा पर चर्चा करें, आदर्श रूप से डीपीआई हमलावर मॉडल को ध्यान में रखते हुए।

नॉइज़ प्रोटोकॉल फ्रेमवर्क

यह प्रस्ताव नॉइज़ प्रोटोकॉल फ्रेमवर्क नॉइज़ (संशोधन 33, 2017-10-04) पर आधारित आवश्यकताओं को प्रदान करता है। नॉइज़ की स्टेशन-टू-स्टेशन प्रोटोकॉल के समान विशेषताएं हैं, जो एसएसयू प्रोटोकॉल के लिए आधार है। नॉइज़ शब्दावली में, एलिस प्रारंभकर्ता है, और बॉब प्रतिक्रियाकर्ता है।

एनटीसीपी2 नॉइज़ प्रोटोकॉल नॉइज़_एक्सके_25519_ChaChaPoly_SHA256 पर आधारित है। (वास्तविक प्रारंभिक कुंजी डेरिवेशन फ़ंक्शन के लिए पहचानकर्ता “Noise_XKaesobfse+hs2+hs3_25519_ChaChaPoly_SHA256” है आई2पी एक्सटेंशन को इंगित करने के लिए - नीचे केडीएफ 1 अनुभाग देखें) यह नॉइज़ प्रोटोकॉल निम्नलिखित प्रिमिटिव्स का उपयोग करता है:

  • हैंडशेक पैटर्न: एक्सके एलिस बॉब को अपनी कुंजी भेजती है (एक्स) एलिस को पहले से ही बॉब की स्थिर कुंजी के बारे में पता है (के)

  • डीएच फ़ंक्शन: एक्स25519 एक्स25519 डीएच 32 बाइट्स की कुंजी लंबाई के साथ आरएफसी-7748 में निर्दिष्ट के रूप में।

  • सिफर फ़ंक्शन: चाचापॉली एईएडी_चाचा20_पॉली1305 आरएफसी-7539 खंड 2.8 में निर्दिष्ट के रूप में। 12 बाइट नॉन्स, पहले 4 बाइट्स शून्य पर सेट हैं।

  • हैश फ़ंक्शन: एसएचए256 मानक 32-बाइट हैश, जो पहले से ही आई2पी में व्यापक रूप से उपयोग किया जाता है।

फ्रेमवर्क में जोड़

यह प्रस्ताव नॉइज़_एक्सके_25519_ChaChaPoly_SHA256 में निम्नलिखित उन्नतियों को परिभाषित करता है। ये आमतौर पर नॉइज़ खंड 13 में दिशानिर्देशों का पालन करते हैं।

  1. स्पष्ट लेखनी एपेमेरल कुंजियों को ज्ञात कुंजी और आईवी का उपयोग करके एईएस एन्क्रिप्शन के साथ प्रतिरूपित किया जाता है। यह एलिगेटर2 से तेज है।

  2. यादृच्छिक स्पष्ट लेखनी पैडिंग संदेश 1 और 2 में जोड़ी जाती है। स्पष्ट लेखनी पैडिंग हैंडशेक हैश (मिक्सहैश) गणना में शामिल है। संदेश 2 और संदेश 3 भाग 1 के लिए केडीएफ खंड देखें। यादृच्छिक एईएडी पैडिंग संदेश 3 और डेटा चरण संदेशों में जोड़ी जाती है।

  3. एक दो-बाइट फ्रेम लंबाई क्षेत्र जोड़ा जाता है, जैसा कि नॉइज़ ओवर टीसीपी के लिए आवश्यक है, और जैसा कि ओबीएफएस4 में है। यह डेटा चरण संदेशों के लिए उपयोग किया जाता है। संदेश 1 और 2 एईएडी फ्रेम निश्चित लंबाई हैं। संदेश 3 भाग 1 एईएडी फ्रेम निश्चित लंबाई है। संदेश 3 भाग 2 एईएडी फ्रेम लंबाई संदेश 1 में निर्दिष्ट है।

  4. दो-बाइट फ्रेम लंबाई क्षेत्र को ओबीएफएस4 के रूप में सिपहैश-2-4 के साथ प्रतिरूपित किया जाता है।

  5. संदेश 1, 2, 3, और डेटा चरण के लिए पेलोड प्रारूप परिभाषित किया गया है। निश्चित रूप से, यह नॉइज़ में परिभाषित नहीं है।

आई2पी के लिए नए क्रिप्टोग्राफिक प्रिमिटिव्स

मौजूदा आई2पी राउटर कार्यान्वयन को निम्नलिखित मानक क्रिप्टोग्राफिक प्रिमिटिव्स के लिए कार्यान्वयन की आवश्यकता होगी, जो वर्तमान आई2पी प्रोटोकॉल के लिए आवश्यक नहीं हैं:

  1. एक्स25519 कुंजी जेनरेशन और डीएच

  2. एईएडी_चाचा20_पॉली1305 (संक्षेप में चाचापॉली नीचे)

  3. सिपहैश-2-4

प्रसंस्करण ओवरहेड अनुमान

3 संदेशों के लिए संदेश आकार:

  1. 64 बाइट + पैडिंग (एनटीसीपी 288 बाइट था)
  2. 64 बाइट + पैडिंग (एनटीसीपी 304 बाइट था)
  3. लगभग 64 बाइट + एलिस राउटर जानकारी + पैडिंग एलिस राउटर जानकारी का औसत लगभग 750 बाइट होता है कुल औसत 814 बाइट पैडिंग से पहले (एनटीसीपी 448 बाइट था)
  4. एनटीसीपी2 में आवश्यक नहीं है (एनटीसीपी 48 बाइट था)

पैडिंग से पहले कुल: एनटीसीपी2: 942 बाइट एनटीसीपी: 1088 बाइट नोट करें कि यदि एलिस डेटाबेसस्टोर संदेश भेजने के उद्देश्य से बॉब से जुड़ती है जिसमें उसकी राउटरजानकारी है, तो उस संदेश की आवश्यकता नहीं है, जिससे लगभग 800 बाइट बचती हैं।

हैंडशेक और डेटा चरण शुरू करने के लिए प्रत्येक पक्ष द्वारा आवश्यक क्रिप्टोग्राफिक ऑपरेशन हैं:

  • एईएस: 2
  • एसएचए256: 7 (एलिस), 6 (बॉब) (प्रीकैलकुलेटेड प्रीकैलकुलेटेड को छोड़कर) (एचएमएसी - एसएचए256 को छोड़कर)
  • एचएमएसी - एसएचए256: 19
  • चाचापॉली: 4
  • एक्स25519 कुंजी जेनरेशन: 1
  • एक्स25519 डीएच: 3
  • हस्ताक्षर सत्यापन: 1 (बॉब) (एलिस ने पहले ही आरआई जेनरेट करते समय हस्ताक्षर किया था) संभवतः एड25519 (आरआई हस्ताक्षर प्रकार पर निर्भर)

प्रत्येक डेटा चरण संदेश के लिए प्रत्येक पक्ष द्वारा आवश्यक क्रिप्टोग्राफिक ऑपरेशन हैं:

  • सिपहैश: 1
  • चाचापॉली: 1

संदेश

सभी एनटीसीपी2 संदेश 65537 बाइट्स से कम या बराबर लंबाई के होते हैं। संदेश प्रारूप नॉइज़ संदेशों पर आधारित है, जिसमें फ्रेमिंग और अप्रतिष्ठितता के लिए संशोधन हैं। मानक नॉइज़ लाइब्रेरी का उपयोग करने वाले कार्यान्वयन को प्राप्त संदेशों को नॉइज़ संदेश प्रारूप से/में प्री-प्रोसेस करने की आवश्यकता हो सकती है। सभी एन्क्रिप्टेड क्षेत्र एईएडी सिफरटेक्स्ट हैं।

स्थापना अनुक्रम निम्नलिखित है:

एलिस                           बॉब

  सत्रअनुरोध ------------------->
  <------------------- सत्रनिर्मित
  सत्रसंकेत ----------------->

नॉइज़ शब्दावली में, स्थापना और डेटा अनुक्रम निम्नलिखित है (पेलोड सुरक्षा गुण):

एक्सके(स, आरएस):           प्रमाणीकरण   गोपनीयता
    <- स
    ...
    -> ई, ईएस                  0                2
    <- ई, ईई                  2                1
    -> स, एसई                  2                5
    <-                        2                5

एक बार सत्र स्थापित हो जाने के बाद, एलिस और बॉब डेटा संदेशों का आदान-प्रदान कर सकते हैं।

सभी संदेश प्रकार (सत्रअनुरोध, सत्रनिर्मित, सत्रसंकेत, डेटा और टाइमसिंक) इस खंड में निर्दिष्ट हैं।

कुछ संकेत:

  • आरएच_ए = एलिस के लिए राउटर हैश (32 बाइट्स)
  • आरएच_बी = बॉब के लिए राउटर हैश (32 बाइट्स)

प्रमाणित एन्क्रिप्शन

प्रमाणित एन्क्रिप्शन के तीन अलग-अलग उदाहरण हैं (सिफरस्टेट्स)। एक हैंडशेक चरण में, और दो (प्रेषण और रिसेप्शन) डेटा चरण के लिए। प्रत्येक की अपनी कुंजी है जो एक केडीएफ से है।

एन्क्रिप्टेड/प्रमाणित डेटा का प्रतिनिधित्व किया जाता है

+----+----+----+----+----+----+----+----+
  |                                       |
  +                                       +
  |   एन्क्रिप्टेड और प्रमाणित डेटा    |
  ~               .   .   .               ~
  |                                       |
  +----+----+----+----+----+----+----+----+

चाचा20/पॉली1305

एन्क्रिप्टेड और प्रमाणित डेटा प्रारूप।

एन्क्रिप्शन/डिक्रिप्शन फ़ंक्शन के लिए इनपुट:

क :: 32 बाइट सिफर कुंजी, जैसा कि केडीएफ से उत्पन्न होता है

  नॉन्स :: काउंटर-आधारित नॉन्स, 12 बाइट्स।
           शून्य से शुरू होता है और प्रत्येक संदेश के लिए बढ़ाया जाता है।
           पहले चार बाइट्स हमेशा शून्य पर सेट होते हैं।
           अंतिम आठ बाइट्स काउंटर हैं, लिटिल-एंडियन एन्कोडेड।
           अधिकतम मान 2 ** 64 - 2 है।
           कनेक्शन को बंद और पुनः आरंभ किया जाना चाहिए जब यह मान तक पहुंच जाए।
           मान 2 ** 64 - 1 कभी भी भेजा नहीं जाना चाहिए।

  एड :: हैंडशेक चरण में:
        संबद्ध डेटा, 32 बाइट्स।
        सभी पिछले डेटा का एसएचए256 हैश।
        डेटा चरण में:
        शून्य बाइट्स

  डेटा :: मूल डेटा, 0 या अधिक बाइट्स

एन्क्रिप्शन फ़ंक्शन का आउटपुट, डिक्रिप्शन फ़ंक्शन का इनपुट:

+----+----+----+----+----+----+----+----+
|ओबीएफ लेन |                             |
+----+----+                             +
|       चाचा20 एन्क्रिप्टेड डेटा         |
~               .   .   .               ~
|                                       |
+----+----+----+----+----+----+----+----+
|  पॉली1305 संदेश प्रमाणीकरण कोड |
+              (एमएसी)                    +
|             16 बाइट                  |
+----+----+----+----+----+----+----+----+

  ओबीएफ लेन :: लंबाई को सिपहैश के साथ प्रतिरूपित किया जाता है (नीचे देखें)
              जब डी-ओबफस्केटेड: 16 - 65535

  एन्क्रिप्टेड डेटा :: मूल डेटा के समान आकार, 0 - 65519 बाइट्स

  एमएसी :: पॉली1305 संदेश प्रमाणीकरण कोड, 16 बाइट्स

चाचा20 के लिए, यह आरएफसी-7539 के अनुरूप है, जो टीएलएस आरएफसी-7905 में भी इसी तरह उपयोग किया जाता है।

नोट्स

  • चूंकि चाचा20 एक स्ट्रीम सिफर है, प्लेनटेक्स्ट्स को पैड नहीं किया जाना चाहिए। अतिरिक्त कीस्ट्रीम बाइट्स को छोड़ दिया जाता है।

  • सिफर की कुंजी (256 बिट) को एसएचए256 केडीएफ के माध्यम से सहमति विकसित की जाती है। प्रत्येक संदेश के लिए केडीएफ का विवरण नीचे दिए गए खंडों में है।

  • चाचापॉली फ्रेम संदेश 1, 2, और संदेश 3 के पहले भाग के लिए ज्ञात आकार हैं। डेटा चरण से, फ्रेम चर लंबाई के हैं। संदेश 3 भाग 1 का आकार संदेश 1 में निर्दिष्ट है। डेटा चरण से, फ्रेम एक दो-बाइट लंबाई के साथ प्रीफिक्स्ड होते हैं जो सिपहैश के साथ प्रतिरूपित होते हैं, जैसा कि ओबफ्स4 में है।

  • पैडिंग संदेश 1 और 2 के लिए एईएडी फ्रेम के बाहर है। पैडिंग का उपयोग एलिस और बॉब द्वारा अगले संदेश के लिए केडीएफ में किया जाता है। पैडिंग प्रमाणित है, इसलिए कोई भी छेड़छाड़ अगले संदेश को विफल कर देगी। संदेश 3 से, पैडिंग एईएडी फ्रेम के अंदर है।

एईएडी त्रुटि हैंडलिंग

  • संदेश 1, 2, और संदेश 3 के भाग 1 और 2 में, एईएडी संदेश का आकार पहले से ही ज्ञात है। एईएडी प्रमाणीकरण विफलता पर, प्राप्तकर्ता को आगे संदेश प्रसंस्करण को रोकना चाहिए और प्रतिक्रिया के बिना कनेक्शन बंद कर देना चाहिए। यह एक असामान्य बंद (टीसीपी आरएसटी) होना चाहिए।

  • प्रोबिंग प्रतिरोध के लिए, संदेश 1 में, एईएडी विफलता के बाद, बॉब को एक यादृच्छिक समयबाह्य (टीबीडी रेंज) निर्धारित करना चाहिए और फिर एक यादृच्छिक संख्या में बाइट्स (टीबीडी रेंज) पढ़ना चाहिए, इससे पहले कि वह सॉकेट को बंद कर दे। बॉब को बार-बार विफलताओं के साथ आईपी के लिए एक ब्लैकलिस्ट बनाए रखना चाहिए।

  • डेटा चरण में, एईएडी संदेश का आकार “एन्क्रिप्टेड” (सिपहैश के साथ प्रतिरूपित) है। डिक्रिप्शन ऑरेकल बनाने से बचने के लिए सावधानी बरतनी चाहिए। डेटा चरण एईएडी प्रमाणीकरण विफलता पर, प्राप्तकर्ता को एक यादृच्छिक समयबाह्य (टीबीडी रेंज) निर्धारित करना चाहिए और फिर एक यादृच्छिक संख्या में बाइट्स (टीबीडी रेंज) पढ़ना चाहिए। पढ़ने के बाद, या पढ़ने के समयबाह्य पर, प्राप्तकर्ता को एक पेलोड के साथ एक समाप्ति ब्लॉक भेजना चाहिए जिसमें एक “एईएडी विफलता” कारण कोड हो, और कनेक्शन बंद कर देना चाहिए।

  • डेटा चरण में एक अमान्य लंबाई क्षेत्र मान के लिए समान त्रुटि कार्रवाई लें।

कुंजी डेरिवेशन फ़ंक्शन (केडीएफ) (हैंडशेक संदेश 1 के लिए)

केडीएफ हैंडशेक चरण की कुंजी को डीएच परिणाम से उत्पन्न करता है, जो आरएफसी-2104 में परिभाषित एचएमएसी - एसएचए256 (की, डेटा) का उपयोग करता है। यह नॉइज़ विशिष्टीकरण में इनिशियलाइज़सिममेट्रिक(), मिक्सहैश(), और मिक्सकी() फ़ंक्शन के रूप में परिभाषित किया गया है।

यह "ई" संदेश पैटर्न है:

  // प्रोटोकॉल_नाम को परिभाषित करें।
  प्रोटोकॉल_नाम = "नॉइज़_एक्सकेसोबफसे+hs2+hs3_25519_ChaChaPoly_SHA256"
   (48 बाइट, यूएस-एएससीआईआई एन्कोडेड, कोई नल समाप्ति नहीं)।

  // हैश h = 32 बाइट्स को परिभाषित करें।
  h = SHA256(प्रोटोकॉल_नाम);

  ck = 32 बाइट चेनिंग कुंजी को परिभाषित करें। h डेटा को ck में कॉपी करें।
  सेट ck = h

  rs = बॉब की 32-बाइट स्थिर कुंजी को परिभाषित करें जैसा कि राउटरइन्फो में प्रकाशित है।

  // मिक्सहैश(नल प्रोलोग)
  h = SHA256(h);

  // up until here, can all be precalculated by Alice for all outgoing connections

  // बॉब स्थिर कुंजी को मान्य करें कि यह वक्र पर एक वैध बिंदु है यहां।

  // बॉब स्थिर कुंजी को मिक्सहैश में जोड़ें।
  h = SHA256(h || rs);

  // up until here, can all be precalculated by Bob for all incoming connections

  यह "ई" संदेश पैटर्न है:

  एलिस अपनी एपेमेरल डीएच कुंजी जोड़ी e उत्पन्न करती है और इसे e में संग्रहीत करती है।
  एपेमेरल पब्लिक कुंजी को स्पष्ट रूप से संदेश बफर में लिखती है और पुराने h के साथ हैश करती है ताकि एक नया h प्राप्त किया जा सके।
  // मिक्सहैश(e.pubkey)
  h = SHA256(h || e.pubkey);

  // h का उपयोग संदेश 1 में एईएडी के लिए संबद्ध डेटा के रूप में किया जाता है।
  // मिक्सहैश के लिए h को बनाए रखें।
  // एईएस-256-सीबीसी का उपयोग करके एक्स को प्रतिरूपित करें।
  // बॉब के राउटर हैश का उपयोग कुंजी के रूप में करें और बॉब के नेटवर्क डेटाबेस में प्रकाशित आईवी का उपयोग करें।
  // प्रतिरूपित एक्स को संदेश बफर में लिखें।
  // मिक्सहैश के लिए h को बनाए रखें।
  // संदेश 1 के लिए केडीएफ के लिए संबद्ध डेटा के रूप में h का उपयोग करें।
  // संदेश 1 के लिए केडीएफ के लिए n = 0 का उपयोग करें।

  एंड ऑफ "ई" संदेश पैटर्न।

  यह "ईएस" संदेश पैटर्न है:

  // डीएच(e, rs) == डीएच(s, re)
  इनपुट_कुंजी_सामग्री = 32 बाइट डीएच परिणाम एलिस की एपेमेरल कुंजी और बॉब की स्थिर कुंजी का।
  सेट इनपुट_कुंजी_सामग्री = एक्स25519 डीएच परिणाम

  // मिक्सकी
  temp_key = 32 बाइट्स
  HMAC-SHA256(key, data) को [RFC-2104](https://tools.ietf.org/html/rfc2104) में परिभाषित किया गया है।
  // चेनिंग कुंजी और डीएच परिणाम से एक अस्थायी कुंजी उत्पन्न करें।
  temp_key = HMAC-SHA256(ck, input_key_material)
  // डीएच परिणाम को मेमोरी में ओवरराइट करें, अब इसकी आवश्यकता नहीं है।
  input_key_material = (सभी शून्य)

  // आउटपुट 1
  // अस्थायी कुंजी से एक नया चेनिंग कुंजी सेट करें।
  ck = HMAC-SHA256(temp_key, byte(0x01))।

  // आउटपुट 2
  // सिफर कुंजी k उत्पन्न करें।
  क = 32 बाइट्स
  k = HMAC-SHA256(temp_key, ck || byte(0x02))।
  // अस्थायी कुंजी को मेमोरी में ओवरराइट करें, अब इसकी आवश्यकता नहीं है।
  temp_key = (सभी शून्य)

  // मिक्सहैश के लिए h को बनाए रखें।
  // संदेश 2 के लिए केडीएफ के लिए संबद्ध डेटा के रूप में h का उपयोग करें।
  // संदेश 2 के लिए केडीएफ के लिए n = 0 का उपयोग करें।
  // संदेश 2 के लिए केडीएफ के लिए ck का उपयोग करें।

  एंड ऑफ "ईएस" संदेश पैटर्न।

1) सत्रअनुरोध

एलिस बॉब को भेजता है।

नॉइज़ सामग्री: एलिस की एपेमेरल कुंजी एक्स नॉइज़ पेलोड: 16 बाइट विकल्प ब्लॉक गैर-नॉइज़ पेलोड: यादृच्छिक पैडिंग

(पेलोड सुरक्षा गुण):

एक्सके(स, आरएस):           प्रमाणीकरण   गोपनीयता
    -> ई, ईएस                  0                2

  प्रमाणीकरण: 0।
  यह पेलोड किसी भी पक्ष द्वारा भेजा जा सकता है, जिसमें एक सक्रिय हमलावर भी शामिल है।

  गोपनीयता: 2।
  एक ज्ञात प्राप्तकर्ता के लिए एन्क्रिप्शन, आगे की गोपनीयता केवल भेजने वाले के लिए।
  यह पेलोड केवल प्राप्तकर्ता की स्थिर कुंजी जोड़ी के साथ डीएच के आधार पर एन्क्रिप्ट किया गया है।
  यदि प्राप्तकर्ता की स्थिर निजी कुंजी बाद में भी प्रकट हो जाती है, तो यह पेलोड डिक्रिप्ट किया जा सकता है।
  यह संदेश भी पुनरावृत्ति के लिए अतिसंवेदनशील है, क्योंकि इसमें प्राप्तकर्ता से कोई एपेमेरल योगदान नहीं है।

  "ई": एलिस एक नई एपेमेरल कुंजी जोड़ी बनाती है और इसे ई में संग्रहीत करती है, संदेश बफर में एपेमेरल सार्वजनिक कुंजी को स्पष्ट रूप से लिखती है, और पुराने हैश के साथ हैश करती है ताकि एक नया हैश प्राप्त किया जा सके।
  "ईएस": एलिस की एपेमेरल कुंजी और बॉब की स्थिर कुंजी के बीच एक डीएच किया जाता है।
  परिणाम को पुराने चेनिंग कुंजी के साथ हैश किया जाता है ताकि एक नया चेनिंग कुंजी और कुंजी के उत्पादन हो सकें, और n को शून्य पर सेट किया जाता है।

एक्स मूल्य को पेलोड की अप्रतिष्ठितता और विशिष्टता सुनिश्चित करने के लिए एन्क्रिप्ट किया जाता है, जो डीपीआई काउंटरमेजर्स के लिए आवश्यक हैं। हम इसके लिए एलिगेटर2 के बजाय एईएस एन्क्रिप्शन का उपयोग करते हैं। बॉब की राउटर सार्वजनिक कुंजी के लिए असममित एन्क्रिप्शन बहुत धीमा होगा। एईएस एन्क्रिप्शन बॉब के राउटर हैश का उपयोग कुंजी के रूप में करता है और बॉब के नेटवर्क डेटाबेस में प्रकाशित आईवी का उपयोग करता है।

एईएस एन्क्रिप्शन केवल डीपीआई प्रतिरोध के लिए है। कोई भी पक्ष जो बॉब के राउटर हैश और आईवी को जानता है, जो नेटवर्क डेटाबेस में प्रकाशित हैं, संदेश 1 में एक्स मूल्य को डिक्रिप्ट कर सकता है।

raw सामग्री:

+----+----+----+----+----+----+----+----+
|                                       |
+        प्रतिरूपित आरएच_बी           +
|       एईएस-256 एन्क्रिप्टेड एक्स     |
+             (32 बाइट)                +
|                                       |
+                                       +
|                                       |
+----+----+----+----+----+----+----+----+
|   चाचापॉली फ्रेम                    |
+   एन्क्रिप्टेड और प्रमाणित डेटा    +
|   32 बाइट                            |
+   केडीएफ के लिए परिभाषित की कुंजी   +
|   n = 0; केडीएफ के लिए संबद्ध डेटा देखें|
+                                       +
|                                       |
+----+----+----+----+----+----+----+----+
|     अप्रमाणित प्रमाणित         |
+         पैडिंग (वैकल्पिक)            +
|     विकल्प ब्लॉक में निर्दिष्ट पैडिंग लंबाई|
~               .   .   .               ~
|                                       |
+----+----+----+----+----+----+----+----+

एक्स :: 32 बाइट, एईएस-256 एन्क्रिप्टेड एक्स25519 एपेमेरल कुंजी, लिटिल-एंडियन
        कुंजी: आरएच_बी
        iv: बॉब के नेटवर्क डेटाबेस में प्रकाशित

पैडिंग :: यादृच्छिक डेटा, 0 या अधिक बाइट्स।
           कुल संदेश लंबाई 65535 बाइट्स से कम या बराबर होनी चाहिए।
           कुल संदेश लंबाई 287 बाइट्स से कम या बराबर होनी चाहिए यदि बॉब अपना पता "एनटीसीपी" के रूप में प्रकाशित करता है (नीचे संस्करण पहचान अनुभाग देखें)।
           एलिस और बॉब दोनों पैडिंग डेटा का उपयोग संदेश 2 के लिए केडीएफ में करेंगे।
           यह प्रमाणित है, इसलिए कोई भी छेड़छाड़ अगले संदेश को विफल कर देगी।

अप्रमाणित डेटा (पॉली1305 प्रमाणीकरण टैग नहीं दिखाया गया):

+----+----+----+----+----+----+----+----+
|                                       |
+                                       +
|                  एक्स                  |
+              (32 बाइट)               +
|                                       |
+                                       +
|                                       |
+----+----+----+----+----+----+----+----+
|               विकल्प                 |
+              (16 बाइट)               +
|                                       |
+----+----+----+----+----+----+----+----+
|     अप्रमाणित प्रमाणित         |
+         पैडिंग (वैकल्पिक)            +
|     विकल्प ब्लॉक में निर्दिष्ट पैडिंग लंबाई|
~               .   .   .               ~
|                                       |
+----+----+----+----+----+----+----+----+

एक्स :: 32 बाइट, एक्स25519 एपेमेरल कुंजी, लिटिल-एंडियन

विकल्प :: विकल्प ब्लॉक, 16 बाइट, नीचे देखें
पैडिंग :: यादृच्छिक डेटा, 0 या अधिक बाइट्स।
           कुल संदेश लंबाई 65535 बाइट्स से कम या बराबर होनी चाहिए।
           एलिस और बॉब दोनों पैडिंग डेटा का उपयोग संदेश 2 के लिए केडीएफ में करेंगे।
           यह प्रमाणित है, इसलिए कोई भी छेड़छाड़ अगले संदेश को विफल कर देगी।

विकल्प ब्लॉक: नोट: सभी क्षेत्र बड़े-एंडियन हैं।

+----+----+----+----+----+----+----+----+
| id | ver|  padLen | m3p2len | Rsvd(0) |
+----+----+----+----+----+----+----+----+
|        tsA        |   आरक्षित (0)    |
+----+----+----+----+----+----+----+----+

id :: 1 बाइट, नेटवर्क आईडी (वर्तमान में 2, परीक्षण नेटवर्क को छोड़कर)
      0.9.42 से शुरू। देखें प्रस्ताव 147।

ver :: 1 बाइट, प्रोटोकॉल संस्करण (वर्तमान में 2)

padLen :: 2 बाइट, पैडिंग लंबाई, 0 या अधिक
          न्यूनतम/अधिकतम दिशानिर्देश टीबीडी। यादृच्छिक आकार 0 से 31 बाइट्स तक (वितरण निर्धारित किया जाना है, परिशिष्ट ए देखें)।

m3p2Len :: 2 बाइट, संदेश 3 भाग 2 (सत्रसंकेत) में दूसरे एईएडी फ्रेम की लंबाई
           नीचे नोट्स देखें।

Rsvd :: 2 बाइट, संगतता के लिए 0 पर सेट
tsA :: 4 बाइट, यूनिक्स टाइमस्टैम्प, असाइन्ड सेकंड।
       2106 में लपेटता है

आरक्षित :: 4 बाइट, संगतता के लिए 0 पर सेट

नोट्स

  • जब प्रकाशित पता “एनटीसीपी” के रूप में होता है, तो बॉब एक ही बंदरगाह पर एनटीसीपी और एनटीसीपी2 दोनों के लिए समर्थन स्वीकार करता है। संगतता के लिए, जब “एनटीसीपी” के रूप में प्रकाशित पते के लिए कनेक्शन शुरू किया जाता है, तो एलिस को इस संदेश के अधिकतम आकार को 287 बाइट्स से कम या बराबर तक सीमित करना चाहिए, जिसमें पैडिंग शामिल है। यह बॉब द्वारा स्वचालित प्रोटोकॉल पहचान की सुविधा प्रदान करता है। जब इसे “एनटीसीपी2” के रूप में प्रकाशित किया जाता है, तो कोई आकार प्रतिबंध नहीं होता है। नीचे संस्करण पहचान अनुभाग देखें।

  • संदेश 1 में यादृच्छिक एक्स मूल्य सुनिश्चित करता है कि सिफरटेक्स्ट हर सत्र के लिए अलग होता है।

  • बॉब को उन कनेक्शनों को अस्वीकार करना चाहिए जहां टाइमस्टैम्प मान वर्तमान समय से बहुत दूर है। अधिकतम समय अंतर “डी” कहें। बॉब को स्थानीय रूप से उपयोग किए जाने वाले हैंडशेक मूल्यों के एक कैश को बनाए रखना चाहिए और डुप्लिकेट को अस्वीकार करना चाहिए, पुनरावृत्ति हमलों को रोकने के लिए। कैश मूल्य कार्यान्वयन-निर्भर हैं, हालांकि 32-बाइट एक्स मूल्य (या इसके एन्क्रिप्टेड समकक्ष) का उपयोग किया जा सकता है।

  • एपेमेरल डीएच कुंजियों को कभी भी पुन: उपयोग नहीं किया जाना चाहिए, क्योंकि इससे क्रिप्टोग्राफिक हमले हो सकते हैं, और पुन: उपयोग को पुनरावृत्ति हमले के रूप में अस्वीकार कर दिया जाएगा।

  • “केई” और “प्रमाणीकरण” विकल्पों को संगत होना चाहिए, अर्थात साझा की गई कुंजी का आकार उपयुक्त होना चाहिए। यदि अधिक “प्रमाणीकरण” विकल्प जोड़े जाते हैं, तो यह “केई” ध्वज का अर्थ बदल सकता है ताकि एक अलग केडीएफ या एक अलग ट्रंकेशन आकार का उपयोग किया जा सके।

  • बॉब को यह सत्यापित करना चाहिए कि एलिस की एपेमेरल कुंजी वक्र पर एक वैध बिंदु है यहां।

  • पैडिंग को एक उचित मात्रा में सीमित करना चाहिए। बॉब को अत्यधिक पैडिंग वाले कनेक्शनों को अस्वीकार करना चाहिए। बॉब संदेश 2 में अपने पैडिंग विकल्प निर्दिष्ट करेगा। न्यूनतम/अधिकतम दिशानिर्देश टीबीडी। यादृच्छिक आकार 0 से 31 बाइट्स तक (वितरण निर्धारित किया जाना है, परिशिष्ट ए देखें)।

  • किसी भी त्रुटि पर, जिसमें एईएडी, डीएच, टाइमस्टैम्प, स्पष्ट पुनरावृत्ति या कुंजी सत्यापन विफलता शामिल है, बॉब को आगे संदेश प्रसंस्करण को रोकना चाहिए और प्रतिक्रिया के बिना कनेक्शन बंद कर देना चाहिए। यह एक असामान्य बंद (टीसीपी आरएसटी) होना चाहिए। प्रोबिंग प्रतिरोध के लिए, एईएडी विफलता के बाद, बॉब को एक यादृच्छिक समयबाह्य (टीबीडी रेंज) निर्धारित करना चाहिए और फिर एक यादृच्छिक संख्या में बाइट्स (टीबीडी रेंज) पढ़ना चाहिए, इससे पहले कि वह सॉकेट को बंद कर दे। बॉब को बार-बार विफलताओं के साथ आईपी के लिए एक ब्लैकलिस्ट बनाए रखना चाहिए।

  • डॉस मिटिगेशन: डीएच एक अपेक्षाकृत महंगा ऑपरेशन है। जैसा कि पिछले एनटीसीपी प्रोटोकॉल में, राउटरों को सीपीयू या कनेक्शन समाप्ति से बचने के लिए सभी आवश्यक उपाय करने चाहिए। अधिकतम सक्रिय कनेक्शन और कनेक्शन सेटअप पर सीमाएं लगाएं। प्रति-पढ़ाई (दोनों प्रति-पढ़ाई और कुल “स्लोलोरिस” के लिए) के लिए पढ़ाई समयबाह्य लागू करें। एक ही स्रोत से बार-बार या एक साथ कनेक्शनों को प्रतिबंधित करें। बार-बार विफलताओं के साथ स्रोतों के लिए ब्लैकलिस्ट बनाए रखें। एईएडी विफलता पर प्रतिक्रिया न दें।

  • तेजी से संस्करण पहचान और हैंडशेकिंग को सुविधाजनक बनाने के लिए, कार्यान्वयन को यह सुनिश्चित करना चाहिए कि एलिस पहले संदेश की सामग्री को एक बार में बफर और फ्लश करती है, जिसमें पैडिंग शामिल है। इससे यह संभावना बढ़ जाती है कि डेटा एक ही टीसीपी पैकेट (यदि ओएस या मिडिलबॉक्सेस द्वारा खंडित नहीं किया गया है) में शामिल होगा, और एक बार में बॉब द्वारा प्राप्त किया जाएगा। यह भी दक्षता के लिए है और यादृच्छिक पैडिंग की प्रभावशीलता सुनिश्चित करने के लिए है।

  • “वर” क्षेत्र: समग्र नॉइज़ प्रोटोकॉल, विस्तार, और एनटीसीपी प्रोटोकॉल सहित पेलोड विशिष्टीकरण, एनटीसीपी2 को इंगित करता है। यह क्षेत्र भविष्य के परिवर्तनों को इंगित करने के लिए उपयोग किया जा सकता है।

  • संदेश 3 भाग 2 लंबाई: यह संदेश 3 में भेजे जाने वाले दूसरे एईएडी फ्रेम (16-बाइट एमएसी सहित) का आकार है