تبادل مفاتيح 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.
random أم secrets هنا؟بدءًا من Python 3.6، أصبحت هناك وحدتان مختلفتان لإنتاج الأرقام "العشوائية":
الوحدة المسماة random هي شبه عشوائية، أي أنها لا تولّد عشوائية حقيقية، بل تتبع خوارزمية تحاكي العشوائية. وبما أن هذه "الأرقام العشوائية" تُولَّد عبر خوارزمية معروفة، فهي ليست عشوائية حقًا. ونتيجة لذلك، لا تصلح وحدة random للتشفير ولا ينبغي استخدامها، وذلك تحديدًا لأنها شبه عشوائية.
الوحدة المسماة secrets تولّد أرقامًا "عشوائية" قوية تشفيريًا، توفّر الأمان الأكبر الذي يتطلبه التشفير. وهي لا تزال شبه عشوائية بالمعنى الأدق، لكنها تضمن أن الأرقام التي تنتجها غير قابلة للتنبؤ على الإطلاق.
وبما أن هذا مجرد تمرين تدريبي، فلا بأس من استخدام وحدة random، لكن انتبه إلى أنه سيكون غير آمن للغاية إذا استُخدم فعليًا في التشفير.
سجّل في Exercism لتتعلّم وتتقن Python عبر 17 مفهومًا146 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.