क्रिप्टोग्राफी के बारे में वेब प्रोग्रामर्स को क्या पता होना चाहिए? [बन्द है]


27

क्या वेबसाइट / वेब एप्लिकेशन बनाने वाले प्रोग्रामर को क्रिप्टोग्राफी समझनी चाहिए? मुझे नहीं पता कि अधिकांश क्रिप्टोग्राफ़िक एल्गोरिदम कैसे काम करते हैं, और मैं वास्तव में md5 / des / anes / etc के बीच के अंतर को नहीं समझता हूं। क्या आप में से किसी ने क्रिप्टोग्राफी की गहन समझ के लिए किसी की आवश्यकता है?

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

क्या आपको कभी वेब प्रोग्रामिंग में इन दो सरल उदाहरणों से अलग क्रिप्टोग्राफी का उपयोग करने की आवश्यकता है?


4
उन्हें यह जानना चाहिए कि उन्हें ऐसा नहीं करना चाहिए।
SLaks

@SLaks: +1 100% सहमत हैं। मैंने इस सूत्र का विस्तार करने के लिए उत्तर लिखा कि यह क्यों है।
क्रिस जस्टर-यंग

जवाबों:


41

वेब प्रोग्रामर को पता होना चाहिए कि उन्हें कभी भी क्रिप्टोग्राफी को स्वयं लागू करने का प्रयास नहीं करना चाहिए ।

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

क्यूं कर? क्योंकि अन्यथा, लोग यह सोचकर गुमराह हो जाते हैं कि:

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

बस एक ही पृष्ठ पर होना, उपरोक्त मदों में से कोई भी ठीक नहीं है । यदि आपको वह नहीं मिलता है, तो आपको 10 फुट के पोल के साथ क्रिप्टो को नहीं छूना चाहिए! (एईएस 256 है महान एन्क्रिप्शन, लेकिन केवल यदि आप इसे सही उपयोग करें। "यह आकार मायने रखती है, यह क्या आप इसके साथ करते हैं कि नहीं है।" :-))

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

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

सारांश: यदि आप एक सुरक्षा विशेषज्ञ नहीं हैं, और आप एईएस, या एसएचए -1, या (स्वर्ग की मनाही) एमडी 5 के स्तर पर सोच रहे हैं , तो आप इसे गलत कर रहे हैं । सुरक्षा विशेषज्ञों द्वारा लिखी गई लाइब्रेरी (जैसे बाउंसी कैसल) का उपयोग करें, जो सुरक्षा विशेषज्ञों (जैसे एन्क्रिप्शन के लिए OpenPGP, या पासवर्ड हैशिंग के लिए bcrypt या scrypt) द्वारा डिज़ाइन किए गए प्रोटोकॉल को लागू करता है, बजाय अपने स्वयं के रोल करने के।

मैं किसी भी तरह से एक क्रिप्टो विशेषज्ञ नहीं हूं, लेकिन मैं अपने स्वयं के तदर्थ प्रोटोकॉल को डिजाइन करने की कोशिश नहीं करना जानता हूं। बस स्पष्ट होने के लिए, यह पूरी पोस्ट क्रिप्टोग्राफी 101 सामग्री है । इसलिए यदि यह पोस्ट आपके लिए 100% मायने नहीं रखती है, तो आपको क्रिप्टोग्राफी के पास कहीं भी नहीं जाना चाहिए।


4
बहुत बढ़िया। "दोबारा सोचें" से जुड़ी ब्लॉग पोस्ट से प्यार हुआ। chargen.matasano.com/chargen/2007/9/7/…
davidhaskins

+1, लेकिन कई बार एक ही सममित कुंजी का उपयोग करना ठीक है। यही IV है (अन्यथा आपको इसकी आवश्यकता नहीं होगी)।
6

1
इसके अलावा, स्किप्ट (और अन्य) ख्याति के कॉलिन पर्सीवल के पास "क्रिप्टोग्राफ़िक राइट आंसर" नामक एक शानदार लेख है, जो आपके द्वारा किए जाने वाले ब्रेड-एंड-बटर क्रिप्टो निर्णयों को पूरा करता है। एसएसएल बहुत समस्याग्रस्त है (लागू करने के लिए महत्वपूर्ण निरसन बहुत कठिन है)। यहाँ अधिक जानकारी: daemonology.net/blog/…
orip

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

1
@ मुझे कुछ और के लिए लिंक बदल दिया है जो अधिक प्रासंगिक है।
क्रिस जस्टर-यंग

14

आपको क्रिप्टोग्राफी के बारे में बहुत कुछ जानने की जरूरत नहीं है (हैश क्या है, नमक क्या है, इस एन्क्रिप्शन को क्रैक करना कितना कठिन है और इसी तरह), लेकिन आपको सुरक्षा के बारे में बहुत कुछ जानना होगा सामान्य।

