Password Generator

Генеруйте надійні випадкові паролі з налаштованою довжиною та наборами символів

Довжина20
Кількість5

Що таке Password Generator?

Генератор паролів створює випадкові рядки символів, які використовуються як паролі для облікових записів, API-ключів, облікових даних баз даних та секретів шифрування. На відміну від паролів, обраних людиною, згенеровані паролі охоплюють увесь простір можливих комбінацій символів, що робить їх стійкими до словникових атак та вгадування за шаблонами. Цей інструмент генерує надійні випадкові паролі онлайн за допомогою вбудованого в браузер криптографічного генератора випадкових чисел.

Надійність пароля залежить від двох чинників: довжини та різноманітності символів. Пароль із 20 символів, що містить великі та малі літери, цифри й спецсимволи, має приблизно 131 біт ентропії. На такому рівні атака грубою силою, що перевіряє трильйон спроб на секунду, потребувала б більше часу, ніж вік Всесвіту, щоб перебрати всі комбінації. Математика проста: ентропія = довжина × log2(розмір набору символів).

Такі стандарти, як NIST SP 800-63B, рекомендують паролі довжиною щонайменше 8 символів без верхнього обмеження з боку верифікатора та не заохочують примусових правил складання, як-от вимога рівно одного спецсимволу, надаючи перевагу довшим парольним фразам. Для облікових даних між машинами та сервісними обліковими записами 20 або більше випадкових символів із повного набору є загальноприйнятим базовим рівнем у більшості систем безпеки та режимів відповідності.

Навіщо використовувати генератор паролів?

Люди — ненадійні генератори випадкових чисел. Ми повторно використовуємо паролі, обираємо слова зі словника, замінюємо літери передбачуваними шаблонами (@ замість a, 3 замість e) і схиляємося до коротких рядків. Генератор паролів усуває людську упередженість із цього процесу.

🔐
Генерація з пріоритетом приватності
Паролі генеруються повністю у вашому браузері за допомогою Web Crypto API. Жоден символ не залишає ваш пристрій, нічого не записується в журнал і жодні мережеві запити не виконуються під час генерації.
Миттєве пакетне виведення
Генеруйте до 20 паролів одночасно одним клацанням. Копіюйте окремі паролі або всі відразу для скриптів ініціалізації або сховищ облікових даних.
🛡️
Обліковий запис не потрібний
Без реєстрації, без електронної пошти, без файлів cookie, що відстежують згенеровані паролі. Відкрийте сторінку, налаштуйте параметри та генеруйте.
🎛️
Повний контроль над набором символів
Вмикайте та вимикайте великі літери, малі літери, цифри та спецсимволи незалежно один від одного. Встановлюйте довжину від 4 до 128 символів відповідно до вимог будь-якої системи або політики.

Сценарії використання Password Generator

Frontend-розробка
Генеруйте тестові паролі для перевірки форм, тестування довжини введення та розробки потоків автентифікації. Переконайтеся, що ваші форми входу коректно обробляють паролі довжиною 128 символів і спецсимволи.
Backend та DevOps
Створюйте облікові дані баз даних, API-токени та паролі сервісних облікових записів під час налаштування інфраструктури. Використовуйте пакетну генерацію для ініціалізації кількох сервісів за одну сесію.
Інженерія безпеки
Генеруйте секрети з високою ентропією для ключів шифрування, підписання HMAC та ротації секретів JWT. Встановлюйте довжину 64+ символів для секретів, яким потрібно перевищити 256 біт ентропії.
QA та тестування на проникнення
Тестуйте застосування політики паролів, генеруючи рядки, що включають або виключають певні набори символів. Перевіряйте, що системи коректно відхиляють паролі нижче мінімальної довжини або складності.
Інженерія даних
Генеруйте випадкові облікові дані для тестових середовищ, тестових баз даних та секретів CI/CD-конвеєрів. Уникайте повторного використання виробничих паролів у тестових даних, генеруючи нові для кожного середовища.
Безпека особистих облікових записів
Створюйте унікальні паролі для кожного онлайн-акаунта. Поєднуйте цей генератор із менеджером паролів для зберігання облікових даних, які не потрібно запам'ятовувати.

