简体中文

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

crypto.getRandomValues 与 Math.random:为什么它对密码很重要

· 工作原理

密码 网络加密 随机性

弱随机路径结束,而 Web 加密路径继续进入密码符号
原始 ToolAcre 矢量图

解释浏览器的通用随机数生成器与其加密随机数生成器之间的区别,为什么可预测性对于密码来说是致命的,以及如何辨别工具使用哪个。

对于骰子游戏来说足够随机,而不是密码 - 浏览器提供的两种随机性

浏览器可以提供多个看起来不规则的值源,但视觉障碍并不能证明某个序列适合凭证。 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 后备。

在检查生成器时使用该模式:识别源,跟踪每个有界绘制,检查缩减和洗牌,并强制使用不可用的源路径。然后分别评估设备和目的地。健全的随机源对于该生成器的工作是必要的,但它并不是证书整个生命周期的通用证书。