मुख्य सुरक्षा क्षेत्रों को आपको निश्चित रूप से एक वेब डेवलपर के रूप में जानना होगा:

  1. एसक्यूएल इंजेक्षन। यह शायद सबसे खतरनाक छेद है जो एक वेब डेवलपर एक सिस्टम पर पंच कर सकता है।
  2. क्रॉस-साइट स्क्रिप्टिंग और कुकीज़।
  3. स्पैम्बोट्स और कैप्चा।
  4. एसक्यूएल इंजेक्षन। यह पर्याप्त जोर नहीं दिया जा सकता है कि यह कितना महत्वपूर्ण है।

आप जो कर रहे हैं उसके बारे में कुछ भी समझना बहुत खतरनाक नहीं है। न जाने क्या संदेश हैश और क्रिप्टोग्राफिक हैश के बीच का अंतर आपको बर्बाद कर सकता है। न जाने कैसे नमक आपको बर्बाद कर सकता है।
गुप्त

@ user1525 क्रिप्टोग्राफी की मूल बातों के रूप में मेरा यही मतलब है। आपको निश्चित रूप से यह जानने की आवश्यकता नहीं है कि वास्तव में कोई भी एनक्रिप्ट्री एल्गोरिदम कैसे काम करता है।
biziclop

मैं प्रतिक्रिया की सराहना करता हूं, और मैं एसक्यूएल इंजेक्शन और अन्य हमलों के बारे में सहमत हूं, लेकिन मैं वास्तव में क्रिप्टोग्राफी के बारे में पूछ रहा था।
davidhaskins

2
@davidhaskins हाँ, मुझे लगा कि यह इंगित करने के लायक है, क्योंकि प्रत्येक स्तर पिछले एक पर बनता है। यह जानना कि एईएस कैसे काम करता है इसके लायक कुछ नहीं है यदि आप अपने आवेदन को अधिक बुनियादी स्तर पर सुरक्षित करने में विफल होते हैं। मेरे अनुभव में यह एक जाल है कई डेवलपर्स में आते हैं (मैंने इसे कई बार किया), एन्क्रिप्शन पर ध्यान केंद्रित करने और सुरक्षा की लंबी श्रृंखला में अपनी भूमिका को खोने के लिए।
biziclop

4

मुझे याद है कि इस बात को देखकर कहा जाता है कि सिक्योरिटी के बारे में हर इंजीनियर को क्या-क्या जानना चाहिए और यह कहां जाना चाहिए , यह स्पीकर नील दासवानी हैं और यह एक गूगल टेक टॉक है जो उन्होंने दिया था, जिसे शुरू करने के लिए एक अच्छी जगह हो सकती है!

सिर्फ वेब प्रोग्रामर के लिए लागू नहीं होता है, शायद सवाल फिर से शीर्षक होना चाहिए "प्रोग्रामर को सुरक्षा के बारे में क्या पता होना चाहिए?" जैसा कि उन्हें क्रिप्टोग्राफी के बारे में मूल बातें से अधिक जानने की आवश्यकता नहीं है (जैसा कि यह दिलचस्प है)


2

क्रिप्टो बहुत सारी स्थितियों में काम आता है। एक उदाहरण जिसका हमने उपयोग किया है, एक Win / IIS होस्ट द्वारा LAMP होस्ट पर उपयोग किए जाने वाले सत्र कुकी को बनाया और सेट किया गया है।

यदि आप एन्क्रिप्शन को लागू करना चाहते हैं (md5 / sha1 हैशिंग के विपरीत), तो कुछ मूल शब्द महत्वपूर्ण हैं - जैसे कि सममित और असममित एन्क्रिप्शन के बीच का अंतर। दोनों के बीच के अंतर को समझने के साथ-साथ, आपको यह समझ विकसित करनी चाहिए कि वेब डेवलपर को ठीक से स्टोर करने और डिक्रिप्शन कुंजी को सुरक्षित करने के लिए आपको क्या करना है। उदाहरण के लिए, यदि किसी ऐसे होस्ट पर तैनात किए जाने वाले एप्लिकेशन को विकसित करना, जिस पर आपके पास पूरा प्रशासनिक नियंत्रण नहीं है, जैसे कि एक साझा होस्ट, जैसे कि एक सर्वर पर तैनाती, जहां सभी प्रवेश ज्ञात और विश्वसनीय हैं।


2

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

हर चीज के बैकग्राउंड को जानना उतना महत्वपूर्ण नहीं है जितना कि उसका बैकग्राउंड जानना। कुछ चीजों के मानक क्या हैं (कितनी तेजी से, कितनी मजबूत, कमजोरियां, आदि)।

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


2

आपको MD5 के बजाय पासवर्ड स्टोर करने के लिए bcrypt (ब्लोफिश) का उपयोग करना चाहिए ; यह बहुत धीमी एल्गोरिथ्म है , जिसका अर्थ है कि किसी हैकर के लिए यह अनुमान लगाना और जांचना बहुत कठिन है। इसके अलावा, bcrypt एक कार्य कारक को एक पैरामीटर के रूप में लेता है , जिसका अर्थ है कि यह और भी धीमा हो सकता है क्योंकि नए कंप्यूटर पेश किए जाते हैं, इसलिए इसमें भविष्य में प्रूफिंग अंतर्निहित है।

अधिक जानकारी के लिए एक पासवर्ड को सुरक्षित रूप से कैसे स्टोर करें देखें ।


0

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

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.