ابزار تولید و اعتبارسنجی رمز عبور

ابزار حرفه‌ای تولید و اعتبارسنجی رمز عبور که رمزهای قوی و عبارات عبور قابل یادگیری تولید می‌کند و از ویژگی‌هایی مانند تولید دسته‌ای، تضمین یکتایی، ارزیابی استحکام و اعتبارسنجی سیاست پشتیبانی می‌کند. دارای منبع تصادفی امن از نظر رمزنگاری، مجموعه‌های کاراکتر قابل پیکربندی، فیلتر کاراکترهای مشابه، آمار حذف تکرار دسته‌ای و قابلیت کپی یک‌کلیک است. شامل نمونه کدهای چندزبانه، پایگاه دانش رمز عبور، بهترین اقدامات امنیتی و ابزارهای تست سیاست است. تمام عملیات به صورت محلی در مرورگر شما انجام می‌شود تا حریم خصوصی و امنیت حفظ شود.

تولید کننده رمز عبور

گروه‌های نماد را انتخاب کنید
نکته: برای حذف کاراکترها، گروه‌ها را انتخاب کنید یا مستقیماً روی هر کاراکتر کلیک کنید.
نتیجه

آزمایشگر خط مشی رمز عبور

نتایج
  • طول
  • حروف کوچک
  • حروف بزرگ
  • ارقام
  • نمادها
  • متوالی
  • تکرارها
  • لیست مسدودی
تمام بررسی‌ها به صورت محلی در مرورگر شما انجام می‌شود.

تولید کننده عبارت عبور

کلمات به طور یکنواخت با تصادفی‌ness رمزنگاری امن (Web Crypto) از لیست ۱۲۷۱ کلمه‌ای بدون ابهام انتخاب می‌شوند؛ ۶ کلمه حدود ۶۲ بیت آنتروپی دارند — برای قدرت بیشتر از ۸ کلمه استفاده کنید.

برگه راهنمای هش کردن رمز عبور

Argon2id
  • از Argon2id با پارامترهای مناسب حافظه‌سخت استفاده کنید
  • زمان ≥ 2 پاس، حافظه ≥ 64 مگابایت (با توجه به محیط تنظیم شود)
  • یک نمک منحصر به فرد برای هر کاربر ذخیره کنید؛ به صورت اختیاری می‌توانید از یک فلفل (pepper) در لایه برنامه استفاده کنید
PBKDF2
  • SHA-256 یا SHA-512 را با تکرار ≥ 210 هزار انتخاب کنید (در صورت نیاز تنظیم شود)
  • از یک نمک منحصر به فرد برای هر هش استفاده کنید؛ از ارتقاء پارامترها پشتیبانی کنید
  • در ورود بعدی کاربر، به پارامترهای با هزینه بالاتر مهاجرت کنید
BCrypt
  • هزینه را بین 10 تا 14 تنظیم کنید، بسته به قابلیت‌های سرور
  • از مشکلات قطع شدن جلوگیری کنید؛ کل رمز عبور را هش کنید
  • محدودیت نرخ و نظارت را در نقطه‌های احراز هویت پیاده‌سازی کنید
منبع: NIST SP 800-63B, OWASP ASVS. پارامترها باید با قابلیت‌های سخت‌افزاری و SLOs همخوانی داشته باشند.

ارزیاب قدرت رمز عبور

قدرت با آنتروپی تقریبی محاسبه می‌شود: آنتروپی = log2(اندازه مجموعه کاراکترها) × طول رمز. مجموعه کاراکترهای بزرگتر و طول بیشتر، مقاومت در برابر حدس زدن را بهبود می‌بخشد.

  • ضعیف: < 50 بیت — فقط برای یکبار مصرف یا سناریوهای کم ارزش مناسب است
  • قابل قبول: 50–80 بیت — برای سناریوهای با ریسک پایین قابل قبول است
  • قوی: 80–110 بیت — هدف پیشنهادی استاندارد
  • عالی: > 110 بیت — پیشنهاد شده برای حساب‌های مدیریت یا حیاتی

توجه: مدل‌های حمله در دنیای واقعی ممکن است متفاوت باشند؛ از تکرار رمز عبور خودداری کنید و احراز هویت چند عاملی (MFA) را فعال کنید.

