2010-09-29 7 views
9

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

+0

यदि आप इसके साथ एन्क्रिप्ट कर सकते हैं, तो आप इसे पुनर्प्राप्त कर सकते हैं। – SLaks

+1

@Slaks: जब तक ओएस एन्क्रिप्शन नहीं कर रहा है, और कहीं भी "सुरक्षित" कुंजी स्टोर करता है। जैसे, कहें, "संरक्षित संग्रहण" सेवा हो सकती है। – cHao

+0

@cHow। मैं यही सोच रहा हूं। माइक्रोसॉफ्ट इस प्रकार की कार्यक्षमता प्रमाण पत्र के साथ प्रदान करता है (वे आपकी निजी कुंजी को सुरक्षित रूप से स्टोर और उपयोग कर सकते हैं), लेकिन हो सकता है कि मैं जो भी ढूंढ रहा हूं उसके लिए न हो। – Nogwater

उत्तर

2

आप किसके खिलाफ बचाव कर रहे हैं इस पर निर्भर करते हुए, आप ProtectedData class का उपयोग कर सकते हैं।

+0

हमें उस मार्ग पर जाना पड़ सकता है, लेकिन मेरी समझ यह है कि अगर हमने संरक्षित डेटा का उपयोग करके हमारी कुंजी संग्रहित की है, तो हम इसे बाद में प्राप्त कर सकते हैं। हम इसे वापस पाने में सक्षम नहीं होना चाहते हैं, बस इसका उपयोग करने में सक्षम हो। – Nogwater

+0

उसी उपयोगकर्ता के रूप में लॉग इन करते समय आप इसे वापस प्राप्त कर सकते हैं। – SLaks

+0

हाँ, मुझे लगता है कि शायद हमारे लिए काम करेगा। यह वास्तव में आदर्श नहीं है क्योंकि हम मशीनों के समूह पर हमारे सॉफ़्टवेयर को इंस्टॉल कर रहे हैं, जिसका अर्थ यह होगा कि हमारी एईएस कुंजी का एन्क्रिप्टेड ब्लॉब जिसे हमें स्टोर करने की आवश्यकता होगी, प्रति मशीन अलग-अलग होगी। फिलहाल हम इस तरह की ओर झुका रहे हैं: http://www.codestrider.com/BlogRead.aspx?b=d147ff4f-65e0-47f5-a39b-40ae07a42005 सार्वजनिक/निजी कुंजी एन्क्रिप्शन और विंडो की प्रमाणपत्र स्टोर का उपयोग करने के लिए वास्तविक कुंजी – Nogwater

1

@SLaks सही है, अगर इसकी तुम्हारी याद में यह पहुँचा जा सकता है। आप इसे और अधिक कठिन बना सकते हैं, लेकिन यह हमेशा संभव होने जा रहा है।

है यही कारण है कि लोग गंभीर हैं क्रिप्टो ऑफलोड।

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

रॉस एंडरसन के पास इस तरह की चीज़ के बारे में एक अच्छा पेपर, Programming Satan's Computer है। सार से:

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

भले ही आप भौतिक स्मृति और केवल हार्ड डिस्क और स्रोत के बारे में चिंतित न हों, आपको अभी भी वर्चुअल मेमोरी से सावधान रहना होगा। यदि आप सावधान नहीं हैं (या ध्यान से लिखित सेवा का उपयोग कर रहे हैं) तो आप अपनी स्वैप फ़ाइल में सादे टेक्स्ट कुंजी प्राप्त कर सकते हैं। यहां एक और लिंक है जो इस मुद्दे पर चर्चा करता है। ऐसा नहीं है कि आप ऐसा करना चाहते हैं लेकिन यह मुद्दा स्पष्ट करता है: Encrypting Virtual Memory। मेरा मानना ​​है कि स्मृति के रूप में स्मृति को चिह्नित करने के लिए इस उद्देश्य के लिए सिस्टम कॉल हैं लेकिन मुझे कोई लिंक नहीं मिल रहा है।

+0

