2011-06-26 9 views
10

मैं सी # का उपयोग करके अपने लिए एक छोटा सा प्रोग्राम लिख रहा हूं जिसका उपयोग मैं अपने पासवर्ड को स्टोर करने के लिए कर सकता हूं और फिर उन्हें देखने/संपादित करने के लिए पुनर्प्राप्त कर सकता हूं।स्मृति में संग्रहीत करने और पासवर्ड प्रस्तुत करने के लिए SecureString? या कुछ और?

जबकि पासवर्ड एक एन्क्रिप्टेड प्रारूप में डिस्क में संग्रहीत होते हैं, जब उन्हें किसी फॉर्म पर डिस्प्ले/संपादन के लिए स्मृति में पढ़ा जाता है, तो वे अनएन्क्रिप्टेड होते हैं।

मैंने सीखा है कि स्मृति में अनएन्क्रिप्टेड पासवर्ड होने के कारण एक बहुत बड़ी सुरक्षा समस्या है, इसलिए मैं SecureString कक्षा में आया।

SecureString कक्षा का उपयोग करने से ऐसा करने के लिए और अधिक सुरक्षित तरीका होगा, या SecureString अपने नाम पर लाइव है?

+6

* कभी भी पासवर्ड स्टोर न करें, यहां तक ​​कि एन्क्रिप्टेड भी नहीं। केवल अपने हैश स्टोर करें। –

+4

@ हंसपैसेंट अच्छी सलाह है लेकिन यह एक पासवर्ड प्रबंधक की तरह लगता है। स्पष्ट रूप से एक पासवर्ड मैनेजर केवल स्टोरेज हैश से दूर नहीं जा सकता है। –

उत्तर

10

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

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

1

सिक्योरस्ट्रिंग बिल्कुल सही नाम है और आपने अनुमान लगाया है: यह स्ट्रिंग को स्मृति में एन्क्रिप्ट किया गया है, इसलिए हाँ यह सही तरीका है।
HERE देखें:

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

7

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

  • एक SecureString (बस के रूप में svick बताते हैं) एक डिक्रिप्शन कुंजी के बिना प्राप्त किया जा सकता है, इसलिए किसी भी हैकर काफी कुशल सादा पाठ स्ट्रिंग पुनः प्राप्त करने के स्मृति के इस खंड आप सुरक्षित रूप से ग्रहण कर सकते हैं आसानी से इस मामूली आपरेशन प्रदर्शन कर सकते हैं पुनः प्राप्त करने के । SecureStringToBSTR(input);
  • सिक्योरस्टिंग को किसी चरित्र में चरित्र के रूप में पॉप्युलेट करने की आवश्यकता है क्योंकि कोई नहीं है .क्स्ट प्रॉपर्टी उपयोग करने के लिए एक्सेसर प्राप्त करें या सेट करें। MSDN सहित ब्लॉगों पर आप अक्सर निम्नलिखित की तरह कोड देखेंगे:

    public static SecureString StringToSecureString(string input) 
    { 
        SecureString output = new SecureString(); 
        int l = input.Length; 
        char[] s = input.ToCharArray(0, l); 
        foreach (char c in s) 
        { 
         output.AppendChar(c); 
        } 
        return output; 
    } 
    

महत्वपूर्ण मुद्दा इस कोड के साथ कि डेवलपर करने के लिए input स्ट्रिंग की अनुमति कभी पहली जगह में स्मृति में मौजूद है।उपयोगकर्ता नियंत्रण या PasswordBox की WinForm पाठ बॉक्स, उपयोगकर्ता से इस पासवर्ड को इकट्ठा करने के लिए प्रयोग किया जाता

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

इसके बजाय विकल्प जहां कुंजी दबाने उपयोगकर्ता के प्रत्येक चरित्र को पुनः प्राप्त करने के लिए इस्तेमाल किया जाता है पर विचार करें, अन्यथा, WPF के PasswordBox एक SecureString के द्वारा समर्थित है डिफ़ॉल्ट रूप से मेरा मानना ​​है कि (किसी और इस बात की पुष्टि कर सकते हैं)।

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

+0

मैं वास्तव में इस उत्तर को डाउनग्रेड करने जा रहा हूं क्योंकि आपने सुझाव दिया था कि एक कुंजी लॉगर इस समस्या को हल करने का एक व्यवहार्य तरीका है। Keyloggers मूल रूप से सुरक्षा प्रोटोकॉल के खिलाफ हैं और किसी भी जिम्मेदार निगम तुरंत किसी भी व्यक्ति को एक keylogger लिखा है और इसे एक उत्पादन वातावरण में डाल दिया जाएगा। मैंने प्रोग्रामर की एक टीम के लिए पदभार संभाला जो इसे करने के लिए निकाल दिया गया। वे सभी अपनी नौकरियों को खो दिया। –

+0

बहुत रोचक! –

+3

@ स्कॉटशॉ-स्मिथ, मुझे पता है कि यह पुराना है, लेकिन मुझे नहीं लगता कि वह मुख्य लॉगर्स के उपयोग को "इस समस्या को हल करने का एक व्यवहार्य तरीका" के रूप में उपयोग करने का सुझाव देता है। इसके बजाय, वह कह रहा है कि हैकर्स का उपयोग कर रहे हैं यदि सुरक्षित हैरिंगरिंग कुंजीपटल का उपयोग कर पासवर्ड सुरक्षित करने में मदद नहीं करेगा। –

-1

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

string passwordPre = DecryptProprietary(objectReferringToPassword); 
    char[] passwordChars = passwordPre.ToCharArray();   
    System.Security.SecureString securePassword = new System.Security.SecureString(); // in production, this should probably be a global variable 
    foreach (char c in passwordChars) 
     securePassword.AppendChar(c); 

    string decryptedPassword = new System.Net.NetworkCredential(string.Empty, securePassword).Password; // this is how to convert it to a string for quick usage to access the protected resource 

तो तुम और जल्दी से decrypted पासवर्ड का उपयोग जो भी संसाधन की जरूरत तक पहुँचने में आप विधि से निकल कर यह के निपटान के।

+0

उहह .... मालिकाना डिक्रिप्शन एल्गोरिदम? –