असममित एन्क्रिप्शन में एन्क्रिप्ट और साइन इन करने में क्या अंतर है?


295

कुछ डेटा को एन्क्रिप्ट करने के बीच अंतर क्या है कुछ डेटा पर हस्ताक्षर (आरएसए का उपयोग करके)?

क्या यह सार्वजनिक-निजी कुंजी की भूमिका को उलट देता है?

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

क्या इस परिदृश्य में हस्ताक्षर करना उपयोगी है?

जवाबों:


439

एन्क्रिप्ट करते समय, आप एक संदेश लिखने के लिए उनकी सार्वजनिक कुंजी का उपयोग करते हैं और वे इसे पढ़ने के लिए अपनी निजी कुंजी का उपयोग करते हैं।

हस्ताक्षर करते समय, आप संदेश के हस्ताक्षर लिखने के लिए अपनी निजी कुंजी का उपयोग करते हैं , और वे यह जांचने के लिए आपकी सार्वजनिक कुंजी का उपयोग करते हैं कि क्या यह वास्तव में आपकी है।

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

मैं चाहता हूं कि संदेशों को पढ़ने के लिए मेरी सार्वजनिक कुंजी का उपयोग किया जाए और मुझे परवाह नहीं है कि उन्हें कौन पढ़ता है

यह हस्ताक्षर है , यह आपकी निजी कुंजी के साथ किया जाता है।

मैं कुछ जानकारी को एन्क्रिप्ट करने और अपने सॉफ़्टवेयर के लिए उत्पाद कुंजी के रूप में उपयोग करने में सक्षम होना चाहता हूं।

मुझे केवल इस बात की परवाह है कि मैं ही एक ऐसा व्यक्ति हूं जो इन्हें उत्पन्न कर सकता है।

यदि आपको केवल इसे स्वयं जानना है, तो आपको ऐसा करने के लिए कुंजियों के साथ गड़बड़ करने की आवश्यकता नहीं है। आप बस यादृच्छिक डेटा उत्पन्न कर सकते हैं और इसे डेटाबेस में रख सकते हैं।

लेकिन अगर आप चाहते हैं कि लोगों को पता चले कि चाबियाँ वास्तव में आपकी हैं, तो आपको यादृच्छिक डेटा उत्पन्न करने की आवश्यकता है, इसे डेटाबेस में रखें और इसे अपनी कुंजी के साथ हस्ताक्षर करें।

मैं कुंजी के हस्ताक्षर को डिक्रिप्ट / पढ़ने के लिए अपनी सार्वजनिक कुंजी को अपने सॉफ़्टवेयर में शामिल करना चाहूंगा।

आपको शायद किसी सार्वजनिक प्रदाता के लिए Verisign या Thawte जैसे आपकी सार्वजनिक कुंजी के लिए एक प्रमाण पत्र खरीदने की आवश्यकता होगी, ताकि लोग यह देख सकें कि किसी ने आपके सॉफ़्टवेयर को जाली नहीं किया है और आपकी सार्वजनिक कुंजी को उनके साथ बदल दिया है।


7
तकनीकी रूप से बोलते हुए, जब आप कहते हैं कि निजी कुंजी का उपयोग संदेश के हस्ताक्षर को लिखने के लिए किया जाता है, तो आप कह रहे हैं कि संदेश का हैश मेरी निजी कुंजी के साथ एन्क्रिप्ट किया जा रहा है?
एंडी इबनेज़

4
@AndyIbanez: जो एन्क्रिप्ट किया गया है ( डाइजेस्ट ) में टाइमस्टैम्प और कुछ बेतरतीब नमक भी शामिल हो सकते हैं, लेकिन हां, इसका सार यही है।
क्वासोनी 21

7
@Quassnoi वास्तव में जब हम 'निजी कुंजी के साथ हस्ताक्षर' कहते हैं, तो इसका मतलब 'एन्क्रिप्ट' नहीं है, बल्कि इसका अर्थ है 'डिक्रिप्ट'। संदेश पर हस्ताक्षर करें मोटे तौर पर बोलना निजी कुंजी के साथ डिक्रिप्ट और सार्वजनिक कुंजी के साथ रिसीवर एन्क्रिप्ट में है, इस तरह से हैश समान हो जाएगा और तुलना की जा सकती है।
जॉनी विलर

