أداة توليد وكلمة المرور والتحقق منها
أداة احترافية لتوليد وكلمة المرور والتحقق منها تُنشئ كلمات مرور قوية وعبارات مرور سهلة التذكر مع دعم للتوليد بالدفعات، وضمان التفرد، وتقييم القوة، والتحقق من السياسات. تتميز بمصدر عشوائي آمن تشفيرياً، ومجموعات أحرف قابلة للتكوين، وتصفية الأحرف المتشابهة، وإحصائيات إزالة الازدواج للدفعات، ووظيفة النسخ بنقرة واحدة. تشمل أمثلة كود متعددة اللغات، وقاعدة معارف كلمات المرور، وأفضل ممارسات الأمان، وأدوات اختبار السياسات. يتم تنفيذ جميع العمليات محلياً في متصفحك، مما يضمن الخصوصية والأمان.
مُختبر سياسة كلمة المرور
- الطول
- الأحرف الصغيرة
- الأحرف الكبيرة
- الأرقام
- الرموز
- متتالية
- التكرارات
- القائمة المحظورة
مولد عبارات المرور
ورقة الغش لتجزئة كلمات المرور
- استخدم Argon2id مع معلمات معقولة تتطلب ذاكرة
- الوقت ≥ 2 مرات، الذاكرة ≥ 64 ميجابايت (قم بالضبط حسب البيئة)
- قم بتخزين ملح فريد لكل مستخدم؛ يمكنك اختياريًا استخدام فلفل (pepper) على طبقة التطبيق
- اختر SHA-256 أو SHA-512 مع تكرارات ≥ 210 ألفًا (قم بالضبط حسب الحاجة)
- استخدم ملحًا فريدًا لكل تجزئة؛ دعم تحديث المعلمات
- انتقل إلى معلمات أعلى تكلفة أثناء تسجيل الدخول التالي للمستخدم
- اضبط التكلفة بين 10–14، بناءً على قدرات الخادم
- تجنب مشكلات القص؛ تجزئة كلمة المرور بالكامل
- نفذ حدود المعدل والمراقبة على نقاط نهاية المصادقة
مقياس قوة كلمة المرور
تقترب القوة من الإنتروبيا: الإنتروبيا = لوغاريتم2(حجم مجموعة الأحرف) × الطول. حجم مجموعة أحرف أكبر وطول أطول يحسنان المقاومة ضد الاخمناء.
- ضعيفة: < 50 بت —— مناسبة فقط للسيناريوهات لمرة واحدة أو ذات قيمة منخفضة
- مقبولة: 50–80 بت —— مقبولة للسيناريوهات ذات المخاطر المنخفضة
- قوية: 80–110 بت —— الهدف الافتراضي الموصى به
- ممتازة: > 110 بت —— موصى به لحسابات المسؤول أو الحسابات الحرجة
ملاحظة: قد تختلف نماذج الهجوم في العالم الحقيقي؛ تجنب إعادة استخدام كلمات المرور وقم بتفعيل المصادقة متعددة العوامل (MFA).
كيفية الاستخدام
- حدد الطول ومجموعة الأحرف (أحرف صغيرة/كبيرة/أرقام/رموز); يمكنك تفعيل خيار "تجنب المتشابه" و"الطلب لكل" اختيارياً
- لتحكم أدق: استبعاد أحرف أو مجموعات أحرف معينة، أو اختر مجموعات الرموز الفرعية
- حدد عدد كلمات المرور التي تريد إنشاؤها، ثم اضغط على إنشاء؛ يتم إزالة التكرارات من نتائج الدفعات تلقائيًا ويمكن نسخها جميعًا دفعة واحدة
- للتحقق من كلمات المرور الموجودة، استخدم "مختبر السياسات"; ولعبارات المرور سهلة التذكر، استخدم "مولد عبارات المرور"
المميزات
- مصدر عشوائي آمن تشفيرياً (Web Crypto)
- مجموعات أحرف ومجموعات رموز قابلة للتكوين
- تصفية الأحرف المتشابهة واستبعادات مخصصة
- إنشاء دفعات من 1 إلى 100 كلمة مرور، فريدة دائمًا
- مقاييس القوة والانتروبي
- مختبر السياسات ومولد عبارات المرور
- أمثلة كود متعددة اللغات
- النسخ بنقرة واحدة (مفرد أو الكل)
قاعدة معارف كلمات المرور
- الانتروبي ≈ لوغاريتم2(حجم مجموعة الأحرف) × الطول; عادةً ما يساهم الطول بشكل أكبر
- الأهداف الموصى بها: الحسابات العامة ≥ 80 بت; الحسابات ذات الامتيازات العالية/الحسابات المالية ≥ 110 بت
- مجموعة أحرف أكبر + طول أطول → مقاومة أكبر للاختراق
- إضافة الرموز بشكل عشوائي أقل فعالية من زيادة الطول
- تجنب الأنماط القابلة للتنبؤ (مثل: دائماً 'أول حرف كبير + رقم نهائي!')
- أعط الأولوية للطول الكافي، ثم زيادة تنوع الأحرف بشكل معتدل
- تسلسلات لوحة المفاتيح (مثل: qwerty)، الكتل المتكررة، أعياد الميلاد/السنوات تستهدفها القواعد بسهولة
- استخدام 'كلمة مرور الجذر + لاحقة الموقع' يخلق إعادة استخدام المتغيرات، مما يركز المخاطر ويجعل كلمات المرور أسهل في الاختراق
- لا تعيد أبداً استخدام نفس كلمة المرور عبر مواقع ويب متعددة
- استخدم مدير كلمات المرور; تأكد من تفرد كلمات المرور لكل موقع; قم بتفعيل MFA للحسابات الحرجة
- تجنب نقل كلمات المرور كنص عادي عبر القنوات العامة; استخدم عبارات مرور 'قابلة للنطق' عند الضرورة
- قم بتغيير كلمات المرور فوراً وجعلها تفرد إذا تم اكتشاف تسرب أو إعادة استخدام
- توليفات من 4-6 كلمات عشوائية عادةً ما تكون قوية وسهلة التذكر
- امزق الفواصل، اكتب الحروف بأحرف كبيرة في البداية، وأدخل أرقامًا لتعزيز القابلية للقراءة والقوة
- تجنب ربط العبارات الشائعة أو كلمات الأغاني أو الاقتباسات المشهورة مباشرة
أفضل ممارسات أمان كلمات المرور
- استخدم طولًا كافيًا: 16 حرفًا فأكثر للحسابات العامة، و24 حرفًا فأكثر للحسابات الحيوية
- للتذكر، أعطِ الأولوية للعبارات المرورية؛ استخدم مدير كلمات المرور لتخزين كلمات مرور عشوائية عالية القوة
- قم بتفعيل المصادقة متعددة العوامل (MFA) كلما أمكن
- لا تعيد استخدام كلمات المرور أبدًا عبر المواقع - يجب أن يكون لكل حساب كلمة مرور فريدة
تقيس الإنتروبيا عدم القدرة على التنبؤ بناءً على الطول وحجم مجموعة الأحرف - كلما زادت بتات الإنتروبيا، كانت كلمة المرور أقوى عادةً
- أعطِ الأولوية لزيادة الطول للحصول على أقصى زيادة في القوة
- استخدم مجموعات أحرف متعددة عند الإمكان
- استبعاد الكثير من الأحرف يقلل من تجمع الأحرف ويضعف القوة
- أفضل متطلبات الطول والقوائم السوداء لكلمات المرور الشائعة / المسربة بدلاً من قواعد التكوين المعقدة
- تجنب التدوير الإلزامي المتكرر؛ قم بالتغيير فقط عند اكتشاف اختراق أو خطر
- استخدم قوائم كلمات المرور المخترقة لحظر كلمات المرور الشائعة أو المسربة
- استخدم 4-6 كلمات عشوائية مcombined بفواصل، مثلاً: lake-CARROT-planet_7
- تجنب الاقتباسات المشهورة أو كلمات الأغاني أو العبارات الشائعة الأخرى؛ العشوائية أهم من "الذكاء"
- للحسابات الحيوية، استخدم مدير كلمات المرور لتخزين كلمات مرور عشوائية عالية الإنتروبيا حقًا
- "طلب كل مجموعة مختارة" يضمن ظهور حرف واحد على الأقل من كل فئة مختارة
- "تجنب المتشابه" يحسن القابلية للقراءة ولكنه يقلل قليلاً من حجم تجمع الأحرف
- يمكن تقييد الرموز إلى مجموعة فرعية تدعمها النظام المستهدف
- لا تخزن كلمات المرور أبدًا كنص عادي؛ استخدم تجزئة قوية (Argon2id / PBKDF2 / Bcrypt) مع الملح (salt)
- قم بتكوين المعلمات (الذاكرة / الوقت / التكلفة) بشكل مناسب؛ فكر في استخدام الفلفل (pepper) عند الحاجة
- قم بتحديد حد لمحاولات تسجيل الدخول ومراقبة الفشل؛ تطبيق CAPTCHA أو التحقق من الجهاز أثناء الهجمات
- أفضل مفاتيح TOTP أو الأجهزة؛ تجنب الرسائل النصية كلما أمكن
- أمن تدفقات الاسترداد بالمصادقة متعددة العوامل أو التحقق عبر البريد الإلكتروني وفرض فترات التهدئة (cooldown)
- قدم رموز استرداد احتياطية وشجع المستخدمين على تخزينها بأمان
- قم بتطبيق تأخيرات تدريجية أو أقفال مع تسجيل مخاطر IP / الجهاز
- تطبيق WAFs والحدود السرعة (rate limiting) على واجهات برمجة التطبيقات (APIs) ونماذج تسجيل الدخول
- راقب هجمات إعادة استخدام بيانات الاعتماد (credential stuffing) وشجع المستخدمين على تبني كلمات مرور فريدة
- استخدم مدير كلمات مرور موثوق للتخزين والملء التلقائي
- لا تشارك كلمات المرور أبدًا كنص عادي عبر الدردشة أو البريد الإلكتروني؛ استخدم أدوات إدارة الأسرار للفرق
- إذا قمت بتدوين كلمات المرور بدون اتصال بالإنترنت، تأكد من أمانها المادي
كيفية توليد كلمات المرور عبر لغات البرمجة
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');
// Rejection sampling removes modulo bias
const limit = Math.floor(0x100000000 / pool.length) * pool.length;
const buf = new Uint32Array(1);
let out = '';
for (let i = 0; i < length; i++) {
do { crypto.getRandomValues(buf); } while (buf[0] >= limit);
out += pool[buf[0] % pool.length];
}
return out;
}
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))
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;
}
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
}
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();
}
}
using System;
using System.Security.Cryptography;
public static class Pw {
public static string RandomPassword(int length, string pool) {
// GetInt32 draws an unbiased value in [0, pool.Length)
var chars = new char[length];
for (int i = 0; i < length; i++) {
chars[i] = pool[RandomNumberGenerator.GetInt32(pool.Length)];
}
return new string(chars);
}
}
use rand::rngs::OsRng;
use rand::Rng;
fn random_password(length: usize, pool: &str) -> String {
// gen_range is uniform, so there is no modulo bias
let chars: Vec = pool.chars().collect();
(0..length)
.map(|_| chars[OsRng.gen_range(0..chars.len())])
.collect()
}
fn main() {
let pool = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*+-=_~`|/?()[]{}<>,.;:'\"";
let pw = random_password(16, pool);
println!("{}", pw);
}