Довідкова таблиця ентропії паролів

Ентропія вимірює непередбачуваність пароля. Вона обчислюється як log2(charset_size ^ length). Вища ентропія означає більше можливих комбінацій, які зловмисникові доведеться перебирати. NIST та OWASP рекомендують щонайменше 80 біт ентропії для додатків із високими вимогами до безпеки.

ДовжинаНабір символівЕнтропіяЧас атаки грубою силою
8lower + digits~41 bitsMinutes to hours
12lower + upper + digits~71 bitsCenturies (offline)
16all character sets~105 bitsBeyond brute-force
20all character sets~131 bitsBeyond brute-force
32all character sets~210 bitsBeyond brute-force
64all character sets~419 bitsBeyond brute-force

Час злому розраховано з припущенням 1 трильйон спроб на секунду (офлайн-атака з сучасними GPU). Онлайн-атаки з обмеженням частоти запитів є на порядки повільнішими.

CSPRNG проти Math.random() для генерації паролів

Джерело випадковості має таке саме значення, як і довжина пароля. Пароль, згенерований за допомогою передбачуваного генератора випадкових чисел, може бути відновлений зловмисником, який знає алгоритм і початковий стан. Цей інструмент використовує crypto.getRandomValues(), що є криптографічно стійким генератором псевдовипадкових чисел (CSPRNG), вбудованим у кожен сучасний браузер.

crypto.getRandomValues()
Використовує джерела ентропії операційної системи (апаратний RNG, часові мітки переривань тощо). Результат непередбачуваний, навіть якщо зловмисник знає всі попередні виводи. Вимагається специфікацією W3C Web Crypto для операцій, чутливих до безпеки.
Math.random()
Використовує детермінований алгоритм, що ініціалізується з обмеженого пулу ентропії. Результат може бути передбачений, якщо відомий початковий стан. Специфікація ECMAScript прямо зазначає, що Math.random() не забезпечує криптографічно стійких випадкових чисел. Ніколи не використовуйте його для генерації паролів.

Приклади коду

Генеруйте паролі програмно різними мовами. Кожен приклад нижче використовує криптографічно стійке джерело випадковості, а не Math.random() або еквівалентні слабкі PRNG.

JavaScript (Web Crypto API)
// Generate a random password in the browser or Node.js 19+
function generatePassword(length = 20) {
  const charset = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*'
  const values = new Uint32Array(length)
  crypto.getRandomValues(values)
  return Array.from(values, v => charset[v % charset.length]).join('')
}

console.log(generatePassword())    // → "kR7!mZp$Xw2&nLq9@Yf3"
console.log(generatePassword(32))  // → "Hd4%tNx!Qw8#mKp2Rv6&Zj0*Ls3Yb7@"
Python
import secrets
import string

def generate_password(length: int = 20) -> str:
    """Generate a cryptographically secure random password."""
    alphabet = string.ascii_letters + string.digits + string.punctuation
    return ''.join(secrets.choice(alphabet) for _ in range(length))

# Single password
print(generate_password())      # → "kR7!mZp$Xw2&nLq9@Yf3"

# Batch of 5 passwords
for _ in range(5):
    print(generate_password(24))

# Ensure at least one char from each category
def generate_strong(length: int = 20) -> str:
    required = [
        secrets.choice(string.ascii_uppercase),
        secrets.choice(string.ascii_lowercase),
        secrets.choice(string.digits),
        secrets.choice(string.punctuation),
    ]
    remaining = length - len(required)
    alphabet = string.ascii_letters + string.digits + string.punctuation
    all_chars = required + [secrets.choice(alphabet) for _ in range(remaining)]
    secrets.SystemRandom().shuffle(all_chars)
    return ''.join(all_chars)
CLI (OpenSSL / /dev/urandom)
# OpenSSL — generate 32 random bytes, base64-encode
openssl rand -base64 32
# → "x7Kp2mNqR4wZ8vLs1Yb0Hd6tFj3Xc9Ga5eUi+Wo="

