📄 النص الكامل للصفحة
--- SECTION: إعداد الخوارزمية ---
إعداد الخوارزمية (Preparing the Algorithm)
import random
import hashlib
# Modular exponentiation: (base^exponent) % modulus
def mod_exp(base, exponent, modulus):
return pow(base, exponent, modulus)
# Generate a large prime number
def generate_large_prime(bits=2048):
return random.getrandbits(bits) | 1 # Command to create a prime number
--- SECTION: تنفيذ عملية تبادل المفاتيح ---
تنفيذ عملية تبادل المفاتيح (Implementing the Key Exchange)
def dh_key_exchange():
# Agree on large prime numbers p and g
p = generate_large_prime()
g = generate_large_prime()
# Each party selects a private key
ali_private_key = generate_large_prime()
ahmed_private_key = generate_large_prime()
# Each party computes their public key
ali_public_key = mod_exp(g, ali_private_key, p)
ahmed_public_key = mod_exp(g, ahmed_private_key, p)
# Each party exchanges their public key and computes the shared secret
ali_shared_secret = mod_exp(ahmed_public_key, ali_private_key, p)
ahmed_shared_secret = mod_exp(ali_public_key, ahmed_private_key, p)
# Verify that the shared secrets match
assert ali_shared_secret == ahmed_shared_secret
# Optionally, hash the shared secret to derive a symmetric key
shared_secret_hash = hashlib.sha256(str(ali_shared_secret).encode()).hexdigest()
return shared_secret_hash
--- SECTION: توليد المفتاح السري المشترك ---
توليد المفتاح السري المشترك (Generating the Secret Shared Key)
# Produce the shared secret key
shared_secret = dh_key_exchange()
print("Shared secret:", shared_secret)
Shared secret: 74b40ad75c4d76edcef424bcb1e27be104c60c22072e0aad65b5a29b60d1ddab
--- SECTION: Footer ---
وزارة التعليم
Ministry of Education
2025 - 1447
--- SECTION: Page Number ---
124
🎴 بطاقات تعليمية للمراجعة
عدد البطاقات: 5 بطاقة لهذه الصفحة
ما هي وظيفة دالة mod_exp في خوارزمية Diffie-Hellman؟
الإجابة: هي دالة لحساب الأس المعياري: (base^exponent) % modulus، وتستخدم لحساب الأسس الكبيرة بأمان في عملية تبادل المفاتيح.
الشرح: هذه الدالة أساسية في خوارزمية Diffie-Hellman لأنها تتيح حساب الأسس الكبيرة مع تطبيق العملية المعيارية للحفاظ على الأمان والكفاءة.
تلميح: فكر في العملية الرياضية التي تجمع بين الأس والعمليات المعيارية.
التصنيف: تعريف | المستوى: متوسط
ما هي الخطوات الأساسية لتنفيذ عملية تبادل المفاتيح باستخدام خوارزمية Diffie-Hellman كما وردت في الكود؟
الإجابة: 1. الاتفاق على عددين أوليين كبيرين p و g. 2. اختيار كل طرف لمفتاحه الخاص. 3. حساب المفتاح العام لكل طرف باستخدام الأس المعياري. 4. تبادل المفاتيح العامة. 5. حساب المفتاح السري المشترك من المفتاح العام للطرف الآخر والمفتاح الخاص. 6. التحقق من تطابق المفتاح السري المشترك. 7. استخدام دالة هاش لاشتقاق مفتاح متناظر.
الشرح: هذه الخطوات تمثل جوهر بروتوكول Diffie-Hellman لتبادل المفاتيح، حيث يسمح للأطراف بإنشاء مفتاح سري مشترك عبر قناة غير آمنة.
تلميح: ركز على التسلسل المنطقي: الاتفاق، الاختيار، الحساب، التبادل، ثم الحساب النهائي.
التصنيف: صيغة/خطوات | المستوى: صعب
ما الفرق بين المفتاح الخاص (Private Key) والمفتاح العام (Public Key) في عملية تبادل المفاتيح Diffie-Hellman؟
الإجابة: المفتاح الخاص: رقم سري يختاره كل طرف لنفسه ولا يتم مشاركته مع الآخرين (مثل ali_private_key و ahmed_private_key). المفتاح العام: يتم حسابه من المفتاح الخاص والأعداد الأولية المتفق عليها (p و g)، ويتم تبادله بين الأطراف (مثل ali_public_key و ahmed_public_key).
الشرح: هذا التمييز هو أساس أمان خوارزمية Diffie-Hellman، حيث يبقى المفتاح الخاص سرياً دائماً، بينما يمكن تبادل المفتاح العام علناً دون خطر.
تلميح: فكر في أي المفاتيح يبقى سرياً وأيها يتم تبادله علناً.
التصنيف: فرق بين مفهومين | المستوى: متوسط
ما هو الغرض من استخدام دالة الهاش (hash) على المفتاح السري المشترك في نهاية عملية Diffie-Hellman؟
الإجابة: الغرض هو اشتقاق مفتاح متناظر (symmetric key) مناسب للاستخدام في خوارزميات التشفير المتناظرة، حيث يحول القيمة الرقمية الكبيرة إلى تنسيق ثابت الطول وآمن.
الشرح: المفتاح السري المشترك الناتج من Diffie-Hellman هو رقم كبير جداً، ودالة الهاش تحوله إلى تنسيق مناسب وآمن للاستخدام كمفتاح في خوارزميات التشفير مثل AES.
تلميح: فكر في لماذا قد نحتاج إلى تحويل الناتج الرقمي الكبير إلى تنسيق آخر.
التصنيف: مفهوم جوهري | المستوى: متوسط
كيف يتم التحقق من نجاح عملية تبادل المفاتيح في خوارزمية Diffie-Hellman؟
الإجابة: يتم التحقق عن طريق مقارنة المفتاح السري المشترك الذي حسنه كل طرف على حدة (ali_shared_secret و ahmed_shared_secret)، والتأكد من أنهما متطابقان باستخدام أمر assert.
الشرح: هذا التحقق ضروري للتأكد من أن العملية الحسابية تمت بشكل صحيح وأن كلا الطرفين توصلا إلى نفس المفتاح السري المشترك، وهو شرط أساسي للاتصال الآمن.
تلميح: تذكر أن كلا الطرفين يحسبان قيمة منفصلة، ولكن يجب أن تكونا متماثلتين.
التصنيف: مفهوم جوهري | المستوى: سهل