当前位置: 首页 > 知识库问答 >
问题:

确保在此处使用此伪随机数生成器是安全的

康锦
2023-03-14

当我声明一个变量时,比如:

const FileId = Math.random().toString(36).substr(2, 9);

我得到这个错误在声纳:

确保在此处使用此伪随机数生成器是安全的。

我应该如何解决这个问题?我的代码有什么问题?

有人能帮我吗?

共有1个答案

袁智明
2023-03-14

他们想提醒你一个事实,那就是数学。random不是真正的随机生成器,而是PRNG。如果你需要这个来保证安全,你需要一个CSPRNG。

这是说明书

使用伪随机数生成器(PRNG)是安全敏感的

当软件在要求不可预测性的上下文中生成可预测值时,攻击者可能会猜测将生成的下一个值,并利用该猜测来冒充另一个用户或访问敏感信息。

由于Math.random()函数依赖于弱的伪随机数生成器,因此不应将此函数用于安全关键型应用程序或保护敏感数据。在这种情况下,应该使用密码学强的伪随机数生成器(CSPRNG)来代替。

问问自己是否

  • 使用生成值的代码要求它是不可预测的。所有加密机制都是如此,或者当秘密值(如密码)被散列时也是如此。
  • 您使用的函数生成一个可以预测的值(伪随机)。
  • 生成的值被多次使用。
  • 攻击者可以访问生成的值。

如果您对第一个问题和以下任何一个问题的回答是肯定的,您将面临风险。

代码示例

const crypto = window.crypto || window.msCrypto;
var array = new Uint32Array(1);
crypto.getRandomValues(array); // Compliant for security-sensitive use cases
const FileId = array[0];
console.log(FileId);
 类似资料:
  • 生成随机数 # random_random.py import random for i in range(5): print('%04.3f' % random.random(), end=' ') print() # random_uniform.py import random for i in range(5): print('{:04.3f}'.format(ran

  • 我被要求创建一个可证明的公平(确定性 我原以为srand()可以用来播种random_int(),但现在我不确定情况是否如此。CSPRNG甚至可以播种吗?如果可以播种,输出是否具有确定性(相同的随机结果,给定相同的种子)? 这是我的代码: 运行此代码时,每次运行时的绘图($draw_str)应该是相同的,但事实并非如此。 为了证明图纸是公平的,在选择并显示获胜号码之前,会选择一个种子(种子A)。还

  • 问题内容: 用例:“我忘记了密码”按钮。我们找不到用户的原始密码,因为它以散列形式存储,因此唯一要做的就是生成一个新的随机密码,然后通过电子邮件发送给他。这就要求使用密码无法预测的随机数,而mt_rand不够好,因此通常我们不能假定托管服务将提供对操作系统的访问权以安装密码随机数模块等。因此,我在寻找一种方法在PHP本身中生成安全的随机数。 到目前为止,我提出的解决方案包括存储初始种子,然后针对每

  • 控制权限是安全敏感的。它在过去导致了以下漏洞: 建议是这样的。安全原则演示{类我的身份:敏感的,自定义的IId实体实现应该被审查{//...} }

  • 主要内容:1 伪随机数,2 Random,2.1 随机数的生成和局限性,3 ThreadLocalRandom,3.1 概述,3.2 current方法,3.3 nextInt方法,3.4 总结详细介绍了ThreadLocalRandom伪随机数生成器的原理,以及对Random的优化! 1 伪随机数 简单的了解一下伪随机数的概念。 通过固定算法产生的随机数都是伪随机数,Java语言的随机数生成器或者说整个计算机中的随机数函数,生成的都是伪随机数。只有通过真实的随机事件产生的随机数才是真随机数。比

  • 问题内容: PHP的函数不能提供良好的随机数。因此,我开始使用据说效果更好的产品。但是这些结果有多好?有什么方法可以再次改善它们? 我的点子: 这应该给您“完美的”随机数,不是吗? 问题答案: 伪随机数生成器(PRNG)是非常复杂的野兽。 没有真正的“完美”随机数生成器-实际上,可以通过数学函数完成的最好的操作是伪随机数-对于大多数意图和目的,它们似乎足够随机。 实际上,从PRNG返回的数字中执行