# /dev/urandom with tr — alphanumeric + symbols, 20 chars
tr -dc 'A-Za-z0-9!@#$%^&*' < /dev/urandom | head -c 20; echo
# → "kR7!mZp$Xw2&nLq9@Yf3"

# pwgen (install: apt install pwgen / brew install pwgen)
pwgen -sy 20 5
# Generates 5 passwords, 20 chars each, with symbols
Go
package main

import (
    "crypto/rand"
    "fmt"
    "math/big"
)

func generatePassword(length int) (string, error) {
    charset := "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()"
    result := make([]byte, length)
    for i := range result {
        idx, err := rand.Int(rand.Reader, big.NewInt(int64(len(charset))))
        if err != nil {
            return "", err
        }
        result[i] = charset[idx.Int64()]
    }
    return string(result), nil
}

func main() {
    pwd, _ := generatePassword(20)
    fmt.Println(pwd) // → "kR7!mZp$Xw2&nLq9@Yf3"
}

Часті запитання

Якої довжини має бути пароль?
Для облікових записів користувачів 16 символів зі змішаного набору забезпечують понад 100 біт ентропії, що є достатнім для всіх поточних моделей загроз. Для машинних секретів (API-ключі, ключі шифрування) використовуйте 32 символи або більше. NIST SP 800-63B встановлює мінімум у 8 символів, але рекомендує, щоб системи допускали значно довші паролі без усікання.
Чи безпечно використовувати цей генератор паролів?
Так. Паролі генеруються у вашому браузері за допомогою Web Crypto API (crypto.getRandomValues). Жодні дані не надсилаються на сервер. Ви можете перевірити це, відкривши вкладку мережі у браузері та переконавшись, що жодних запитів не виконується під час натискання «Згенерувати». Вихідний код — це клієнтський JavaScript, видимий у інструментах розробника браузера.
Що таке ентропія пароля?
Ентропія — це міра випадковості, виражена в бітах. Пароль із N бітами ентропії має 2^N можливих значень. Наприклад, пароль із 20 символів, обраних із 95 друкованих символів ASCII, має log2(95^20) = 131,1 біта ентропії. Кожен додатковий біт подвоює кількість спроб, потрібних зловмисникові.
Чи варто включати спецсимволи в паролі?
Включення спецсимволів збільшує набір символів із 62 (літери + цифри) до 95 (друковані символи ASCII), що додає приблизно 6,1 біта ентропії на символ. Деякі системи обмежують допустимі спецсимволи. Якщо система відхиляє певні символи, вимкніть цей параметр і компенсуйте більшою довжиною пароля. Буквено-цифровий пароль із 24 символів має більше ентропії, ніж пароль із 16 символів зі спецсимволами.
Чому не варто використовувати Math.random() для генерації паролів?
Math.random() не є криптографічно стійким. Більшість рушіїв JavaScript реалізують його за допомогою xorshift128+ або схожого швидкого PRNG, розробленого для моделювання та ігор, а не для безпеки. Зловмисник, який спостерігає кілька виводів, може відновити внутрішній стан і передбачити всі майбутні результати. Web Crypto API використовує джерела ентропії операційної системи, які не є передбачуваними.
Чи можна використовувати згенеровані паролі як API-ключі та токени?
Так, але враховуйте вимоги до формату цільової системи. Деякі API очікують ключі у форматі base64 або шістнадцяткові рядки, а не довільні символи. Для генерації необроблених секретів використовуйте повний набір символів при довжині 32+ символи. Для base64-ключів генеруйте випадкові байти та кодуйте їх окремо, а не трактуйте base64 як набір символів для пароля.
Як часто слід змінювати паролі?
NIST SP 800-63B (2017, оновлено у 2024 році) не рекомендує примусову планову ротацію паролів користувачів, оскільки це призводить до вибору слабших паролів. Змінюйте пароль лише за наявності ознак компрометації. Для машинних секретів і сервісних облікових записів ротуйте відповідно до моделі ризиків вашої організації — зазвичай кожні 90 днів для привілейованих облікових даних.