5
@ जॉनीवेलर: जैसा कि नीचे उल्लेख @slim, गणितीय कोर एन्क्रिप्ट और डिक्रिप्ट दोनों कार्यों के लिए समान है। वे अलग-अलग कार्य नहीं हैं, वे एक ही कार्य हैं f(key, message), जैसे किf(private, f(public, message)) === f(public, f(private, message)) === message
क्वासनोई

2
@ नहीं, यह नहीं है। मुख्य जोड़ी बनाना नि: शुल्क है। लागत दूसरों को यह विश्वास दिलाने में शामिल है कि हस्ताक्षर वास्तव में आपका है। ऐसा करने के लिए, आपके पास अपनी सार्वजनिक कुंजी है, जिसे आपने पहले मुफ्त में जनरेट किया है, एक प्राधिकरण द्वारा हस्ताक्षरित है, जिसके लिए आपसे कोई शुल्क नहीं लिया जा सकता है।
क्वासोई

143

आरएसए क्रिप्टो में, जब आप एक महत्वपूर्ण जोड़ी बनाते हैं, तो यह पूरी तरह से मनमाना होता है, जिसे आप सार्वजनिक कुंजी मानते हैं, और जो निजी कुंजी है। यदि आप एक के साथ एन्क्रिप्ट करते हैं, तो आप दूसरे के साथ डिक्रिप्ट कर सकते हैं - यह दोनों दिशाओं में काम करता है।

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

एक हस्ताक्षर इस बात का प्रमाण है कि हस्ताक्षरकर्ता के पास निजी कुंजी है जो कुछ सार्वजनिक कुंजी से मेल खाती है। ऐसा करने के लिए, यह उस प्रेषक की निजी कुंजी के साथ संदेश को एन्क्रिप्ट करने के लिए पर्याप्त होगा , और सादे संस्करण के साथ एन्क्रिप्टेड संस्करण को शामिल करेगा। प्रेषक को सत्यापित करने के लिए, एन्क्रिप्ट किए गए संस्करण को डिक्रिप्ट करें, और जांचें कि यह प्लेटेक्स्ट के समान है।

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

हालाँकि, इसका मतलब है कि आपके ट्रांसमिशन के आकार को दोगुना करना - प्लेनटेक्स्ट और सिफरटेक्स्ट एक साथ (यह मानकर कि आप उन लोगों को चाहते हैं जो हस्ताक्षर को सत्यापित करने में रुचि नहीं रखते हैं, संदेश पढ़ने के लिए)। इसलिए इसके बजाय, आमतौर पर एक हस्ताक्षर सादे के हैश बनाकर किया जाता है। यह महत्वपूर्ण है कि नकली हैश नहीं बनाया जा सकता है, इसलिए क्रिप्टोग्राफिक हैश एल्गोरिदम जैसे SHA-2 का उपयोग किया जाता है।

इसलिए:

  • हस्ताक्षर बनाने के लिए, प्लेनटेक्स्ट से एक हैश बनाएं, इसे अपनी निजी कुंजी के साथ एन्क्रिप्ट करें, इसे प्लेनटेक्स्ट के साथ शामिल करें।
  • एक हस्ताक्षर को सत्यापित करने के लिए, प्लेनटेक्स्ट से एक हैश बनाएं, प्रेषक की सार्वजनिक कुंजी के साथ हस्ताक्षर को डिक्रिप्ट करें, जांचें कि दोनों हैश समान हैं।

8
@ हेडकोड ​​यह केवल असममित कुंजी पर लागू होता है। सममित कुंजियाँ जोड़े में नहीं आतीं।
स्लिम

3
वास्तव में, यह केवल RSA कुंजियों पर लागू होता है। उदाहरण के लिए, ECDSA कुंजियों के साथ, आप निजी कुंजी से सार्वजनिक कुंजी उत्पन्न कर सकते हैं, और निजी कुंजी एक स्केलर है, जबकि सार्वजनिक कुंजी एक समन्वय है।
डेविड श्वार्ट्ज

5
आप सार्वजनिक कुंजी के साथ संदेशों को कैसे डिक्रिप्ट कर सकते हैं? क्या संदेश केवल निजी कुंजी के साथ डिक्रिप्ट नहीं किए गए हैं?
daremkd

3
5 उत्तर 1 , 2 , 3 , 4 , 5
wha7ever

