सार्वजनिक कुंजी टोकन की भूमिका क्या है?


79

सार्वजनिक कुंजी टोकन की भूमिका क्या है? क्या हस्ताक्षरित हैश को डिक्रिप्ट करने में इसका कोई हिस्सा है। जीएसी में, एक ही सार्वजनिक कुंजी टोकन के साथ Microsoft से कई विधानसभाएं क्यों हैं?


1
@ बॉम्बे, एक साइनिंग हैश को डिक्रिप्ट करना सही होगा, केवल 1 त्रुटि।
— हेंक होल्टरमैन


यदि आप SSH या PGP से परिचित हैं, तो इसे आप फिंगरप्रिंट के रूप में जानते हैं, अर्थात। सार्वजनिक कुंजी का एक छोटा संस्करण जो आंख से निरीक्षण करना आसान है।
— कर्नल पैनिक

जवाबों:


160

सार्वजनिक कुंजी टोकन की भूमिका क्या है?

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

क्या हस्ताक्षरित हैश को डिक्रिप्ट करने में इसका कोई हिस्सा है?

नहीं, सार्वजनिक कुंजी टोकन में कोई "सूचना" नहीं है। यह सिर्फ एक संख्या है जो एक सार्वजनिक कुंजी का प्रतिनिधित्व करती है। यह स्वयं एक सार्वजनिक कुंजी नहीं है।

Microsoft से एक ही सार्वजनिक कुंजी टोकन के साथ कई विधानसभाएं क्यों हैं?

क्योंकि वे सभी एक ही निजी कुंजी - Microsoft की निजी कुंजी - के साथ हस्ताक्षरित थे और इसलिए सभी एक ही सार्वजनिक कुंजी के साथ सत्यापित हैं, और इसलिए सभी के पास एक ही सार्वजनिक कुंजी है।


3
क्या एक कुरकुरा और सही जवाब एरिक!
— आदित्य बोकाडे

@Ammar कोड के माध्यम से Assembly.FullNameसंपत्ति की जांच करें , इसे कमांड लाइन टूल के माध्यम से प्राप्त करने के लिए इस उत्तर को
— स्कॉट चैंबरलेन

14

से विकिपीडिया

"सार्वजनिक कुंजी टोकन का उपयोग असेंबली नाम को अद्वितीय बनाने के लिए किया जाता है। इस प्रकार, दो मजबूत नाम वाली असेंबली में एक ही PE फ़ाइल नाम हो सकता है और फिर भी .NET उन्हें अलग-अलग असेंबली के रूप में पहचान देगा। Windows फ़ाइल सिस्टम (FAT32 और NTFS) केवल पहचानता है। PE फ़ाइल नाम, एक ही PE फ़ाइल नाम (लेकिन विभिन्न संस्कृति, संस्करण या सार्वजनिक कुंजी टोकन) के साथ दो असेंबलियाँ एक ही Windows फ़ोल्डर में मौजूद नहीं हो सकती हैं। इस समस्या को हल करने के लिए .NET कुछ GAC (ग्लोबल असेंबली कैश) नामक परिचय देता है। .NET CLR द्वारा एकल फ़ोल्डर के रूप में व्यवहार किया जाता है, लेकिन वास्तव में नेस्टेड NTFS (या FAT32) फ़ोल्डरों का उपयोग करके कार्यान्वित किया जाता है।

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


6

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


इसलिए टोकन सिर्फ सही इस्तेमाल की गई पब की चाबी का संकेतक है? यह सीधे एन्क्रिप्शन / डिक्रिप्शन में भाग नहीं लेता है
— सॉफ्टवेयरमैटर

5

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

प्रत्येक कंपनी (या विभाग) को केवल 1 की-जोड़ी का उपयोग करना चाहिए, यही कारण है कि आप जीएसी में समान पीकेटी के समूह देखते हैं।


1

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

सबसे पहले , मजबूत नाम की गारंटी नहीं है कि विधानसभा पर भरोसा किया जा सकता है। आपके पास बस एक सार्वजनिक कुंजी / सार्वजनिक कुंजी टोकन है, लेकिन आप उस व्यक्ति को नहीं जानते हैं जिसने इस पर हस्ताक्षर किए हैं (सिवाय इसके कि वे किसी तरह घोषणा करते हैं कि वे विधानसभाओं के सार्वजनिक कुंजी के स्वामी हैं)।

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

https://msdn.microsoft.com/en-us/library/ms537359(v=vs.85).aspx

दूसरी बात , निम्नलिखित चर्चा में संक्षेप में एक सार्वजनिक बल टोकन के साथ सार्वजनिक / निजी कुंजी जोड़ी पाने के लिए एक क्रूर बल हमले की विधि का वर्णन किया गया है जो छेड़छाड़ वाली विधानसभा के लिए एक ही हैश का उत्पादन करेगा:

https://groups.google.com/forum/?hl=en# .topic/microsoft.public.dotnet.security/Jo6PqypxJN8

मुझे ध्यान देना चाहिए कि इसे मजबूत मजबूत नामकरण https://docs.microsoft.com/en-us/dotnet/framework/app-domains/enhanced-strong-naming द्वारा संबोधित किया जा सकता है

चर्चा में एक बग का भी उल्लेख किया गया, जिसने विधानसभा के सत्यापन को छोड़ दिया और रनटाइम में एक छेड़छाड़ की गई विधानसभा को लोड करने की अनुमति दी। विस्तृत शोध यहाँ है, बग को .NET फ्रेमवर्क के बाद के संस्करणों में तय किया गया था (इसलिए पुराने के लिए बग मौजूद है। नेट 1):

http://www.grimes.nildram.co.uk/workbooks/fusionWSCrackThree.htm

तीसरा , पूर्ण ट्रस्ट असेंबलियों के लिए डिफ़ॉल्ट रूप से विधानसभाओं के भार के प्रदर्शन को बढ़ाने के लिए .Net 3.5 sp1 शुरू करना डिफ़ॉल्ट रूप से मान्य नहीं है।

https://docs.microsoft.com/en-us/dotnet/framework/app-domains/how-to-disable-the-strong-name-bypass-feature

विधानसभाओं की स्थिति: https://blogs.msdn.microsoft.com/shawnfa/2008/05/14/strong-name-bypass/

स्टैक ओवरफ्लो पर इसके बारे में चर्चा: क्या हस्ताक्षर किए गए हैं। नेट असेंबलियों को कभी भी पूरी तरह से सत्यापित किया जाता है जब लोड किया जाता है, यह जांचने के लिए कि उन्हें संशोधित नहीं किया गया है?

जैसा कि मैं समझता हूं, इसका मतलब यह है कि अगर यह जाँच करने के लिए लोड के दौरान विधानसभा हैशेड नहीं है

अंत में , मैं यह उल्लेख करना चाहूंगा कि मजबूत नामकरण के पेशेवरों और विपक्षों के बारे में एक बहस है क्योंकि उन्हें आवश्यकता है कि आप एक विधानसभा संस्करण निर्दिष्ट करें। Microsoft उनके कुछ उत्पादों से मजबूत नाम हटाता है: https://www.pedrolamas.com/2016/03/01/still-strong-naming-your-assemblies-you-do-know-its-2016-right/

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

पुनश्च। बहुत सारे संदर्भों के साथ लंबी पोस्ट के लिए क्षमा करें।

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