Генератор паролей в браузере вызывает разумное сомнение: откуда там случайность и не подстроена ли она. Вопрос правильный, и ответ на него проверяем — в отличие от большинства утверждений о безопасности.
Два разных генератора
В браузере их два, и путать их нельзя.
Math.random() | crypto.getRandomValues | |
|---|---|---|
| Назначение | Игры, анимация, перемешивание списка | Секреты: пароли, ключи, токены |
| Источник | Внутренний алгоритм браузера | Генератор операционной системы |
| Предсказуемость | По нескольким значениям вычисляется остальное | Не восстанавливается по выданным значениям |
| Годится для пароля | Нет | Да |
Откуда берётся случайность у системы
Операционная система собирает непредсказуемые события: тайминги прерываний, шум от устройств, аппаратный источник в процессоре. Из этого формируется пул, который постоянно перемешивается.
Браузер сам ничего не выдумывает — он просто запрашивает у системы нужное число байтов. Поэтому качество генератора в браузере — это качество генератора вашей операционной системы, а не отдельная его особенность.
Почему нельзя просто взять остаток от деления
Допустим, нужен символ из алфавита в 62 знака, а генератор выдаёт байт от 0 до 255. Кажется логичным взять остаток от деления на 62 — но 256 не делится на 62 нацело.
В остатке получается, что значения 0…7 выпадают четыре раза (0, 62, 124, 186, 248 — пять раз для первых восьми), а остальные — три. Первые символы алфавита начинают выпадать чаще, и энтропия оказывается ниже расчётной.
Решение называется отбраковкой: значения из «хвоста» диапазона, который не укладывается в целое число повторений алфавита, просто отбрасываются и запрашиваются заново. Медленнее на доли микросекунды, зато распределение строго равномерное. Именно так считает генератор на этом сайте.
Как проверить самому
-
Посмотреть исходный код страницы
Скрипты не сжаты до неузнаваемости: в файле генератора видно, что вызывается именно системный источник.
-
Открыть вкладку «Сеть» в инструментах разработчика
Сгенерируйте пароль и убедитесь, что запросов на сервер нет. Пароль не может утечь туда, куда он не отправляется.
-
Отключить интернет и попробовать снова
Самая наглядная проверка: генератор продолжает работать. Значит, всё считается в браузере.