2009-07-25 18 views
12

मुझे पता है कि RSACryptoServiceProvider सार्वजनिक कुंजी के साथ एन्क्रिप्ट कर सकता है, फिर इसे निजी कुंजी से डिक्रिप्ट किया जा सकता है।क्या .NET RSACryptoServiceProvider का उपयोग कर निजी कुंजी के साथ एन्क्रिप्ट करना संभव है?

क्या निजी कुंजी से एन्क्रिप्ट करना संभव है और RSACryptoServiceProvider का उपयोग करके सार्वजनिक कुंजी के साथ डिक्रिप्ट करना संभव है?

+0

* "निजी कुंजी से एन्क्रिप्ट करें" * वैध क्रिप्टोग्राफिक ऑपरेशन नहीं है। यदि आप उस ऑपरेशन को करने की कोशिश कर रहे हैं, तो आमतौर पर आप रिकवरी *** के साथ *** हस्ताक्षर योजना चाहते हैं। – jww

उत्तर

-3

नहीं। ऐसा नहीं है कि कोई सार्वजनिक/निजी कुंजी एन्क्रिप्शन कैसे काम करता है। आप केवल सार्वजनिक कुंजी के साथ एन्क्रिप्ट कर सकते हैं, और केवल निजी कुंजी के साथ डिक्रिप्ट कर सकते हैं।

+1

धन्यवाद! मैं अपने सॉफ्टवेयर की सुरक्षा के लिए सीरियल नंबर करना चाहता हूं, अगर आरएसए निजी कुंजी के साथ एन्क्रिप्ट नहीं कर सकता है, तो दूसरी तरफ कैसे करें? – guaike

+11

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

+1

क्रेग आप हस्ताक्षर करने के बारे में बात कर रहे हैं, जो एक पूरी तरह से अलग बात है। साइनिंग एन्क्रिप्शन नहीं है (हालांकि यह क्रिप्टोग्राफी है)। फिर भी हस्ताक्षर केवल निजी कुंजी के साथ उत्पन्न किया जा सकता है, लेकिन जनता के साथ जांच की जा सकती है। – blowdart

2

सौभाग्य से नहीं। हालांकि आप निजी कुंजी से साइन इन कर सकते हैं और सार्वजनिक कुंजी के साथ हस्ताक्षर सत्यापित कर सकते हैं।

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

+0

ठीक है जब गणित को उलटा कार्य उलट दिया जाता है, तो एक असुरक्षित रूप से लंबे समय तक समाप्त होने में काफी समय लगेगा। 'गणित को उलट' द्वारा –

+1

मेरा मतलब है कि गणित को परवाह नहीं है अगर एल्गोरिदम में ई और डी बदल दिया गया है। यह हस्ताक्षर करता है: निजी कुंजी (निजी एक्सपोनेंट 'डी') के साथ संदेश हैश डाइजेस्ट एन्क्रिप्ट करें। जाहिर है, मेरा मतलब यह नहीं था कि गणना गणना को उलट दिया जा सकता है। –

-1

सार्वजनिक कुंजी क्रिप्टोसिस्टम की सुरक्षा इस तथ्य पर निर्भर करती है कि साइन()/एन्क्रिप्ट() फ़ंक्शन one-way function है जिसमें सार्वजनिक कुंजी "जाल-दरवाजा" के बिना इसे डिक्रिप्ट करने में एक अनावश्यक समय लगेगा।

इसके अलावा, आमतौर पर जेनरेट की गई कुंजी एक ही लंबाई नहीं होती है, हालांकि वे हो सकती हैं। आरएसए के साथ असममित कुंजी लंबाई के बारे में बहुत सारे कागजात हैं।

6

निजी कुंजी के साथ कच्चे आरएसए कार्यवाही संचालित करने आमतौर पर डिक्रिप्शन आपरेशन कहा जाता है (सिर्फ सार्वजनिक कुंजी के साथ यह प्रदर्शन एन्क्रिप्शन कार्यवाही कहा जाता है के रूप में)।

