नीचे मेरा जवाब थोड़ा लंबा है, लेकिन उम्मीद है कि यह कुछ विवरण प्रदान करता है जो पिछले उत्तरों में गायब हैं। मैं कुछ संबंधित कथनों के साथ शुरुआत करूंगा और अंत में प्रारंभिक प्रश्न का उत्तर दूंगा।
RSA एल्गोरिथ्म का उपयोग करके कुछ एन्क्रिप्ट करने के लिए आपको मापांक और एन्क्रिप्शन (सार्वजनिक) प्रतिपादक जोड़ी (n, e) की आवश्यकता होती है। वह आपकी सार्वजनिक कुंजी है। आरएसए एल्गोरिथ्म का उपयोग करके कुछ को डिक्रिप्ट करने के लिए आपको मापांक और डिक्रिप्शन (निजी) प्रतिपादक जोड़ी (एन, डी) की आवश्यकता होती है। वह आपकी निजी कुंजी है।
RSA सार्वजनिक कुंजी का उपयोग करके कुछ एन्क्रिप्ट करने के लिए आप अपने प्लेनटेक्स्ट को एक नंबर के रूप में मानते हैं और इसे ई मापुलस n की शक्ति तक बढ़ाते हैं:
ciphertext = ( plaintext^e ) mod n
RSA निजी कुंजी का उपयोग करके कुछ को डिक्रिप्ट करने के लिए आप अपने सिफरटेक्स्ट को एक नंबर के रूप में मानते हैं और इसे d modulus n की शक्ति तक बढ़ाते हैं:
plaintext = ( ciphertext^d ) mod n
निजी (डी, एन) कुंजी उत्पन्न करने के लिए ओपनसेल का उपयोग कर आप निम्न कमांड का उपयोग कर सकते हैं:
openssl genrsa -out private.pem 1024
निजी कुंजी से सार्वजनिक (e, n) कुंजी उत्पन्न करने के लिए आप ओपन कमांड का उपयोग कर सकते हैं।
openssl rsa -in private.pem -out public.pem -pubout
निजी .pem निजी RSA कुंजी की सामग्री को विच्छेदित करने के लिए जो ऊपर की ओर खुलता है कमांड निम्नलिखित द्वारा उत्पन्न होता है (आउटपुट को यहां लेबल पर काट दिया गया है):
openssl rsa -in private.pem -text -noout | less
modulus - n
privateExponent - d
publicExponent - e
prime1 - p
prime2 - q
exponent1 - d mod (p-1)
exponent2 - d mod (q-1)
coefficient - (q^-1) mod p
क्या निजी कुंजी में केवल (n, d) जोड़ी नहीं होनी चाहिए? 6 अतिरिक्त घटक क्यों हैं? इसमें e (सार्वजनिक प्रतिपादक) शामिल है ताकि सार्वजनिक RSA कुंजी को निजी / निजी RSA कुंजी से उत्पन्न / निकाला / प्राप्त किया जा सके। बाकी 5 घटक डिक्रिप्शन प्रक्रिया को गति देने के लिए हैं। यह पता चलता है कि प्री-कंप्यूटिंग और उन 5 मूल्यों को संग्रहीत करके आरएसए डिक्रिप्शन को 4 के कारक द्वारा गति देना संभव है। डिक्रिप्शन उन 5 घटकों के बिना काम करेगा, लेकिन यह तेजी से किया जा सकता है यदि आपके पास उन्हें काम है। एल्गोरिथ्म में तेजी लाने वाला चीनी रेमिनेटर प्रमेय पर आधारित है ।
हां, Private.pem RSA निजी कुंजी में वास्तव में उन सभी 8 मान शामिल हैं; पिछली कमांड चलाने पर उनमें से कोई भी मक्खी पर उत्पन्न नहीं होता है। निम्नलिखित कमांड चलाने की कोशिश करें और आउटपुट की तुलना करें:
# Convert the key from PEM to DER (binary) format
openssl rsa -in private.pem -outform der -out private.der
# Print private.der private key contents as binary stream
xxd -p private.der
# Now compare the output of the above command with output
# of the earlier openssl command that outputs private key
# components. If you stare at both outputs long enough
# you should be able to confirm that all components are
# indeed lurking somewhere in the binary stream
openssl rsa -in private.pem -text -noout | less
RSA निजी कुंजी की यह संरचना PKCS # 1 v1.5 द्वारा एक वैकल्पिक ( दूसरा ) प्रतिनिधित्व के रूप में अनुशंसित है । PKCS # 1 v2.0 मानक वैकल्पिक प्रतिनिधित्व से e और d घातांक को पूरी तरह से बाहर करता है। PKCS # 1 v2.1 और v2.2 वैकल्पिक प्रतिनिधित्व को और अधिक बदलने का प्रस्ताव करते हैं, वैकल्पिक रूप से अधिक CRT- संबंधित घटकों सहित।
Public.pem सार्वजनिक RSA कुंजी की सामग्री को देखने के लिए निम्न को चलाएँ (यहाँ लेबल पर आउटपुट छोटा है):
openssl rsa -in public.pem -text -pubin -noout
Modulus - n
Exponent (public) - e
यहां कोई आश्चर्य नहीं। यह सिर्फ (एन, ई) जोड़ी है, जैसा कि वादा किया गया था।
अब अंत में प्रारंभिक प्रश्न का उत्तर दे रहे हैं: जैसा कि निजी आरएसए कुंजी के ऊपर दिखाया गया था, ओपनसेल का उपयोग करके सार्वजनिक और निजी दोनों कुंजी के घटक शामिल हैं और कुछ और। जब आप निजी कुंजी से सार्वजनिक कुंजी बनाते / निकालते / निकालते हैं, तो उन घटकों में से दो को कॉपी करता है (e, n) एक अलग फ़ाइल में, जो आपकी सार्वजनिक कुंजी बन जाती है।