ECIES-P256

Proposal 145
Open
Author orignal
Created 2019-01-23
Last Updated 2019-01-24

प्रेरणा

ECIES-P256, ElGamal की तुलना में अधिक तेज़ है। पहले से ही कुछ i2pd ईप्साइट्स हैं जिनके पास ECIES-P256 क्रिप्टो प्रकार है और Java को इनके साथ संवाद करने में सक्षम होना चाहिए और इसके विपरीत। i2pd संस्करण 2.16.0 (0.9.32 Java) से इसका समर्थन करता है।

अवलोकन

यह प्रस्ताव नए क्रिप्टो प्रकार ECIES-P256 को प्रस्तुत करता है जो पहचान के प्रमाण पत्र भाग में दिखाई दे सकता है, या LeaseSet2 में एक अलग एन्क्रिप्शन कुंजी प्रकार के रूप में हो सकता है। इसे RouterInfo, LeaseSet1 और LeaseSet2 में उपयोग किया जा सकता है।

ElGamal कुंजी स्थान

समीक्षा के रूप में, ElGamal 256-बाइट सार्वजनिक कुंजी निम्नलिखित डेटा संरचनाओं में पाई जा सकती हैं। आम संरचनाओं के विनिर्देश का संदर्भ लें।

  • एक राउटर पहचान में यह राउटर की एन्क्रिप्शन कुंजी है।

  • एक गंतव्य में गंतव्य की सार्वजनिक कुंजी पुराने i2cp-to-i2cp एन्क्रिप्शन के लिए उपयोग की गई थी जो संस्करण 0.6 में अक्षम कर दी गई थी, यह वर्तमान में अप्रयुक्त है सिवाय इसके लिए कि LeaseSet एन्क्रिप्शन के लिए IV, जो अप्रचलित है। LeaseSet में सार्वजनिक कुंजी का उपयोग इसके बजाय किया जाता है।

  • एक LeaseSet में यह गंतव्य की एन्क्रिप्शन कुंजी है।

ऊपर 3 में, ECIES सार्वजनिक कुंजी अब भी 256 बाइट्स की होती है, यद्यपि वास्तविक कुंजी लंबाई 64 बाइट्स है। शेष भाग को यादृच्छिक पैडिंग से भरा जाना चाहिए।

  • एक LS2 में यह गंतव्य की एन्क्रिप्शन कुंजी है। कुंजी आकार 64 बाइट्स है।

कुंजी प्रमाणपत्रों में EncTypes

ECIES-P256 एन्क्रिप्शन प्रकार 1 का उपयोग करता है। एन्क्रिप्शन प्रकार 2 और 3 को ECIES-P284 और ECIES-P521 के लिए आरक्षित रखा जाना चाहिए।

असममित क्रिप्टो उपयोग

यह प्रस्ताव ElGamal का प्रतिस्थापन वर्णित करता है:

  1. टनल निर्माण संदेश (कुंजी RouterIdentity में)। ElGamal ब्लॉक 512 बाइट्स का है

  2. क्लाइंट एंड-टू-एंड ElGamal+AES/SessionTag (कुंजी LeaseSet में है, गंतव्य कुंजी अप्रयुक्त है)। ElGamal ब्लॉक 514 बाइट्स का है

  3. नेटडब और अन्य I2NP संदेशों के राउटर-टू-राउटर एन्क्रिप्शन। ElGamal ब्लॉक 514 बाइट्स का है

लक्ष्य

  • पिछले संस्करणों के साथ संगत
  • मौजूदा डेटा संरचना में कोई बदलाव नहीं
  • ElGamal की तुलना में अधिक CPU-कुशल

गैर-लक्ष्य

  • RouterInfo और LeaseSet1 ElGamal और ECIES-P256 को एक साथ प्रकाशित नहीं कर सकते

औचित्य

ElGamal/AES+SessionTag इंजन हमेशा टैग की कमी पर अटका रहता है, जो I2P संचार में नाटकीय प्रदर्शन गिरावट उत्पन्न करता है। टनल निर्माण सबसे भारी ऑपरेशन है क्योंकि मूल उपयोगकर्ता को प्रत्येक टनल निर्माण अनुरोध के लिए ElGamal एन्क्रिप्शन 3 बार चलाना पड़ता है।

आवश्यक क्रिप्टोग्राफ़िक प्रिमिटिव्स

  1. EC P256 वक्र कुंजी निर्माण और DH

  2. AES-CBC-256

  3. SHA256

विस्तृत प्रस्ताव

ECIES-P256 के साथ गंतव्य प्रमाण पत्र में क्रिप्टो प्रकार 1 के साथ अपने आप को प्रकाशित करता है। पहचान में 256 में से पहले 64 बाइट्स को ECIES सार्वजनिक कुंजी के रूप में व्याख्यायित किया जाना चाहिए और शेष भाग को नजरअंदाज किया जाना चाहिए। LeaseSet की अलग एन्क्रिप्शन कुंजी पहचान से कुंजी प्रकार पर आधारित है।

ElGamal/AES+SessionTags के लिए ECIES ब्लॉक

ElGamal/AES+SessionTags के लिए ECIES ब्लॉक ElGamal ब्लॉक की जगह लेता है। लंबाई 514 बाइट्स में है। दो भागों के रूप में, प्रत्येक 257 बाइट्स का होता है। पहला भाग शून्य से शुरू होता है और उसके बाद हृष्ठकालिक P256 सार्वजनिक कुंजी 64 बाइट्स की, शेष 192 बाइट्स यादृच्छिक पैडिंग होती है। दूसरा भाग शून्य से शुरू होता है और फिर वही सामग्री होती है जैसे ElGamal, AES-CBC-256 एन्क्रिप्टेड 256 बाइट्स।

टनल निर्माण रिकॉर्ड के लिए ECIES ब्लॉक

टनल निर्माण रिकॉर्ड वही होता है, लेकिन ब्लॉक में आरंभिक शून्यों के बिना। एक टनल किसी भी प्रकार के क्रिप्टो प्रकार के संयोजन से हो सकता है और यह प्रति रिकॉर्ड किया जाता है। टनल का निर्माणकर्ता रिकॉर्ड्स को टनल प्रतिभागी के प्रकाशित क्रिप्टो प्रकार के अनुसार एन्क्रिप्ट करता है, टनल प्रतिभागी अपने क्रिप्टो प्रकार के आधार पर डिक्रिप्ट करता है।

AES-CBC-256 कुंजी

यह ECDH साझा कुंजियों की गणना है जहां KDF SHA256 है x निर्देशांक पर। मान लें कि एन्क्रिप्टर के रूप में एलिस और डिक्रिप्टर के रूप में बॉब है। मान लें कि k एलिस का यादृच्छिक रूप से चुना गया हृष्ठकालिक P256 निजी कुंजी है और P बॉब की सार्वजनिक कुंजी है। S साझा रहस्य S(Sx, Sy) है एलिस P के साथ “सहमति” करके k द्वारा S की गणना करती है, अर्थात S = k*P।

मान लें कि K एलिस की हृष्ठकालिक सार्वजनिक कुंजी है और p बॉब की निजी कुंजी है। बॉब प्राप्त संदेश के पहले ब्लॉक से K को लेता है और S = p*K की गणना करता है।

AES एन्क्रिप्शन कुंजी SHA256(Sx) है और iv Sy है।