6
यह मनमाना नहीं है जिसे आप सार्वजनिक और निजी कहते हैं। आप सार्वजनिक कुंजी को निजी कुंजी से उत्पन्न कर सकते हैं, लेकिन आप सार्वजनिक कुंजी से निजी कुंजी उत्पन्न नहीं कर सकते। यह एक बड़ा अंतर नहीं है?
ग्रेग स्मिट

23

एक सुरक्षित संचार स्थापित करने में दो अलग लेकिन निकट से संबंधित समस्याएं हैं

  1. डेटा एन्क्रिप्ट करें ताकि केवल अधिकृत व्यक्ति ही इसे डिक्रिप्ट और पढ़ सकें।
  2. प्रेषक की पहचान / प्रमाणीकरण की जाँच करें।

सार्वजनिक कुंजी क्रिप्टोग्राफी का उपयोग करके इन दोनों समस्याओं को हल किया जा सकता है।

I. डेटा का एन्क्रिप्शन और डिक्रिप्शन

एलिस बॉब को एक संदेश भेजना चाहती है जिसे कोई भी पढ़ने में सक्षम नहीं होना चाहिए।

  • ऐलिस बॉब के सार्वजनिक संदेश के साथ संदेश को एन्क्रिप्ट करता है और उसे भेजता है।
  • बॉब संदेश प्राप्त करता है और अपनी निजी कुंजी का उपयोग करके इसे डिक्रिप्ट करता है।

ध्यान दें कि यदि A, B को एक संदेश भेजना चाहता है, तो A को B की सार्वजनिक कुंजी (जो सार्वजनिक रूप से किसी के लिए भी उपलब्ध है) का उपयोग करने की आवश्यकता है और न ही A की सार्वजनिक और निजी कुंजी चित्र में आती है।

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

द्वितीय। प्रेषक की पहचान सत्यापित करें (प्रमाणीकरण)

एलिस फिर से बॉब को एक संदेश भेजना चाहती है। उपरोक्त विधि का उपयोग करके डेटा को एन्क्रिप्ट करने की समस्या हल हो गई है।

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

क्या कोई तरीका है जिससे बॉब यह पुष्टि कर सके कि उसे जो संदेश मिल रहे हैं, वे वास्तव में ऐलिस द्वारा भेजे गए हैं?

  • ऐलिस अपनी निजी कुंजी के साथ संदेश पर हस्ताक्षर करता है और इसे भेजता है। (व्यवहार में, जो हस्ताक्षरित है वह संदेश का एक हैश है, जैसे SHA-256 या SHA-512।)
  • बॉब इसे प्राप्त करता है और इसे ऐलिस की सार्वजनिक कुंजी का उपयोग करके सत्यापित करता है। चूंकि एलिस की सार्वजनिक कुंजी ने संदेश को सफलतापूर्वक सत्यापित किया, इसलिए बॉब यह निष्कर्ष निकाल सकता है कि संदेश को ऐलिस द्वारा हस्ताक्षरित किया गया है।

1
तो जब आप संदेश पर हस्ताक्षर करते हैं, तो क्या आप वास्तविक संदेश पर हस्ताक्षर करते हैं या एन्क्रिप्टेड संदेश?
फ्रॉस्टीस्ट्रॉव

21

हाँ डेटा पर हस्ताक्षर करने के बारे में सोचें क्योंकि यह किसी और के पास नहीं है। यह अखंडता और गैर-प्रतिशोध प्राप्त करने के लिए किया जाता है । एन्क्रिप्शन इतना है कि कोई और डेटा नहीं देख सकता है। यह गोपनीयता हासिल करने के लिए किया जाता है । विकिपीडिया देखें http://en.wikipedia.org/wiki/Information_security#Key_concepts

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


16

साइनिंग आपकी निजी कुंजी के साथ "हैश" का उत्पादन कर रही है जिसे आपकी सार्वजनिक कुंजी से सत्यापित किया जा सकता है। पाठ स्पष्ट में भेजा गया है।

एन्क्रिप्ट करने के लिए डेटा को एन्क्रिप्ट करने के लिए रिसीवर की सार्वजनिक कुंजी का उपयोग करता है; डिकोडिंग उनकी निजी कुंजी के साथ की जाती है।

