क्या है?


153

के लिए एक .snk फ़ाइल क्या है? मुझे पता है कि यह मजबूत रूप से नामांकित कुंजी के लिए खड़ा है , लेकिन यह क्या है और यह कैसे काम करता है के सभी स्पष्टीकरण मेरे सिर पर चला जाता है।

क्या इस बात पर कोई सरल व्याख्या है कि एक दृढ़ता से नामित कुंजी का उपयोग कैसे किया जाता है और यह कैसे काम करता है?

जवाबों:


212

.NET असेंबली में एक मजबूत नाम लागू करने के लिए .snk फ़ाइल का उपयोग किया जाता है । इस तरह के एक मजबूत नाम के होते हैं

एक साधारण पाठ का नाम, संस्करण संख्या और संस्कृति की जानकारी (यदि प्रदान की गई है) - एक सार्वजनिक कुंजी और एक डिजिटल हस्ताक्षर भी।

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

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

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

लेख " द स्ट्रॉन्ग ऑफ स्ट्रांग नेमिंग (वेकबैक मशीन पर संग्रहीत) "। इन अवधारणाओं को और अधिक विस्तार से समझाने का एक उत्कृष्ट काम करता है। चित्रों के साथ।


2
क्या इसका मतलब यह है कि जब आप किसी .PFX के साथ असेंबली साइन करते हैं, तो यह वास्तव में इसका उपयोग करता है। जब भी यह संकलन होता है तो फ्लाई पर .SNK उत्पन्न करता है?
पैट्रिक

5
@ पैट्रिक नं, वह ऑथेंटिकोड सिग्नेचर है , जो यह भी साबित करता है कि फाइल को साइनिंग और चेक के बीच संशोधित नहीं किया गया था, यह मजबूत नाम आवश्यकताओं को पूरा नहीं करता है। समस्या यह है कि ऑथेंटिकोड को असेंबली के विश्वास की एक श्रृंखला की आवश्यकता नहीं है जो मजबूत नामकरण की आवश्यकता होती है ताकि आप असेंबली को असेंबली पर हस्ताक्षर कर सकें जो गैर-मजबूत नाम / हस्ताक्षरित असेंबली पर निर्भर करता है।
स्कॉट चैंबरलेन

1
आप बस सांप को उतार सकते हैं और इसे दूसरे के साथ बदल सकते हैं .. मैं एक वास्तविक परिदृश्य को नहीं जानता जहां यह उपयोगी है .. यह मूल रूप से हमारे प्रमुख जोड़े हैं जो आप उस पर एक विश्वास नहीं बना सकते हैं
इब्राहिम

8
WayBackMachine कड़ी नाम के राज के
asfeynman

कृपया उत्तर में लिंक को अपडेट करें (@asfeynman द्वारा सुझाए गए एक पर), क्योंकि लिंक मृत है, और हर कोई टिप्पणियों को नहीं पढ़ता है।
ज़ेला

22

In.Net दुनिया में SNK फ़ाइल का उपयोग आपके संकलित बायनेरिज़ पर हस्ताक्षर करने के लिए किया जाता है। यह कुछ चीजों को होने देता है:

  1. आप GAC (ग्लोबल असेंबली कैश) में असेंबली पंजीकृत कर सकते हैं । मूल रूप से इसलिए आप इसे कई स्थानों से एक ही मशीन पर कई प्रतियों को बनाए रखने के लिए संदर्भित कर सकते हैं)।
  2. आप अपने बायनेरिज़ को अन्य बायनेरिज़ के भीतर से भी साइन इन कर सकते हैं (यह हस्ताक्षरित असेंबली के संबंध में एक अजीब वायरल प्रकार है)।
  3. आपकी असेंबली 3 पार्टियों द्वारा आसानी से संशोधित नहीं की जा सकती है, जिनके पास एसएनके फ़ाइल तक पहुंच नहीं है, कम से कम सुरक्षा प्रदान करते हैं।

मुझे पता नहीं है कि बिज़टॉक सर्वर कैसे काम करता है, इसलिए मुझे नहीं लगता कि मैं उस वातावरण के भीतर कौन से विशिष्ट उद्देश्य पर काम कर सकता हूं।

आशा है कि यह कुछ हद तक मददगार था।


7

वैश्विक असेंबली कैश (GAC) में उन्हें जोड़ने के लिए असेंबली पर हस्ताक्षर करने के लिए .snk फ़ाइल का उपयोग किया जाता है।

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

आप सार्वजनिक कुंजी क्रिप्टोग्राफी के बारे में http://en.wikipedia.org/wiki/Public-key_cryptography पर अधिक पढ़ सकते हैं ।


4

.Snk फ़ाइल आपके "की" का एक स्थायी संस्करण है, जो कि फ्रेमवर्क यूटिलिटी सेट में स्ने उपयोगिता द्वारा निर्मित है। फिर आप इस फाइल का उपयोग अपनी असेंबली को 'डिजिटली साइन' करने के लिए करते हैं। यह एक 2-भाग कुंजी है .. निजी-सार्वजनिक कुंजी संयोजन। कुंजी का सार्वजनिक भाग प्रकाशित होता है अर्थात सभी के लिए जाना जाता है। निजी भाग केवल आप के लिए जाना जाता है, घटक / एप्लिकेशन डेवलपर और उस तरह से रखा जाना है।

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


3

एक .snk फ़ाइल का उपयोग यह सुनिश्चित करने के लिए किया जाता है कि कोई दूसरा आपकी जगह खुद की असेंबली को नहीं गिरा सकता है। यह एन्क्रिप्शन / डिक्रिप्शन कुंजी की एक जोड़ी प्रदान करता है।

जब असेंबली साइन करने के लिए .snk फ़ाइल का उपयोग किया जाता है, तो हैशकोड मान को असेंबली फ़ाइल से गणना की जाती है और निजी कुंजी का उपयोग करके एन्क्रिप्ट किया जाता है। उस एन्क्रिप्टेड "डाइजेस्ट" को फिर एसएनएस फाइल से पब्लिक की के साथ एक साथ असेंबली में निपटाया जाता है।

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

BizTalk Server के संदर्भ में, जो भी आपके BizTalk समाधान द्वारा उपयोग की जाने वाली किसी भी कस्टम असेंबली का निर्माण करता है, उसे असेंबली साइन करने के लिए एक .snk फ़ाइल का उपयोग करना होगा ताकि BizTalk सर्वर उसे GAC में लोड कर सके और उसका उपयोग कर सके।

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