Java Language
सुरक्षा और क्रिप्टोग्राफी
खोज…
परिचय
जावा में सुरक्षा प्रथाओं को दो व्यापक, अस्पष्ट परिभाषित श्रेणियों में विभाजित किया जा सकता है; जावा प्लेटफ़ॉर्म सुरक्षा, और जावा प्रोग्रामिंग सुरक्षित।
जावा प्लेटफॉर्म सुरक्षा प्रथाएं जेवीएम की सुरक्षा और अखंडता के प्रबंधन से संबंधित हैं। इसमें जेसीई प्रदाताओं और सुरक्षा नीतियों के प्रबंधन जैसे विषय शामिल हैं।
सुरक्षित जावा प्रोग्रामिंग प्रैक्टिस सुरक्षित जावा प्रोग्राम लिखने के सर्वोत्तम तरीकों की चिंता करती है। इसमें यादृच्छिक संख्याओं और क्रिप्टोग्राफी का उपयोग करना और कमजोरियों को रोकना जैसे विषय शामिल हैं।
टिप्पणियों
जबकि उदाहरणों को स्पष्ट रूप से बनाया जाना चाहिए, कुछ विषयों को कवर किया जाना चाहिए:
- JCE प्रदाता अवधारणा / संरचना
- सामग्री सूचीबद्ध करें
जेसीई
जावा क्रिप्टोग्राफी एक्सटेंशन (जेसीई) जेवीएम में बनाया गया एक ढांचा है जो डेवलपर्स को अपने कार्यक्रमों में आसानी से और सुरक्षित रूप से क्रिप्टोग्राफी का उपयोग करने की अनुमति देता है। यह प्रोग्रामर को एक सरल, पोर्टेबल इंटरफ़ेस प्रदान करके करता है, जबकि अंतर्निहित क्रिप्टोकरेंसी को सुरक्षित रूप से लागू करने के लिए जेसीई प्रोवाइडर्स की एक प्रणाली का उपयोग करते हुए।
कुंजी और कुंजी प्रबंधन
जबकि JCE क्रिप्टोग्राफिक संचालन और मुख्य पीढ़ी को सुरक्षित करता है, यह वास्तव में उनकी कुंजी का प्रबंधन करने के लिए डेवलपर पर निर्भर है। अधिक जानकारी यहाँ प्रदान करने की आवश्यकता है।
रनटाइम पर चाबियों को संभालने के लिए एक आम तौर पर स्वीकृत सर्वोत्तम अभ्यास उन्हें केवल byte
सरणियों के रूप में संग्रहीत करना है, और कभी भी स्ट्रिंग के रूप में नहीं। ऐसा इसलिए है क्योंकि जावा स्ट्रिंग्स अपरिवर्तनीय हैं, और मेमोरी में मैन्युअल रूप से "क्लियर" या "शून्य आउट" नहीं किया जा सकता है; जब तक किसी स्ट्रिंग का संदर्भ हटाया जा सकता है, तब तक सटीक स्ट्रिंग मेमोरी में बनी रहेगी जब तक कि इसकी मेमोरी का सेगमेंट कचरा-संग्रहित और पुन: उपयोग नहीं किया जाता है। एक हमलावर के पास एक बड़ी खिड़की होगी जिसमें वे प्रोग्राम की मेमोरी को डंप कर सकते हैं और आसानी से कुंजी पा सकते हैं। इसके विपरीत, byte
सरणियाँ परिवर्तनशील हैं, और उनकी सामग्री को जगह में अधिलेखित किया जा सकता है; जैसे ही आपको उनकी आवश्यकता नहीं होगी, आपकी कुंजी को 'शून्य-आउट' करना एक अच्छा विचार है।
आम जावा भेद्यता
सामग्री चाहिए
नेटवर्किंग संबंधी चिंताएँ
सामग्री चाहिए
यादृच्छिकता और आप
सामग्री चाहिए
अधिकांश अनुप्रयोगों के लिए, java.utils.Random
वर्ग "यादृच्छिक" डेटा का एक बिल्कुल ठीक स्रोत है। यदि आपको किसी सरणी से एक यादृच्छिक तत्व चुनने की आवश्यकता है, या एक यादृच्छिक स्ट्रिंग उत्पन्न करता है, या एक अस्थायी "अद्वितीय" पहचानकर्ता बनाता है, तो आपको Random
उपयोग करना चाहिए।
हालांकि, कई क्रिप्टोग्राफिक सिस्टम उनकी सुरक्षा के लिए यादृच्छिकता पर निर्भर करते हैं, और Random
द्वारा प्रदान की गई Random
केवल उच्च पर्याप्त गुणवत्ता नहीं है। किसी भी क्रिप्टोग्राफिक ऑपरेशन के लिए जिसमें यादृच्छिक इनपुट की आवश्यकता होती है, आपको इसके बजाय SecureRandom
उपयोग करना चाहिए।
हाशिए और मान्यता
अधिक जानकारी की आवश्यकता है।
एक क्रिप्टोग्राफिक हैश फ़ंक्शन तीन महत्वपूर्ण गुणों के साथ कार्यों के एक वर्ग का सदस्य है; स्थिरता, विशिष्टता और अपरिवर्तनीयता।
संगति: एक ही डेटा को देखते हुए, एक हैश फ़ंक्शन हमेशा समान मान लौटाएगा। यही है, अगर X = Y, f (x) हैश फंक्शन के लिए हमेशा f (y) के बराबर होगा।
विशिष्टता: हैश फ़ंक्शन के लिए कोई दो इनपुट कभी भी एक ही आउटपुट में परिणाम नहीं देगा। अर्थात्, यदि X और Y के किसी भी मान के लिए X = Y, f (x)! = F (y), है।
अपरिवर्तनीयता: एक हैश फ़ंक्शन को "रिवर्स" करने के लिए असंभव नहीं है, तो यह अव्यवहारिक रूप से मुश्किल है। यही है, केवल f (X) को देखते हुए, फ़ंक्शन f (brute-force) के माध्यम से X के हर संभव मान को लगाने के मूल X को खोजने का कोई तरीका नहीं होना चाहिए। कोई फ़ंक्शन नहीं होना चाहिए f1 जैसे कि f1 (f (X)) = X
कई कार्यों में इनमें से कम से कम एक विशेषता का अभाव है। उदाहरण के लिए, एमडी 5 और एसएचए 1 को टकराव के रूप में जाना जाता है, अर्थात दो इनपुट जिनमें एक ही आउटपुट होता है, इसलिए उनमें विशिष्टता की कमी होती है। वर्तमान में माना जाने वाला कुछ कार्य SHA-256 और SHA-512 हैं।