ابزار تولید و اعتبارسنجی رمز عبور
ابزار حرفهای تولید و اعتبارسنجی رمز عبور که رمزهای قوی و عبارات عبور قابل یادگیری تولید میکند و از ویژگیهایی مانند تولید دستهای، تضمین یکتایی، ارزیابی استحکام و اعتبارسنجی سیاست پشتیبانی میکند. دارای منبع تصادفی امن از نظر رمزنگاری، مجموعههای کاراکتر قابل پیکربندی، فیلتر کاراکترهای مشابه، آمار حذف تکرار دستهای و قابلیت کپی یککلیک است. شامل نمونه کدهای چندزبانه، پایگاه دانش رمز عبور، بهترین اقدامات امنیتی و ابزارهای تست سیاست است. تمام عملیات به صورت محلی در مرورگر شما انجام میشود تا حریم خصوصی و امنیت حفظ شود.
آزمایشگر خط مشی رمز عبور
- طول
- حروف کوچک
- حروف بزرگ
- ارقام
- نمادها
- متوالی
- تکرارها
- لیست مسدودی
تولید کننده عبارت عبور
برگه راهنمای هش کردن رمز عبور
- از Argon2id با پارامترهای مناسب حافظهسخت استفاده کنید
- زمان ≥ 2 پاس، حافظه ≥ 64 مگابایت (با توجه به محیط تنظیم شود)
- یک نمک منحصر به فرد برای هر کاربر ذخیره کنید؛ به صورت اختیاری میتوانید از یک فلفل (pepper) در لایه برنامه استفاده کنید
- SHA-256 یا SHA-512 را با تکرار ≥ 210 هزار انتخاب کنید (در صورت نیاز تنظیم شود)
- از یک نمک منحصر به فرد برای هر هش استفاده کنید؛ از ارتقاء پارامترها پشتیبانی کنید
- در ورود بعدی کاربر، به پارامترهای با هزینه بالاتر مهاجرت کنید
- هزینه را بین 10 تا 14 تنظیم کنید، بسته به قابلیتهای سرور
- از مشکلات قطع شدن جلوگیری کنید؛ کل رمز عبور را هش کنید
- محدودیت نرخ و نظارت را در نقطههای احراز هویت پیادهسازی کنید
ارزیاب قدرت رمز عبور
قدرت با آنتروپی تقریبی محاسبه میشود: آنتروپی = log2(اندازه مجموعه کاراکترها) × طول رمز. مجموعه کاراکترهای بزرگتر و طول بیشتر، مقاومت در برابر حدس زدن را بهبود میبخشد.
- ضعیف: < 50 بیت — فقط برای یکبار مصرف یا سناریوهای کم ارزش مناسب است
- قابل قبول: 50–80 بیت — برای سناریوهای با ریسک پایین قابل قبول است
- قوی: 80–110 بیت — هدف پیشنهادی استاندارد
- عالی: > 110 بیت — پیشنهاد شده برای حسابهای مدیریت یا حیاتی
توجه: مدلهای حمله در دنیای واقعی ممکن است متفاوت باشند؛ از تکرار رمز عبور خودداری کنید و احراز هویت چند عاملی (MFA) را فعال کنید.
نحوه استفاده
- طول و مجموعه کاراکتر را انتخاب کنید (حروف کوچک/بزرگ/اعداد/نمادها); اختیاری گزینههای «اجتناب از کاراکترهای مشابه» و «نیاز به هر یک» را فعال کنید
- برای کنترل دقیقتر: کاراکترها یا گروههای کاراکتری خاص را حذف کنید یا زیرمجموعههای نماد را انتخاب کنید
- تعداد رمزهای عبور مورد نظر برای تولید را انتخاب کنید و روی «تولید» کلیک کنید؛ نتایج دستهبرداری به طور خودکار حذف تکراری میشوند و میتوانید همه آنها را یکجا کپی کنید
- برای اعتبارسنجی رمزهای عبور موجود از «تستر سیاست» استفاده کنید؛ برای عبارات عبور قابل یادگیری از «تولید کننده عبارت عبور» استفاده کنید
ویژگیها
- منبع تصادفی امن از نظر رمزنگاری (Web Crypto)
- مجموعههای کاراکتر و گروههای نماد قابل پیکربندی
- فیلتر کاراکترهای مشابه و حذفهای سفارشی
- تولید دستهای ۱ تا ۱۰۰ رمز عبور، همیشه یکتا
- معیارهای استحکام و آنتروپی
- تستر سیاست و تولید کننده عبارت عبور
- نمونه کدهای چندزبانه
- کپی یککلیک (تک یا همه)
پایگاه دانش رمز عبور
- آنتروپی ≈ log2(اندازه مجموعه کاراکتر) × طول؛ طول معمولاً نقش بیشتری ایفا میکند
- اهداف توصیه شده: حسابهای عمومی ≥ ۸۰ بیت؛ حسابهای با امتیاز بالا/مالی ≥ ۱۱۰ بیت
- مجموعه کاراکتر بزرگتر + طول بیشتر → مقاومت بیشتر در برابر حدس زدن
- اضافه کردن کورکورانه نمادها کمتر از افزایش طول مؤثر است
- الگوهای قابل پیشبینی را اجتناب کنید (مثلاً همیشه «حرف اول بزرگ + عدد پایانی!»
- ابتدا بر طول کافی تمرکز کنید، سپس به طور متوسط تنوع کاراکتر را افزایش دهید
- توالیهای صفحه کلید (مثلاً qwerty)، بلوکهای تکراری، تاریخ تولد/سالها به راحتی توسط قوانین هدف قرار میگیرند
- استفاده از «رمز عبور ریشه + پسوند سایت» باعث ایجاد استفاده مجدد از نوع، تمرکز ریسک و آسانتر شدن حدس زدن رمز عبور میشود
- هرگز یک رمز عبور یکسان را در چندین وبسایت استفاده نکنید
- از مدیر رمز عبور استفاده کنید؛ اطمینان حاصل کنید رمز عبور منحصربهفرد برای هر سایت دارید؛ MFA را برای حسابهای حیاتی فعال کنید
- از انتقال رمز عبور به صورت متن ساده از کانالهای عمومی اجتناب کنید؛ در صورت نیاز از عبارات عبور «تلفظ پذیر» استفاده کنید
- رمز عبور را فوراً تغییر دهید و منحصربهفرد کنید اگر نشت یا استفاده مجدد تشخیص داده شد
- ترکیب ۴–۶ کلمه تصادفی معمولاً قوی و قابل یادگیری است
- از جداکنندهها استفاده کنید، حروف اول را بزرگ بنویسید و اعداد را در متن قرار دهید تا استحکام و خوانایی رمز عبور افزایش یابد
- از اتصال مستقیم عبارات رایج، ترانههای آهنگ یا نقل قولهای معروف خودداری کنید
بهترین اقدامات امنیت رمز عبور
- از طول کافی استفاده کنید: ۱۶ کاراکتر یا بیشتر برای حسابهای معمولی، ۲۴ کاراکتر یا بیشتر برای حسابهای حیاتی
- برای حفظ قابلیت یادآوری، به عبارت عبور اولویت دهید؛ از مدیر رمز عبور برای ذخیره رمزهای عبور تصادفی با استحکام بالا استفاده کنید
- همیشه امکان فعالسازی احراز هویت چندعاملی (MFA) را فراهم کنید
- هرگز رمزهای عبور را بین سایتها تکرار نکنید - هر حساب باید رمز عبور منحصربهفرد خود را داشته باشد
آنتروپی عدم پیشبینیپذیری را بر اساس طول و اندازه مجموعه کاراکترها اندازهگیری میکند - هرچه بیتهای آنتروپی بالاتر باشد، رمز عبور معمولاً قویتر است.
- برای بیشترین افزایش استحکام، اولویت را به افزایش طول دهید
- در صورت امکان از چندین مجموعه کاراکتر استفاده کنید
- استثنای دادن بیش از حد کاراکترها، استخر کاراکترها را کاهش داده و استحکام را ضعیف میکند
- برای الزامات طول و لیست سیاه رمزهای عبور رایج/افشا شده، به قوانین ترکیبی پیچیده اولویت دهید
- از تناوب اجباری مکرر خودداری کنید؛ فقط در صورت شناسایی نفوذ یا ریسک، رمز عبور را تغییر دهید
- از لیستهای رمزهای عبور به سرقت رفته برای مسدود کردن رمزهای عبور رایج یا افشا شده استفاده کنید
- از ۴ تا ۶ کلمه تصادفی متصل با جداکننده استفاده کنید، مثلاً lake-CARROT-planet_7
- از نقل قولهای معروف، ترانههای آهنگ یا عبارات رایج دیگر خودداری کنید؛ تصادفی بودن مهمتر از «هوشمندی» است
- برای حسابهای حیاتی، از مدیر رمز عبور برای ذخیره رمزهای عبور تصادفی با آنتروپی واقعا بالا استفاده کنید
- «هر مجموعه انتخابی را الزامی کن» تضمین میکند که حداقل یک کاراکتر از هر دسته انتخاب شده ظاهر شود
- «از موارد مشابه خودداری کن» خوانایی را بهبود میبخشد اما اندکی اندازه استخر کاراکتر را کاهش میدهد
- علامتها را میتوان به زیرمجموعهای که سیستم هدف پشتیبانی میکند محدود کرد
- هرگز رمزهای عبور را به صورت ساده ذخیره نکنید؛ از هش قوی (Argon2id/PBKDF2/Bcrypt) با نمک (salt) استفاده کنید
- پارامترها (حافظه/زمان/هزینه) را به درستی پیکربندی کنید؛ در صورت نیاز استفاده از فلفل (pepper) را در نظر بگیرید
- تلاشهای ورود را محدود کرده و شکستها را نظارت کنید؛ در هنگام حملات از CAPTCHA یا تأیید دستگاه استفاده کنید
- به TOTP یا کلیدهای سختافزاری اولویت دهید؛ تا حد امکان از SMS خودداری کنید
- جریانهای بازیابی را با احراز هویت چندعاملی یا تأیید ایمیل ایمن کنید و دوره سرد شدن را اجرا کنید
- کدهای بازیابی پشتیبان را ارائه دهید و به کاربران تشویق کنید آنها را به صورت ایمن ذخیره کنند
- تأخیرهای تدریجی یا قفل را با امتیازدهی ریسک IP/پیادهسازی کنید
- WAFها و محدودیت نرخ را برای APIها و فرمهای ورود اعمال کنید
- برای حمله اعتبارنامه را نظارت کنید و به کاربران تشویق کنید از رمزهای عبور منحصربهفرد استفاده کنند
- از مدیر رمز عبور معتبر برای ذخیرهسازی و پر کردن خودکار استفاده کنید
- هرگز رمزهای عبور را به صورت ساده و بدون رمزنگاری از طریق چت یا ایمیل به اشتراک نگذارید؛ از ابزارهای مدیریت رمز برای تیمها استفاده کنید
- اگر رمزهای عبور را به صورت آفلاین یادداشت میکنید، امنیت فیزیکی آن را تضمین کنید
نحوه تولید رمز عبور از طریق زبانهای برنامهنویسی
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);
}