Skip to content
العودة إلى المدوّنة
الأمن

إنتروبيا كلمة المرور: احسب وعزز قوة كلمات مرورك

أتقن إنتروبيا كلمة المرور: الصيغة، رياضيات القوة الغاشمة، ولماذا الطول يتفوق على التعقيد. يتضمن كود JS/Python ومولد مجاني.

١٠ دقائق قراءة

إنتروبيا كلمة المرور: كيف تقيس وتعظّم قوة كلمة مرورك

ربما قيل لك أن “كلمة المرور القوية” تحتاج أحرفاً كبيرة وأرقاماً ورموزاً خاصة. لكن P@$$w0rd! تتبع كل هذه القواعد — ويمكن كسرها في أقل من ثانية.

المقياس الحقيقي لقوة كلمة المرور ليس الأحرف التي تستخدمها. إنه الإنتروبيا: مفهوم من نظرية المعلومات يحدد مدى عدم قابلية كلمة مرورك للتنبؤ فعلياً.

في هذا الدليل، ستتعلم بالضبط كيف تعمل إنتروبيا كلمة المرور، وكيف تحسبها، وكيف تنشئ كلمات مرور يصعب كسرها حقاً.

ما هي إنتروبيا كلمة المرور؟

تقيس إنتروبيا كلمة المرور مدى عدم قابلية كلمة المرور للتنبؤ، معبراً عنها بالبتات. كل بت إضافي من الإنتروبيا يضاعف عدد التخمينات التي يحتاجها المهاجم لكسرها بالقوة الغاشمة.

فكر فيها كالنرد. نرد ذو 6 أوجه لديه نحو 2.6 بت من الإنتروبيا لكل رمية — هناك 6 نتائج محتملة فقط. نرد ذو 20 وجهاً لديه نحو 4.3 بت — وجوه أكثر تعني عدم يقين أكبر.

كلمات المرور تعمل بنفس الطريقة: أحرف ممكنة أكثر (“نرد أكبر”) وأحرف أكثر في كلمة المرور (“رميات أكثر”) كلاهما يزيد الإنتروبيا.

هذا هو السبب في أن الإنتروبيا مقياس أفضل من قواعد التعقيد. يمكن أن تبدو كلمة المرور معقدة (Tr0ub4dor&3) لكن لديها إنتروبيا منخفضة لأنها تتبع أنماطاً قابلة للتنبؤ. في المقابل، عبارة مرور تبدو بسيطة (correct horse battery staple) يمكن أن تمتلك إنتروبيا عالية لأنها مسحوبة من مجموعة كبيرة من الاحتمالات.

الصيغة: كيف تحسب إنتروبيا كلمة المرور

الصيغة واضحة:

E = L x log₂(R)

حيث:

  • E = الإنتروبيا بالبتات
  • L = طول كلمة المرور (عدد الأحرف)
  • R = حجم المجموعة (عدد الأحرف الممكنة لكل موضع)

أحجام مجموعات الأحرف

نوع الأحرفحجم المجموعة (R)بتات لكل حرف
أحرف صغيرة فقط (a-z)264.70
أحرف صغيرة + أرقام365.17
كبيرة + صغيرة + أرقام625.95
ASCII القابل للطباعة الكامل946.55
قائمة كلمات Diceware7,77612.92 لكل كلمة

احسبها بالكود

// Calculate password entropy in JavaScript
const entropy = (length, poolSize) =>
  length * Math.log2(poolSize);

entropy(8, 26);   // → 37.60 bits (lowercase only)
entropy(12, 62);  // → 71.45 bits (alphanumeric)
entropy(16, 94);  // → 104.87 bits (full charset)
import math

def entropy(length: int, pool_size: int) -> float:
    return length * math.log2(pool_size)

entropy(8, 26)   # → 37.60 bits
entropy(12, 62)  # → 71.45 bits
entropy(16, 94)  # → 104.87 bits

مهم: تفترض هذه الصيغة أن كل حرف مختار بشكل عشوائي منتظم. إذا اختار إنسان كلمة المرور باستخدام أنماط أو كلمات قاموسية، فإن الإنتروبيا الفعلية أقل بكثير من الحد الأقصى النظري.

كم من الإنتروبيا يكفي؟

الإجابة تعتمد على ما تحميه ومدى سرعة تخمين المهاجم.

يمكن لوحدات GPU الحديثة اختبار أكثر من 10¹² (تريليون) تجزئة كلمة مرور في الثانية ضد خوارزميات سريعة مثل MD5. إليك ما يعنيه ذلك عملياً:

الإنتروبيا (بتات)القوةوقت الكسر عند 10¹² تخمين/ثانيةموصى به لـ
< 40ضعيفأقل من ثانيةلا تستخدمه أبداً
40–59مقبولثوانٍ إلى ساعاتحسابات مؤقتة
60–79قويأيام إلى قرونحسابات عادية
80–99قوي جداًآلاف السنين+البريد الإلكتروني، الخدمات المصرفية
100+شديدأبعد من الموت الحراري للكونمفاتيح التشفير، كلمات المرور الرئيسية

كلمة مرور من 16 حرفاً باستخدام مجموعة ASCII القابلة للطباعة الكاملة تمنحك نحو 105 بتات من الإنتروبيا — في النطاق “الشديد”. يمكنك إنشاء واحدة فوراً باستخدام مولد كلمات المرور العشوائية، الذي يعرض تحليل الإنتروبيا الفوري لكل كلمة مرور.

ما تقوله NIST (تحديث 2024)

أجرت NIST SP 800-63B، المحدثة في 2024، تغييرات كبيرة في إرشادات كلمات المرور:

  • أسقطت قواعد التعقيد الإلزامية (لا مزيد من الرموز الخاصة الإجبارية)
  • أسقطت التغيير الدوري الإلزامي لكلمات المرور
  • رفعت الحد الأدنى إلى 15 حرفاً (ارتفاعاً من 8 في الإصدارات السابقة)
  • تؤكد على الفحص ضد كلمات المرور المسربة المعروفة
  • تفضل الطول والعشوائية على التعقيد

هذه التغييرات تعكس ما أظهرته رياضيات الإنتروبيا دائماً: الطول والعشوائية أهم من تنوع الأحرف.

لماذا الطول يتفوق على التعقيد

لنلقِ نظرة على الرياضيات. فكر في طريقتين لزيادة الإنتروبيا لكلمة مرور من 12 حرفاً:

الخيار أ — إبقاء 12 حرفاً، التبديل من أبجدي رقمي (62) إلى ASCII الكامل (94):

  • 12 x log₂(94) - 12 x log₂(62) = 78.66 - 71.45 = +7.21 بت

الخيار ب — إبقاء أبجدي رقمي (62)، إضافة حرف واحد (12 ← 13):

  • 13 x log₂(62) - 12 x log₂(62) = 77.40 - 71.45 = +5.95 بت

إضافة حرف واحد يمنحك تقريباً نفس الإنتروبيا التي يمنحها التبديل لمجموعة أحرف أكبر بكثير. أضف حرفين وستتجاوزها.

الآن فكر في P@$$w0rd! (9 أحرف). تستخدم مجموعة ASCII الكاملة لكنها قصيرة جداً. الأسوأ، أنها تتبع نمط “لغة الليت” المتوقع الذي تغطيه هجمات القاموس بالفعل، لذا إنتروبيتها الفعلية أقل بكثير من الـ 59 بت النظرية.

الخلاصة: لكلمات المرور العشوائية حقاً، إضافة الطول أكثر كفاءة من إضافة أنواع أحرف. لكن العدو الحقيقي هو القابلية للتنبؤ، وليس القصر.

عبارة المرور مقابل كلمة المرور العشوائية

البُعدكلمة مرور عشوائيةعبارة مرور (Diceware)
مثالkX#9mP$2vL!nQ7wRcorrect horse battery staple
بتات لكل وحدة6.55 لكل حرف12.92 لكل كلمة
الطول لـ ~78 بت12 حرفاً6 كلمات
سهولة الحفظضعيفةجيدة
الكتابة على الهاتفمؤلمةسهلة
الأفضل لـإدخالات مدير كلمات المروركلمات المرور الرئيسية، تسجيلات الدخول المحفوظة

كيف يعمل Diceware

يستخدم Diceware قائمة كلمات من 7,776 مدخل (6⁵ = 7,776). ترمي خمسة نردات لاختيار كل كلمة، مما يمنح 12.92 بت من الإنتروبيا بالضبط لكل كلمة.

أربع كلمات تمنح ~51 بت؛ ست كلمات تمنح ~77 بت.

أيهما يجب أن تستخدم؟

  • لكلمات المرور المخزنة في مدير: استخدم كلمات مرور عشوائية من 16+ حرفاً مع مجموعة الأحرف الكاملة. لن تكتبها يدوياً أبداً، لذا سهولة الحفظ لا تهم. يمكن لـ مولد كلمات المرور العشوائية إنشاء دفعات حتى 50 مرة واحدة.
  • لكلمة مرورك الرئيسية: استخدم عبارة Diceware من 5-6 كلمات. سهلة الحفظ بما يكفي لكتابتها يومياً مع توفير 64-77 بت من الإنتروبيا.
  • لمفاتيح API والرموز: استخدم openssl rand أو crypto.randomBytes() لأقصى إنتروبيا بدون متطلبات حفظ بشري.

