热门标签 | 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



推荐阅读
  • 深入剖析JVM垃圾回收机制
    本文详细探讨了Java虚拟机(JVM)中的垃圾回收机制,包括其意义、对象判定方法、引用类型、常见垃圾收集算法以及各种垃圾收集器的特点和工作原理。通过理解这些内容,开发人员可以更好地优化内存管理和程序性能。 ... [详细]
  • 在高并发需求的C++项目中,我们最初选择了JsonCpp进行JSON解析和序列化。然而,在处理大数据量时,JsonCpp频繁抛出异常,尤其是在多线程环境下问题更为突出。通过分析发现,旧版本的JsonCpp存在多线程安全性和性能瓶颈。经过评估,我们最终选择了RapidJSON作为替代方案,并实现了显著的性能提升。 ... [详细]
  • 本文将详细探讨 Java 中提供的不可变集合(如 `Collections.unmodifiableXXX`)和同步集合(如 `Collections.synchronizedXXX`)的实现原理及使用方法,帮助开发者更好地理解和应用这些工具。 ... [详细]
  • 本文介绍如何使用 Angular 6 的 HttpClient 模块来获取 HTTP 响应头,包括代码示例和常见问题的解决方案。 ... [详细]
  • 深入解析Java枚举及其高级特性
    本文详细介绍了Java枚举的概念、语法、使用规则和应用场景,并探讨了其在实际编程中的高级应用。所有相关内容已收录于GitHub仓库[JavaLearningmanual](https://github.com/Ziphtracks/JavaLearningmanual),欢迎Star并持续关注。 ... [详细]
  • 本题来自WC2014,题目编号为BZOJ3435、洛谷P3920和UOJ55。该问题描述了一棵不断生长的带权树及其节点上小精灵之间的友谊关系,要求实时计算每次新增节点后树上所有可能的朋友对数。 ... [详细]
  • Redux入门指南
    本文介绍Redux的基本概念和工作原理,帮助初学者理解如何使用Redux管理应用程序的状态。Redux是一个用于JavaScript应用的状态管理库,特别适用于React项目。 ... [详细]
  • 云函数与数据库API实现增删查改的对比
    本文将深入探讨使用云函数和数据库API实现数据操作(增删查改)的不同方法,通过详细的代码示例帮助读者更好地理解和掌握这些技术。文章不仅提供代码实现,还解释了每种方法的特点和适用场景。 ... [详细]
  • 本文介绍如何从字符串中移除大写、小写、特殊、数字和非数字字符,并提供了多种编程语言的实现示例。 ... [详细]
  • Linux环境下进程间通信:深入解析信号机制
    本文详细探讨了Linux系统中信号的生命周期,从信号生成到处理函数执行完毕的全过程,并介绍了信号编程中的注意事项和常见应用实例。通过分析信号在进程中的注册、注销及处理过程,帮助读者理解如何高效利用信号进行进程间通信。 ... [详细]
  • 探讨ChatGPT在法律和版权方面的潜在风险及影响,分析其作为内容创造工具的合法性和合规性。 ... [详细]
  • 本文详细介绍如何使用 Python 集成微信支付的三种主要方式:Native 支付、APP 支付和 JSAPI 支付。每种方式适用于不同的应用场景,如 PC 网站、移动端应用和公众号内支付等。 ... [详细]
  • 开发笔记:由数据库某字段存数组引发的json_encode/serialize思考
    开发笔记:由数据库某字段存数组引发的json_encode/serialize思考 ... [详细]
  • 本文档汇总了Python编程的基础与高级面试题目,涵盖语言特性、数据结构、算法以及Web开发等多个方面,旨在帮助开发者全面掌握Python核心知识。 ... [详细]
  • 探讨在使用 Fast-Android-Networking 库时遇到的 addStringBody 方法无法正常工作的问题及其解决方案。 ... [详细]
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社区 版权所有