इसलिए, कुंजियों का उपयोग उल्टा नहीं होता है (अन्यथा आपकी निजी कुंजी अब निजी नहीं होगी!)।


सामान्य असममित एन्क्रिप्शन में, एन्क्रिप्शन सार्वजनिक कुंजी के साथ किया जाता है, न कि आपकी निजी कुंजी के साथ।
mmcdole

क्या आपने याद किया कि यह प्रश्न विशेष रूप से आरएसए के बारे में था जहां कुंजियों का उपयोग उलटा होता है और जहां यह निजी कुंजी से समझौता नहीं करता है।
डेविड श्वार्ट्ज

8

आप यह बता रहे हैं कि सार्वजनिक कुंजी क्रिप्टोग्राफ़ी में हस्ताक्षर का उपयोग कैसे और क्यों किया जाता है। ध्यान दें कि दूसरों द्वारा आपूर्ति किए गए संदेशों पर हस्ताक्षर करना (या एन्क्रिप्ट करना) बहुत खतरनाक है - यह उन एल्गोरिदम पर हमले की अनुमति देता है जो आपकी कुंजी से समझौता कर सकते हैं।


1
SSL का उपयोग करते समय वेब ब्राउज़र मनमाना डेटा एन्क्रिप्ट नहीं करते हैं?
इयान वारबर्टन

2
@IanWarburton: लेकिन वे इसके लिए असममित एन्क्रिप्शन का उपयोग नहीं करते हैं। वास्तविक डेटा स्थानान्तरण एक बेतरतीब ढंग से उत्पन्न सत्र कुंजी के साथ सममित एन्क्रिप्शन का उपयोग करता है।
माइकल बोर्गवर्ड

1
@IanWarburton: नहीं, क्योंकि न तो किसी हमलावर द्वारा चुना जाएगा । खतरा किसी हमलावर द्वारा सीधे आपूर्ति की गई चीज़ को एन्क्रिप्ट करने या हस्ताक्षर करने में निहित है, क्योंकि यह आपकी निजी कुंजी के बारे में जानकारी प्रकट करने के लिए बहुत जानबूझकर तैयार की जाती है, या यहां तक ​​कि हस्ताक्षर भी बनाते हैं जो किसी ऐसी चीज़ के लिए मान्य दिखाई देते हैं जिसे आपने हस्ताक्षर करने का इरादा नहीं किया था। आरएसए के लिए बाद का मामला कैसे काम करता है, इसका एक विस्तृत विवरण यहां है: crypto.stackexchange.com/questions/35644/…
माइकल

2
@ इयानवर्बटन: यही कारण है कि RSA को पैडिंग की आवश्यकता होती है, इसलिए आप कभी भी केवल एक चुने हुए संदेश को एन्क्रिप्ट नहीं करते हैं: en.wikipedia.org/wiki/… - लेकिन यह वास्तव में ऐसे ऑपरेशन हैं जिनमें निजी कुंजी (हस्ताक्षर करना) शामिल है जो विशेष रूप से चुने गए इनपुट के लिए असुरक्षित हैं।
माइकल बोरगवर्ड

1
@IanWarburton मैं एक क्रिप्टोग्राफी विशेषज्ञ नहीं हूं, लेकिन मैं जो समझता हूं, उससे कोई समस्या नहीं होनी चाहिए।
माइकल बोर्गवर्ड

8

हस्ताक्षर करना दर्शाता है कि आप वास्तव में हस्ताक्षरित वस्तु के स्रोत या वाउचर हैं। हर कोई वस्तु पढ़ सकता है, हालांकि।

एन्क्रिप्ट करने का मतलब है कि संबंधित निजी कुंजी वाले लोग ही इसे पढ़ सकते हैं, लेकिन हस्ताक्षर किए बिना कोई गारंटी नहीं है कि आप एन्क्रिप्टेड ऑब्जेक्ट के पीछे हैं।


यदि संदेश मेरी जघन कुंजी द्वारा डिक्रिप्ट हो जाता है तो केवल मैं इसे भेज सकता था। (मेरी निजी कुंजी को समझौता नहीं माना जाता है)
डोजो

5

कुछ डेटा को एन्क्रिप्ट करने के बीच अंतर क्या है कुछ डेटा पर हस्ताक्षर (आरएसए का उपयोग करके)?

