Diffie-Hellman की एक्सचेंज।
Alice और Bob रहस्य साझा करने के लिए Diffie-Hellman की एक्सचेंज का उपयोग करते हैं। वे अभाज्य संख्याओं से शुरू करते हैं, प्राइवेट की चुनते हैं, पब्लिक की बनाकर साझा करते हैं, और फिर एक साझा सीक्रेट की बनाते हैं।
टेस्ट प्रोग्राम अभाज्य संख्याएँ p और g देता है।
Alice एक प्राइवेट की a चुनती है, जो 1 से बड़ी और p से छोटी है। Bob भी यही करके अपनी प्राइवेट की b चुनता है।
Alice पब्लिक की A निकालती है।
A = gᵃ mod p
उन्हीं p और g का उपयोग करके Bob भी अपनी प्राइवेट की b से इसी तरह पब्लिक की B निकालता है।
Alice और Bob अपनी पब्लिक की एक-दूसरे को सौंपते हैं। Alice सीक्रेट की s निकालती है।
s = Bᵃ mod p
Bob निकालता है
s = Aᵇ mod p
दोनों गणनाओं का परिणाम एक ही आता है! अब Alice और Bob के बीच साझा रहस्य s है।
Python 3.6 से, "रैंडम" संख्याएँ बनाने के लिए दो अलग-अलग मॉड्यूल हैं:
random नाम का मॉड्यूल स्यूडो-रैंडम है, यानी यह असली रैंडमनेस नहीं बनाता, बल्कि एक ऐसे एल्गोरिदम पर चलता है जो रैंडमनेस की नकल करता है। चूँकि ये "रैंडम संख्याएँ" एक जाने-पहचाने एल्गोरिदम से बनती हैं, इसलिए ये वास्तव में रैंडम नहीं होतीं। नतीजा यह है कि random मॉड्यूल क्रिप्टोग्राफी के लिए ठीक से उपयुक्त नहीं है और इसका इस्तेमाल नहीं करना चाहिए, ठीक इसी वजह से कि यह स्यूडो-रैंडम है।
secrets नाम का मॉड्यूल क्रिप्टोग्राफिक रूप से मज़बूत "रैंडम" संख्याएँ बनाता है, जो क्रिप्टोग्राफी के लिए आवश्यक अधिक सुरक्षा देती हैं। सबसे सख्त मायने में ये संख्याएँ भी स्यूडो-रैंडम ही हैं, लेकिन secrets मॉड्यूल इसकी गारंटी देता है कि वह जो संख्याएँ बनाता है, वे पूरी तरह अप्रत्याशित होती हैं।
चूँकि यह केवल एक अभ्यास है, random मॉड्यूल इस्तेमाल करना ठीक है, लेकिन ध्यान रखिए कि अगर इसे वास्तव में क्रिप्टोग्राफी में इस्तेमाल किया जाए तो यह बहुत असुरक्षित होगा।
Exercism पर साइन अप कीजिए और Python को 17 कॉन्सेप्ट146 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।