首页 > 其他分享 >Math.random()的安全风险

Math.random()的安全风险

时间:2023-01-30 16:35:22浏览次数:37  
标签:缓存 random 安全 随机 随机数 getRandomValues Math

Math.random()函数返回一个0~1之间的伪随机浮点数,其在V8中的实现原理是这样的:

为了保证足够的性能,Math.random()随机数并不是实时生成的,而是直接生成一组随机数(64个),并放在缓存中,当这一组随机数取完之后再重新生成一批,放在缓存中。

由于 Math.random() 的底层算法是公开的(xorshift128+ 算法),V8 源码可见,因此,是可以使用其他语言模拟的,这就导致,如果攻击者知道了当前随机生成器的状态,那就可以知道缓存中的所有随机数,那就很容易匹配与破解。

Crypto.getRandomValues() 和 Math.random() 方法的区别在于,getRandomValues() 方法的随机种子生成器更加的无序,例如系统层面的无序源(有些硬件自带随机种子)。

然后不同浏览器下 getRandomValues() 方法生成的随机数可能是有区别的。

以及 getRandomValues() 方法的底层实现是没有缓存的,随机数都是实时生成的,因此,性能上是要比 Math.random() 差的,因此,如果是高并发的场景,同时随机数仅仅是用做随机,与安全和金钱不相关,请使用 Math.random() 而不是 getRandomValues()

就 Web 前端而言,必须要使用 getRandomValues() 方法的场景很少,不过由于纯前端几乎不存在所谓的高并发,因此使用 getRandomValues() 方法也是可以的。

标签:缓存,random,安全,随机,随机数,getRandomValues,Math
From: https://www.cnblogs.com/zhenjianyu/p/17076364.html

相关文章

  • 钢铁安全VR培训系统模拟真实事故现场,带来逼真感官体验
    每当谈及安全生产,总有人避之不及,觉得安全事故很遥远,但事实却告诉我们危险其实无处不在,安全问题必须重视起来。由广州华锐互动制作的钢铁生产3D事故安全警示教育视频,包含钢......
  • 登山扣上架亚马逊平台需要做什么安全标准测试呢?
    近期,亚马逊在严查登山扣及其相关产品,被抽查到没有相关认证的登山扣产品将直接被下架!而登山扣上亚马逊,需要做什么认证呢?什么是登山扣登山扣是扣子的一种,顾名思义其就是用来在......
  • 无线局域网安全协议概述
    转载自:https://cloud.tencent.com/developer/article/1945521本文将无线安全协议包括WEP、WPA、WPA2和WPA3。对于它们中的每一个,我们将尝试指出它们的优点和缺点,并描述......
  • 云图说 | 华为云主机安全服务(新版)来啦!
    摘要:主机安全服务以工作负载为中心,解决了混合云、多云数据中心服务器的负载保护,集成了主机、容器和网页防篡改的安全防护。本文分享自华为云社区《【云图说】|第265期......
  • 云图说 | 华为云主机安全服务(新版)来啦!
    摘要:主机安全服务以工作负载为中心,解决了混合云、多云数据中心服务器的负载保护,集成了主机、容器和网页防篡改的安全防护。本文分享自华为云社区《​​【云图说】|第265期......
  • 带绳窗帘上架亚马逊安全标准测试
    美国消费品安全委员会于2022年11月2日通过了一项新的联邦安全标准。该标准适用于定制窗帘的操作绳,目的是降低带绳窗帘导致儿童窒息死亡和严重危及生命的伤害的风险。委员会......
  • 记OPNsense防火墙的安装过程 - 安全
          前些天在网上看到防火墙软件OPNsense,对其有了兴趣,以前写过一个其前面的一个软件M0n0wall(关于m0n0wall的安装及配置),当时也是非常有名的防火墙,现在有了OPNsen......
  • 网络安全学习之系统和数据库
    识别服务器操作系统1.通过linux和windows文件系统的特性区分 linux严格区分文件大小写,windows不区分文件大小写。可以修改url中文件名称或者后缀的大小写查看是否返回正......
  • API安全学习笔记
    必要性前后端分离已经成为web的一大趋势,通过Tomcat+Ngnix(也可以中间有个Node.js),有效地进行解耦。并且前后端分离会为以后的大型分布式架构、弹性计算架构、微服务架构、......
  • 线程安全集合CopyOnWriteArrayList
    解决多线程的集合有以下几种1、Vertor(所有方法上加synchronized锁)能保证多线程安全,数据一致,但性能低下一般不用2、Collections.synchronizedList方法返回的List 在方......