इस ऑपरेशन तक पहुंच के लिए उपयोगी है - उदाहरण के लिए ढांचे द्वारा समर्थित एक ऑपरेशन को लागू करने के लिए।

ऑपरेशन मौजूद है: यह DecryptValue -method है, जिसे RSACryptoServiceProvider के बेस-क्लास द्वारा परिभाषित किया गया है: System.Security.Cryptography.RSA। दुर्भाग्यवश, यह RSACryptoServiceProvider द्वारा समर्थित नहीं है (अंतर्निहित Win32-api, CryptoAPI, इसका समर्थन नहीं करता है)। यदि आप आरएसए-कक्षा के किसी अन्य .NET- कार्यान्वयन को पकड़ सकते हैं, तो आप इसे करने में सक्षम होंगे।

41

बस थोड़ा स्पष्ट बातें करने के लिए:

आरएसए इस्तेमाल किया जा सकता है या तो एन्क्रिप्शन (सुनिश्चित करना है कि ईव संदेशों को नहीं पढ़ पा ऐलिस बॉब को भेजता है) या हस्ताक्षर करने (सुनिश्चित करने के लिए के लिए कि ऐलिस बॉब के लिए एक संदेश भेजता है, तो बॉब जानता है कि यह वास्तव में ऐलिस था कि कि ऐलिस होने के लिए)

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

एन्क्रिप्शन के लिए आरएसए का उपयोग करने के लिए, ऐलिस बॉब की सार्वजनिक कुंजी का उपयोग करके संदेश को एन्क्रिप्ट करता है। इस संदेश को पढ़ने का एकमात्र तरीका बॉब की निजी कुंजी के साथ है, जो केवल उसके पास है। इस प्रकार हव्वा संदेश नहीं पढ़ सकता क्योंकि उसके पास यह कुंजी नहीं है। दूसरी ओर, यह संदेश के स्रोत का कोई प्रमाणीकरण प्रदान नहीं करता है। हव्वा बॉब की सार्वजनिक कुंजी भी प्राप्त कर सकता है (क्योंकि यह सार्वजनिक है) और ऐलिस होने का नाटक करते हुए बॉब को संदेश भेजें।

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


अब, मैं नेट क्रिप्टोग्राफी एपीआई से परिचित नहीं हूँ, इसलिए मुझे यकीन है कि अगर यह वास्तव में काम करता है के रूप में यहाँ वर्णित नहीं कर रहा हूँ। लेकिन यह स्पष्टीकरण आपको कुछ उत्तरों को समझने में मदद कर सकता है।

+0

"सार्वजनिक कुंजी लागू करें और फिर निजी कुंजी, या इसके विपरीत लागू करें" का क्या मतलब है? "लागू" का अर्थ यहां क्या है? – WarLord

+0

क्या होगा यदि ऐलिस ने हैश के बजाय संदेश को एन्क्रिप्ट किया हो? क्या यह आसान नहीं होगा, या इसमें कोई सुरक्षा दोष है? मैं पाठ्यक्रम पर हस्ताक्षर करने के बारे में बात कर रहा हूं, एन्क्रिप्शन नहीं। –

16

हर कोई दावा करता है कि ऐसी कोई चीज़ नहीं है या तो यह नहीं पता कि आरएसए कैसे काम करता है, या वे "हस्ताक्षर" रट में फंस गए हैं।

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

हां, यह एन्क्रिप्ट कर रहा है, क्योंकि यह वही ऑपरेशन है। निजी-कुंजी एन्क्रिप्टेड सिफरटेक्स्ट सार्वजनिक-कुंजी एन्क्रिप्टेड सिफरटेक्स्ट के रूप में उतना ही गैरकानूनी है; सिफरटेक्स्ट को डिक्रिप्ट करने के लिए दोनों को दोनों कुंजी की आवश्यकता होती है।

आरएसए एल्गोरिदम पर संदर्भ के लिए http://fringe.davesource.com/Fringe/Crypt/RSA/Algorithm.html देखें।

+0