एन्क्रिप्शन संदेश की गोपनीयता ("कुछ डेटा") को संरक्षित करता है, जबकि हस्ताक्षर गैर-प्रतिपूर्ति प्रदान करता है: अर्थात केवल उस इकाई जिसने हस्ताक्षर किया था, उस पर हस्ताक्षर कर सकता था। कार्यात्मक अंतर भी हैं; पढ़ते रहिये।

क्या यह सार्वजनिक-निजी कुंजी की भूमिका को उलट देता है?

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

उसी संदेश के लिए, आपको हस्ताक्षर करने के लिए प्रेषकों की निजी कुंजी और एन्क्रिप्शन के लिए रिसीवर को विश्वसनीय सार्वजनिक कुंजी का उपयोग करना चाहिए। आमतौर पर साइन-तब-एन्क्रिप्ट का उपयोग किया जाता है अन्यथा एक प्रतिवादी अपने स्वयं के साथ हस्ताक्षर की जगह ले सकता है। इसी तरह आपको डिक्रिप्शन के लिए रिसीवर की निजी कुंजी और सत्यापन के लिए प्रेषक की विश्वसनीय सार्वजनिक कुंजी का उपयोग करना चाहिए ।

इसके अलावा, आपको यह समझना चाहिए कि हस्ताक्षर पीढ़ी "निजी कुंजी के साथ एन्क्रिप्शन" का उपयोग नहीं करती है। यद्यपि सभी आरएसए ऑपरेशन मॉड्यूलर घातांक पर आधारित होते हैं, लेकिन पैडिंग योजना हस्ताक्षर निर्माण के लिए पूरी तरह से अलग है। इसके अलावा, सार्वजनिक कुंजी में RSA के सभी व्यावहारिक उपयोगों में RSA निजी कुंजी की तुलना में पूरी तरह से अलग गुण हैं।

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

यह गैर-प्रतिवाद संपत्ति है, जिसे हस्ताक्षर करके प्राप्त किया जा सकता है।

मैं चाहता हूं कि संदेशों को पढ़ने के लिए मेरी सार्वजनिक कुंजी का उपयोग किया जाए और मुझे परवाह नहीं है कि कौन उन्हें पढ़ता है।

सार्वजनिक कुंजी को सभी द्वारा ज्ञात किया जाना चाहिए। यदि आप चाहते हैं कि हर कोई संदेशों को पढ़े, तो आप बस उन्हें एन्क्रिप्ट नहीं करेंगे।

हस्ताक्षर आम तौर पर संदेश की सामग्री को प्रभावित नहीं करेंगे। संदेश को हस्ताक्षरों से अलग माना जाता है। आधिकारिक तौर पर ऐसे हस्ताक्षर "परिशिष्ट के साथ हस्ताक्षर" के रूप में जाने जाते हैं जहां परिशिष्ट संदेश है। यह थोड़ा अजीब नाम है क्योंकि संदेश को इस पर हस्ताक्षर से अधिक महत्वपूर्ण माना जाता है, लेकिन हाँ। केवल कुछ हस्ताक्षर प्रस्ताव (आंशिक) संदेश पुनर्प्राप्ति; वे अब और अधिक उपयोग नहीं किए जाते हैं और आमतौर पर पदावनत माना जाता है।

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

मैं कुछ जानकारी को एन्क्रिप्ट करने और अपने सॉफ़्टवेयर के लिए उत्पाद-कुंजी के रूप में उपयोग करने में सक्षम होना चाहता हूं। मुझे केवल इस बात की परवाह है कि मैं ही एक ऐसा व्यक्ति हूं जो इन्हें उत्पन्न कर सकता है।

एन्क्रिप्शन का उपयोग गोपनीयता प्राप्त करने के लिए किया जाता है। पूर्व में आरएसए हस्ताक्षर पीढ़ी को अक्सर "निजी कुंजी के साथ एन्क्रिप्शन" के रूप में सोचा जाता था। हालाँकि, ऑपरेशन बहुत अलग हैं जैसा कि ऊपर बताया गया है, और बाद के मानक पूरी तरह से कोशिश करते हैं और एन्क्रिप्शन और हस्ताक्षर पीढ़ी को अलग करते हैं।

