【问题标题】:Random function in Javascript considered insecure. Does it really matter?Javascript 中的随机函数被认为是不安全的。真的有关系吗?
【发布时间】:2015-04-27 20:21:10
【问题描述】:
我正在编写一些将在浏览器中运行的代码,它使用 Javascript 随机函数来生成密钥。
由于随机数生成错误,现在在多个论坛中看到这被认为是不安全的。
现在,如果我只为每个浏览器/计算机创建一个密钥对会怎样。因此,在分布式场景中,每个浏览器实际上没有随机数序列。这会从根本上改变有问题的情况吗?感谢您的想法。
【问题讨论】:
标签:
javascript
html
security
public-key-encryption
encryption-asymmetric
【解决方案1】:
是的,这很重要。如果攻击者与真正的用户同时生成随机数,他们可以预测生成的内容并检索他们的密钥。即使时钟没有完全同步,攻击者也可以在已知密钥已生成时生成一个围绕 UNIX 时间戳的范围,然后依次尝试每一个。
解决方案:使用window.crypto 使用加密库生成安全随机数。
Crypto 接口代表可用的基本加密功能
在当前情况下。它允许访问加密的强
随机数生成器和加密原语。
【解决方案2】:
随机数在 Javascript 中生成自 1970 年 1 月 1 日以来的毫秒数(UNIX 时间戳)。然后 Javascript 只取前几个值,这就是你的随机数。即
Math.floor((Math.random() * 10) + 1);
在 1 到 10 之间生成一个随机数。