نحوه استفاده

  • طول و مجموعه کاراکتر را انتخاب کنید (حروف کوچک/بزرگ/اعداد/نمادها); اختیاری گزینه‌های «اجتناب از کاراکترهای مشابه» و «نیاز به هر یک» را فعال کنید
  • برای کنترل دقیق‌تر: کاراکترها یا گروه‌های کاراکتری خاص را حذف کنید یا زیرمجموعه‌های نماد را انتخاب کنید
  • تعداد رمزهای عبور مورد نظر برای تولید را انتخاب کنید و روی «تولید» کلیک کنید؛ نتایج دسته‌برداری به طور خودکار حذف تکراری می‌شوند و می‌توانید همه آن‌ها را یکجا کپی کنید
  • برای اعتبارسنجی رمزهای عبور موجود از «تستر سیاست» استفاده کنید؛ برای عبارات عبور قابل یادگیری از «تولید کننده عبارت عبور» استفاده کنید

ویژگی‌ها

  • منبع تصادفی امن از نظر رمزنگاری (Web Crypto)
  • مجموعه‌های کاراکتر و گروه‌های نماد قابل پیکربندی
  • فیلتر کاراکترهای مشابه و حذف‌های سفارشی
  • تولید دسته‌ای ۱ تا ۱۰۰ رمز عبور، همیشه یکتا
  • معیارهای استحکام و آنتروپی
  • تستر سیاست و تولید کننده عبارت عبور
  • نمونه کدهای چندزبانه
  • کپی یک‌کلیک (تک یا همه)

نمونه‌های تولید رمز عبور

قوی
طول 24، شامل حروف بزرگ، حروف کوچک، ارقام و نمادها
قابل یادگیری
طول 16، شامل حروف بزرگ، حروف کوچک و ارقام؛ از کاراکترهای مشابه اجتناب می‌کند

پایگاه دانش رمز عبور

۱) استحکام و آنتروپی رمز عبور
  • آنتروپی ≈ log2(اندازه مجموعه کاراکتر) × طول؛ طول معمولاً نقش بیشتری ایفا می‌کند
  • اهداف توصیه شده: حساب‌های عمومی ≥ ۸۰ بیت؛ حساب‌های با امتیاز بالا/مالی ≥ ۱۱۰ بیت
  • مجموعه کاراکتر بزرگتر + طول بیشتر → مقاومت بیشتر در برابر حدس زدن
۲) طول در مقابل پیچیدگی
  • اضافه کردن کورکورانه نمادها کمتر از افزایش طول مؤثر است
  • الگوهای قابل پیش‌بینی را اجتناب کنید (مثلاً همیشه «حرف اول بزرگ + عدد پایانی!»
  • ابتدا بر طول کافی تمرکز کنید، سپس به طور متوسط تنوع کاراکتر را افزایش دهید
۳) اشتباهات رایج و ضد الگوها
  • توالی‌های صفحه کلید (مثلاً qwerty)، بلوک‌های تکراری، تاریخ تولد/سال‌ها به راحتی توسط قوانین هدف قرار می‌گیرند
  • استفاده از «رمز عبور ریشه + پسوند سایت» باعث ایجاد استفاده مجدد از نوع، تمرکز ریسک و آسان‌تر شدن حدس زدن رمز عبور می‌شود
  • هرگز یک رمز عبور یکسان را در چندین وب‌سایت استفاده نکنید
۴) توصیه‌های مدیریت رمز عبور
  • از مدیر رمز عبور استفاده کنید؛ اطمینان حاصل کنید رمز عبور منحصربه‌فرد برای هر سایت دارید؛ MFA را برای حساب‌های حیاتی فعال کنید
  • از انتقال رمز عبور به صورت متن ساده از کانال‌های عمومی اجتناب کنید؛ در صورت نیاز از عبارات عبور «تلفظ پذیر» استفاده کنید
  • رمز عبور را فوراً تغییر دهید و منحصربه‌فرد کنید اگر نشت یا استفاده مجدد تشخیص داده شد
۵) راهنمای عبارت عبور
  • ترکیب ۴–۶ کلمه تصادفی معمولاً قوی و قابل یادگیری است
  • از جداکننده‌ها استفاده کنید، حروف اول را بزرگ بنویسید و اعداد را در متن قرار دهید تا استحکام و خوانایی رمز عبور افزایش یابد
  • از اتصال مستقیم عبارات رایج، ترانه‌های آهنگ یا نقل قول‌های معروف خودداری کنید

