الدرس 4 من 6
البصمة
- 20 دقيقة
- 4 فحوص
- 3 تلميحات
- إلى المطلوب
هدف الدرس
البحث الشامل في مجال صغير
الشرح
بعض البرامج لا تحفظ الرمز السرّي نفسه، بل تحفظ بصمته (hash)، ثم تحسب بصمة ما تكتبه وتقارن بين البصمتين. والبصمة طريق باتجاه واحد، فلا تستطيع أن تحسب الرمز منها مباشرة.
لكن إن كان الرمز قصيرًا ومحارفه معروفة فالاحتمالات قليلة، وتستطيع أن تحسب بصمة كل احتمال حتى تجد المطابق، وهذا يسمّى البحث الشامل (brute force). والبصمة هنا من نوع SHA-256، وتحسبها هكذا:
hashlib.sha256(text.encode()).hexdigest()
ولأن الرمز القصير يسقط أمام البحث الشامل كما ترى، تحمي الأنظمة الحقيقية كلمات السرّ بأسرار طويلة، وتضيف إليها ملحًا عشوائيًّا (salt) لكل كلمة، وتستعمل بصمات بطيئة قصدًا مثل bcrypt وscrypt وargon2 ليصير البحث الشامل مكلفًا جدًّا.
المطلوب
اكتب الدالة crack(target_hex, length, alphabet) لتُرجع الرمز الذي طوله length، ومحارفه من النصّ alphabet، وبصمته target_hex. وإن لم تجد رمزًا كهذا فأرجِع None. في الكود بصمة رمز من أربعة أرقام لتجرّب عليها، والفحص يعطي دالتك بصمات أخرى.
الفحوص
4 فحوص- يسترجع رمزًا من أربعة أرقام
- يسترجع رمزًا من حروف
- يعمل على رمز من خمسة محارف
- يُرجع None حين لا يوجد رمز