कोड साइनिंग

From Vigyanwiki
Revision as of 20:51, 23 November 2023 by alpha>Mithlesh

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

कोड साइनिंग कई वैल्युएबल फीचर प्रदान कर सकते हैं। कोड साइनिंग का सबसे सरल उपयोग डेप्लॉयिंग के समय सिक्योरिटी प्रदान करना है; कुछ प्रोग्रामिंग लैंग्वेज में, इसका उपयोग नेमस्पेस कन्फ्लिक्ट्स को प्रिवेंट में सहायता के लिए भी किया जा सकता है। लगभग सभी कोड साइनिंग इम्प्लीमेंटेशन ऑथर या बिल्ड सिस्टम की आइडेंटिटी को वेरीफाई करने के लिए कुछ प्रकार के डिजिटल साइनिंग मैकेनिज्म प्रदान करेगा, और यह वेरीफाई करने के लिए चेकसम प्रदान करेगा कि ऑब्जेक्ट को मॉडिफाई नहीं किया गया है। इसका उपयोग किसी ऑब्जेक्ट के बारे में वर्जनिंग इनफार्मेशन प्रदान करने या किसी ऑब्जेक्ट के बारे में अन्य मेटाडाटा स्टोर करने के लिए भी किया जा सकता है।[3]

सॉफ़्टवेयर के लिए ऑथेंटिकेशन मैकेनिज्म के रूप में कोड साइनिंग की एफ्फिकसी अंडरपिंनिंग साइनिंग की सिक्योरिटी पर निर्भर करती है। अन्य पब्लिक की इन्फ्रास्ट्रक्चर (पीकेआई) टेक्नोलॉजीज के जैसे, सिस्टम की इंटीग्रिटी अनऑथॉरिज़ेड एक्सेस के अगेंस्ट अपनी प्राइवेट की सेकुरिंग करने वाले पब्लिशर्स पर निर्भर करती है। जनरल पर्पस के कंप्यूटरों पर सॉफ़्टवेयर में स्टोर कीस कोम्प्रोमाईज़ करने के लिए ससटेबल होती हैं। इसलिए, कीस को हार्डवेयर सिक्योरिटी मॉड्यूल या एचएसएम के रूप में जाने वाले सिक्योर, टेमपर-प्रूफ, क्रिप्टोग्राफ़िक हार्डवेयर डिवाइस में स्टोर करना अधिक सिक्योर और बेस्ट प्रैक्टिस है।[4]

सिक्योरिटी प्रदान करना

कई कोड साइनिंग इम्प्लीमेंटेशन टीएलएस या एसएसएच द्वारा एम्प्लॉयड प्रोसेस के समान, की पेयर, पब्लिक और प्राइवेट को सम्मिलित करते वाले सिस्टम का उपयोग करके कोड पर साइनिंग करने का मेथड प्रदान करेंगे। उदाहरण के लिए, .NET के केस में, डेवलपर बिल्ड करते समय अपनी लाइब्रेरी या एक्सेक्यूटेबल्स पर साइनिंग करने के लिए प्राइवेट की का उपयोग करता है। यह की किसी डेवलपर या ग्रुप या कभी-कभी पर एप्लिकेशन या ऑब्जेक्ट के लिए यूनिक होगी। डेवलपर या तो यह की स्वयं उत्पन्न कर सकता है या किसी ट्रस्टड सर्टिफिकेट अथॉरिटी (सीए) से प्राप्त कर सकता है।[5]

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

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

सर्टिफिकेट आइडेंटिफिकेशन (सीए) का उपयोग करके ट्रस्टड आइडेंटिफिकेशन

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

एक्सटेंडेड वेलिडेशन (ईवी) कोड पर साइनिंग

एक्सटेंडेड वेलिडेशन (ईवी) कोड साइनिंग सर्टिफिकेट्स अतिरिक्त वेलिडेशन और टेक्निकल आवश्यकताओं के अधीन हैं। ये दिशानिर्देश सीए/बी फोरम की बेसलाइन आवश्यकताओं और एक्सटेंडेड वेलिडेशन गाइडलाइन्स पर आधारित हैं। ईवी के लिए स्पेसिफिक वेलिडेशन आवश्यकताओं के अतिरिक्त, ईवी कोड साइनिंग दिशानिर्देश यह निर्धारित करते हैं कि सब्सक्राइबर की प्राइवेट की क्रिप्टो मॉड्यूल में उत्पन्न, स्टोर और उपयोग की जाती है जो एफआईपीएस 140-2 लेवल 2 की आवश्यकताओं को पूर्ण करती है या उससे अधिक है।[9]

