2009-03-17 7 views
6

मुझे अपने उपयोगकर्ताओं का नाम/पासवर्ड कहीं भी (अधिमानतः रजिस्ट्री) स्टोर करने की आवश्यकता है, इसलिए मेरा .NET एप्लिकेशन उपयोगकर्ता की ओर से कुछ दूरस्थ सेवा में लॉग इन करने के लिए उनका उपयोग कर सकता है। मुझे पता है कि रजिस्ट्री में मानों को "रहस्य" के रूप में संग्रहीत करना संभव है, जिसका अर्थ है कि वे Windows डोमेन उपयोगकर्ता टोकन या कुछ का उपयोग करके एन्क्रिप्टेड हैं। दूसरे शब्दों में, मैं खुद को एन्क्रिप्शन से निपटना नहीं चाहता हूं।रजिस्ट्री में पासवर्ड को "रहस्य" के रूप में रखते हुए

स्पष्टीकरण के लिए: मैं पासवर्ड के हैंश स्टोर या उन्हें नमक या कुछ भी स्टोर नहीं कर सकता। ये प्रमाण पत्र तृतीय पक्ष सिस्टम के लिए हैं और केवल मेरे उपयोगकर्ताओं की तरफ से इस सिस्टम में लॉगिन करने में सक्षम होने के लिए किसी भी तरह से उनके प्रमाण-पत्र रखना और उन्हें पुनर्स्थापित करने में सक्षम होना है।

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

संपादित करें: एक और बात यह विंडोज उपयोगकर्ता सत्रों के बीच बनी रहनी चाहिए (यदि यह उपयोगकर्ता लॉग ऑफ और बंद होने के बाद अपठनीय में पासवर्ड है तो यह मेरी मदद नहीं करता है)।

+0

@Assaf - हाँ, एन्क्रिप्शन कार्यक्षमता विंडोज़ का एक हिस्सा है, और तत्व उपयोगकर्ता सत्रों के बीच बने रहते हैं। – overslacked

उत्तर

10

आप शायद डेटा प्रोटेक्शन एपीआई के बारे में सोच रहे हैं। एमएसडीएन या read some blogs खोजें और देखें कि यह आपके लिए काम करेगा या नहीं।

+0

हाँ, अच्छा पकड़ो! डीपीएपीआई ऐसा लगता है कि ओपी किस बारे में बात कर रहा है। – Cerebrus

+0

क्या एन्क्रिप्शन उपयोगकर्ता सत्रों पर लगातार रहेगा? (यानी यदि उपयोगकर्ता लॉग ऑफ और बैक ऑन करता है या पर्याप्त समय बीतता है, तो क्या डेटा अभी भी पठनीय होगा)? –

5

आप System.Security.Cryptography.ProtectedData का उपयोग करने का प्रयास कर सकते हैं, जो प्रति उपयोगकर्ता कुंजी का उपयोग करके उन्हें एन्क्रिप्ट कर सकता है। http://msdn.microsoft.com/en-us/library/system.security.cryptography.protecteddata.aspx.

यह पूरी तरह से सुरक्षित नहीं है, क्योंकि उपयोगकर्ता के रूप में चल रहे कोड डेटा को डिक्रिप्ट कर सकते हैं।

+0

क्या एन्क्रिप्शन उपयोगकर्ता सत्रों पर लगातार बनेगा? (यानी यदि उपयोगकर्ता लॉग ऑफ और बैक ऑन करता है या पर्याप्त समय बीतता है, तो डेटा अभी भी पठनीय होगा) –

+0

हां, यह एक प्रति-उपयोगकर्ता एन्क्रिप्शन कुंजी है। – Michael

0
  • आपको कभी भी सादे टेक्स्ट के रूप में क्रेडेंशियल स्टोर नहीं करना चाहिए। एक सममित कुंजी सिफर का प्रयोग करें। रनटाइम पर पासवर्ड ले लो। Cryptography कार्यों पर MSDN reference देखें।
+0

रनटाइम पर पासवर्ड ले कर आप क्या मतलब रखते हैं? यदि मैं किसी भी व्यक्ति की तुलना में एक सममित कुंजी का उपयोग करता हूं जो बाइनरी की जांच करता है तो उसे बाहर खींच सकता है। –

+0

बाइनरी फज। एकाधिक हैंश का प्रयोग करें। पासवर्ड लेना डिक्रिप्शन का मतलब होगा। यह किसी भी दिन सादे टेक्स्ट पासवर्ड से कहीं ज्यादा बेहतर है। – dirkgently

+0

@dirkgently यह बहुत अच्छा है, लेकिन आप सममित कुंजी कहां स्टोर करते हैं? रजिस्ट्री में? एक फाइल में? यह और अधिक सुरक्षित कैसे है? – Dan

1

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

हालांकि, ऊपर वर्णित डेटा प्रोटेक्शन एपीआई को उसी मशीन पर अन्य उपयोगकर्ताओं से पासवर्ड की रक्षा करनी चाहिए। (यह sounds like डीपीएपीआई एन्क्रिप्शन के लिए आपके लॉगिन क्रेडेंशियल का उपयोग करता है।)

कुछ और विकल्पों के लिए, Threat Mitigation के लिए msdn पृष्ठ देखें।

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