Текстовые и повседневные инструменты · Генератор паролей
PRNG против CSPRNG: откуда на самом деле берутся случайные числа вашего браузера
· Фон
пароли веб-крипто csprng
Объясняет разницу между псевдослучайными и криптографически безопасными генераторами, как операционные системы собирают энтропию от аппаратных событий и как эта случайность достигает веб-страницы через Web Crypto API.
Компьютеры детерминированы, так откуда же берется случайность? — основная загадка каждого генератора
JavaScript, работающий в ToolAcre, начинается на границе API. Он может запрашивать байты из `crypto.getRandomValues`, проверять, удался ли этот вызов, и использовать возвращенный массив. Он не может проверять каждое физическое событие, пул ядра или аппаратный компонент, который может использовать конкретная платформа. Таким образом, история происхождения случайности в рабочей тетради превосходит местные свидетельства.
Технически честное объяснение начинается там, где начинается наблюдение. Приложение исследует Web Crypto, движок оборачивает его, и все выборы используют этот источник. Внутренним компонентам платформы требуется документация и аудит платформы, а не общий оператор, выведенный из имени метода браузера.
Репозиторий начинается в браузере API; он не проверяет источники физической энтропии
Псевдослучайные генераторы часто описываются с помощью начальных значений и воспроизводимого состояния, но этот репозиторий не требует, чтобы механизмы JavaScript использовали один и тот же дизайн Math.random. ToolAcre позволяет избежать двусмысленности, полностью запрещая API при создании учетных данных. Сканирование источника обеспечивает соблюдение этой негативной гарантии.
Тестам по-прежнему нужны детерминированные байты, поэтому они внедряют объекты, раскрывающие `getRandomValues`, через внутренний параметр. Эти подделки находятся в тестовой поддержке и не экспортируются в качестве исходного производственного режима. Тестируемость не создает скрытую пользовательскую опцию для повторяющихся паролей.
Math.random здесь запрещен, без претензии на один универсальный дизайн PRNG
Продукт использует «криптографический» подход в ограниченной области: требуемый интерфейс браузера — это веб-шифрование, и генерация завершается с ошибкой, когда он отсутствует или непригоден для использования. Приложение вызывает метод во время обнаружения вместо проверки только его типа, перехватывая ограниченные среды, в которых выдается вызов.
Этот контракт не обещает устойчивости к каждому гипотетическому компрометации состояния или не сертифицирует реализацию браузера. Это доказывает, какой API запрашивает страница, и что рядом с ней не подключен более слабый резервный вариант. Целостность устройства остается вне генератора.
Подтвержденное криптографическое свойство — это требуемый источник Web Crypto и путь отказа.
Временные события, инструкции выделенного процессора, расписания повторного заполнения и энтропийные пулы операционной системы — все это находится под поверхностью Web API. Здесь не утверждается ничего, поскольку источник пакета не может их проверить. В будущей статье, посвященной конкретной платформе, потребуется первичная документация для каждой описываемой среды.
Это упущение скорее усиливает, чем ослабляет нынешнее утверждение. ToolAcre может точно сказать, что он просит браузер сделать и как он обрабатывает байты. Ему не нужно притворяться, что JavaScript может проверить всю энтропийную цепочку, чтобы оправдать отказ Math.random.
Подробности об аппаратных событиях и пулах операционной системы являются утверждениями о реализации, которые этот источник не подтверждает.
`getRandomValues` заполняет `Uint8Array`, размер которого соответствует запрошенной эксклюзивной границе. `secureRandomInt` собирает эти байты в беззнаковое число с прямым порядком байтов, вычисляет наибольшее делимое окно принятия и отбрасывает значения в остатке. Принятое значение затем преобразуется в индекс.
Слова, разделители, символы и случайные замены — все они повторно используют этот путь. Единая узкая точка делает цепочку от браузера до выбора доступной для просмотра и гарантирует, что исправление ограниченного сокращения повлияет на каждый режим генерации, а не на один забытый вызывающий абонент.
От getRandomValues до secureRandomInt: видимый путь от браузера к индексу
Для пула слов 7,776 функция выбирает достаточно байтов для представления каждого допустимого индекса. Он формирует целое число, отклоняет любое значение, превышающее расчетный предел, и возвращает остаток только после принятия. `secureRandomChoice` использует этот результат для чтения одного слова из подходящего массива.
Конкретный индекс производства является частным и не должен воспроизводиться в документации. Вместо этого детерминистические тесты передают известные хвостовые и находящиеся в диапазоне байты для подтверждения потока управления. Это отслеживает один выбор, не превращая сгенерированную фразу в публичный пример.
Рабочий пример: трассировка байтов посредством выборки отклонения до одного индекса списка.
Проектирование аппаратного генератора случайных чисел и формальные криптографические доказательства не входят в пакет. Ни среда выполнения сервера, ни собственные приложения. Реализация представляет собой генератор браузера, и его гарантии не следует копировать в несвязанные системы.
Он также не касается хранения или последующего использования. Значение, выбранное с помощью Web Crypto, все равно может быть раскрыто в результате повторного использования, фишинга, истории буфера обмена или вредоносного ПО. Выбор CSPRNG решает проблему источника, а не каждую проблему обработки учетных данных.
Вывод: генератор паролей запрашивает криптографический генератор браузера, который является подходящим источником секрета.
Цепочка действий коротка: проверить, работает ли Web Crypto, отказаться от генерации, если она не работает, заполнить байты, отклонить неровный хвост и сопоставить принятое значение с индексом. ToolAcre делает каждый шаг видимым и проверяет сложные границы.
Пересмотрите эту цепочку вместо того, чтобы полагаться на расплывчатый ярлык «случайный». Затем просмотрите конечную точку и место назначения отдельно. Криптографический код браузера API является правильным источником для этого продукта, но репозиторий не утверждает, что сертифицирует то, что находится под ним, или все, что следует за ним.