वेब प्रोग्रामर को पता होना चाहिए कि उन्हें कभी भी क्रिप्टोग्राफी को स्वयं लागू करने का प्रयास नहीं करना चाहिए ।
विशेष रूप से, इसका मतलब है कि कोई भी गैर-सुरक्षा-विशेषज्ञ किसी भी क्रिप्टोग्राफिक प्राइमेटरी को सीधे नहीं छूना चाहिए। उन्हें एईएस, एसएचए -1, आदि के स्तर पर नहीं सोचना चाहिए। इसके बजाय, उन्हें संदेशों को एन्क्रिप्ट करने और हस्ताक्षर करने के लिए और "हैश" पासवर्ड के लिए उच्च-स्तरीय फ़ंक्शन का उपयोग करना चाहिए।
क्यूं कर? क्योंकि अन्यथा, लोग यह सोचकर गुमराह हो जाते हैं कि:
- एईएस -256 "महान एन्क्रिप्शन" है, इस तथ्य के बावजूद कि वे ईसीबी मोड में इसका उपयोग कर रहे हैं, या गैर-यादृच्छिक IV मूल्यों का उपयोग कर रहे हैं, आदि (कुछ मोड में, गैर-यादृच्छिक लेकिन अद्वितीय IVs ठीक है। दूसरों में, नहीं बहुत ज्यादा।)
- वे कई संदेशों को एन्क्रिप्ट करने के लिए एक ही सममित कुंजी का उपयोग कर सकते हैं (या इससे भी बदतर, प्रत्यक्ष उपयोग के लिए कोड में सममित कुंजी संग्रहीत करें)।
- वे किसी कुंजी व्युत्पत्ति फ़ंक्शंस का उपयोग किए बिना, सीधे कुंजी के रूप में एक पासफ़्रेज़ का उपयोग करने का निर्णय भी ले सकते हैं।
- वे सीधे डेटा एन्क्रिप्ट करने के लिए RSA का उपयोग कर सकते हैं।
- वे उन्हें सुरक्षित रखने के लिए अपने पासवर्ड को बस "नमक और एमडी 5" कर सकते हैं। (यदि आपको लगता है कि इंद्रधनुष की मेज सबसे कमजोर कड़ी है, तो फिर से सोचें ।)
बस एक ही पृष्ठ पर होना, उपरोक्त मदों में से कोई भी ठीक नहीं है । यदि आपको वह नहीं मिलता है, तो आपको 10 फुट के पोल के साथ क्रिप्टो को नहीं छूना चाहिए! (एईएस 256 है महान एन्क्रिप्शन, लेकिन केवल यदि आप इसे सही उपयोग करें। "यह आकार मायने रखती है, यह क्या आप इसके साथ करते हैं कि नहीं है।" :-))
मैं किस प्रकार के उच्च-स्तरीय कार्यों के बारे में बात कर रहा हूं? मैं व्यक्तिगत रूप से ओपनपीजीपी (आराम के लिए डेटा) या एसएसएल (गति में डेटा के लिए) पुस्तकालय के उपयोग की सलाह देता हूं। ये प्रोटोकॉल असममित, सममित और हैश एल्गोरिदम का सही उपयोग निर्दिष्ट करते हैं। उदाहरण के लिए, OpenPGP के साथ:
- यह सीधे डेटा एन्क्रिप्ट करने के लिए आरएसए का उपयोग नहीं करता है, बल्कि प्रति संदेश (यह महत्वपूर्ण है) प्रति यादृच्छिक सत्र (सममित) कुंजी उत्पन्न करता है, और उस सत्र कुंजी को एन्क्रिप्ट करने के लिए आरएसए का उपयोग करता है।
- यह पासफ़्रेज़ को कुंजियों में बदलने के लिए एक कुंजी व्युत्पत्ति फ़ंक्शन का उपयोग करता है। (OpenPGP पार्लेंस में, इसे S2K कहा जाता है, लेकिन मुझे लगता है कि "कुंजी व्युत्पत्ति समारोह" अधिक समीकरण शब्द है।)
- यह एक अच्छा मोड चुनने का काम करता है, इसलिए आप ईसीबी का उपयोग करके कभी भी समाप्त नहीं होंगे।
- यह आपके लिए मुख्य प्रबंधन को संभालता है, इसलिए आपको तदर्थ निर्णय लेने की आवश्यकता नहीं है कि कौन सी कुंजी विश्वसनीय हैं, आदि।
सारांश: यदि आप एक सुरक्षा विशेषज्ञ नहीं हैं, और आप एईएस, या एसएचए -1, या (स्वर्ग की मनाही) एमडी 5 के स्तर पर सोच रहे हैं , तो आप इसे गलत कर रहे हैं । सुरक्षा विशेषज्ञों द्वारा लिखी गई लाइब्रेरी (जैसे बाउंसी कैसल) का उपयोग करें, जो सुरक्षा विशेषज्ञों (जैसे एन्क्रिप्शन के लिए OpenPGP, या पासवर्ड हैशिंग के लिए bcrypt या scrypt) द्वारा डिज़ाइन किए गए प्रोटोकॉल को लागू करता है, बजाय अपने स्वयं के रोल करने के।
मैं किसी भी तरह से एक क्रिप्टो विशेषज्ञ नहीं हूं, लेकिन मैं अपने स्वयं के तदर्थ प्रोटोकॉल को डिजाइन करने की कोशिश नहीं करना जानता हूं। बस स्पष्ट होने के लिए, यह पूरी पोस्ट क्रिप्टोग्राफी 101 सामग्री है । इसलिए यदि यह पोस्ट आपके लिए 100% मायने नहीं रखती है, तो आपको क्रिप्टोग्राफी के पास कहीं भी नहीं जाना चाहिए।