خطوات الاستخدام
الخطوة 1: فهم جدول قوس قزح. جدول قوس قزح هو هيكل بيانات يستخدم في كسر كلمات المرور المخزنة بصيغة التجزئة (hash). يعتمد على تقنية المفاضلة بين الزمن والذاكرة (time-memory trade-off). يتم إنشاء الجدول باستخدام سلاسل من التجزئات (hashes) حيث كل سلسلة تبدأ بكلمة مرور محتملة وتنتهي بكلمة مرور أخرى بعد تطبيق دوال اختزال (reduction functions). الهدف هو تقليل حجم التخزين اللازم مقارنة بجداول البحث المباشرة. لتقدير حجم جدول قوس قزح تحتاج إلى ثلاثة معاملات للحجم: طول السلسلة (chain length)، عدد السلاسل (number of chains)، وحجم التجزئة (hash size) بالبت؛ ويُضاف إليها مساحة كلمات المرور M لتقدير التغطية وحدها.
الخطوة 2: إدخال طول السلسلة (chain length). طول السلسلة هو عدد مرات تطبيق دالة التجزئة ودالة الاختزال بالتناوب على طول السلسلة. كلما زاد طول السلسلة، زادت التغطية (coverage) لمساحة كلمات المرور، ولكن على حساب وقت الحساب (وقت الكسر) وربما تقليل احتمال النجاح. أدخل قيمة طول السلسلة (مثل 1000 أو 10000). عادةً ما تكون الأطوال في حدود آلاف إلى مئات الآلاف.
الخطوة 3: إدخال عدد السلاسل (number of chains). عدد السلاسل هو عدد نقاط البداية المختلفة المستخدمة في الجدول. كل سلسلة تبدأ بكلمة مرور عشوائية وتنتهي بنقطة نهاية (endpoint). عدد السلاسل مضروباً في طول السلسلة يعطي إجمالي عدد الخطوات المحسوبة، لكن التخزين الفعلي هو فقط نقاط البداية والنهاية لكل سلسلة. كلما زاد عدد السلاسل، زاد حجم الجدول خطياً.
الخطوة 4: إدخال حجم التجزئة (hash size) بالبت لا بالبايت: حجم التجزئة هو عدد البتات الناتجة عن دالة التجزئة المستخدمة (مثل MD5 = 128 بت، SHA-1 = 160 بت، SHA-256 = 256 بت). هذا يحدد مقدار الذاكرة المطلوبة لتخزين نقطة نهاية واحدة (أو نقطة بداية) بقسمة عدد البتات على 8. أدخل حجم التجزئة بالبت (مثلاً 128).
الخطوة 5: حساب حجم جدول قوس قزح. الصيغة الأساسية: حجم الجدول (بالبايت) = عدد السلاسل * (حجم نقطة البداية + حجم نقطة النهاية). عادةً ما يتم تخزين نقطة البداية والنهاية بنفس حجم التجزئة (أو أقل لتوفير المساحة). لذا يصبح الحجم = عدد السلاسل * 2 * (hashSize / 8) بايت، أي أن طول السلسلة لا يدخل في التخزين إطلاقًا لأنه يحدد عدد الخطوات المحسوبة لا كمية المحفوظات. لكن في الممارسة، غالباً ما يتم تخزين نقطة النهاية فقط (بما أن نقطة البداية يمكن اشتقاقها من الترتيب أو تخزينها بطريقة مضغوطة). في هذه الآلة الحاسبة، نفترض تخزين نقطة البداية ونقطة النهاية كما تنص هذه الخطوة. ملاحظة على الوحدة: المخرَج يقسم البايتات على 1024×1024، أي أنه ميجابايت ثنائي (MiB)؛ لذلك 3,200,000 بايت تظهر كـ 3.05 وليس 3.2 (وهو الرقم العشري المذكور في المثال الأول).
الخطوة 6: تقدير التغطية. التغطية التقريبية = (عدد السلاسل × طول السلسلة) ÷ مساحة كلمات المرور M، طالما كان البسط أصغر بكثير من M كما يقرّر السؤال الرابع. لذلك تطلب الحاسبة قيمة M وتعرض الناتج في تفصيل 'Coverage estimate (N x L / M)'، وتعرض أيضاً أقصى عدد سلاسل يسع في 1 جيجابايت ثنائي (1,073,741,824 بايت) لتطبيق حدود الذاكرة كما في المثال الثاني.
أمثلة محلولة
تطبيقات عملية على حجم جدول قوس قزح بخطوات الحل كاملة.
الحل
الحساب: عدد السلاسل = 100,000. حجم نقطة البداية والنهاية = 128 بت لكل منهما = 16 بايت. إجمالي البايت لكل سلسلة = 32 بايت. إذن الحجم = 100,000 × 32 = 3,200,000 بايت ≈ 3.2 ميجابايت عشرية، أي 3.05 ميجابايت ثنائية (MiB) وهو ما تعرضه الحاسبة. لكن هذا لا يشمل الترميز الإضافي أو بنية البيانات. في الواقع، تحتاج أيضاً إلى تخزين نقاط البداية (عادةً ما تكون كلمات مرور حقيقية، لكن يمكن ضغطها). ولكن التقدير البسيط يعطيك فكرة. لاحظ أن هذا الجدول سيغطي فقط جزءاً من مساحة كلمات المرور: التغطية التقريبية = عدد السلاسل * طول السلسلة / إجمالي عدد كلمات المرور (إذا كانت دوال الاختزال موزعة جيداً). في هذا المثال، التغطية = (100,000 * 5000) / 10^12 = 0.0005 = 0.05% فقط. أي أن الجدول سيتمكن من كسر 0.05% من كلمات المرور العشوائية. لزيادة التغطية، تحتاج إما لزيادة عدد السلاسل أو طول السلسلة، مما يزيد الحجم.
الحل
الحساب: حجم كل سلسلة = 64 بايت (نقطتان كل 32 بايت). إذن أقصى عدد سلاسل = 1,073,741,824 / 64 = 16,777,216 سلسلة تقريباً. هذا عدد كبير. لكن يجب أيضاً مراعاة أنك بحاجة إلى تخزين بيانات إضافية مثل نقاط البداية (كلمات المرور الأصلية) التي قد تكون أكبر من 32 بايت. في الممارسة، قد تستخدم ضغطاً أو تخزين نقاط النهاية فقط. إذا افترضنا تخزين نقاط النهاية فقط، فإن أقصى عدد سلاسل = 1,073,741,824 / 32 = 33,554,432 سلسلة. هذه الأعداد تؤثر على احتمالية النجاح ووقت الحساب. من المهم أن نفهم المفاضلة: كلما زاد عدد السلاسل، زاد حجم الجدول لكن زادت التغطية (حتى حد معين). أيضاً يزيد وقت الإنشاء والبحث.
أمثلة محسوبة
قيم مُدخَلة ونتيجة محسوبة فعليًا بواسطة حجم جدول قوس قزح.
مرجع — جدول MD5 بـ100 ألف سلسلة: 3.05 MiB و0.05%
- طول السلسلة (عدد الخطوات)
- 5,000
- عدد السلاسل
- 100,000
- حجم التجزئة (بالبت — MD5=128، SHA-1=160، SHA-256=256)
- 128
- مساحة كلمات المرور M (عدد الكلمات)
- 1,000,000,000,000
مرجع — جدول SHA-256 يملأ 1 جيجابايت تمامًا
- طول السلسلة (عدد الخطوات)
- 1
- عدد السلاسل
- 16,777,216
- حجم التجزئة (بالبت — MD5=128، SHA-1=160، SHA-256=256)
- 256
- مساحة كلمات المرور M (عدد الكلمات)
- 100,000,000,000,000,000,000
مرجع — SHA-1 بخمسمئة ألف سلسلة: 19.07
- طول السلسلة (عدد الخطوات)
- 10,000
- عدد السلاسل
- 500,000
- حجم التجزئة (بالبت — MD5=128، SHA-1=160، SHA-256=256)
- 160
- مساحة كلمات المرور M (عدد الكلمات)
- 1,000,000,000,000,000
مرجع — SHA-512 بمليون سلسلة: 122.07
- طول السلسلة (عدد الخطوات)
- 1,000
- عدد السلاسل
- 1,000,000
- حجم التجزئة (بالبت — MD5=128، SHA-1=160، SHA-256=256)
- 512
- مساحة كلمات المرور M (عدد الكلمات)
- 1,000,000,000,000,000,000
مرجع — أصغر جدول: 2 بايت وتغطية كاملة
- طول السلسلة (عدد الخطوات)
- 1
- عدد السلاسل
- 1
- حجم التجزئة (بالبت — MD5=128، SHA-1=160، SHA-256=256)
- 8
- مساحة كلمات المرور M (عدد الكلمات)
- 1