أداة توليد وتحقق من كلمات المرور
قم بتوليد كلمات مرور قوية وعبارات مرور، مع دعم التحقق من الكتلة والفردية والقوة والاستراتيجية، بالإضافة إلى أمثلة كود متعددة اللغات ومعرفة عملية.
مُختبر سياسة كلمة المرور
النتائج
- الطول
- أحرف صغيرة
- أحرف كبيرة
- أرقام
- رموز
- متسلسلات
- تكرارات
- قائمة الحظر
جميع التحققات تتم محليًا في متصفحك.
مولد عبارة المرور
تُختار الكلمات عشوائيًا بأمان باستخدام Web Crypto. قائمة الكلمات المعروضة محدودة بالحجم بسبب قيود العرض.
جدول مرجع سريع لتشفير كلمات المرور
Argon2id
- استخدم Argon2id مع ضبط معاملات الذاكرة بقوة مناسبة
- عدد التكرارات ≥ 2، ذاكرة ≥ 64MB (اضبط حسب البيئة)
- احتفظ بملح فريد لكل مستخدم؛ يمكن استخدام pepper على مستوى التطبيق إن أردت
PBKDF2
- اختر SHA-256 أو SHA-512، مع عدد تكرارات ≥ 210k (اضبط حسب الحاجة)
- استخدم ملحًا فريدًا لكل تجزئة؛ ودعم ترقية المعاملات
- نقل المستخدمين إلى معاملات أعلى تكلفة عند تسجيل الدخول التالي
BCrypt
- استخدم تكلفة تتراوح بين 10–14 حسب قدرات الخادم
- تجنب مشاكل القطع؛ قم بتشفير كلمة المرور بالكامل
- قم بتطبيق حدود وتتبع على نقاط المصادقة
مرجع: NIST SP 800-63B، OWASP ASVS. يجب مواءمة المعاملات مع قدرات الأجهزة ومستويات الخدمة.
تقييم قوة كلمة المرور
تُستمد القوة تقريبًا من الإنتروبيا: entropy = log2(حجم مجموعة الأحرف) × الطول. زيادة حجم مجموعة الأحرف وطول كلمة المرور يعززان القدرة على مقاومة التخمين.
- ضعيفة: < 50 بت —— مناسبة فقط للسيناريوهات المؤقتة أو ذات القيمة المنخفضة
- متوسطة: 50–80 بت —— مقبولة في السيناريوهات منخفضة المخاطر
- قوية: 80–110 بت —— الهدف الموصى به افتراضيًا
- ممتازة: > 110 بت —— مناسبة للحسابات الإدارية أو الحساسة
ملاحظة: نماذج الهجوم الحقيقية قد تختلف؛ تجنب إعادة استخدام كلمات المرور وفعّل المصادقة متعددة العوامل (MFA).
تعليمات الاستخدام
- اختر الطول ومجموعة الأحرف (صغيرة/كبيرة/أرقام/رموز)؛ فعّل خيار 'تجنب الأحرف المشابهة' و'الطلب لكل نوع' عند الحاجة
- عندما تحتاج إلى تحكم أدق: استبعد أحرفًا أو مجموعات أحرف، أو اختر مجموعات رموز مخصصة
- انقر على توليد؛ إذا كنت بحاجة إلى نتائج متعددة، فعّل التوليد الجماعي وانسخ الكل بنقرة واحدة
- للتحقق من كلمة مرور موجودة، استخدم 'محرر الاختبار الاستراتيجي'؛ ولإنشاء عبارة مرور سهلة التذكر، استخدم 'مولد عبارة المرور'
الميزات
- مصدر عشوائي آمن (Web Crypto)
- مجموعات أحرف ورموز قابلة للتكوين
- تصفية الأحرف المشابهة واستبعاد مخصص
- توليد جماعي، ضمان الفردية، وإحصاءات إزالة التكرار
- مؤشرات القوة والإنتروبيا
- محرر الاختبار الاستراتيجي ومولد عبارة المرور
- أمثلة كود بلغات متعددة (JS、Python、PHP、Go、Java、C#、Rust)
- نسخ واحد (لكلمة واحدة/الكل)
قاعدة معرفة كلمات المرور
1) قوة المرور ودرجة العشوائية
- درجة العشوائية ≈ log2(حجم مجموعة الأحرف) × الطول؛ عادةً ما يكون تأثير الطول أكبر
- الهدف المقترح: حسابات عادية ≥ 80 بت؛ حسابات ذات صلاحيات عالية/مالية ≥ 110 بت
- مجموعة أحرف أكبر + طول أطول → مقاومة أفضل للتخمين
2) الطول مقابل التعقيد
- إضافة رموز بشكل عشوائي أقل فعالية من زيادة الطول
- تجنب الأنماط الثابتة والقابلة للتنبؤ (مثل: الحرف الأول كبير دائمًا + رقم في النهاية!)
- ركز أولًا على ضمان طول كافٍ، ثم زد تنوع الأحرف بشكل معتدل
3) الأخطاء الشائعة وأنماط الاستخدام الخاطئة
- سلسلات لوحة المفاتيح (مثل qwerty)، أو التكرار، أو تواريخ الميلاد/السنوات — سهلة التخمين عبر القواعد
- استخدام "كلمة مرور أساسية + لاحقة الموقع" هو إعادة استخدام متغير، مما يركز المخاطر ويجعله سهل التخمين
- لا تستخدم نفس كلمة المرور عبر مواقع متعددة
4) توصيات إدارة كلمات المرور
- استخدم مدير كلمات المرور؛ استخدم كلمة مرور فريدة لكل موقع؛ شغّل MFA للحسابات المهمة
- تجنب نقل كلمات المرور بصيغة نصية واضحة عبر قنوات عامة؛ عند الضرورة، استخدم "عبارات صوتية سهلة التذكر"
- إذا اكتشفت تسريبًا أو إعادة استخدام، غيّرها فورًا وتأكد من أنها فريدة
5) دليل العبارات المرورية (Passphrase)
- مجموعات من عدة كلمات (4–6 كلمات) غالبًا ما تكون قوية وسهلة التذكّر
- دمج فواصل متنوعة، وكتابة الحروف الأولى بحروف كبيرة، وإدخال أرقام يعزز القوة والوضوح
- تجنب الدمج المباشر للعبارات الشائعة أو الأغاني أو الاقتباسات المعروفة
إرشادات الممارسة الآمنة لكلمات المرور
أفضل الممارسات
- استخدم أطوالًا كافية قدر الإمكان: 16+ حرفًا للحسابات العادية، و24+ حرفًا للحسابات الحساسة
- للاحتياجات التذكارية، ابدأ بعبارات المرور؛ يُوصى باستخدام مدير كلمات المرور لتخزين كلمات مرور عشوائية عالية القوة
- فعّل المصادقة متعددة العوامل (MFA) حيثما أمكن
- لا تستخدم نفس كلمة المرور عبر مواقع مختلفة؛ يجب أن تكون كل حساب فريدًا
الإنتروبيا والقوة
تعكس الإنتروبيا درجة عدم القدرة على التنبؤ بناءً على الطول وحجم مجموعة الأحرف؛ كلما زاد عدد بتات الإنتروبيا، زادت القوة عادةً.
- زِد الطول أولًا للحصول على أكبر فائدة
- استخدم مجموعات أحرف متنوعة عندما يكون ذلك ممكنًا
- استبعاد الأحرف بشكل مفرط يقلص حجم مجموعة الأحرف ويُضعف القوة
السياسات والتبديل
- ركّز على الطول وحظر كلمات المرور الشائعة/المتسربة بدلاً من قواعد التركيب المعقدة
- تجنب التبديل الإجباري المتكرر؛ غيّرها فقط عند حدوث تسريب أو خطر
- استخدم قوائم كلمات المرور المتسربة لمنع استخدام كلمات مرور شائعة أو متسربة
عبارات المرور
- استخدم 4–6 كلمات عشوائية مفصولة بفواصل، مثل lake-CARROT-planet_7
- تجنّب الاقتباسات الشهيرة أو الأغاني أو العبارات الشائعة؛ العشوائية أهم من الذكاء
- للحسابات الحساسة، يُوصى باستخدام مدير كلمات المرور لتخزين كلمات مرور عشوائية ذات إنتروبيا عالية حقًا
نصائح إعداد التوليد
- "Require each selected set" يضمن ظهور عنصر واحد على الأقل من كل مجموعة مختارة
- "Avoid similar" يزيد من قابلية القراءة، لكنه يقلل قليلاً من حجم مجموعة الأحرف
- يمكن تقييد الرموز إلى مجموعة فرعية مقبولة من قبل النظام المستهدف
التخزين في الخادم
- لا تخزن أبدًا كلمات المرور بصيغة نصية واضحة؛ استخدم تجزئة قوية (Argon2id/PBKDF2/BCrypt) مع ملح
- اضبط المعلمات بشكل مناسب (الذاكرة/الوقت/التكلفة)، واستخدم pepper عند الحاجة
- قيّد معدل المحاولات وراقب المحاولات الفاشلة؛ عند الهجوم، أضف رمز CAPTCHA أو التحقق من الجهاز
المصادقة متعددة العوامل والاستعادة
- افضل الخيارات هي TOTP/مفاتيح أجهزة مادية؛ تجنّب الرسائل القصيرة (SMS) قدر الإمكان
- احمِ عملية الاستعادة: استخدم مصادقة متعددة العوامل أو التحقق بالبريد الإلكتروني مع فترة تأخير
- قدم رموز استعادة احتياطية وشجّع المستخدمين على حفظها بأمان
حماية ضد هجمات القوة الغاشمة
- استخدم تأخير تدريجي/قفل مع تقييم مخاطر IP/الجهاز
- قم بتكوين WAF/تحديد معدلات لنموذج تسجيل الدخول وواجهات برمجة التطبيقات (API)
- راقب هجمات إعادة الاستخدام وشجّع المستخدمين على استخدام كلمات مرور فريدة
التخزين والمعالجة المحليين
- استخدم مدير كلمات مرور موثوق لحفظها وملء تلقائي
- لا تشارك كلمات المرور بصيغة نصية واضحة عبر الدردشة أو البريد الإلكتروني؛ استخدم أدوات إدارة السرية للفرق
- إذا كنت بحاجة إلى التسجيل اليدوي، تأكد من السلامة المادية
إخلاء المسؤولية: هذه الأداة تولد كلمات المرور محليًا في المتصفح باستخدام Web Crypto؛ لا يتم إرسال أي بيانات إلى الخادم.
كيفية توليد كلمات مرور عبر لغات البرمجة
JavaScript(Web Crypto)
function randomPassword(length = 16, sets = {lower:true, upper:true, digits:true, symbols:true}) {
const pools = {
lower: 'abcdefghijklmnopqrstuvwxyz',
upper: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
digits: '0123456789',
symbols: '!@#$%^&*+-=_~`|/?()[]{}<>,.;:\'\"'
};
let pool = '';
for (const k of Object.keys(sets)) if (sets[k]) pool += pools[k];
if (!pool) throw new Error('No charset');
const bytes = new Uint32Array(length);
crypto.getRandomValues(bytes);
let out = '';
for (let i = 0; i < length; i++) out += pool[bytes[i] % pool.length];
return out;
}
Python(secrets)
import secrets
def random_password(length=16, lower=True, upper=True, digits=True, symbols=True):
pools = {
'lower': 'abcdefghijklmnopqrstuvwxyz',
'upper': 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
'digits': '0123456789',
'symbols': '!@#$%^&*+-=_~`|/?()[]{}<>,.;:\'\"'
}
pool = ''.join(v for k, v in pools.items() if locals()[k])
if not pool:
raise ValueError('No charset')
return ''.join(secrets.choice(pool) for _ in range(length))
PHP(random_int)
function random_password($length = 16, $sets = ['lower'=>true,'upper'=>true,'digits'=>true,'symbols'=>true]) {
$pools = [
'lower' => 'abcdefghijklmnopqrstuvwxyz',
'upper' => 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
'digits' => '0123456789',
'symbols' => '!@#$%^&*+-=_~`|/?()[]{}<>,.;:\'\"'
];
$pool = '';
foreach ($sets as $k => $on) if ($on) $pool .= $pools[$k];
if ($pool === '') throw new Exception('No charset');
$out = '';
for ($i = 0; $i < $length; $i++) {
$out .= $pool[random_int(0, strlen($pool)-1)];
}
return $out;
}
Go(crypto/rand)
package main
import (
"crypto/rand"
"math/big"
)
func RandomPassword(length int, pool string) (string, error) {
out := make([]byte, length)
for i := 0; i < length; i++ {
nBig, err := rand.Int(rand.Reader, big.NewInt(int64(len(pool))))
if err != nil { return "", err }
out[i] = pool[nBig.Int64()]
}
return string(out), nil
}
Java(SecureRandom)
import java.security.SecureRandom;
public class Pw {
static final String POOL = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*+-=_~`|/?()[]{}<>,.;:'\"";
static final SecureRandom SR = new SecureRandom();
static String randomPassword(int length) {
StringBuilder sb = new StringBuilder(length);
for (int i = 0; i < length; i++) {
int idx = SR.nextInt(POOL.length());
sb.append(POOL.charAt(idx));
}
return sb.toString();
}
}
C#(.NET RandomNumberGenerator)
using System;
using System.Security.Cryptography;
public static class Pw {
public static string RandomPassword(int length, string pool) {
using var rng = RandomNumberGenerator.Create();
var bytes = new byte[length];
rng.GetBytes(bytes);
var chars = new char[length];
for (int i = 0; i < length; i++) {
chars[i] = pool[bytes[i] % pool.Length];
}
return new string(chars);
}
}
Rust(rand + getrandom)
use rand::rngs::OsRng;
use rand::RngCore;
fn random_password(length: usize, pool: &str) -> String {
let mut bytes = vec![0u8; length];
OsRng.fill_bytes(&mut bytes);
let chars: Vec = pool.chars().collect();
bytes
.iter()
.map(|b| chars[(*b as usize) % chars.len()])
.collect()
}
fn main() {
let pool = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*+-=_~`|/?()[]{}<>,.;:'\"";
let pw = random_password(16, pool);
println!("{}", pw);
}