मैं कुंजी के हस्ताक्षर को डिक्रिप्ट / पढ़ने के लिए अपनी सार्वजनिक कुंजी को अपने सॉफ़्टवेयर में शामिल करना चाहूंगा। मुझे परवाह नहीं है कि कुंजी में डेटा कौन पढ़ सकता है, मुझे केवल यह ध्यान है कि मैं केवल एक ही सत्यापन योग्य हूं जो उन्हें उत्पन्न कर सकता है।

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

उदाहरण के लिए Microsoft प्रमाणक है। IStore और Android ऐप स्टोर जैसे एप्लिकेशन स्टोर कोड साइनिंग का उपयोग कर सकते हैं या नहीं भी कर सकते हैं, लेकिन वे कुछ आश्वासन देते हैं कि आपका आवेदन क्लोन नहीं किया गया है या कम से कम स्टोर के भीतर क्लोन नहीं किया गया है। क्रिप्टोग्राफी हमेशा सब के बाद समाधान नहीं है।

अपने कोड को क्लोन किए जाने / बिल्कुल बदल दिए जाने से बहुत मुश्किल है, और यदि आप इस तरह से जाते हैं तो आप DRM क्षेत्र में ठोस रूप से शामिल होंगे।

क्या इस परिदृश्य में हस्ताक्षर करना उपयोगी है?

हाँ बिल्कुल। यह निश्चित रूप से यह सुनिश्चित करने में मदद कर सकता है कि संदेशों को केवल आपके द्वारा हस्ताक्षरित किया गया था, अगर सार्वजनिक कुंजी में विश्वास है। यदि यह आपके एप्लिकेशन कोड को प्रमाणित करने के लिए सहायक हो सकता है / एकीकृत सार्वजनिक कुंजी पूरी तरह से उस पर्यावरण पर निर्भर करती है, जिसमें आप कोड को चलाने की अपेक्षा करते हैं।


"पूर्व में आरएसए हस्ताक्षर पीढ़ी के बारे में अक्सर" निजी कुंजी के साथ एन्क्रिप्शन "के रूप में सोचा जाता था। हालांकि, संचालन ऊपर बताए अनुसार काफी अलग हैं, और बाद के मानकों की सख्त कोशिश करते हैं और एन्क्रिप्शन और हस्ताक्षर पीढ़ी को अलग करते हैं।" - यह मेरे लिए स्पष्ट नहीं है। या तो KeyPair pk या sk हो सकता है और जो दूसरे को एन्क्रिप्ट करता है वह डिक्रिप्ट कर सकता है। यदि हम उस पर सहमत होते हैं, तो हम कैसे तर्क दे सकते हैं कि हस्ताक्षर करना और एन्क्रिप्ट करना किसी भी सार्थक तरीके से अलग है? दोनों एन्क्रिप्ट और फिर केवल दूसरी कुंजी के साथ डिक्रिप्ट किया जा सकता है। मैंने हस्ताक्षर कार्यों के संदर्भ देखे हैं, क्या यह संबंधित है?
मॉर्गन

हस्ताक्षर समारोह में केवल एक ही अंतर मुझे पता है कि एन्क्रिप्शन से पहले संदेश का हैशिंग है।
मॉर्गन

4

अपने परिदृश्य में, आप असममित एन्क्रिप्शन के अर्थ में एन्क्रिप्ट नहीं करते हैं; मैं इसे "एनकोड" कहना चाहूंगा।

तो आप अपने डेटा को कुछ बाइनरी प्रतिनिधित्व में एनकोड करते हैं, फिर आप अपनी निजी कुंजी के साथ साइन इन करते हैं। यदि आप अपनी सार्वजनिक कुंजी के माध्यम से हस्ताक्षर को सत्यापित नहीं कर सकते हैं, तो आप जानते हैं कि हस्ताक्षरित डेटा आपकी निजी कुंजी के साथ उत्पन्न नहीं हुआ है। ("सत्यापन" का अर्थ है कि अहस्ताक्षरित डेटा सार्थक नहीं है)


2

कार्यात्मक रूप से, आप कुछ निश्चित करने के लिए सार्वजनिक / निजी कुंजी एन्क्रिप्शन का उपयोग करते हैं, केवल रिसीवर आपके संदेश को पढ़ सकता है। रिसीवर की सार्वजनिक कुंजी का उपयोग करके संदेश एन्क्रिप्ट किया गया है और डिक्रिप्ट किया गया है की निजी कुंजी का उपयोग करके जाता है।

