首页 > 解决方案 > JavaScript:安全随机数生成

问题描述

我需要使用 JS 生成安全的随机数。
此随机数生成必须尽可能安全(尽可能随机)
所以我显然不能在这里使用 Math.random() 。
AFAIK 我最好的选择是使用 Crypto API 的crypto.getRandomValues()方法。

我读到 Crypto API 是“尽可能安全”(除了“真正的”RNG 之外),并使用从特定于平台的 RNG /dev/urandom(如 unix 中)获取的值作为种子。

1. crypto.getRandomValues() 真的安全吗?有什么我应该担心的缺陷吗?

2. 安全或不安全,我应该进一步考虑 Crypto.getRandomValues() 的随机性吗?喜欢,

我可以再次使用 crypto.getRandomValues() 从 crypto.getRandomValues() 的第一个结果中获取随机值。

或者

我可以实现我自己的 RNG,它使用用户鼠标移动/时间/窗口宽度/高度作为种子。
然后使用来自该 RNG 的随机数从 crypto.getRandomValues() 的结果中随机选择一个数字。

任何见解将不胜感激。

标签: javascriptrandomcryptography

解决方案


据我了解这个问题,我相信您应该使用 crypto.getRandomValues 作为另一个选项(用户鼠标移动/时间/窗口宽度/高度)是可追踪的,任何有经验的优秀黑客都会对您的系统构成风险。

但是你在寻找什么样的“数字”?


推荐阅读