简体中文

文本和日常工具·密码生成器

PRNG 与 CSPRNG:浏览器的随机数实际上来自哪里

· 背景

密码 网络加密 csprng

浏览器加密字节通过拒绝采样流向单字索引
原始 ToolAcre 矢量图

解释伪随机和加密安全生成器之间的区别、操作系统如何从硬件事件收集熵,以及随机性如何通过 Web Crypto API 到达网页。

计算机是确定性的,那么随机性从何而来? — 每个生成器背后的基本难题

在 ToolAcre 中运行的 JavaScript 从 API 边界开始。它可以从 `crypto.getRandomValues` 请求字节,观察调用是否成功并使用返回的数组。它无法检查特定平台可能使用的每个物理事件、内核池或硬件组件。因此,该手册关于随机性的起源故事超出了当地证据。

技术上诚实的解释从观察开始。该应用程序探测 Web Crypto,引擎对其进行包装,并且所有选择都消耗该源。特定于平台的内部结构需要平台文档和审计,而不是从浏览器方法名称推断出的通用语句。

存储库从浏览器 API 启动;它不审核物理熵源

伪随机生成器通常由种子和可重现状态来描述,但此存储库不需要 JavaScript 引擎共享一个 Math.random 设计。 ToolAcre 通过在凭证生成中完全禁止 API 来避免歧义。源扫描强化了这种负面保证。

测试仍然需要确定性字节,因此它们通过内部参数注入暴露 `getRandomValues` 的对象。这些假货存在于测试支持中,不会作为种子生产模式导出。可测试性不会为可重复的密码创建隐藏的用户选项。

Math.random 在这里被禁止,没有声明一种通用的 PRNG 设计

该产品以一定范围的方式使用“加密”:所需的浏览器界面是 Web Crypto,当它不存在或不可用时,生成将失败关闭。应用程序在检测期间调用该方法,而不是仅检查其类型,捕获调用抛出的受限环境。

该合同不承诺抵抗每一个假设的状态妥协或证明浏览器实现。它证明了页面请求的是哪个 API,并且没有较弱的后备与其并行。设备完整性保留在生成器之外。

验证的加密属性是所需的 Web Crypto 源和拒绝路径

定时事件、专用处理器指令、重新播种计划和操作系统熵池都位于 Web API 表面之下。这里没有断言,因为包源无法验证它们。未来特定于平台的文章将需要其描述的每个环境的主要文档。

这一遗漏加强了而不是削弱了当前的主张。 ToolAcre 可以准确地说出它要求浏览器做什么以及它如何处理字节。它不需要假装 JavaScript 可以审核完整的熵链来证明拒绝 Math.random 的合理性。

硬件事件和操作系统池详细信息是实现声明,该来源未证明

`getRandomValues` 填充 `Uint8Array` ,其大小根据请求的独占边界确定。 `secureRandomInt` 将这些字节组装为无符号大端数字,计算最大的可整除接受窗口并丢弃其余值。然后将接受的值减少为一个索引。

单词、分隔符、字符和随机交换都重用此路径。单个阻塞点使浏览器到选择链可审查,并确保修复有界减少影响每个生成模式,而不是一个被遗忘的调用者。

从 getRandomValues 到 secureRandomInt:可见的浏览器到索引路径

对于 7,776 字池,该函数选择足够的字节来表示每个有效索引。它形成一个整数,拒绝任何等于或高于计算限制的值,并仅在接受后返回余数。 `secureRandomChoice` 使用该结果从符合条件的数组中读取一个字。

特定的生产索引是私有的,不应在文档中复制。相反,确定性测试会提供已知的尾部和范围内字节来证明控制流。这会跟踪一个选择,而不会将生成的短语变成公共示例。

工作示例:通过拒绝采样跟踪字节到一个列表索引

硬件随机数生成器设计和形式加密证明不包含在该包中。服务器运行时或本机应用程序都不是。该实现是一个浏览器生成器,其保证不应复制到不相关的系统上。

它也不解决存储或以后使用的问题。通过 Web Crypto 选择的值仍然可能因重复使用、网络钓鱼、剪贴板历史记录或恶意软件而暴露。 CSPRNG 选择解决了源问题,而不是每个凭证处理问题。

要点 — 密码生成器询问浏览器的密码生成器,这是秘密的正确来源

可操作的链很短:测试 Web Crypto 是否有效,如果无效则拒绝生成,填充字节,拒绝不均匀的尾部并将接受的值映射到索引。 ToolAcre 使每一步都可见并测试困难的界限。

检查该链,而不是依赖模糊的“随机”标签。然后分别检查端点和目的地。浏览器的加密 API 是该产品的正确来源,但存储库并未声称验证其下方的内容或后续的所有内容。