Інструмент генерації та перевірки паролів

Професійний інструмент для генерації та перевірки паролів, який створює надійні паролі та запам'ятовувані фрази-паролі з підтримкою пакетної генерації, гарантією унікальності, оцінкою надійності та перевіркою за політикою. Має криптографічно безпечне джерело випадкових чисел, настроювані набори символів, фільтрування подібних символів, статистику виявлення дублікатів у пакеті та функцію копіювання одним клацанням. Включає багатомовні приклади коду, базу знань про паролі, найкращі практики безпеки та інструменти тестування політики. Усі операції виконуються локально у вашому браузері, що забезпечує конфіденційність та безпеку.

Генератор паролів

Оберіть групи символів
Порада: виключайте символи, обираючи групи або клацаючи безпосередньо на окремих символах.
Результат

Тестувальник політики паролів

Результати
  • Довжина
  • Рядкові літери
  • Великі літери
  • Цифри
  • Символи
  • Послідовність
  • Повторення
  • Список заборонених
Всі перевірки виконуються локально у вашому браузері.

Генератор фраз-паролів

Слова вибираються рівномірно з криптографічно безпечною випадковістю (Web Crypto) зі списку з 1271 однозначним словом; 6 слів дають приблизно 62 біти ентропії — для більшої надійності використовуйте 8 слів.

Шпаргалка хешування паролів

Argon2id
  • Використовуйте Argon2id з розумними параметрами, що вимагають багато пам'яті
  • Час ≥ 2 проходи, пам'ять ≥ 64 МБ (налаштуйте залежно від середовища)
  • Зберігайте унікальну сіль для кожного користувача; за бажанням використовуйте пеппер на рівні додатка
PBKDF2
  • Оберіть SHA-256 або SHA-512 з кількістю ітерацій ≥ 210 тисяч (налаштуйте за потребою)
  • Використовуйте унікальну сіль для кожного хешу; забезпечте підтримку оновлення параметрів
  • Перенесіть на параметри вищої вартості під час наступного входу користувача
BCrypt
  • Встановіть вартість між 10–14, залежно від можливостей сервера
  • Уникайте проблем з обрізанням; хешуйте весь пароль
  • Реалізуйте обмеження швидкості та моніторинг на кінцевих точках автентифікації
Джерело: NIST SP 800-63B, OWASP ASVS. Параметри повинні відповідати апаратним можливостям та SLO.

Оцінювач складності пароля

Складність наближено визначається ентропією: ентропія = log2(розмір набору символів) × довжина. Більший набір символів та довша довжина підвищують стійкість до підбору.

  • Слабкий: < 50 біт —— Підходить лише для одноразових операцій або ситуацій з низькою цінністю даних
  • Задовільний: 50–80 біт —— Прийнятний для сценаріїв з низьким ризиком
  • Надійний: 80–110 біт —— Рекомендована ціль за умовчанням
  • Відмінний: > 110 біт —— Рекомендований для адміністративних або критичних облікових записів

Примітка: Реальні моделі атак можуть відрізнятися; уникайте використання однакових паролів для декількох облікових записів та вмикайте багатофакторну аутентифікацію (MFA).

Як користуватися

  • Виберіть довжину та набір символів (малі/великі літери/цифри/символи); додатково можна ввімкнути опцію "Уникати подібних" та "Вимагати кожного типу"
  • Для більш точного контролю: виключіть конкретні символи або групи символів, або виберіть підмножини символів
  • Оберіть, скільки паролів потрібно згенерувати, потім натисніть «Згенерувати»; результати пакетної генерації автоматично видаляють дублікати, і їх можна скопіювати одразу всі
  • Для перевірки існуючих паролів використовуйте "Тестер політики"; для запам'ятовуваних фраз-паролів — "Генератор фраз-паролів"

Можливості

  • Криптографічно безпечне джерело випадкових чисел (Web Crypto)
  • Настроювані набори символів та групи символів
  • Фільтрування подібних символів та власні виключення
  • Пакетна генерація 1-100 унікальних паролів
  • Метрики надійності та ентропії
  • Тестер політики та генератор фраз-паролів
  • Багатомовні приклади коду
  • Копіювання одним клацанням (одного або всіх паролів)

Приклади генерації паролів

Надійний
Довжина 24, містить великі, малі літери, цифри та символи
Запам'ятовуваний
Довжина 16, містить великі, малі літери та цифри; уникає схожих символів

База знань про паролі

1) Надійність та ентропія паролів
  • Ентропія ≈ log2(розмір набору символів) × довжина; довжина зазвичай має більший вплив
  • Рекомендовані цілі: Загальні акаунти ≥ 80 біт; Акаунти з високими правами/фінансові акаунти ≥ 110 біт
  • Більший набір символів + довша довжина → вища стійкість до підбору
