安全指南
什么是 Web Crypto API?
了解 Web Crypto API 如何支持浏览器本地随机密码生成,以及它与普通 JavaScript 随机性的区别。
摘要
Web Crypto API 是用于加密操作的浏览器标准。对于密码生成,最重要的特性是 crypto.getRandomValues(),它使网页能够获取适合选择密码字符的加密强随机值。
为什么它对密码很重要
密码需要不可预测性。普通 JavaScript 随机性并非为秘密设计。Web Crypto 的存在是为了让浏览器通过标准 API 暴露更安全的加密原语。PwdGen 使用该 API 进行有界随机选择,并避免在密码生成中使用 Math.random()。
操作系统边界
Web Crypto 并不意味着页面直接控制硬件熵源。浏览器通常依赖操作系统和平台加密提供程序。严谨的方法论应说明 Web Crypto 提供 CSPRNG 输出,而不是每次调用都读取 CPU 的物理噪声。
PwdGen 如何使用它
PwdGen 请求 32 位随机整数,使用拒绝采样避免模偏差,将接受的值映射到字符索引,并打乱必需的字符类别。这保持了实现的简洁性和可审计性。
详细指南
本指南侧重于将 Web Crypto API 理解为浏览器安全原语。它面向希望了解浏览器随机性为何重要的用户和开发者,因此实际目标不是制造戏剧性的安全声明。目标是选择一种能够应对日常使用的密码习惯:登录表单、密码管理器、移动键盘、账户恢复、共享设备以及偶尔有奇怪验证规则的服务。只有真实的人能够一致遵循的建议才是有用的。
最安全的起点是随机性加唯一性。随机性意味着值是由加密合适的随机源从大空间中选取的,而不是来自生日、宠物名、键盘模式或最喜欢的引文。唯一性意味着同一密码不在其他地方使用。一个长但重复使用的密码在一次无关的泄露后可能迅速失效,而唯一的随机密码将损害限制在使用它的单个账户上。
对于此主题,实用的预设是现代 Chrome、Edge、Safari 和 Firefox,且 crypto.getRandomValues 可用。您可以通过浏览器支持页面应用该预设,然后将最终值存储在可信的密码管理器中。PwdGen 在浏览器中本地使用 Web Crypto 生成值;生成的密码不会发送到 PwdGen 服务器。这种本地设计减少了服务器端暴露,但并不能防范所有威胁。恶意浏览器扩展、受感染的设备、钓鱼页面或不安全的剪贴板处理仍可能在生成后暴露秘密。
最常见的需要避免的问题是旧浏览器、不安全上下文、静默使用 Math.random 的 polyfill,以及混淆编码与加密。这些问题很重要,因为当人类习惯给攻击者提供捷径时,攻击者很少需要暴力破解所有可能的密码。凭证填充、钓鱼、泄露密码列表和账户恢复滥用通常比纯数学搜索更现实。这就是为什么最佳建议将密码质量与账户级控制(如 MFA、通行密钥、恢复代码存储以及定期检查恢复邮箱或手机设置)相结合。
应用建议时请使用此清单:
- 使用现代浏览器。
- 避免使用实现自己随机源的工具。
- 理解 Web Crypto 不能修复恶意软件。
- 在信任生成器之前阅读方法论。
如果网站拒绝理想设置,不要手动将密码强制改为更弱的模式。一次调整一个变量。如果符号被拒绝,保留大写、小写和数字并增加长度。如果最大长度较低,使用允许的最大长度并确保值唯一。如果密码必须大声读出、打印或在电视或路由器屏幕上输入,考虑排除易混淆字符并增加长度以补偿较小的字母表。
最后,记住密码建议的边界。强密码是一层防御,而非保证。它不能使钓鱼页面安全、修复恶意软件或补偿存储凭证不当的服务。有用的习惯是枯燥但持久的:生成唯一值,安全存储,保护恢复路径,并在怀疑泄露时迅速更换。
安全的下一步
阅读本指南后,做一次小账户审计,而不是试图一次性修复所有问题。选择被接管后会造成最大麻烦的账户,确认其密码唯一,并检查恢复邮箱、恢复手机、MFA 方法和备份代码存储。如果该链条的任何部分薄弱,先改进该部分,再处理低风险账户。这个顺序使工作可控,并保护攻击者最可能用作跳板的账户。对于什么是 Web Crypto API?,最佳结果是可重复的习惯:本地生成,小心存储,避免重复使用。
常见问题
PwdGen 使用 Web Crypto 的哪一部分?
PwdGen 使用 crypto.getRandomValues() 从浏览器请求加密强随机值。
Web Crypto 是否意味着每个字节都直接来自硬件?
不是。浏览器通常使用由高质量熵种子化的操作系统加密提供程序;浏览器和操作系统选择实现方式。
Web Crypto 在所有浏览器中都可用吗?
它在现代浏览器中可用。如果缺失,PwdGen 会禁用生成,而不是回退到不安全的随机性。