Текстовые и повседневные инструменты · Генератор паролей
crypto.getRandomValues против Math.random: почему это важно для паролей
· Как это работает
пароли веб-крипто случайность
Объясняет разницу между универсальным генератором случайных чисел браузера и его криптографическим генератором, почему предсказуемость губительна для паролей и как определить, какой инструмент использует.
Достаточно случайный для игры в кости, а не для пароля — два вида случайности, которые предлагает браузер.
Браузер может предлагать несколько источников значений, которые выглядят нерегулярно, но нарушение зрения не является свидетельством того, что последовательность подходит для учетных данных. ToolAcre рисует жесткую границу продукта: каждый выбор слова, выбор разделителя, выбор символов и перестановка в случайном порядке проходят через одну безопасную целочисленную функцию, поддерживаемую `crypto.getRandomValues`. Если этот API невозможно использовать, страница отключает генерацию, а не создает правдоподобную замену.
Этот отказ имеет большее значение, чем то, кажутся ли результаты двух выборок одинаково перемешанными. Предсказуемый источник все равно может печатать буквы, цифры и слова, которые кажутся человеку убедительными. Таким образом, реализация делает источник проверяемым, а сбой видимым. Он не утверждает, что любое сгенерированное значение безопасно для любой среды; взломанный браузер или устройство все равно может прочитать то, что отображается на странице.
Для чего нужен Math.random — быстрая псевдослучайность с затравкой, выходные данные которой можно реконструировать на основе нескольких наблюдений.
В рабочей книге Math.random описывается как псевдослучайная псевдослучайность, которую можно восстановить на основе нескольких наблюдений, но это общие требования к реализации, которые этот репозиторий не устанавливает для каждого механизма JavaScript. Локальный факт для этого продукта проще и сильнее: файлы производственного генератора не вызывают `Math.random`. Тест на уровне исходного кода удаляет комментарии, сканирует исполняемый код и завершается сбоем, если такой вызов появляется где-либо в движке или приложении пароля.
Это различие не позволяет статье превратить правило реализации в универсальную лекцию по истории браузера. ToolAcre не обязательно должен описывать все возможные алгоритмы Math.random, чтобы отклонить API для генерации пароля. Его пакет принимает Web Crypto или внедрённый безопасный источник, используемый в тестах, и не предоставляет никаких вариантов производства для начального, детерминированного режима или слабого резервного варианта.
Что этот репозиторий доказывает о Math.random: он отсутствует в рабочей генерации.
`createWebCryptoSource` ищет вызываемый `getRandomValues`, затем оборачивает этот метод как случайный источник пакета. Приложение выполняет дополнительную проверку перед включением элементов управления: оно просит глобальный криптографический объект заполнить одноэлементный типизированный массив внутри блока try. Это позволяет отлавливать ограниченные среды, в которых свойство существует, но выдает ошибку при использовании, вместо того, чтобы доверять поверхностной проверке функции.
Источник останавливается на границе браузера API. Он не доказывает, какой пул операционной системы, аппаратная инструкция или конструкция повторного заполнения лежат в основе конкретного браузера. Эти детали варьируются ниже интерфейса и требуют документации платформы. Код действительно доказывает, что байты поступают через названный метод Web Crypto и что генерация не предпринимается в случае сбоя зондирования.
Что здесь делает crypto.getRandomValues: заполняет типизированные массивы через браузер API
Предсказуемость опасна, поскольку генератор учетных данных должен делать новый выбор, который наблюдатель не может воспроизвести на основе более ранних результатов. ToolAcre поддерживает эту цель, отказываясь от детерминированных путей производства, централизуя каждый розыгрыш и проверяя отсутствие слабого API. Он не обещает защиты от захвата экрана, расширений, вредоносного ПО, фишинга, повторного использования пароля или службы, которая неправильно обрабатывает учетные данные после отправки.
Эта граница предотвращает распространенную ошибку категории: генерация учитывает то, как выбирается кандидат, а не все, что происходит с ним позже. Пакет возвращает строку и не регистрирует и не сохраняет ее. Страница хранит одно текущее значение в памяти и отображает его как текст. Хранение, передача паролей, восстановление учетных записей и политика аутентификации остаются в ведении других систем.
Чтение кода — как проверить, какой API использует страница и почему открытым, проверяемым страницам легче доверять
Чтение кода начинается с `packages/password-generator/src/index.js`, в контракте которого говорится, что каждое случайное решение достигает `secureRandomInt`. Затем файл реализации показывает `getRandomValues`, выборку отклонения и явные ошибки. Наконец, `no-math-random.test.js` и более широкий пакет защиты паролей делают отрицательную гарантию исполняемой вместо того, чтобы оставлять «мы никогда не используем Math.random» в качестве непроверенного комментария.
Открытый исходный код сам по себе не делает код правильным, но он дает рецензенту конкретные швы для проверки. Ищите случайный источник, следите за вызывающими абонентами при выборе и перетасовке и проверяйте, что происходит, когда API отсутствует. Достоверный обзор должен быть в состоянии указать как путь успеха, так и путь отказа, а не делать вывод о безопасности, основанной на брендинге.
Рабочий пример — одна и та же процедура выбора слов, написанная в обоих направлениях, и то, что злоумышленник может сделать с каждым из них.
Рассмотрим запрос целого числа ниже 100. `secureRandomInt` нужен один байт, диапазон которого содержит значения 256. Он принимает только самый большой префикс, кратный 100, который заканчивается перед 200, и отклоняет оставшийся хвост. Детерминированный тест передает байт 200, за которым следует байт 7. Реализация отбрасывает 200 и возвращает 7; прямой ярлык по модулю вернул бы ноль из отклоненного байта.
Одна и та же безопасная целочисленная функция выбирает индексы для слов и символов, поэтому этот пример не является игрушкой, оторванной от генерации. Точные байты в производстве не являются повторяемыми примерами и никогда не должны публиковаться в качестве учетных данных. Полезным артефактом является доказательство потока управления: Web Crypto заполняет буфер, неровный хвост отклоняется, и только принятое значение становится ограниченным выбором.
Рабочий пример: проследить одну ограниченную отрисовку по отправленному пути SecureRandomInt.
Этот репозиторий не реализует и не сравнивает серверные генераторы, аппаратные генераторы случайных чисел или инструменты командной строки операционной системы. Он также не может проверять внутреннюю реализацию шифрования браузера из JavaScript. Этим темам нужен собственный исходный материал, модели угроз и эксплуатационные проверки, а не аналогия, вставленная в путь кода ToolAcre.
Страница также не является менеджером паролей. Он не сохраняет, не синхронизирует, не передает и не автозаполняет то, что генерирует. Читатель не должен интерпретировать термин «криптографический случайный источник» как совет повторно использовать результат или передать его по незащищенному каналу. Утверждение относится только к выбору внутри текущей вкладки браузера.
Вывод: генератор паролей использует криптографический генератор случайных чисел браузера, и вы можете проверить его на самой странице.
Подтверждаемый выбор ToolAcre — криптовалюта или ничего. Страница вызывает браузер API во время обнаружения поддержки, отключает элементы управления в случае сбоя и позволяет механизму выдавать `InsecureRandomError`, если генерация каким-то образом достигает того же отсутствующего условия. Ни за одной из ветвей не скрыт резервный вариант Math.random.
Используйте этот шаблон при проверке генератора: идентифицируйте источник, отслеживайте каждую ограниченную отрисовку, проверяйте сокращение и перетасовку и принудительно используйте путь к недоступному источнику. Затем оцените устройство и место назначения отдельно. Для работы этого генератора необходим надежный случайный источник, но он не является универсальным сертификатом на весь срок действия учетных данных.