2009-02-21 13 views
23

'सार्वजनिक कुंजी टोकन' क्या है और इसकी गणना असेंबली मजबूत नामों में कैसे की जाती है?सार्वजनिक कुंजी टोकन क्या है और इसे असेंबली मजबूत नामों में कैसे गणना की जाती है?

+0

भी देखें http: // stackoverf low.com/q/1321419/284795 –

+0

सार्वजनिक कुंजी एक कुंजी है जो निजी कुंजी से मेल खाती है (जो बदले में असेंबली पर हस्ताक्षर करने के लिए उपयोग की जाती है)। [मजबूत नामांकित असेंबली] पर एक नज़र डालें (https://msdn.microsoft.com/en-us/library/wd40t7ad (v = vs.110) .aspx) – Lu55

उत्तर

16

आपके प्रश्न के संबंध में, "इसकी गणना कैसे की जाती है", यह एक SHA1 हैश है।

dot net blog से:

माइक्रोसॉफ्ट दृढ़ता से नाम विधानसभा की सार्वजनिक कुंजी के हैश का उपयोग करके "सार्वजनिक कुंजी ब्लोट" समस्या का हल। इन हैंश को सार्वजनिक कुंजी टोकन के रूप में जाना जाता है, और के निम्न 8 बाइट्स दृढ़ता से नामित असेंबली की सार्वजनिक कुंजी के SHA1 हैश हैं। SHA1 हैश 160 बिट (20 बाइट) हैश, और शीर्ष हैश के 12 बाइट बस इस एल्गोरिदम में छोड़े गए हैं।

0

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

तो कुंजी के लिए सैकड़ों हेक्स अंकों को सूचीबद्ध करने के बजाय, आपके पास कुछ आसान है, लेकिन अभी भी टकराव के छोटे जोखिम के साथ।

+0

वास्तव में यह कुंजी से हैश है, पूंछ नहीं बाइट्स। और असली चाबियाँ दर्जनों बाइट्स हैं, सैकड़ों नहीं। –

+0

फिक्स्ड हैश (धन्यवाद)। डिफ़ॉल्ट कुंजी 1024 या 512 काटने वाली है, जिसे 256 या 128 हेक्स अंकों की आवश्यकता होगी, जो कि (केवल :-)) सैकड़ों हैं। – Richard

3

एक सार्वजनिक कुंजी टोकन का उपयोग दृढ़ता से नामित असेंबली में संगठन की पहचान के लिए किया जाता है। यह जानकारी असेंबली मेटाबेस में जोड़ दी गई है। मुझे लगता है कि रिचर्ड इसे संग्रहीत तकनीकी तरीके के बारे में सही है।

यदि आप किसी असेंबली के मेटाबेस को देखना चाहते हैं, तो ILDASM का उपयोग करें। आईएल देखने के अलावा मेटाबेस में संग्रहीत किए गए चीज़ों में आप ड्रिल कर सकते हैं।

4

ECMA-335 से:

इस घोषणा नहीं बल्कि पूर्ण सार्वजनिक कुंजी से, विधानसभा संदर्भ में प्रवर्तक की सार्वजनिक कुंजी के SHA-1 हैश की कम 8 बाइट्स स्टोर करने के लिए प्रयोग किया जाता है ।
एक असेंबली संदर्भ या तो पूर्ण सार्वजनिक कुंजी या 8-बाइट "सार्वजनिक कुंजी टोकन" स्टोर कर सकता है। या तो पर उपयोग किया जा सकता है यह सत्यापित करता है कि संकलन समय पर असेंबली पर हस्ताक्षर करने के लिए उपयोग की जाने वाली वही निजी कुंजी भी पर उपयोग की गई असेंबली पर हस्ताक्षर करती है क्रम। न तो उपस्थित होना आवश्यक है, और दोनों को संग्रहीत किया जा सकता है, यह उपयोगी नहीं है।

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

कैसे हैश गणना की जाती है का सवाल है (मुझे लगता है यह हो सकता है के बाद से सार्वजनिक कुंजी टोकन "गणना" नहीं है कि तुम क्या कह रहे हैं), एक ही कल्पना से:

