2010-03-27 17 views
10

में एन्क्रिप्शन कुंजी को सुरक्षित रूप से स्टोर करने के लिए कैसे करें किसी को आसानी से मेरे डेटा को पकड़ने से रोकने के लिए, मैं अपनी सेवा से डेटा एन्क्रिप्टेड फ़ाइलों (प्रतिलिपि सुरक्षा, मूल रूप से) के रूप में कैश करता हूं।किसी .NET असेंबली

हालांकि, ऐसा करने के लिए, मुझे एनईटी असेंबली के भीतर एन्क्रिप्शन कुंजी को स्टोर करना होगा ताकि यह इन फ़ाइलों को एन्क्रिप्ट और डिक्रिप्ट कर सके।

रेड गेट के .NET रिफ्लेक्टर जैसे टूल्स के बारे में जागरूक होने से मेरा मुख्य अधिकार बाहर निकल सकता है, मुझे लगता है कि यह करने का यह एक बहुत ही सुरक्षित तरीका नहीं है ... क्या ऐसा करने के लिए कोई सर्वोत्तम अभ्यास है?

उत्तर

11

आपको यह तय करना होगा कि जोखिम का स्वीकार्य स्तर क्या है। ऐसा करने का कोई "सुरक्षित" तरीका नहीं है।

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

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

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

+0

+1 जो कि व्यर्थता और हैकर की लागत को इंगित करने के लिए +1 है, लेकिन उसे प्रभाव को कम करने का प्रयास करना चाहिए (मेरा मतलब यह जानने के प्रयास के लिए मेरा उत्तर देखें) – lexu

+0

हाँ, आपकी पोस्ट पढ़ने के बाद, और देने यह कुछ सोचा, मुझे लगा कि यह सब लागत/जोखिम मूल्यांकन के लिए नीचे आता है। मैं एक ऐसी योजना के साथ आया जो शायद अधिकांश लोगों को कोशिश करने से हतोत्साहित करता है, कंप्यूटर समझदार उपयोगकर्ताओं के शीर्ष 5-10% को बचाता है, जो एक "स्वीकार्य" जोखिम है। – Alex

+0

मुझे खुशी है। आपने शायद सही निर्णय लिया है और यदि नहीं, तो आप इसे हमेशा बदल सकते हैं। ;) –

0

आप decription नहीं रोका जा सकता है, लेकिन आप ग़लत साबित डेटा की फिर से एन्क्रिप्शन रोका जा सकता है:

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

आपके मामले में समस्या इतनी अधिक नहीं है कि एक हैकर आपके कोड को विघटित कर सकता है, लेकिन यह भी अधिक है कि वे उस डेटा को बदल सकते हैं जिसे आप सुरक्षित करना चाहते हैं (लाइसेंस का स्वामी कौन है)।

तो आप डेटा को एन्क्रिप्ट करने के लिए public key cryptography विधि का उपयोग कर सकते हैं। इस तरह हैकर पढ़ सकता है, लेकिन वह फिर से एन्क्रिप्ट नहीं कर सकता है।

+0

पब्लिक की क्रिप्टोग्राफी यहां तक ​​मदद नहीं करेगा, जहां तक ​​मैं कह सकता हूं (और साथ ही, आप डेटा को एन्क्रिप्ट करने के लिए सीधे पीके सिस्टम (कम से कम आरएसए) का उपयोग नहीं करते हैं; इसका उपयोग केवल एक सममित एल्गोरिदम में कुंजी को एन्क्रिप्ट करने के लिए किया जाना चाहिए (जैसे एईएस))। –

+0

फिर भी, एक पर्याप्त कुशल हैकर इसके आसपास हो सकता है। अलग करें, अपनी खुद की कुंजी में घुमाओ, उछाल। एन्क्रिप्टेड सामान अचानक पठनीय है। आप सर्वर डेटा पर हस्ताक्षर करके उस डेटा को सर्वर पर वापस खिलाए जाने से रोक सकते हैं, हालांकि ... आप इसके बारे में सही हैं। यह सब वास्तविक आवश्यकता के आधार पर निर्भर करता है; जैसा कि इन सवालों में से कई के साथ मामला है। –

+0

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

0

जैसा कि मैक्स संकेत देता है, आपको खतरे के मॉडल पर विचार करने की आवश्यकता है।

आप किस तरह के हमलावरों के बारे में चिंतित हैं? (कुछ लोगों के बारे में चिंतित होना वैध है, और दूसरों के बारे में चिंतित होने के लिए इतना वैध नहीं है)। विशिष्ट श्रेणियों हो सकता है, "समर्पित व्यक्ति एक समाधान पर घंटे खर्च करने को तैयार", "जो ऑनलाइन दरारें लगाने के लिए कैसे जानता है आकस्मिक उपयोगकर्ता" "जो कार्यक्रम खरीदा गैर कंप्यूटर की समझ रखने वाले उपयोगकर्ता", आदि

अपने सटीक परिदृश्य पर निर्भर करता है समाधान अलग हो सकते हैं।

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

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

मुझे पता है कि यह एक विशेष रूप से उपयोगी उत्तर नहीं है।

+1

क्या आपका मतलब था कि मैंने "खतरे" मॉडल पर विचार करने पर संकेत दिया था? ;) –

+0

@MaxGuernseyIII: ओह .. इस पोस्ट को लिखते समय मैं क्या काम कर रहा था अनुमान लगाने के लिए कोई पुरस्कार नहीं: पी –

+0

डांग। मैं एक रिबन की उम्मीद कर रहा था ... –

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