تبادل کلید Diffie-Hellman.
آلیس و باب از تبادل کلید Diffie-Hellman برای به اشتراک گذاشتن رازها استفاده میکنند. آنها با اعداد اول شروع میکنند، کلیدهای خصوصی انتخاب میکنند، کلیدهای عمومی میسازند و با هم مبادله میکنند و سپس یک کلید مخفی مشترک تولید میکنند.
برنامهی آزمون اعداد اول p و g را در اختیار میگذارد.
آلیس یک کلید خصوصی a انتخاب میکند که بزرگتر از ۱ و کوچکتر از p است.
باب هم به همین شکل یک کلید خصوصی b انتخاب میکند.
آلیس کلید عمومی A را محاسبه میکند.
A = gᵃ mod p
باب هم با استفاده از همان p و g، به همین ترتیب کلید عمومی B را از کلید خصوصی b خود محاسبه میکند.
آلیس و باب کلیدهای عمومی را با هم مبادله میکنند.
آلیس کلید مخفی s را محاسبه میکند.
s = Bᵃ mod p
باب محاسبه میکند
s = Aᵇ mod p
این محاسبات به یک نتیجهی یکسان میرسند!
اکنون آلیس و باب راز مشترک s را در اختیار دارند.
random یا secrets استفاده کنم؟از Python ۳.۶ به بعد، دو ماژول متفاوت برای تولید اعداد «تصادفی» وجود دارد:
ماژولی که random نام دارد شبهتصادفی است، یعنی تصادفیبودن واقعی را تولید نمیکند، بلکه از الگوریتمی پیروی میکند که تصادفیبودن را شبیهسازی میکند.
چون این «اعداد تصادفی» با الگوریتمی شناختهشده تولید میشوند، واقعاً تصادفی نیستند.
در نتیجه، ماژول random برای رمزنگاری مناسب نیست و نباید استفاده شود، دقیقاً به این دلیل که شبهتصادفی است.
ماژولی که secrets نام دارد، اعداد «تصادفی» قوی از نظر رمزنگاری تولید میکند که امنیت بیشتر موردنیاز برای رمزنگاری را فراهم میکنند.
آنها در سختگیرانهترین معنای کلمه هنوز شبهتصادفیاند، اما این تضمین را دارند که اعدادی که تولید میکنند کاملاً غیرقابلپیشبینیاند.
چون این فقط یک تمرین عملی است، استفاده از ماژول random اشکالی ندارد، اما توجه کنید که اگر واقعاً برای رمزنگاری استفاده شود، بسیار ناامن خواهد بود.