हम सर्वर के हार्ड ड्राइव (हमारे स्रोत कोड तक पढ़ने की पहुंच सहित) के लिए स्मृति तक पहुंचने वाले किसी व्यक्ति के बारे में चिंता करने के लिए पर्याप्त भयावह नहीं हैं। – Nogwater

+0

हार्ड ड्राइव और वर्चुअल मेमोरी –

+0

धन्यवाद पॉल जोड़ा। यह जानकर अच्छा लगा। – Nogwater

0

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

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

इसलिए यदि आपके कुंजी वास्तव में मूल्यवान है, यूएसबी cryptotoken का उपयोग करें। डिवाइस की कीमत बहुत ही मामूली है - लगभग $ 70- $ 100 प्रति इकाई और ऐसे कई विक्रेता हैं जो ऐसे उपकरणों की पेशकश करते हैं।

0

क्रिप्टो को ऑफ़लोड करने की प्रवृत्ति को जारी रखने के लिए, यदि आप अपने सभी क्लस्टर के हार्डवेयर को जानते हैं तो आपके पास TPM में कुंजी हो सकती है यदि मदरबोर्ड में एक है, तो यह यूएसबी या स्मार्ट- कार्ड समाधान

+0

मेरे पास इन सर्वरों के लिए यूएसबी या स्मार्ट-कार्ड तक पहुंच नहीं है। हमारे कुछ बॉक्स अभी भी विंडोज 2003 चल रहे हैं, इसलिए यह वास्तव में मेरे लिए एक विकल्प नहीं है। क्या टीपीएम के लिए मानक .NET 3.5 पुस्तकालय हैं? शायद यह किसी और के लिए उपयोगी होगा। – Nogwater

5

विंडोज डीपीएपीआई (Win32 documentation), और इसका .NET wrapper (ProtectedData Class) कोई भी डेटा स्टोर नहीं करता है। इसके बजाय, विंडोज डीपीएपीआई एक क्रिप्टोग्राफिक साइफर वैल्यू देता है जिसे आप कहीं भी पसंद कर सकते हैं, जिसमें एकाधिक सर्वर भी शामिल हैं।

मेरे काम की जगह पर हम एक एईएस कुंजी के लिए एक साइफर उत्पन्न करने के लिए डीपीएपीआई का उपयोग करते हैं जिसे हम रजिस्ट्री में स्टोर करते हैं।

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

.NET ProtectedData क्लास 2.0 से .NET Framework में रहा है।

मैं एक तीसरे पक्ष के उत्पाद पर विंडोज डीपीएपीआई के साथ रहूंगा क्योंकि यह परिपक्व, स्थिर, नि: शुल्क, उपयोग करने में आसान है और .NET में पूरी तरह से समर्थित है।

+0

बस यह सुनिश्चित करने के लिए कि मैं समझता हूं ... एकाधिक मशीनों पर संरक्षित डेटा का उपयोग करने के लिए, उन दोनों मशीनों में साझा उपयोगकर्ता खाता होना आवश्यक है, जिन्हें डोमेन नियंत्रक द्वारा प्रदान किया जाना आवश्यक है, है ना? – Nogwater

+4

आप दो अलग-अलग मशीनों पर स्वतंत्र रूप से कुंजी को एन्क्रिप्ट करने के लिए डीपीएपीआई का उपयोग कर सकते हैं, यदि आप चाहते थे तो 2 अलग-अलग उपयोगकर्ता खातों के तहत चल रहे हैं, यह सिर्फ 2 सिफर मूल्यों को अदला-बदली नहीं किया जाएगा। उसी खाते के तहत डिक्रिप्ट किया जाना होगा (या मशीन आधारित डीपीएपीआई का उपयोग करते हुए मशीन) जो एन्क्रिप्शन करता था। यदि आप 1 साइफर रखना चाहते हैं जिसे एकाधिक मशीनों पर डिक्रिप्ट किया जा सकता है, तो हाँ, मैं कहूंगा कि आपको एक साझा खाता और डोमेन नियंत्रक की आवश्यकता होगी। स्पष्टीकरण के लिए – saille

+0

धन्यवाद। – Nogwater

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

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