सीएलआई मेटाडाटा एक असेंबली के निर्माता को उस असेंबली के क्रिप्टोग्राफिक हैश की गणना करने की अनुमति देता है ( SHA-1 हैश फ़ंक्शन का उपयोग करके) और उसके बाद आरएसए एल्गोरिदम (विभाजन I देखें) और सार्वजनिक/निजी कुंजी जोड़ी का उपयोग करके इसे एन्क्रिप्ट करने की अनुमति देता है निर्माता के चयन का। इसके परिणाम (एक "SHA-1/RSA डिजिटल हस्ताक्षर") को मेटाडेटा (§25.3.3) में को आरएसए एल्गोरिदम द्वारा आवश्यक कुंजी जोड़ी के सार्वजनिक भाग के साथ संग्रहीत किया जा सकता है। .publickey निर्देश का उपयोग सार्वजनिक कुंजी निर्दिष्ट करने के लिए किया जाता है जिसका उपयोग हस्ताक्षर की गणना करने के लिए किया गया था। हैश की गणना करने के लिए, हस्ताक्षर शून्य हो गया है, हैश की गणना की गई है, और उसके बाद परिणाम हस्ताक्षर में संग्रहीत किया जाता है।

मजबूत नाम (एसएन) हस्ताक्षर प्रक्रिया मजबूत नाम हस्ताक्षर के लिए मानक हैश और साइफर एल्गोरिदम का उपयोग करती है। पीई फ़ाइल में से अधिकांश पर SHA-1 हैश उत्पन्न होता है। उस हैश मान एसएनए निजी कुंजी के साथ आरएसए-हस्ताक्षरित है। सत्यापन उद्देश्यों के लिए सार्वजनिक कुंजी पीई फ़ाइल के साथ-साथ हस्ताक्षरित हैश मान में संग्रहीत की जाती है।
निम्नलिखित के अलावा, पीई फ़ाइल के सभी हिस्सों को धोया गया है: • प्रमाणीकरण हस्ताक्षर प्रविष्टि: पीई फाइलें प्रमाणीकृत हो सकती हैं। प्रामाणिकोड हस्ताक्षर पीई हेडर डेटा निर्देशिका ("§25.2.3.3 में" प्रमाणपत्र तालिका ") और पीई फ़ाइल की सामग्री निर्देशिका प्रविष्टि द्वारा निर्दिष्ट सीमा में 8-बाइट प्रविष्टि में 8-बाइट प्रविष्टि में निहित है। [नोट: एक अनुरूप पीई फ़ाइल में, यह प्रविष्टि शून्य होगी। अंत नोट] • मजबूत नाम ब्लॉब: सीआईएल हेडर के ऑफसेट 32 ("स्ट्रॉन्गनाम सिग्नेचर" §25.3.3 में ऑफसेट 32) और पीई फ़ाइल में इस आरवीए में मौजूद हैश डेटा की सामग्री पर 8-बाइट एंट्री। यदि 8-बाइट प्रविष्टि 0 है, तो कोई मजबूत नाम हस्ताक्षर नहीं है। • पीई हेडर चेकसम: पीई हेडर विंडोज एनटी-विशिष्ट फ़ील्ड्स (§25.2.3.2 में "फाइल चेकसम") के ऑफसेट 64 पर 4-बाइट एंट्री। [नोट: एक अनुरूप पीई फ़ाइल में, यह प्रविष्टि शून्य होगी। अंत टिप्पणी]

आप मुक्त करने के लिए यहाँ कल्पना डाउनलोड कर सकते हैं: http://www.ecma-international.org/publications/standards/Ecma-335.htm

6

आप एक पूर्ण सार्वजनिक कुंजी के आधार पर एक सार्वजनिक कुंजी टोकन उत्पन्न करने के लिए की जरूरत है, इस छोटे से स्थिर विधि काम करता है:

private static byte[] GetKeyTokenFromFullKey(byte[] fullKey) 
    { 
     SHA1CryptoServiceProvider csp = new SHA1CryptoServiceProvider(); 
     byte[] hash = csp.ComputeHash(fullKey); 
     byte[] token = new byte[8]; 
     for (int i = 0; i < 8; i++) 
      token[i] = hash[hash.Length - (i+1)]; 

     return token; 
    } 
10

आप टाइप करके वी.एस. कमांड लाइन से PublicKeyToken प्राप्त कर सकते हैं:

sn –T DLLName.dll 
+1

+1, (नया?) वाक्यविन्यास 'sn -q -T DLLName.dll' है। –

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