الإنتروبيا عملياً: أدوات المطورين والكود

إليك أكثر الطرق شيوعاً التي يستخدمها المطورون لتوليد أسرار عالية الإنتروبيا:

المتصفح (Web Crypto API)

// Cryptographically secure password generation
function generatePassword(length, charset) {
  const array = new Uint32Array(length);
  crypto.getRandomValues(array);
  return Array.from(array, v => charset[v % charset.length]).join('');
}

const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*';
generatePassword(16, chars);
// → 'kX#9mP$2vL!nQ7wR' (random each time)

Node.js

const crypto = require('crypto');
const token = crypto.randomBytes(32).toString('base64url');
// → 'Ql2Hj8xK9mNp3rVw5tYz7uBa0cEf4gIk' (43 chars, 256 bits)

Python

import secrets
token = secrets.token_urlsafe(32)  # 256 bits of entropy
password = secrets.token_hex(16)    # 128 bits, hex format

سطر الأوامر

# 192 bits of entropy, base64 encoded
openssl rand -base64 24

# 256 bits, hex encoded
openssl rand -hex 32

مقارنة الإنتروبيا حسب الطريقة

الطريقةطول المخرجاتالإنتروبيا (بتات)
UUID v436 حرفاً122
openssl rand -base64 2432 حرفاً192
16 حرف ASCII كامل16 حرفاً105
6 كلمات Diceware~30 حرفاً78
4 كلمات Diceware~20 حرفاً52

لا تستخدم أبداً Math.random() لأي شيء متعلق بالأمان. يستخدم مولد أرقام شبه عشوائي غير مشفر — المخرجات قابلة للتنبؤ إذا عرف المهاجم البذرة. استخدم دائماً crypto.getRandomValues() في المتصفح أو crypto.randomBytes() في Node.js.

تخزين كلمات المرور: لماذا الإنتروبيا وحدها لا تكفي

حتى كلمة مرور من 128 بت لا قيمة لها إذا خزنها الخادم كتجزئة MD5 عادية. عند تسريب قاعدة بيانات، يمكن للمهاجمين اختبار تريليونات تجزئات MD5 في الثانية على GPU واحد.

هنا تأتي خوارزميات التجزئة البطيئة. تجعل كل تخمين مكلفاً عمداً:

الخوارزميةالسرعة على GPUالإبطاء الفعلي
MD5~10 مليار/ثانيةخط الأساس (لا تستخدمه)
SHA-256~5 مليار/ثانية~ضعفين أبطأ
bcrypt (cost=12)~5/ثانية~2 مليار ضعف أبطأ
argon2id~2/ثانية~5 مليار ضعف أبطأ

معامل التكلفة في bcrypt أنيق بشكل خاص: كل زيادة تضاعف العمل المطلوب. عامل تكلفة 12 يعني 2¹² = 4,096 جولة تجزئة. هذا يضيف فعلياً 12 بت من “إنتروبيا التخزين” فوق إنتروبيا كلمة المرور نفسها.

نموذج الحماية المزدوجة: كلمات المرور عالية الإنتروبيا تحمي من القوة الغاشمة دون اتصال، بينما التجزئة البطيئة تحمي من تسريبات قواعد البيانات. تحتاج كليهما.

لمزيد من المعلومات حول خوارزميات التجزئة، راجع مقارنة MD5 مقابل SHA-256 وجرب مولد تجزئة MD5 لاستكشاف كيف تنتج الخوارزميات المختلفة مخرجات مختلفة.

خرافات كلمات المرور الشائعة مكشوفة

”غيّر كلمة مرورك كل 90 يوماً”

توصي إرشادات NIST لعام 2024 صراحة بعدم التغيير الدوري الإلزامي. التغييرات المتكررة تدفع المستخدمين لاختيار كلمات مرور أضعف وأكثر قابلية للتنبؤ — إضافة رقم في النهاية، التبديل بين مجموعة صغيرة. غيّر كلمات المرور فقط عندما يكون لديك سبب للاعتقاد بأنها تعرضت للاختراق.

”a→@، e→3 يجعلها أقوى”

