Генератор паролів
Створити надійний випадковий пароль
Дані не залишають ваш браузер
Цей інструмент повністю працює на вашому пристрої: обчислення виконує JavaScript у вкладці. Ми не надсилаємо введений текст на сервер, не зберігаємо і не логуємо його. Можете сміливо працювати з робочими даними - і навіть відключити інтернет після завантаження сторінки.
Що робить пароль надійним
Довжина, а не екзотичні символи. Пароль із 20 малих літер стійкіший за 8 символів із усіма можливими спецзнаками - і його значно легше набрати.
Друга умова - випадковість. Пароль, вигаданий людиною, передбачуваний: заміни a на @ та дописаний рік давно є у словниках для перебору.
Звідки береться випадковість тут
З crypto.getRandomValues() - криптографічно стійкого джерела браузера. Не з Math.random(), який швидкий, але передбачуваний і для паролів непридатний.
Символи вибираються методом відбраковування: якщо просто взяти випадковий байт за модулем розміру алфавіту, перші символи алфавіту випадатимуть частіше. Тут такі байти відкидаються, тому розподіл рівний.
З алфавіту навмисно прибрані схожі символи - 0, O, 1, l, I. Пароль інколи доводиться диктувати або переписувати з екрана.
Скільки це в бітах
Ентропія рахується як log2(розмір алфавіту) × довжина:
| Пароль | Ентропія |
|---|---|
| 8 символів, лише малі літери | ~37 біт |
| 12 символів, літери + цифри | ~62 біти |
| 20 символів, повний набір | ~120 біт |
Орієнтир: менше 80 біт - слабко для чогось важливого, понад 100 - надійно на осяжне майбутнє.
Практичні поради
Різний пароль для кожного сервісу. Найпоширеніший спосіб втратити акаунт - не злом сайту, а витік бази з іншого сайту, де був той самий пароль.
Менеджер паролів замість запам'ятовування. Тоді довжина 30+ нічого не коштує.
Двофакторна автентифікація важливіша за складність пароля. Навіть скомпрометований пароль без другого фактора марний. А зберігати пароль треба хешем - див. bcrypt.
У Laravel
// Генерація випадкового рядка - теж на криптографічному джерелі
Str::random(32);
Str::password(20); // з літерами, цифрами та символами
// Валідація сили пароля при реєстрації
use Illuminate\Validation\Rules\Password;
$request->validate([
'password' => ['required', 'confirmed', Password::min(12)
->letters()
->numbers()
->uncompromised()], // перевірка за базою витоків haveibeenpwned
]);
Правило uncompromised() варте окремої уваги: воно перевіряє пароль за базою реальних витоків, не надсилаючи сам пароль - лише перші п'ять символів його SHA-1.
Згенеровані вище паролі не залишають ваш браузер і ніде не зберігаються - оновіть сторінку, і вони зникнуть назавжди.