2011-08-26 14 views
7

मैंने देखा है कि कोर .NET असेंबली में PublicKey = 00000000000000000400000000000000 है। न केवल यह छोटा है जब sn.exe उत्पन्न करने की अनुमति देता है (न्यूनतम 384 बिट्स) लेकिन इसमें बहुत सारे शून्य हैं ।.NET कोर असेंबली में काफी विशेष पब्लिककी

ऐसी फैंसी सार्वजनिक कुंजी के साथ साइनिंग कुंजी कैसे उत्पन्न करें?

+0

क्या आपने विंडोज एसडीके से 'sn.exe' हस्ताक्षर उपकरण के दस्तावेज़ीकरण को देखा है? –

+0

@dario_ramos: हाँ, मैंने किया। –

+1

आप अपनी सार्वजनिक कुंजी कुछ विशिष्ट होना चाहते हैं, या बस बहुत सारे शून्य हैं? क्या मैं पूछ सकता हूं क्यों? –

उत्तर

5

यह ईसीएमए मानक परिभाषित सार्वजनिक कुंजी है।

यह तीन परस्पर विरोधी आवश्यकताओं से निपटने के लिए है:

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

ये तीन चीजें एक ही समय में नहीं हो सकती हैं!

यदि मैं .NET (बिंदु 2) का संस्करण बनाता हूं, तो मुझे मानक लाइब्रेरी (बिंदु 3) का एक संस्करण प्रदान करने की आवश्यकता है, जिसे विश्वसनीय (बिंदु 1) होना चाहिए, इसलिए मुझे इसे साइन इन करने की आवश्यकता है साबित करें कि मैं माइक्रोसॉफ्ट हूं। ओह रुको, मैं माइक्रोसॉफ्ट नहीं हूँ! (एह, फिर से बिंदु 2)।

इसके बजाय क्या होता है:

  1. मैं एक सार्वजनिक-निजी कुंजी युग्म पैदा करते हैं। लोगों ने मेरे ढांचे पुस्तकालय कार्यान्वयन में असेंबली के नए रिलीज संस्करणों का निर्माण करने पर भरोसा किया है, निजी कुंजी तक पहुंच है, सार्वजनिक कुंजी को सीएलआई कार्यान्वयन पर किसी भी काम करने के लिए जाना जा सकता है।

  2. मैं प्रासंगिक असेंबली को सार्वजनिक कुंजी 00000000000000000400000000000000 (ईसीएमए मानक में परिभाषित) से संबंधित कुंजी के साथ हस्ताक्षरित होने के रूप में चिह्नित करता हूं, हालांकि वास्तव में ऊपर वर्णित निजी कुंजी के साथ हस्ताक्षर किए गए थे।

  3. सीएलआई में कोड में सार्वजनिक केबल 00000000000000000400000000000000 से संबंधित कुंजी के साथ हस्ताक्षरित होने का दावा करने वाली किसी असेंबली पर किसी भी चेक को वास्तविक सार्वजनिक कुंजी के साथ चेक किया गया है। यदि यह जांचता है, तो यह केवल उन लोगों द्वारा हस्ताक्षरित किया जा सकता है जिन्हें हम उन असेंबली बनाने में भरोसा करते हैं।

बेशक

, एमएस के ढांचे हमारे विधानसभाओं विश्वास नहीं करेंगे, मोनो के उन पर भरोसा नहीं होगा, और हम उनकी या तो विश्वास नहीं करेंगे, क्योंकि हम सभी अलग वास्तविक ECMA मानक कुंजी करने के लिए इसी कुंजी है। कौन है जिसे ऐसा होना ही चाहिए।

इस बीच, तथ्य यह है कि 00000000000000000400000000000000 किसी भी वास्तविक वैध सार्वजनिक कुंजी से मेल नहीं खाता है, इसका अर्थ यह है कि किसी भी अन्य सार्वजनिक कुंजी के साथ संघर्ष करना संभव नहीं है।

+0

+ जॉन हन्ना, विस्तृत स्पष्टीकरण के लिए धन्यवाद! मुझे संदेह था कि कुंजी किसी भी तरह विशेष है, और अब मैं देखता हूं कि कैसे। –

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