پاس ورڈ جنریٹر اور چیکر ٹول
مضبوط پاس ورڈز اور پاس فریزز بنائیں، جس میں بیچ، منفردگی، طاقت اور پالیسی چیکنگ شامل ہے، اور متعدد زبانوں کے کوڈ مثالیں اور عملی معلومات فراہم کرتا ہے۔
پاسورڈ پالیسی ٹیسٹر
نتائج
- لمبائی
- چھوٹے حروف
- بڑے حروف
- اعداد
- سمبولز
- مسلسل سلسلہ
- تکرار
- بلیک لسٹ
سبھی جانچ آپ کے براؤزر میں مقامی طور پر کی جاتی ہے۔
پاسفریز جنریٹر
لفظ محفوظ واقعی رینڈم (Web Crypto) کے ذریعے منتخب کیے جاتے ہیں۔ ڈیمو لفظوں کی فہرست حجم کی وجہ سے محدود ہے۔
پاس ورڈ ہیش تفصیلی جدول
Argon2id
- Argon2id استعمال کریں اور مناسب میموری عملی پیرامیٹر سیٹ کریں
- وقت ≥ 2 چکر، میموری ≥ 64MB (ماحول کے مطابق ترتیب دیں)
- ہر صارف کے لیے الگ سولٹ محفوظ کریں؛ ایپ لیول پر pepper استعمال کرنا اختیاری ہے
PBKDF2
- SHA-256 یا SHA-512 منتخب کریں، تکرار ≥ 210k (ضرورت کے مطابق ترتیب دیں)
- ہر ہیش کے لیے منفرد سولٹ استعمال کریں؛ پیرامیٹرز کو اپ گریڈ کرنے کی سہولت
- صارف اگلی بار لاگ ان کرتے وقت زیادہ لاگت والے پیرامیٹرز پر منتقل ہو جائے
BCrypt
- لاگت 10–14، سرور کی صلاحیت کے مطابق
- قطع کرنے کی مسائل سے بچیں؛ مکمل پاس ورڈ کو ہیش کریں
- اتھینٹیکیشن اندپوائنٹس پر لیمٹنگ اور نگرانی کریں
حوالہ: NIST SP 800-63B، OWASP ASVS۔ پیرامیٹرز ہارڈویئر کی صلاحیت اور SLO کے مطابق ہونے چاہئیں۔
پاسورڈ طاقت کا جائزہ
طاقت تقریباً اینٹروپی سے متعلق ہے: اینٹروپی = log2(کریکٹر پول کا سائز) × لمبائی۔ بڑا کریکٹر پول اور زیادہ لمبائی غلط اندازہ لگانے کی صلاحیت بڑھاتی ہے۔
- کمزور: < 50 بٹ —— صرف ایک بار استعمال یا کم قیمت والے مناظر کے لیے مناسب
- اعتدالی: 50–80 بٹ —— کم خطرہ والے مناظر کے لیے قابل قبول
- طاقتور: 80–110 بٹ —— تجویز کردہ ڈیفالٹ مقصد
- بہت طاقتور: > 110 بٹ —— انتظامیہ / اہم اکاؤنٹس کے لیے مناسب
نوٹ: حقیقی حملہ کے ماڈل مختلف ہو سکتے ہیں؛ پاسورڈ دوبارہ استعمال نہ کریں اور متعدد عوامل کی توثیق (MFA) فعال کریں۔
استعمال کی ہدایات
- لمبائی اور حروف کے مجموعے (چھوٹے/بڑے/انگریزی اعداد/نمائندگی) منتخب کریں؛ ضرورت پڑنے پر 'مشابہ حروف کو نظر انداز کریں' اور 'ہر قسم کا حرف ضروری ہے' کو آن کریں
- مزید تفصیلی کنٹرول کے لیے: حروف یا حروف کے گروہز کو مستثنیٰ کریں، یا علامتوں کے گروہ منتخب کریں
- جنریٹ کلک کریں؛ اگر آپ کو کئی نتائج درکار ہوں تو بیچ جنریشن کو آن کریں اور تمام کو ایک کلک سے کاپی کریں
- موجودہ پاس ورڈ کی جانچ کے لیے 'پالیسی ٹیسٹر' استعمال کریں؛ آسان یاد رکھنے والے پاس فریز کے لیے 'پاس فریز جنریٹر' استعمال کریں
خصوصیات
- محفوظ تصادفی ذرائع (Web Crypto)
- قابل تنظیم حروف کے مجموعے اور علامتوں کے گروہ
- مشابہ حروف کی فلٹرنگ اور مخصوص مستثنیات
- بیچ جنریشن، منفردگی کی ضمانت اور ڈپلیکیٹس کی شماریات
- طاقت اور اینٹروپی اشارے
- پالیسی ٹیسٹر اور پاس فریز جنریٹر
- متعدد زبانوں کی کوڈ مثالیں (JS、Python、PHP、Go、Java、C#、Rust)
- ایک کلک سے کاپی (ایک یا تمام)
پاس ورڈ معرفت کا ذخیرہ
1) پاس ورڈ کی طاقت اور انتروپی
- انتروپی ≈ log2(کردار کے مجموعے کا سائز) × لمبائی؛ لمبائی کا اثر عام طور پر زیادہ ہوتا ہے
- ہدف: عام اکاؤنٹس ≥ 80 بٹس؛ اعلیٰ اختیارات/مالیاتی اکاؤنٹس ≥ 110 بٹس
- بڑا کردار مجموعہ + لمبی لمبائی → اندازہ لگانے کے خلاف زیادہ محفوظ
2) لمبائی بمقابلہ پیچیدگی
- بلندی کے لیے علامات کا بے ترتیب استعمال کرنے سے لمبائی بڑھانا زیادہ موثر ہے
- مستقل اور پیش گوئی کے قابل نمونوں سے گریز کریں (جیسے ہمیشہ 'پہلی حرف بڑا + آخر میں عدد!')
- سب سے پہلے کافی لمبائی یقینی بنائیں، پھر کرداروں کی تنوع کو معتدل طور پر بڑھائیں
3) عام غلطیاں اور منفی نمونے
- کیبورڈ ترتیبیں (qwerty)، دہرائے گئے حصے، جنم تاریخ/سال وغیرہ جو قواعد سے آسانی سے پکڑے جا سکتے ہیں
- 'بنیادی پاس ورڈ + ویب سائٹ کا سuffix' ایک تبدیل شدہ دوبارہ استعمال ہے، جس سے خطرہ مرکوز ہوتا ہے اور اسے اندازہ لگانا آسان ہوتا ہے
- کسی بھی ویب سائٹ پر ایک ہی پاس ورڈ دوبارہ استعمال نہ کریں
4) پاس ورڈ کے انتظام کی تجاویز
- پاس ورڈ مینیجر استعمال کریں؛ ہر جگہ منفرد پاس ورڈ رکھیں؛ اہم اکاؤنٹس پر MFA فعال کریں
- عام جگہوں پر صاف متن میں پاس ورڈ شیئر نہ کریں؛ ضرورت پڑنے پر 'آواز میں آسان' پاس ورڈز استعمال کریں
- اگر کسی پاس ورڈ کی泄露 یا دوبارہ استعمال کا پتہ چل جائے تو فوراً اسے تبدیل کریں اور منفرد بنائیں
5) پاس فریز (Passphrase) کی ہدایات
- 4–6 الفاظ کا مجموعہ عام طور پر مضبوط اور یاد رکھنا آسان ہوتا ہے
- الگ الگ علامات، بڑے حروف، اور عدد شامل کرکے طاقت اور قابلیتِ پڑھنے کو بڑھایا جا سکتا ہے
- مشہور فقرے، گیتوں یا مشہور اقوال کو براہ راست جوڑنے سے گریز کریں
پاس ورڈ سیکیورٹی کے مشورے
بہترین عملیات
- کافی لمبائی استعمال کریں: عام اکاؤنٹس کے لیے 16+، اہم اکاؤنٹس کے لیے 24+
- یاد رکھنے کی ضرورت ہو تو پاس فریزز کا استعمال ترجیح دیں؛ تصادفی طور پر مضبوط پاس ورڈز کو پاس ورڈ مینیجر میں محفوظ کریں
- متعدد عوامل کی توثیق (MFA) جتنا ممکن ہو سکے سکھائیں
- مختلف ویب سائٹس پر پاس ورڈ دوبارہ نہ استعمال کریں؛ ہر اکاؤنٹ کا الگ پاس ورڈ ہونا چاہیے
انٹروپی اور طاقت
انٹروپی لمبائی اور کریکٹر سیٹ کے سائز کے بنیاد پر غیر قابل پیش گوئی کو ظاہر کرتی ہے؛ زیادہ انٹروپی بٹس عام طور پر زیادہ طاقتور ہوتی ہیں۔
- بڑی فائدہ حاصل کرنے کے لیے لمبائی بڑھائیں
- ممکن ہو تو متعدد کریکٹر سیٹس استعمال کریں
- زیادہ کریکٹرز کو مستثنیٰ کرنا کریکٹر سیٹ کو چھوٹا کر دے گا اور طاقت کم کر دے گا
پالیسیاں اور تبدیلی
- پیچیدہ ترکیبات کی بجائے لمبائی اور عام/لیک ہونے والے پاس ورڈز کی فہرست کو منع کرنا ترجیح دیں
- متواتر تبدیلی کو نہیں بلکہ لیک یا خطرہ کی صورت میں ہی پاس ورڈ تبدیل کریں
- عام/لیک ہونے والے پاس ورڈز کو روکنے کے لیے لیک ہونے والے پاس ورڈز کی فہرست استعمال کریں
پاس فریزز
- 4–6 تصادفی الفاظ استعمال کریں اور انہیں الگ کرنے والے علامات سے جوڑیں، جیسے lake-CARROT-planet_7
- مشہور اقتباسات/نشانات جیسے عام فریزز سے گریز کریں؛ تصادفیت 'ذکاوت' سے زیادہ اہم ہے
- اہم اکاؤنٹس کے لیے حقیقی اعلیٰ انٹروپی والے تصادفی پاس ورڈز کو پاس ورڈ مینیجر میں محفوظ کرنے کی تجویز کریں
پیدا کرنے کی تجاویز
- "Require each selected set" ہر گروہ کی کم از کم ایک موجودگی یقینی بناتا ہے
- "Avoid similar" قابل پڑھنے میں بہتری لاتا ہے، لیکن کریکٹر سیٹ کے سائز کو تھوڑا کم کرتا ہے
- علامتوں کو مقامی نظام کے قبول کردہ ذیلی سیٹ تک محدود کیا جا سکتا ہے
سرور میں محفوظ کرنا
- صاف پاس ورڈز میں محفوظ نہ کریں؛ مضبوط ہیش (Argon2id/PBKDF2/BCrypt) اور سولٹ کے ساتھ استعمال کریں
- مناسب پیرامیٹرز (میموری/وقت/لاگت) مقرر کریں؛ ضرورت پڑنے پر پیپر استعمال کریں
- ریٹ لیمٹنگ اور ناکام کوششوں کی نگرانی کریں؛ حملے کی صورت میں CAPTCHA یا ڈیوائس ویریفیکیشن شامل کریں
متعدد عوامل اور واپسی
- TOTP/ہارڈ ویئر کی کلید کو ترجیح دیں؛ SMS سے گریز کریں
- واپسی عمل کو محفوظ رکھیں: متعدد عوامل یا ای میل توثیق کے ساتھ ٹائم آؤٹ درج کریں
- احتیاطی واپسی کوڈز فراہم کریں اور صارفین کو انہیں اچھی طرح محفوظ رکھنے کی تجویز کریں
بروٹ فورس حملوں کا تحفظ
- پیشہ ورانہ تاخیر/لاک اور IP/ڈیوائس خطرہ اسکورنگ استعمال کریں
- API اور لاگ ان فارم کے لیے WAF/ریٹ لیمٹنگ سیٹ کریں
- کولیژن حملوں کی نگرانی کریں اور صارفین کو منفرد پاس ورڈز استعمال کرنے کی ترغیب دیں
مقامی محفوظ کرنا اور معالجہ
- محفوظ کرنے اور خودکار پر بھرنا کے لیے قابل اعتماد پاس ورڈ مینیجر استعمال کریں
- پاس ورڈز کو چیٹ/ای میل میں صاف پالیسیوں کے ساتھ شیئر نہ کریں؛ ٹیم کے لیے سیکرٹ مینیجمنٹ ٹولز استعمال کریں
- اگر آف لائن ریکارڈنگ ضروری ہو تو فزیکل سیکیورٹی یقینی بنائیں
اعلان: یہ ٹول براؤزر میں مقامی طور پر 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);
}