Посібник з безпеки
Генерація паролів на стороні клієнта за допомогою Web Crypto та відкидальної вибірки
Технічний документ, що пояснює модель генерації паролів на стороні браузера PwdGen, межі ентропії, відкидальну вибірку та обмеження конфіденційності.
Анотація
PwdGen використовує метод генерації на стороні клієнта: браузер або середовище виконання Web Crypto надає випадкові байти, відкидальна вибірка перетворює ці байти на незміщені обмежені індекси, а перемішування Фішера-Йетса розподіляє необхідні класи символів по всьому паролю. Метод навмисно невеликий, доступний для аудиту та відтворюваний у веб-додатку, адаптері API, CLI та підготовленому пакеті pwdgen-core.
Цей документ описує інженерну модель. Він не є заявою про новий криптографічний примітив, формальний стандарт або незалежний сторонній аудит.
Джерело випадковості
Генератор запитує криптографічно стійкі випадкові значення через crypto.getRandomValues(). Очікується, що реалізації Web Crypto використовують криптографічно безпечний генератор псевдовипадкових чисел, ініціалізований високоякісною ентропією від хост-середовища. На практиці браузери делегують це завдання операційній системі та платформним криптопровайдерам.
PwdGen не стверджує, що кожен виклик генерації пароля безпосередньо використовує апаратне джерело шуму. Більш безпечне та точне твердження: браузер надає вихід CSPRNG через Web Crypto API, а PwdGen уникає не криптографічних псевдовипадкових інтерфейсів.
Чому не Math.random()
Math.random() не призначений для використання в чутливих до безпеки контекстах. Він підходить для симуляцій, візуальних ефектів та звичайної випадкової поведінки інтерфейсу, але не надає гарантій, необхідних для паролів, кодів скидання, ключів підпису або інших облікових даних.
PwdGen розглядає небезпечні псевдовипадкові запасні варіанти як стан помилки. Якщо Web Crypto недоступний, генератор повинен показати помилку сумісності, а не тихо створювати слабкі облікові дані.
Відкидальна вибірка
Випадкові байти та цілі числа зазвичай беруться з діапазону, що є степенем двійки. Алфавіти паролів рідко мають розмір, який точно ділить цей діапазон. Пряма операція модуля може зробити деякі символи трохи ймовірнішими за інші.
PwdGen використовує відкидальну вибірку:
- Отримати 32-бітове беззнакове ціле число.
- Обчислити найбільше кратне розміру алфавіту, яке вміщується в 32-бітовий діапазон.
- Відкинути значення, що перевищують цю межу.
- Застосувати модуль лише до решти повного діапазону.
Це забезпечує рівномірність вибору символів без помітного зміщення через модуль.
Покриття символів та ентропія
Для налаштованих політик паролів генератор спочатку вибирає по одному символу з кожного активного класу, заповнює решту з комбінованого алфавіту, а потім перемішує результат. Це допомагає задовольнити вимоги цільового сервісу до паролів, не розміщуючи передбачуваний клас у передбачуваній позиції.
Теоретична оцінка ентропії:
bits = length × log2(uniqueAlphabetSize)
Це значення є верхньою межею для рівномірно випадкових виборів з налаштованого алфавіту. Воно не враховує повторне використання паролів, редагований користувачем вихід, скомпрометовані пристрої, витік паролів або слабке зберігання цільовим сервісом.
Межа конфіденційності
В інструментах браузера згенеровані значення залишаються в пам’яті сторінки та видимих полях результатів, доки користувач не скопіює або не експортує їх. Локальні генератори не надсилають згенеровані паролі на сервери PwdGen, не вставляють їх у URL-адреси та не записують у події аналітики.
Ця межа не захищає від шкідливих розширень браузера, менеджерів буфера обміну, компрометації операційної системи, знімків екрану, фішингових сторінок або вставки згенерованого пароля користувачем у небезпечне місце.
Відтворювана реалізація
Публічний пакет pwdgen-cli та підготовлений пакет pwdgen-core існують для того, щоб модель генерації залишалася доступною для перевірки поза веб-сторінкою. Модульні тести охоплюють включення класів символів, виключені символи, некоректні конфігурації, формули ентропії та відсутність небезпечних псевдовипадкових запасних шляхів коду.
Мета не в тому, щоб зробити PwdGen приватним стандартом. Мета — зробити реалізацію достатньо малою, щоб розробники могли читати, тестувати та замінювати її, коли їхнє середовище вимагає іншої межі довіри.