हस्ताक्षर करना आप रिसीवर को यह बताने के लिए उपयोग कर सकते हैं कि आपने संदेश बनाया है और यह हस्तांतरण के दौरान नहीं बदला है। संदेश पर हस्ताक्षर करना आपकी निजी कुंजी का उपयोग करके किया जाता है। संदेश को छेड़छाड़ नहीं किया गया है यह जांचने के लिए रिसीवर आपकी सार्वजनिक कुंजी का उपयोग कर सकता है।

उपयोग किए गए एल्गोरिथ्म के रूप में: उदाहरण के लिए विकिपीडिया के लिए एक तरफ़ा फ़ंक्शन शामिल है । इस तरह के एल्गोरिदम में से एक बड़े प्राइम-नंबरों का उपयोग करता है लेकिन तब से अधिक एक तरफ़ा कार्यों का आविष्कार किया गया है।

इंटरनेट पर परिचय लेख खोजने के लिए 'बॉब', 'ऐलिस' और 'मैलोरी' खोजें।


क्या आप मेरे उपयोग मामले पर टिप्पणी कर सकते हैं? मैं एन्क्रिप्ट करने के लिए एक निजी कुंजी और किसी को और सभी को डिक्रिप्ट करने की अनुमति देने के लिए एक सार्वजनिक कुंजी का उपयोग करना चाहता हूं।
mmcdole

1
यह सच नहीं है कि सभी असममित एन्क्रिप्शन प्रमुख संख्याओं पर आधारित हैं, यह सिर्फ सबसे प्रसिद्ध उदाहरण (आरएसए) है; वहाँ अन्य तरीकों जैसे अण्डाकार वक्र क्रिप्टोग्राफी हैं।
माइकल बोर्गवर्ड

"रिसीवर की सार्वजनिक कुंजी का उपयोग करके संदेश को एन्क्रिप्ट किया जाता है।" उस वाक्य का कोई मतलब नहीं है, या बहुत कम से कम इसे और स्पष्टीकरण की आवश्यकता है। "एन्क्रिप्टेड तो एन्क्रिप्टेड" ???
मार्टन बॉडवेज

आप ट्रेंट को भूल गए! :)
डोजो

1

इस प्रश्न का उत्तर उस सामग्री में दिया जा रहा है जिसमें प्रश्नकर्ता का इरादा सॉफ़्टवेयर लाइसेंसिंग के समाधान का उपयोग करना था, आवश्यकताएं हैं:

  1. कोई भी 3 पार्टी ऐप को डिकम्पोज करने से लाइसेंस कुंजी का उत्पादन नहीं कर सकती है
  2. सॉफ़्टवेयर कुंजी की सामग्री को सुरक्षित करने की आवश्यकता नहीं है
  3. सॉफ्टवेयर कुंजी मानव पठनीय नहीं है

एक डिजिटल सिग्नेचर इस मुद्दे को हल करेगा क्योंकि कुंजी बनाने वाला कच्चा डेटा एक निजी कुंजी के साथ हस्ताक्षरित किया जा सकता है, जो इसे मानव पठनीय नहीं बनाता है, लेकिन रिवर्स इंजीनियर होने पर इसे डीकोड किया जा सकता है। लेकिन निजी कुंजी सुरक्षित है जिसका अर्थ है कि कोई भी आपके सॉफ़्टवेयर के लिए लाइसेंस नहीं बना पाएगा (जो कि बिंदु है)।

याद रखें कि आप एक कुशल व्यक्ति को अपने उत्पाद पर सॉफ़्टवेयर के ताले को हटाने से रोक नहीं सकते हैं। इसलिए अगर उन्हें जारी किए गए प्रत्येक संस्करण को हैक करना है। लेकिन आप वास्तव में नहीं चाहते हैं कि वे आपके उत्पाद के लिए नई कुंजी उत्पन्न कर सकें जो सभी संस्करणों के लिए साझा की जा सकें।

पायथन द पायनाक् डॉक्यूमेंटेशन में 'डिजिटल सिग्नेचर' का एक उदाहरण है जो इस उद्देश्य के अनुरूप होगा। http://pynacl.readthedocs.org/en/latest/signing/

और कारण NaCl सी उदाहरणों के लिए परियोजना

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.