[इस पोस्ट] में दो लिंक (http://stackoverflow.com/a/2350959/1299353) आरएसए के विशिष्ट कार्यान्वयन से बात करते हैं और इसकी निजी कुंजी एन्क्रिप्शन कितनी सुरक्षित है – Jett

+0

मुझे लगता है कि यह जवाब मनोरंजक है ... मैं हूं यकीन नहीं है कि मैं क्रिप्टोग्राफरों और गणितज्ञों के एक अकादमिक निकाय से असहमत हूं। – jww

+0

हाँ- तो यह आरएसए प्रत्यारोपण के लिए विशिष्ट है, हालांकि, सही? ई और डी सार्वजनिक/निजी जादू हैं, और आपको केवल उनमें से 1 को एन्क्रिप्ट/डिक्रिप्ट करने की आवश्यकता है। ऐसा ही होता है कि आरएसए में सार्वजनिक कुंजी पी और क्यू में कुछ अन्य डेटा शामिल है (जो कि निजी कुंजी में भी हो सकता है)। – therealsix

0

आप निजीकी के साथ एन्क्रिप्ट और डिक्रिप्ट कर सकते हैं। PrivateKey वास्तव में निजी और PublicKey दोनों शामिल हैं।

सैद्धांतिक रूप से कम से कम आप PublicKey के साथ एन्क्रिप्ट कर सकते हैं और PrivateKey के साथ डिक्रिप्ट कर सकते हैं और इसके विपरीत। वीबी नेटवर्क्स में मुझे पहला केस वर्क्स और सेकेंडकेस फेंकता है BadKey त्रुटि

+2

मुझे PrivateKey के साथ एन्क्रिप्ट करना है और PublicKey के साथ डिक्रिप्ट करना है। असफल प्रयासों के एक दिन बाद मुझे समझ में आया कि 'RSACryptoServiceProvider.Encrypt' हमेशा सार्वजनिककी से उपयोग करता है, भले ही' RSACryptoServiceProvider 'ऑब्जेक्ट PrivateKey से बनाया गया हो। दूसरी ओर मैं 'साइन' का उपयोग नहीं कर सकता क्योंकि इसे हैश एल्गोरिदम की आवश्यकता है लेकिन मैं डेटा w/o हैश को एन्क्रिप्ट करना चाहता हूं। दूसरे शब्दों में, समस्या .NET कार्यान्वयन में है। – i486

0

आप दोनों कर सकते हैं; सार्वजनिक के साथ निजी और विचलन के साथ एन्क्रिप्ट करें, या, जनता के साथ एन्क्रिप्ट करें और निजी के साथ डिक्रिप्ट करें। आप एन्क्रिप्ट नहीं कर सकते हैं, फिर केवल निजी कुंजी के साथ डिक्रिप्ट कर सकते हैं, न ही आप अकेले सार्वजनिक कुंजी के साथ ऐसा ही कर सकते हैं।

रीमस ने इसे खींचा; निजी कुंजी के साथ एन्क्रिप्टिंग बहुत समझ में नहीं आता है जब डिक्रिप्शन कुंजी अच्छी तरह से जानी जाती है और सार्वजनिक होती है।

इसके अलावा, आप निजी कुंजी से सार्वजनिक कुंजी प्राप्त कर सकते हैं, लेकिन इसके विपरीत नहीं।

+0

मुझे लगता है कि यह जवाब मनोरंजक है, मुझे भी ... मुझे यकीन नहीं है कि मैं क्रिप्टोग्राफरों और गणितज्ञों के एक अकादमिक निकाय से असहमत हूं। – jww

+0

हां, यहां तक ​​कि मैं निजी कुंजी के साथ एन्क्रिप्ट करने का बिंदु सोच रहा हूं, जब सार्वजनिक कुंजी को जाना जाता है। जब तक, इसकी तरह, सार्वजनिक कुंजी (भले ही) नाम 'सार्वजनिक; वास्तव में सभी के लिए सार्वजनिक नहीं है, बल्कि केवल संबंधित पार्टी के लिए। –

संबंधित मुद्दे

 संबंधित मुद्दे