2013-07-18 8 views
9

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

मैं बहुत सारे शोध कर रहा हूं, और मुझे लगता है कि मैं एक उचित योजना के साथ आया हूं - लेकिन सभी चीजों की तरह क्रिप्टो/सुरक्षा से संबंधित जटिलता बहुत भयानक है, और गलती करना बहुत आसान है।

  1. आवेदन की पहली बार रन पर, एक बड़े यादृच्छिक नमक उत्पन्न, और का उपयोग कर एक 128bit एईएस कुंजी RijndaelManaged
  2. आपातकालीन वसूली के लिए एक प्लेन टेक्स्ट फाइल में इन दोनों को बाहर लिखें: मेरा किसी न किसी योजना इस प्रकार है। यह फ़ाइल ऑफ़लाइन संग्रहीत सुरक्षित भौतिक स्थान पर संग्रहीत की जाएगी। एप्लिकेशन फ़ाइल की उपस्थिति की जांच करेगा, और अगर वह अभी भी बैठा है तो चेतावनी चिल्लाएगा।
  3. कहीं नमक और कुंजी को सुरक्षित रूप से स्टोर करें। यह वह हिस्सा है जिसके लिए मेरा कोई अच्छा जवाब नहीं है। मैं डीपीएपीआई का उपयोग करने की योजना बना रहा था - लेकिन मुझे नहीं पता कि दिन के अंत में वास्तव में कितना सुरक्षित है। क्या मैं इसे सादे टेक्स्ट में छोड़कर और फाइल सिस्टम को उस निर्देशिका में एक्सेस करने से बेहतर कर दूंगा?
  4. डेटाबेस में एक रिकॉर्ड लिखते समय, एसएसएन को ऊपर के बड़े नमक मूल्य के साथ एक क्षेत्र उत्पन्न करने के लिए ऊपर है (लेकिन सभी संभव एसएसएन को मजबूर करने के लिए नमक और ब्रूट प्राप्त किए बिना वसूली योग्य नहीं), और एईएस कच्चे एसएसएन को एन्क्रिप्ट करता है पुनर्प्राप्ति योग्य (एक कुंजी/iv के साथ) उत्पन्न करने के लिए एक नए चतुर्थ (साथ में संग्रहीत) के साथ मूल्य, लेकिन खोज योग्य नहीं है (क्योंकि एक ही एसएसएन को एन्क्रिप्ट करने से दो बार अलग आउटपुट मिलना चाहिए)।
  5. जब खोज, सिर्फ एक ही नमक के साथ खोज मूल्य हैश और डीबी
  6. में इसे देखते हैं तो पुन: प्राप्त करने, एक की आवश्यकता होगी, की तुलना में एईएस कुंजी का उपयोग कर/iv

अन्य डीबी से मूल्य डिक्रिप्ट अपेक्षाकृत सुरक्षित तरीके से चाबियाँ स्टोर करने का तरीका (उपरोक्त संख्या 3) यह काफी ठोस लगता है।

चीज़ें है कि हमारे लिए काम नहीं करेगा:

  • "इस से कोई भी कार्य न करें" एक विकल्प नहीं है। इसे करने की जरूरत है, और यदि हम ऐसा नहीं करते हैं तो वे ए) हमारे ऊपर पागल हो जाएंगे और बी) ईमेल पर सादा पाठ दस्तावेज़ में बस सभी संख्याएं पास करें।

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

पढ़ने के लिए धन्यवाद, और किसी भी सलाह के लिए।

अद्यतन # 1: मुझे टिप्पणियों से एहसास हुआ कि एसएसएन पुनर्प्राप्ति क्षेत्र के लिए निजी IV रखने का कोई मतलब नहीं है। मैंने प्रत्येक रिकॉर्ड के लिए एक नया चतुर्थ उत्पन्न करने के लिए योजना को अद्यतन किया और इसे एन्क्रिप्टेड मूल्य के साथ स्टोर किया।

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

+1