कुछ एप्लिकेशन, जैसे कि विंडोज 10 कर्नेल-मोड ड्राइवरों पर साइनिंग करने के लिए ईवी कोड साइनिंग सर्टिफिकेट की आवश्यकता होती है।[10] इसके अतिरिक्त, माइक्रोसॉफ्ट के आईईब्लॉग में कहा गया है कि ईवी कोड साइनिंग सर्टिफिकेट द्वारा साइनिंग इम्मेडिएटली रेपुटेशन स्थापित कर सकते हैं, भले ही उस फ़ाइल या पब्लिशर के लिए कोई पूर्व रेपुटेशन उपस्तिथ न हो।".[11]

सैंपल ईवी कोड साइनिंग सर्टिफिकेट

यह सॉफ्टवेयर पर साइनिंग करने के लिए SSL.com द्वारा उपयोग किए जाने वाले डिकोडेड ईवी कोड साइनिंग सर्टिफिकेट का उदाहरण है। SSL.com EV Code Signing Intermediate CA RSA R3 को इसे इस्सुएर के कॉमन नाम के रूप में दिखाया गया है, जो इसे ईवी कोड साइनिंग सर्टिफिकेट के रूप में इडेन्टिफ्यिंग है। सर्टिफिकेट का Subject फ़ील्ड एसएसएल कॉर्प को आर्गेनाइजेशन के रूप में वर्णित करता है। Code Signing एकमात्र X509v3 एक्सटेंडेड की उपयोग के रूप में दिखाया गया है।

   Certificate:
      Data: 3 (0x2)
      Serial Number:
           59:4e:2d:88:5a:2c:b0:1a:5e:d6:4c:7b:df:35:59:7d
   Signature Algorithm: sha256WithRSAEncryption
       Issuer:
           commonName           = SSL.com EV Code Signing Intermediate CA RSA R3
           organizationName     = SSL Corp
           localityName         = Houston
           stateOrProvinceName  = Texas
           countryName          = US
       Validity
           Not Before: Aug 30 20:29:13 2019 GMT
           Not After : 12 Nov 12 20:29:13 2022 GMT
       Subject:
           1.3.6.1.4.1.311.60.2.1.3 = US
           1.3.6.1.4.1.311.60.2.1.2 = Nevada
           सड़क का पता = 3100 रिचमंड एवेन्यू स्टी 503
           व्यवसायश्रेणी = प्राइवेट आर्गेनाइजेशन
           पोस्टलकोड = 77098
           सामान्य नाम = एसएसएल कॉर्प
           क्रम संख्या = एनवी20081614243
           आर्गेनाइजेशन का नाम = एसएसएल कॉर्प
           इलाके का नाम = ह्यूस्टन
           stateOrProvinceName = टेक्सास
           देश का नाम = यूएस
       विषय पब्लिक की जानकारी:
           पब्लिक की एल्गोरिथम: rsaएन्क्रिप्शन
               पब्लिक की: (2048 बिट)
               मापांक:
                   00:c3:e9:ae:be:d7:a2:6f:2f:24...
               प्रतिपादक: 65537 (0x10001)
       X509v3 एक्सटेंशन:
           X509v3 प्राधिकरण की पहचानकर्ता:
               keyid:36:BD:49:FF:31:2C:EB:AF:6A:40:FE:99:C0:16:ED:BA:FC:48:DD:5F
               
           प्राधिकरण सूचना एक्सेस:
               सीए जारीकर्ता - यूआरआई:http://www.ssl.com/repository/SSLcom-SubCA-EV-CodeSigning-RSA-4096-R3.crt
               ओसीएसपी - यूआरआई:http://ocsps.ssl.com
               
           X509v3 सर्टिफिकेट नीतियाँ:
               नीति: 2.23.140.1.3
               नीति: 1.2.616.1.113527.2.5.1.7
               नीति: 1.3.6.1.4.1.38064.1.3.3.2
                 सीपीएस: https://www.ssl.com/repository
                 
           X509v3 विस्तारित की उपयोग:
               कोड पर साइनिंग
           X509v3 CRL वितरण बिंदु:
           
               पूर्ण नाम:
                 यूआरआई:http://crls.ssl.com/SSLcom-SubCA-EV-CodeSigning-RSA-4096-R3.crl
                 
           X509v3 विषय की पहचानकर्ता:
               EC:6A:64:06:26:A7:7A:69:E8:CC:06:D5:6F:FA:E1:C2:9A:29:79:DE
           X509v3 की उपयोग: महत्वपूर्ण
               अंगुली का साइनिंग
   साइनिंग एल्गोरिथ्म: sha256WithRSAएन्क्रिप्शन
        17:d7:a1:26:58:31:14:2बी:9एफ:3बी...

