2010-02-16 13 views
7

मैं .NET 3.5 और SQL Server 2008 का उपयोग कर एक नया वेब अनुप्रयोग विकसित कर रहा हूं जिसे कुछ सामाजिक सुरक्षा नंबरों को स्टोर करने की आवश्यकता होगी। मैं डेटाबेस एन्क्रिप्शन पर कुछ प्रारंभिक पढ़ रहा हूं और यह थोड़ा उलझन में है।SQL सर्वर 2008 में एसएसएन को एन्क्रिप्ट करने का सबसे अच्छा तरीका क्या है?

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

तो, SQL सर्वर 2008 में एसएसएन को एन्क्रिप्ट करने का सबसे अच्छा तरीका क्या है? बोनस पॉइंट्स यदि आप एक अच्छे ट्यूटोरियल या दो से लिंक करते हैं।

+2

क्या आप ** सुनिश्चित हैं ** आपको एसएसएन स्टोर करने की आवश्यकता है? क्या आप वास्तव में अपने कंधों पर इस विशाल कानूनी देयता चाहते हैं? – ceejayoz

+1

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

+1

यह समझ में आता है। बस यह सुनिश्चित करना कि यह ऐसी स्थिति नहीं है जहां पिछले चार अंकों या एक तरफा हैश की तरह कुछ पर्याप्त होगा। – ceejayoz

उत्तर

1

आप वास्तव में असममित एन्क्रिप्शन का उपयोग नहीं करना चाहते हैं क्योंकि यह बहुत धीमा है। इसके बजाय आप एक असममित कुंजी के साथ सममित कुंजी की रक्षा करना चाहते हैं, और फिर सममित कुंजी को आसान रखें। ईमानदार होने के लिए, मैं खुद को चीजों को डिजाइन करने के बजाय SQL सर्वर में क्या रखता हूं उसके साथ रहूंगा। वास्तव में अच्छी शुरुआत http://dotnetslackers.com/articles/sql/IntroductionToSQLServerEncryptionAndSymmetricKeyEncryptionTutorial.aspx

+0

मुझे लगता है कि अगर आप एन्क्रिप्ट करने के लिए बड़ी मात्रा में डेटा रखते हैं तो मैं ऐसा करने का कारण समझता हूं। मुझे लगता है कि डेटा के प्रत्येक टुकड़े की अपनी सममित कुंजी होगी जो तब साझा सार्वजनिक कुंजी द्वारा एन्क्रिप्ट की जाएगी, है ना? लेकिन इस मामले में एसएसएन वास्तव में सममित कुंजी से छोटे नहीं होंगे? –

5

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

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

ज्ञात असममित एन्क्रिप्शन सिस्टम गणितीय संरचनाओं का उपयोग करते हैं जिनकी अपनी लागत होती है। असल में, आरएसए एन्क्रिप्शन सिस्टम के लिए, "पर्याप्त पर्याप्त" कुंजी के साथ, एक एन्क्रिप्टेड संदेश में कम से कम 128 बाइट्स की लंबाई होगी। कुछ एन्क्रिप्शन सिस्टम बेहतर करते हैं; अकादमिक शोध के अच्छी तरह से चलने वाले पथों पर चिपके रहते हुए, मैं इसे 41 बाइट्स या तो (एनआईएसटी के -163 अंडाकार वक्र पर एल-गामल के साथ) कर सकता था। छोटा कठिन लगता है।

तो यह कोई आश्चर्य की बात नहीं है कि किसी दिए गए डेटाबेस सिस्टम में डिफ़ॉल्ट रूप से ऐसी सुविधा शामिल नहीं होगी।

आपकी समस्या के लिए, आप पहली बार परिभाषित करना चाहिए (और लिखने), के रूप में स्पष्ट रूप से आप कर सकते हैं के रूप में:

  • क्या डेटा जो आप की रक्षा करना चाहते हैं
  • जो डेटा
  • कौन है आदानों डेटा को वापस पढ़ने के लिए

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

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

+0

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

1

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

पूर्व: (10+ Character Pass Phrase) -> SHA-1 => KEY.

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

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

+0

एक सममित कुंजी के साथ डेटा को एन्क्रिप्ट करने के लिए आपको पासफ्रेज़ की आवश्यकता नहीं है? इससे मुझे कुछ भी आरामदायक नहीं लगेगा जिसका उपयोग चीजों के सार्वजनिक पक्ष पर डेटा को डिक्रिप्ट करने के लिए किया जा सकता है। –

+0

मुझे लगता है कि एक अधिकृत उपयोगकर्ता आपके सिस्टम तक पहुंचने पर नियंत्रित पक्ष के अलावा उस डेटा को डिक्रिप्ट करने के लिए आपके पास एपीआई या तंत्र नहीं होगा। –

+0

यह अधिकृत उपयोगकर्ता द्वारा आपके द्वारा क्या मतलब है इस पर निर्भर करता है। उदाहरण के लिए, इन सभी चीजों को पहले से ही सामान्य संग्रहित प्रो एक्सेस नियंत्रण से संरक्षित किया जाना चाहिए। मुझे सुरक्षा का एक अतिरिक्त स्तर चाहिए। –

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

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