नहीं [आईटी सुरक्षा] (http://security.stackexchange.com/) यह पूछने के लिए एक बेहतर जगह रही है? – Oded

+1

हम निश्चित रूप से नहीं चाहते हैं कि वे आपको पागल हो जाएं – Jonesopolis

+0

पहला: http://security.stackexchange.com/ अधिक सहायता कर सकता है। दूसरा: मेरा मानना ​​है कि प्रत्येक एन्क्रिप्शन के साथ एक नया चौथाई पैदा करना और इसे एन्क्रिप्टेड एसएसएन के साथ संग्रहित करना ताकि आप यह नहीं बता सकें कि दो स्थानों में एक एसएसएन समान है या नहीं। नोट, हालांकि, मैं एक सुरक्षा पेशेवर नहीं हूँ। इसे लागू करने से पहले उस विकल्प को पूरी तरह से देखें। –

उत्तर

1

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

फिर जब आप कहते हैं, रिवर्सिबल एन्क्रिप्शन के लिए यादृच्छिक नमक के साथ एईएस का उपयोग करें।

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

आईटी सुरक्षा https://security.stackexchange.com/questions/39017/least-insecure-way-to-encrypt-a-field-in-the-database-so-that-it-can-still-be-in

0

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

+3

जब एसएसएन की बात आती है, तो क्या हैश को रिवर्सिबल एन्क्रिप्शन के लिए कम या ज्यादा टैंटमाउंट नहीं है क्योंकि डेटा में बहुत कम एन्ट्रॉपी है? अगर किसी को पता था कि हैश कैसे किया गया था (नमक क्या था) क्या यह एक अरब संभव एसएसएन हैश देखने के लिए तुच्छ नहीं होगा और देखें कि कौन से मेल खाते हैं? –

+0

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

+1

हालांकि मेरी समझ से, प्रति रिकॉर्ड एक अद्वितीय नमक का उपयोग नहीं करेंगे, बाद में एसएसएन के आधार पर खोज (मिलान) की मेरी क्षमता को नष्ट कर देगा? साथ ही, सामाजिक सुरक्षा संख्याओं की प्रकृति को आपको इंद्रधनुष तालिका की भी आवश्यकता होगी? ऐसा लगता है कि एक हमलावर आसानी से प्रत्येक रिकॉर्ड के लिए हर संभव (या उचित, एसएसएन पर बाधाओं को देखते हुए) हैश की गणना कर सकता है - अद्वितीय नमक या नहीं। –

0

मुझे लगता है कि मैंने कहीं एक बार पढ़ा है कि एक सीमित सेट इनपुट है जो आपको बिल्कुल कुछ नहीं देता है। एक त्वरित गूगल इस अतः समान चेतावनी के साथ पोस्ट कर दिया:

Hashing SSNs and other limited-domain information

मैं मानता चाहिए कि मैं भी कोई सुरक्षा विशेषज्ञ हूँ, लेकिन यह देखते हुए कि आदानों की संभावित संख्या ज्यादा 10 की तुलना में छोटे^9 जो किसी भी सभ्य है हैकर घंटों के मामले में हवा में सक्षम होना चाहिए, एक एसएसएन हैशिंग लगता है जैसे आप एक वास्तविक सुरक्षा/कठिनाई बाधा के बजाय परेशानी की एक छोटी परत जोड़ रहे हैं।

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

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

+0

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

1

पर मेरा प्रश्न कुंजी भंडारण के संबंध में वहाँ दो तरीकों अगर आप web.config में अपने एईएस कुंजी संग्रहीत करने का चयन आप उपयोग कर सकते हैं। जैसा कि आपने उल्लेख किया है, डीपीएपीआई का उपयोग करना पहला तरीका है। यह उस बॉक्स के लिए आपकी web.config एप्लिकेशन सेटिंग एन्क्रिप्ट करेगा। आप जिस अन्य विधि का उपयोग कर सकते हैं वह आरएसए कुंजी के माध्यम से है (यह MSDN tutorial देखें), यह आपके web.config को डीपीएपीआई की तरह एन्क्रिप्ट करेगा, हालांकि आप एकाधिक बॉक्स पर आरएसए कुंजी का उपयोग कर सकते हैं, इसलिए यदि एप्लिकेशन क्लस्टर्ड है तो आरएसए कुंजी बेहतर है (सेटअप करने के लिए बस अधिक जटिल)।

आपके आवेदन को चलाने से पहले कुंजी को उत्पन्न करने से पहले ऐप चलाने वाली मशीन पर नहीं, इस तरह कोई मौका नहीं है कि आप निर्देशिका में टेक्स्ट फ़ाइल छोड़ने जा रहे हैं। आपको निम्नानुसार कुंजी उत्पन्न करनी चाहिए।

  1. एक यादृच्छिक मूल्य का उपयोग कर RngCryptoServiceProvider
  2. PBKDF2 साथ RngCryptoServiceProvider
  3. हैश दो मानों का उपयोग कर (Rfc2898DeriveBytes)

कारण आप कुंजी व्युत्पत्ति विधि का उपयोग यह है एक यादृच्छिक नमक मूल्य उत्पन्न उत्पन्न RngCryptoServiceProvider को किसी कारण से असुरक्षित पाया गया है जो यादृच्छिक संख्या जेनरेटर के साथ होता है, तो आपको सुरक्षा देता है।

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

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

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

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

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

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

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