</पूर्व>

सीए का विकल्प

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

समय-स्टैम्पिंग

टाइम-स्टैम्पिंग को विश्वास चेतावनी से बचने के लिए डिज़ाइन किया गया था जो कि समाप्त सर्टिफिकेट के मामले में दिखाई देगी। वास्तव में, टाइम-स्टैम्पिंग किसी सर्टिफिकेट की वैधता अवधि से परे कोड ट्रस्ट को बढ़ाती है।[12] ऐसी स्थिति में जब किसी समझौते के कारण सर्टिफिकेट को रद्द करना पड़ता है, तो समझौते की घटना की एक विशिष्ट तिथि और समय रद्दीकरण रिकॉर्ड का हिस्सा बन जाएगा। इस मामले में, टाइम-स्टैम्पिंग यह स्थापित करने में सहायता करती है कि कोड पर साइनिंग सर्टिफिकेट से समझौता होने से पहले या पश्चात में किया गया था।[12]

Xcode में कोड साइनिंग

डेवलपर्स को किसी भी वास्तविक डिवाइस पर चलाने से पहले और ऐप स्टोर (आईओएस) पर अपलोड करने से पहले अपने आईओएस और टीवीओएस ऐप पर साइनिंग करने की आवश्यकता होती है। यह साबित करने के लिए आवश्यक है कि डेवलपर के पास वैध Apple डेवलपर आईडी है। किसी एप्लिकेशन को एक वैध प्रोफ़ाइल या सर्टिफिकेट की आवश्यकता होती है जिससे वह डिवाइस पर चल सके।

समस्याएँ

किसी भी सिक्योरिटी उपाय की तरह, कोड साइनिंग को पराजित किया जा सकता है। यूजरओं को बिना साइनिंगित कोड चलाने, या यहां तक ​​कि ऐसे कोड चलाने के लिए भी धोखा दिया जा सकता है जो सत्यापन करने से इंकार कर देता है, और सिस्टम केवल तब तक सुरक्षित रहता है जब तक प्राइवेट की प्राइवेट रहती है।[13][14] यह ध्यान रखना भी महत्वपूर्ण है कि कोड साइनिंग अंतिम यूजर को सॉफ़्टवेयर स्क्रिप्ट द्वारा किसी भी दुर्भावनापूर्ण गतिविधि या अनजाने सॉफ़्टवेयर बग से नहीं बचाता है - यह केवल यह सुनिश्चित करता है कि सॉफ़्टवेयर को स्क्रिप्ट के अलावा किसी अन्य द्वारा मॉडिफाई नहीं किया गया है। कभी-कभी, गलत टाइम-स्टैम्प के कारण या रैंडम एक्सेस मेमोरी के अधिक उपयोग के कारण, सैंडबॉक्स सिस्टम सर्टिफिकेट स्वीकार नहीं करते हैं।

इम्प्लीमेंटेशन

