Diffie-Hellman

Diffie-Hellman

آسان

دستورالعمل‌ها

تبادل کلید 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 اشکالی ندارد، اما توجه کنید که اگر واقعاً برای رمزنگاری استفاده شود، بسیار ناامن خواهد بود.

ویرایش از طریق GitHub این لینک در پنجره یا زبانه‌ی جدیدی باز می‌شود
Python Exercism

آماده‌اید Diffie-Hellman را شروع کنید؟

در Exercism ثبت‌نام کنید تا Python را همراه با 17 مفهوم146 تمرین و مربی‌گری انسانی واقعی یاد بگیرید و در آن استاد شوید، همه‌ی این‌ها رایگان.