استبدالات لغة الليت هي من أوائل الأنماط التي تتحقق منها هجمات القاموس. استبدال a بـ @ في password يضيف إنتروبيا صفرية تقريباً لأن المهاجمين يتوقعونه بالفعل.

العشوائية الحقيقية — وليست الاستبدالات الذكية — هي ما يزيد الإنتروبيا.

”8 أحرف مع رموز كافية”

حتى مع مجموعة ASCII الكاملة ذات 94 حرفاً، 8 أحرف تمنح فقط 52 بت من الإنتروبيا. عند 10¹² تخمين في الثانية، يُكسر في نحو 75 دقيقة.

استخدم 12 حرفاً كحد أدنى، 16+ للحسابات المهمة.

”كلما بدت أكثر تعقيداً، كانت أكثر أماناً”

التعقيد المرئي والإنتروبيا شيئان مختلفان. Tr0ub4dor&3 تبدو معقدة لكنها تتبع نمطاً قابلاً للتنبؤ من كلمة أساسية + استبدالات. mfYq8kL2nR تبدو أبسط لكن لديها إنتروبيا أعلى لأنها عشوائية حقاً.

لمزيد من المعلومات حول بناء استراتيجية أمان شاملة، راجع أساسيات أمان الويب.

الأسئلة الشائعة

كم بت من الإنتروبيا يُعتبر آمناً؟

لمعظم الحسابات عبر الإنترنت، 60-80 بت توفر حماية قوية. للأهداف عالية القيمة مثل كلمات المرور الرئيسية أو مفاتيح التشفير، استهدف 100+ بت. كل بت إضافي يضاعف الجهد المطلوب من المهاجم.

هل إضافة رموز خاصة تزيد الإنتروبيا دائماً؟

فقط إذا كانت الأحرف مختارة عشوائياً من المجموعة الكاملة. الاستبدالات المتوقعة مثل @ بدل a أو ! في النهاية لا تضيف إنتروبيا تقريباً لأن المهاجمين يحسبون بالفعل حساب هذه الأنماط في قواميسهم.

ما إنتروبيا عبارة مرور Diceware من 4 كلمات؟

باستخدام قائمة Diceware القياسية المكونة من 7,776 كلمة، تساهم كل كلمة بـ 12.92 بت. أربع كلمات تمنح تقريباً 51.7 بت — كافية للاستخدامات منخفضة الأمان. للحسابات المهمة، استخدم 5-6 كلمات (64-78 بت).

هل Math.random() آمن لتوليد كلمات المرور؟

لا. Math.random() هو مولد أرقام شبه عشوائي غير آمن تشفيرياً. استخدم crypto.getRandomValues() في المتصفح أو crypto.randomBytes() في Node.js للتوليد العشوائي الحساس أمنياً.

كيف يؤثر معامل تكلفة bcrypt على الأمان؟

كل زيادة في معامل تكلفة bcrypt تضاعف الحوسبة المطلوبة لتجزئة (وبالتالي لاختراق بالقوة الغاشمة) كلمة مرور. تكلفة 12 تعني 2¹² = 4,096 تكرار، مما يضيف فعلياً 12 بت من الصعوبة فوق إنتروبيا كلمة المرور الذاتية.

ما الذي تغير في إرشادات NIST لكلمات المرور لعام 2024؟

أسقطت NIST SP 800-63B متطلبات التعقيد الإلزامية (الرموز الخاصة الإجبارية، الخلط بين الأحرف) والتغيير الدوري لكلمات المرور. تفضل الإرشادات الجديدة كلمات مرور أطول (15+ حرف موصى به)، والفحص ضد قواعد بيانات كلمات المرور المسربة، والسماح بجميع الأحرف القابلة للطباعة بما في ذلك المسافات.

النقاط الرئيسية

  1. الإنتروبيا = L x log₂(R) — كل بت إضافي يضاعف عدد التخمينات المطلوبة
  2. الطول > التعقيد — إضافة حرف واحد أكثر فعالية من توسيع مجموعة الأحرف
  3. استخدم واجهات التشفيرcrypto.getRandomValues() أو crypto.randomBytes()، أبداً Math.random()
  4. مدير كلمات المرور + التوليد العشوائي هو أفضل ممارسة لمعظم الناس
  5. جانب الخادم مهم أيضاً — استخدم bcrypt أو argon2، لا تخزن كلمات المرور أبداً بـ MD5

هل أنت مستعد لإنشاء كلمة مرور عالية الإنتروبيا؟ جرب مولد كلمات المرور العشوائية — يعرض تحليل الإنتروبيا الفوري لكل كلمة مرور تنشئها.

مقالات ذات صلة

عرض جميع المقالات