بهترین اقدامات امنیت رمز عبور

روش‌های بهینه
  • از طول کافی استفاده کنید: ۱۶ کاراکتر یا بیشتر برای حساب‌های معمولی، ۲۴ کاراکتر یا بیشتر برای حساب‌های حیاتی
  • برای حفظ قابلیت یادآوری، به عبارت عبور اولویت دهید؛ از مدیر رمز عبور برای ذخیره رمزهای عبور تصادفی با استحکام بالا استفاده کنید
  • همیشه امکان فعال‌سازی احراز هویت چندعاملی (MFA) را فراهم کنید
  • هرگز رمزهای عبور را بین سایت‌ها تکرار نکنید - هر حساب باید رمز عبور منحصربه‌فرد خود را داشته باشد
آنتروپی و استحکام

آنتروپی عدم پیش‌بینی‌پذیری را بر اساس طول و اندازه مجموعه کاراکترها اندازه‌گیری می‌کند - هرچه بیت‌های آنتروپی بالاتر باشد، رمز عبور معمولاً قوی‌تر است.

  • برای بیشترین افزایش استحکام، اولویت را به افزایش طول دهید
  • در صورت امکان از چندین مجموعه کاراکتر استفاده کنید
  • استثنای دادن بیش از حد کاراکترها، استخر کاراکترها را کاهش داده و استحکام را ضعیف می‌کند
سیاست‌ها و تناوب تغییر رمز عبور
  • برای الزامات طول و لیست سیاه رمزهای عبور رایج/افشا شده، به قوانین ترکیبی پیچیده اولویت دهید
  • از تناوب اجباری مکرر خودداری کنید؛ فقط در صورت شناسایی نفوذ یا ریسک، رمز عبور را تغییر دهید
  • از لیست‌های رمزهای عبور به سرقت رفته برای مسدود کردن رمزهای عبور رایج یا افشا شده استفاده کنید
عبارات عبور
  • از ۴ تا ۶ کلمه تصادفی متصل با جداکننده استفاده کنید، مثلاً lake-CARROT-planet_7
  • از نقل قول‌های معروف، ترانه‌های آهنگ یا عبارات رایج دیگر خودداری کنید؛ تصادفی بودن مهم‌تر از «هوشمندی» است
  • برای حساب‌های حیاتی، از مدیر رمز عبور برای ذخیره رمزهای عبور تصادفی با آنتروپی واقعا بالا استفاده کنید
نکات تنظیمات تولید
  • «هر مجموعه انتخابی را الزامی کن» تضمین می‌کند که حداقل یک کاراکتر از هر دسته انتخاب شده ظاهر شود
  • «از موارد مشابه خودداری کن» خوانایی را بهبود می‌بخشد اما اندکی اندازه استخر کاراکتر را کاهش می‌دهد
  • علامت‌ها را می‌توان به زیرمجموعه‌ای که سیستم هدف پشتیبانی می‌کند محدود کرد
ذخیره‌سازی سمت سرور
  • هرگز رمزهای عبور را به صورت ساده ذخیره نکنید؛ از هش قوی (Argon2id/PBKDF2/Bcrypt) با نمک (salt) استفاده کنید
  • پارامترها (حافظه/زمان/هزینه) را به درستی پیکربندی کنید؛ در صورت نیاز استفاده از فلفل (pepper) را در نظر بگیرید
  • تلاش‌های ورود را محدود کرده و شکست‌ها را نظارت کنید؛ در هنگام حملات از CAPTCHA یا تأیید دستگاه استفاده کنید
احراز هویت چندعاملی و بازیابی
  • به TOTP یا کلیدهای سخت‌افزاری اولویت دهید؛ تا حد امکان از SMS خودداری کنید
  • جریان‌های بازیابی را با احراز هویت چندعاملی یا تأیید ایمیل ایمن کنید و دوره سرد شدن را اجرا کنید
  • کدهای بازیابی پشتیبان را ارائه دهید و به کاربران تشویق کنید آن‌ها را به صورت ایمن ذخیره کنند
حفاظت از حمله brute force
  • تأخیرهای تدریجی یا قفل را با امتیازدهی ریسک 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');
  // 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;
}
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) {
    // 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);
  }
}
Rust (rand + getrandom)
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);
}