热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

节点和电子中的随机性和熵

对于计算机而言,随机性是一个难题。因此,大多数产生随机性的功能都不被认为是密码安全的。这意味着攻击者可能会很好地猜测非安全随机性生成器生成了多少数字。如

对于计算机而言,随机性是一个难题。 因此,大多数产生随机性的功能都不被认为是密码安全的 。 这意味着攻击者可能会很好地猜测非安全随机性生成器生成了多少数字。

如何攻击随机性?

许多非安全随机性(或熵)生成器会执行以下操作:

function getRandom ( timestamp, maxNumber ) {// Take the deterministic hash of the timestampconst hashedTime = sha256(timestamp)// Reduce the hash to within the range [0, maxNumber)return hashedTime % maxNumber
}

该函数(虽然忽略了这么大的模数数学的一些实现细节)将返回基于时间戳输入的随机数,称为seed 。 如果我传入许多不同的时间戳,则各种输出将显示为random 。 这是弱伪随机数生成器的一个示例。

如果尝试执行以下操作,那么弱伪随机数生成器将完全正常工作:

  • 创建应用程序的样本数据
  • 编写视频游戏引擎
  • 等...

但是,如果尝试以下操作,则弱伪随机性可能会带来灾难性的危险 :

  • 生成比特币密钥
  • 生成密码或盐
  • 等...

强伪随机性(加密安全)

像Qvault这样的纯软件系统最多只能生成强大的伪随机数据,因为我们正在研究确定性系统。 如果没有外部的熵源(例如有人掷骰子并告诉计算机每个输出),我们将受到伪随机性的摆布。

crypto.randomBytes()

Node的内置crypto.randomBytes是基于openssl的加密安全随机数生成器。 根据用户的操作系统,randomBytes将使用

/ dev / urandom (unix)

要么

CryptoGenRandom (Windows)

尽管仍然是伪随机源,但重要的是攻击者无法猜测它们。 换句话说,在使用crypto.randomBytes() 在Qvault中生成恢复代码后 ,攻击者无法重新创建该代码。

我该怎么办?

简而言之,每当需要原始随机字节时,请使用crypto.randomBytes() 。 如果您需要某个范围内的随机数(例如0-9之间的随机数) ,请使用使用crypto.randomBytes()作为熵源的无偏函数。 例如:

节点随机数csprng

祝好运! 另外,请务必检查来源!

莱恩·瓦格纳(Lane Wagner)

  • 在媒体上关注我们! https://medium.com/qvault
  • 在Twitter上关注@wagslane

先前发布在https://qvault.io/2019/07/03/randomness-and-entropy-in-node-and-electron/

From: https://hackernoon.com/randomness-and-entropy-in-node-and-electron-6af83yi7



推荐阅读
  • 超级简单加解密工具的方案和功能
    本文介绍了一个超级简单的加解密工具的方案和功能。该工具可以读取文件头,并根据特定长度进行加密,加密后将加密部分写入源文件。同时,该工具也支持解密操作。加密和解密过程是可逆的。本文还提到了一些相关的功能和使用方法,并给出了Python代码示例。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 【技术分享】一个 ELF 蠕虫分析
    【技术分享】一个 ELF 蠕虫分析 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 本文讨论了如何使用IF函数从基于有限输入列表的有限输出列表中获取输出,并提出了是否有更快/更有效的执行代码的方法。作者希望了解是否有办法缩短代码,并从自我开发的角度来看是否有更好的方法。提供的代码可以按原样工作,但作者想知道是否有更好的方法来执行这样的任务。 ... [详细]
  • JDK源码学习之HashTable(附带面试题)的学习笔记
    本文介绍了JDK源码学习之HashTable(附带面试题)的学习笔记,包括HashTable的定义、数据类型、与HashMap的关系和区别。文章提供了干货,并附带了其他相关主题的学习笔记。 ... [详细]
  • 如何提高PHP编程技能及推荐高级教程
    本文介绍了如何提高PHP编程技能的方法,推荐了一些高级教程。学习任何一种编程语言都需要长期的坚持和不懈的努力,本文提醒读者要有足够的耐心和时间投入。通过实践操作学习,可以更好地理解和掌握PHP语言的特异性,特别是单引号和双引号的用法。同时,本文也指出了只走马观花看整体而不深入学习的学习方式无法真正掌握这门语言,建议读者要从整体来考虑局部,培养大局观。最后,本文提醒读者完成一个像模像样的网站需要付出更多的努力和实践。 ... [详细]
  • 本文讨论了在VMWARE5.1的虚拟服务器Windows Server 2008R2上安装oracle 10g客户端时出现的问题,并提供了解决方法。错误日志显示了异常访问违例,通过分析日志中的问题帧,找到了解决问题的线索。文章详细介绍了解决方法,帮助读者顺利安装oracle 10g客户端。 ... [详细]
  • GreenDAO快速入门
    前言之前在自己做项目的时候,用到了GreenDAO数据库,其实对于数据库辅助工具库从OrmLite,到litePal再到GreenDAO,总是在不停的切换,但是没有真正去了解他们的 ... [详细]
  • 本文讨论了微软的STL容器类是否线程安全。根据MSDN的回答,STL容器类包括vector、deque、list、queue、stack、priority_queue、valarray、map、hash_map、multimap、hash_multimap、set、hash_set、multiset、hash_multiset、basic_string和bitset。对于单个对象来说,多个线程同时读取是安全的。但如果一个线程正在写入一个对象,那么所有的读写操作都需要进行同步。 ... [详细]
  • ejava,刘聪dejava
    本文目录一览:1、什么是Java?2、java ... [详细]
  • AstridDAO 专访:波卡稳定币黑马 BAI
    加入Pol ... [详细]
  • 寻求更强大的身份和访问管理(IAM)平台的企业正在转向云,并接受身份即服务(IDaaS)的灵活性。要为IAM选择正确的场外解决方案,业务管理人员和IT专业人员必须在实施之前评估安全 ... [详细]
author-avatar
manassatromble
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有