Microsoft परीक्षण किए गए ड्राइवरों के लिए प्रदान किए गए कोड साइनिंग का एक रूप (ऑथेंटिकोड पर आधारित) प्रारम्भ करता है। चूंकि ड्राइवर कर्नेल में चलते हैं, वे सिस्टम को अस्थिर कर सकते हैं या सिस्टम में सिक्योरिटी छेद खोल सकते हैं। इस कारण से, Microsoft अपने WHQL परीक्षण के लिए सबमिट किए गए ड्राइवरों का परीक्षण करता है। ड्राइवर के गुजर जाने के पश्चात, Microsoft ड्राइवर के उस संस्करण को सुरक्षित मानता है। केवल 32-बिट सिस्टम पर, माइक्रोसॉफ्ट के साथ मान्य नहीं किए गए ड्राइवरों को इंस्टॉल करना यूजर को चेतावनी देते हुए इंस्टॉलेशन की अनुमति देने के पश्चात संभव है कि कोड असाइनिंगित है। .NET (प्रबंधित) कोड के लिए, मजबूत की नामक एक अतिरिक्त मैकेनिज्म है जो सर्टिफिकेटों के विपरीत पब्लिक/प्राइवेट की और SHA-1-1 हैश का उपयोग करता है। हालाँकि, Microsoft ऑथेंटिकोड के प्रतिस्थापन के रूप में स्ट्रॉन्ग नेम साइनिंग पर निर्भरता को हतोत्साहित करता है।[15]

गेमिंग और उपभोक्ता उपकरणों में असाइनिंगित कोड

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

यह शुरू में स्पष्ट नहीं लग सकता है कि किसी साइनिंगित एप्लिकेशन को किसी अन्य डीवीडी पर कॉपी करने से उसे बूट होने की अनुमति क्यों नहीं मिलती है। Xbox (कंसोल) पर, इसका कारण यह है कि Xbox निष्पादन योग्य फ़ाइल (XBE) में एक मीडिया-प्रकार ध्वज होता है, जो मीडिया के प्रकार को निर्दिष्ट करता है जिससे XBE बूट किया जा सकता है। लगभग सभी Xbox सॉफ़्टवेयर पर, इसे ऐसे सेट किया गया है कि निष्पादन योग्य केवल फ़ैक्टरी-निर्मित डिस्क से बूट होगा, इसलिए निष्पादन योग्य को बर्न करने योग्य मीडिया में कॉपी करना ही सॉफ़्टवेयर के निष्पादन को रोकने के लिए पर्याप्त है।

हालाँकि, चूँकि निष्पादन योग्य साइनिंगित है, केवल ध्वज का मान बदलना संभव नहीं है क्योंकि यह निष्पादन योग्य के साइनिंग को बदल देता है, जिससे जाँच करने पर सत्यापन विफल हो जाता है।

यह भी देखें

संदर्भ

  1. "Introduction to Code Signing".
  2. "WebWish: Our Wish is Your Command".
  3. Hendric, William (2015). "विश्वसनीय प्रमाणपत्रों का संपूर्ण अवलोकन - CABForum" (PDF). Retrieved 2015-02-26.
  4. "Securing your Private Keys as Best Practice for Code Signing Certificates" (PDF).
  5. Hendric, William (17 June 2011). "What is Code Signing?". Retrieved 26 February 2015.
  6. "Digital Signatures and Windows Installer".
  7. "SecureApt - Debian Wiki".
  8. https://casecurity.org/wp-content/uploads/2013/10/CASC-Code-Signing.pdf[bare URL PDF]
  9. "विस्तारित सत्यापन कोड हस्ताक्षर प्रमाण पत्र जारी करने और प्रबंधन के लिए दिशानिर्देश" (PDF). CA/Browser Forum. Retrieved 4 December 2019.
  10. "ड्राइवर हस्ताक्षर नीति". Microsoft. Retrieved 9 December 2019.
  11. "माइक्रोसॉफ्ट स्मार्टस्क्रीन और विस्तारित सत्यापन (ईवी) कोड हस्ताक्षर प्रमाणपत्र". Microsoft. Retrieved 9 December 2019.
  12. 12.0 12.1 Morton, Bruce. "कोड पर हस्ताक्षर" (PDF). CASC. Retrieved 21 February 2014.
  13. "नकली एंटीवायरस समाधान तेजी से कोड-हस्ताक्षर प्रमाणपत्र चुरा रहे हैं". 9 January 2014.
  14. http://www.eweek.com/c/a/Security/Theres-A-Racket-Brewing-In-the-Code-Signing-Cert-Business/[dead link]
  15. Strong Name Bypass: .NET Security Blog