2009-04-18 12 views
37

मैंने कुछ समय के लिए सोचा है कि कुछ सॉफ़्टवेयर गुप्त कुंजी को इस तरह से छुपाते हैं कि उन्हें आसानी से खोजा नहीं जा सकता है। केवल कुछ उदाहरण:आप कोड में गुप्त कुंजी कैसे छिपाते हैं?

  • डीवीडी प्लेयर सॉफ्टवेयर खाल सीएसएस कुंजियों
  • सीरियल नंबर/पंजीकरण कोड के साथ
  • सॉफ्टवेयर छुपाता सीरियल नंबर मान्य करने के लिए इस्तेमाल किया कुंजी/हैश

जाहिर है, इन कार्यक्रमों कुछ अधिक करना केवल बाइट [] में कुंजी होने की तुलना में, क्योंकि इससे उनकी चाबियाँ चुरा लेना आसान हो जाएगा और आपके स्वयं के सीरियल नंबर आदि उत्पन्न होंगे।

इन चाबियों को छिपाने के लिए किस तरह की रणनीतियों का उपयोग किया जाता है ताकि वे नहीं कर सकें आसानी से मिल सकता है?

+2

लेकिन उदाहरण के लिए एडोब फ़ोटोशॉप के साथ ऐसा कैसे करता है? – Jeena

+17

एक शब्द: असफल। – dmckee

उत्तर

35

उन गुप्त कुंजीों को इतनी आसानी से खोजे जाने के कारण यह है कि वे सॉफ़्टवेयर में छिपाए गए थे।

सॉफ़्टवेयर में सभी कीमतों पर छिपाने से बचें - obfuscation केवल आपको अभी तक प्राप्त करेगा। अपने आप से यह पूछें: मैं किसी ऐसे व्यक्ति से सॉफ़्टवेयर में कुंजी कैसे छिपा सकता हूं, जिसमें डिस्सेप्लर, उपयोगकर्ता मोड और कर्नेल मोड डिबगर्स तक पूर्ण पहुंच है, और कोई दिन का काम नहीं है? क्रैक होने से पहले यह केवल समय की बात है।

+22

क्या यह सवाल का उत्तर देता है? –

+1

जैसा कि आपने कहा था, "यह केवल क्रैक होने से पहले ही समय की बात है"। तो यही कारण है कि यह रणनीतियों का अनुकूलन हो सकता है क्योंकि यह कुंजी हार्डवेयर संरक्षित कुंजी जितनी जल्दी समाप्त हो जाएगी। – kdmin

1

आपको लाइसेंस को प्रमाणित करने के लिए हमेशा एक कुंजी की आवश्यकता नहीं है।

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

+7

समय की बर्बादी। कोई भी क्रैकर सीधे फ़ंक्शन का परिणाम सीधे मेमोरी से बाहर ले जाएगा (या शायद पूरे फ़ंक्शन को अपने कीजेन में कॉपी करें)।यह होमवर्क असाइनमेंट नहीं है; उसे सिर्फ अपना जवाब दिखाने के बिना सही जवाब प्राप्त करना है, – Mikeage

0

कोड में गुप्त कुंजी छुपाएं वास्तव में सुरक्षित नहीं होने वाला है। जैसा कि आपने डीवीडी देखा होगा और अधिकांश सॉफ्टवेयर सीरियल नंबर पंजीकरण दैनिक आधार पर हैक हो जाते हैं। यदि आप वास्तव में कुछ सुरक्षित करना चाहते हैं तो आपको सार्वजनिक कुंजी एन्क्रिप्शन का उपयोग करने की आवश्यकता है।

+3

सार्वजनिक कुंजी एन्क्रिप्शन कोई समाधान नहीं है। जैसे ही निजी कुंजी की गोपनीयता को सुरक्षित किया जाना चाहिए, सार्वजनिक कुंजी की अखंडता को सुरक्षा की आवश्यकता होती है। सामान्य तंत्र भौतिक छेड़छाड़ countermeasures, या एक पासवर्ड आधारित गुप्त कुंजी के साथ हार्डवेयर हैं। – erickson

2

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

नीचे की रेखा है, अगर कोई आपके सॉफ़्टवेयर को क्रैक करना चाहता है, तो वह वैसे भी करेगा। क्या यह वास्तव में इस छिपे हुए गुप्त कुंजी से बचाने के लिए अपना समय बर्बाद करने के लायक है?

+1

आपका सॉफ्टवेयर क्या है? – shoosh

+8

आपके व्यवसाय की पूरी प्रक्रिया काफी पीछे और विज्ञापन-प्रतीत होती है। – Hejazzman