2) Довжина проти складності
  • Додавання символів без розбору менш ефективне, ніж збільшення довжини
  • Уникайте передбачуваних схем (наприклад, завжди "Велика перша літера + остання цифра!")
  • Пріоритизуйте достатню довжину, потім помірно збільшуйте різноманітність символів
3) Поширені помилки та антисхеми
  • Клавіатурні послідовності (наприклад, qwerty), повторювані блоки, дні народження/роки легко виявляються за допомогою правил
  • Використання "пароль кореня + суфкс сайту" створює варіанти повторного використання, концентрує ризик та робить паролі легшими для підбору
  • Ніколи не використовуйте той самий пароль на кількох веб-сайтах
4) Рекомендації щодо управління паролями
  • Використовуйте менеджер паролів; забезпечте унікальні паролі для кожного сайту; ввімкніть MFA для критичних акаунтів
  • Уникайте передачі паролів у відкритому вигляді через загальнодоступні канали; за потреби використовуйте "вимовими" фразами-паролями
  • Негайно змініть та зробіть унікальними паролі, якщо виявлено їх витік або повторне використання
5) Вказівки щодо фраз-паролів
  • Комбінації з 4–6 випадкових слів зазвичай є надійними та легко запам’ятовуються
  • Змішуйте роздільники, використовуйте великі початкові літери та додавайте цифри, щоб підвищити надійність та зручність запам’ятовування
  • Уникайте прямого з’єднання загальних фраз, текстів пісень або відомих цитат

Найкращі практики безпеки паролів

Найкращі практики
  • Використовуйте достатню довжину: 16+ символів для звичайних облікових записів, 24+ — для критично важливих
  • Для зручності запам’ятовування віддавайте перевагу фразовим паролям; використовуйте менеджер паролів для зберігання випадкових паролів високої надійності
  • Якщо можливо, увімкніть багатофакторну автентифікацію (MFA)
  • Ніколи не використовуйте однакові паролі на різних сайтах — для кожного облікового запису має бути унікальний пароль
Ентропія та надійність

Ентропія вимірює непередбачуваність залежно від довжини та розміру набору символів — чим вище значення ентропії в бітах, тим надійнішим зазвичай є пароль

  • Збільшуйте довжину для максимального зростання надійності
  • За можливості використовуйте кілька наборів символів
  • Виняття забагатьох символів зменшує розмір набору та знижує надійність
Політики та оновлення паролів
  • Віддавайте перевагу вимогам до довжини та чорним спискам поширених/викрадених паролів, а не складним правилам формування
  • Уникайте частих обов’язкових оновлень; змінюйте пароль лише після виявлення порушення безпеки або ризику
  • Використовуйте списки скомпрометованих паролів для блокування поширених або викрадених паролів
Фразові паролі
  • Використовуйте 4–6 випадкових слів, з’єднаних роздільниками, наприклад: озеро-МОРКВА-планета_7
  • Уникайте відомих цитат, текстів пісень або інших поширених фраз; важливіше випадковість, ніж «оригінальність»
  • Для критично важливих облікових записів використовуйте менеджер паролів для зберігання справді випадкових паролів високої ентропії
Поради щодо налаштування генерації
  • «Вимагати з кожного вибраного набору» гарантує появу щонайменше одного символу з кожної обраної категорії
  • «Уникати подібних» покращує зручність запам’ятовування, але трохи зменшує розмір набору символів
  • Символи можна обмежити підмножиною, що підтримується цільовою системою
Зберігання на сервері
  • Ніколи не зберігайте паролі у відкритому вигляді; використовуйте надійне хешування (Argon2id/PBKDF2/Bcrypt) із сіллю
  • Налаштуйте параметри (пам’ять/час/вартість) належним чином; за потреби розгляньте використання перцю
  • Обмежуйте кількість спроб входу та моніторте помилки; застосовуйте CAPTCHA або перевірку пристрою під час атак
Багатофакторна автентифікація та відновлення
  • Віддавайте перевагу TOTP або апаратним ключам; за можливості уникайте SMS
  • Забезпечуйте безпечні процеси відновлення за допомогою багатофакторної або поштової перевірки та вимкнення періодів очікування
  • Надавайте резервні коди відновлення та заохочуйте користувачів зберігати їх у безпечному місці
Захист від грубої сили
  • Реалізуйте поступові затримки або блокування за оцінкою ризику IP/пристрою
  • Застосовуйте WAF та обмеження частоти для API та форм входу
  • Моніторте атаки типу credential stuffing та заохочуйте користувачів використовувати унікальні паролі
Місцеве зберігання та обробка
  • Використовуйте надійний менеджер паролів для зберігання та автозаповнення
  • Ніколи не передавайте паролі у відкритому вигляді через чати чи електронну пошту; використовуйте інструменти для керування секретами для команд
  • Якщо записуєте паролі офлайн, забезпечте фізичну безпеку
Відмова від відповідальності: Цей інструмент генерує паролі локально у вашому браузері за допомогою 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);
}