5

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

+0

यदि आम तौर पर ऐसा करने के लिए निर्धारित किया जाता है तो लोगों को छिपे हुए कुंजियों को ढूंढना मुश्किल नहीं होता है। –

-2

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

6

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

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

यदि आप प्रमाणीकृत करने का प्रयास कर रहे हैं, तो इसके बजाय, सर्वर पर लॉग इन के साथ इंटरनेट आधारित प्रमाणीकरण देखें, या सॉफ़्टवेयर को सत्यापित करने के लिए उपयोग की जाने वाली किसी प्रकार की जेनरेट कीकोड।

सार्वजनिक-निजी कीपैयर के हिस्से के रूप में गुप्त कुंजी डेटा फ़ाइलों में रखी जानी चाहिए जिन्हें सुरक्षित किया जा सकता है। सत्र कुंजी के रूप में फ्लाई पर सममित कुंजी उत्पन्न की जानी चाहिए, फिर त्याग दिया जाना चाहिए। हमेशा यह मान लें कि जिनके पास अपने कंप्यूटर पर गुप्त या सत्र कुंजी है, वे इसे खोज सकेंगे, और अपने इरादों के खिलाफ इसका इस्तेमाल कर सकेंगे।

ब्रूस श्नीयर द्वारा अधिक जानकारी के लिए "Applied Cryptography" पढ़ें।

+1

कथन "पीजीपी/जीपीजी जैसे एन्क्रिप्शन सॉफ्टवेयर भी फाइल में चाबियाँ स्टोर करता है" भ्रामक है। पीजीपी केवल उन उपयोगकर्ताओं को ज्ञात पासफ्रेज़ का उपयोग करके उन चाबियों को एन्क्रिप्ट करता है। पीजीपी कुंजी के लिए सुरक्षित मेमोरी का भी उपयोग करता है यह सुनिश्चित करता है कि उन्हें कभी भी एचडी में कैश नहीं किया जाता है और पीजीपी मेमोरी निरीक्षण का उपयोग करके कुंजी खोजने में मुश्किल होती है। अगर मैं इस जवाब को संशोधित कर सकता हूं तो मैं चाहता हूं। – MrEvil

+0

मेरा मुद्दा यह था कि स्रोत कोड में कोई गुप्त डेटा संग्रहीत नहीं है। यह उपयोगकर्ता की अपनी गुप्त कुंजी सुरक्षित करने के लिए है। गुप्त कुंजी पर पासफ्रेज के साथ भी, एक बार दुर्भावनापूर्ण पार्टी के पास गुप्त कुंजी फ़ाइल तक पहुंच होती है, यह गेम खत्म हो जाता है। किसी भी व्यक्ति के लिए कहीं भी पहुंचने योग्य गुप्त कुंजी संग्रहीत करना, लेकिन एक विश्वसनीय पार्टी के परिणामस्वरूप दर्द हो सकता है, चाहे वह exe, RAM, या फ़ाइल हो। –

12

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

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

चूंकि अधिकांश लोग यहां इंगित करते हैं कि आप किसी को भी रोक नहीं सकते हैं, बस उन्हें धीमा कर दें। मैं एक क्रैकर मंच पर जाऊंगा और कुंजी छिपाने की समस्याग्रस्तताओं के बारे में सुझावों के लिए वहां से पूछूंगा। यदि आप अच्छी तरह से पूछते हैं तो वे सबसे अधिक सहायक होते हैं।

ps। सार्वजनिक कुंजी क्रिप्टो कुंजी को किसी भी बेहतर तरीके से छिपाएगा, लेकिन यदि आप एक लाइसेंसिंग योजना कर रहे हैं, तो यह एक प्रमुख जनरेटर बनाने के लिए कठिन (या सैद्धांतिक रूप से असंभव) बना सकता है।

1

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

+0

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

+0

क्रैक किए गए सॉफ़्टवेयर का उपयोग करने के लिए उपयोगकर्ताओं को ग़लत करने का सबसे अच्छा तरीका, एक क्रैक जारी करने वाला पहला व्यक्ति है, और उस पर बहुत सारे वायरस डालने वाला है। ऐसा करने से आप किसी को भी क्रैक कर सकते हैं जो आपको क्रैक कर सकता है ---> वह उपयोगकर्ता जो आपके सॉफ़्टवेयर का उपयोग करना चाहता है। एक किफायती मूल्य निर्धारण योजना बनाएं और आप छिपाने वाली कुंजी से अधिक सफलता प्राप्त करेंगे। – erm3nda

0

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

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

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