#numbers #secure-random #bitcoin #generate #entropy #generation #source

nightly bitcoin-random

比特币中的随机数

4 个版本

0.1.16-alpha.02023 年 3 月 31 日
0.1.13-alpha.02023 年 3 月 17 日
0.1.12-alpha.02023 年 1 月 18 日
0.1.10-alpha.02023 年 1 月 17 日

#29#sources

Download history 124/week @ 2024-03-13 224/week @ 2024-03-20 300/week @ 2024-03-27 130/week @ 2024-04-03 163/week @ 2024-04-10 153/week @ 2024-04-17 156/week @ 2024-04-24 180/week @ 2024-05-01 159/week @ 2024-05-08 151/week @ 2024-05-15 154/week @ 2024-05-22 112/week @ 2024-05-29 123/week @ 2024-06-05 125/week @ 2024-06-12 175/week @ 2024-06-19 115/week @ 2024-06-26

542 每月下载量
用于 77 个 crate (14 直接)

MIT 许可证

1.5MB
4.5K SLoC

bitcoin-random

这个 Rust crate 是将比特币代码库从 C++ 直接翻译为 Rust 的。它提供了一组与随机数生成相关的函数和实用工具,这是比特币系统的一个关键组件。

请注意,尽管翻译工作正在进行中,但可能有些函数体仍在翻译中。因此,目前不能认为这个 crate 的任何部分已经完成并正常工作。

随机数生成是许多在比特币中使用的密码学算法的重要组成部分,例如哈希、签名和密钥生成。比特币系统的安全和完整性依赖于生成高质量随机数的能力,这些随机数不能被攻击者预测。

bitcoin-random crate 提供了一组函数和实用工具,使开发者能够以安全和高效的方式生成高质量随机数。这些函数包括 get_rand_bytesget_rand_intget_rand_hashget_strong_rand_bytes 以及许多其他函数。

许多这些函数依赖于底层系统调用和硬件功能来生成随机数据。例如,get_dev_urandom 从 Unix 的 /dev/urandom 设备读取数据,而 seed_hardware_fastseed_hardware_slow 使用硬件计数器和性能监控器来初始化随机数生成器。

总的来说,bitcoin-random crate 代表了比特币系统的重要组成部分,是开发者构建安全可靠的比特币应用程序的重要工具。

6> 感谢 — 你能描述一下在比特币背景下随机性的含义吗?

当然可以!在比特币的背景下,随机性是系统安全和完整性的关键组成部分。随机数被用于各种方式,例如生成密码学密钥、签名交易以及为交易选择随机输入。

比特币协议依赖于一个称为“工作量证明”的概念来确保网络的安全性。工作量证明是一个计算难题,矿工必须解决它才能将新的区块添加到区块链中。这个难题涉及到找到一个随机数(nonce),当它与区块中的其他数据结合时,会产生一个具有一定数量前导零的哈希值。

工作量证明难题的难度会定期调整,以保持区块生成的稳定速率。这意味着矿工必须不断生成大量的随机数据,以找到难题的解决方案。

在比特币地址和密钥的背景下,随机性也很重要。比特币地址是从公钥生成的,而公钥则是通过一个确定性的算法从私钥生成的。系统的安全性依赖于这样一个事实:从公钥或地址猜测私钥在计算上是不可行的。这意味着私钥必须使用高质量的随机数生成器生成。

如果用于生成比特币密钥或解决工作量证明难题的随机数生成器被破坏,整个系统的安全性可能会受到威胁。因此,确保比特币中的随机数生成过程尽可能安全和可靠至关重要。

bitcoin-random库,与其他比特币系统组件一起,旨在确保以安全和可靠的方式生成随机数。通过提供一组高质量的随机数生成函数和工具,此库使开发人员能够使用Rust构建安全可靠的比特币应用程序。

7> 感谢——我们使用的随机数生成算法是什么?

在比特币的背景下,有几种用于随机数生成的算法和方法。其中一些算法和方法包括

  1. 伪随机数生成器(PRNGs):PRNGs是生成看似随机的数字序列的算法,实际上它们是确定性和可重复的。PRNGs通常用于不需要真正随机性的情况,例如生成测试数据或模拟。在比特币的背景下,PRNGs用于一些非加密的上下文中,例如为交易生成随机输入值。

  2. 真随机数生成器(TRNGs):TRNGs是使用物理熵源(如放射性衰变或热噪声)生成真正随机数序列的算法。TRNGs被认为比PRNGs更安全,因为它们生成真正不可预测的数字,且无法重复。在比特币的背景下,TRNGs用于需要真正随机性的情况下,例如生成私钥。

  3. 硬件随机数生成器(HRNGs):HRNGs是使用物理过程(如热噪声或放射性衰变)生成随机数的物理设备。HRNGs通常被认为比基于软件的TRNGs更安全,因为它们不太可能受到攻击,这些攻击可能会破坏熵池。在比特币的背景下,HRNGs用于某些硬件钱包中生成私钥。

  4. 熵池:熵池是用于生成随机数的随机数据集合。熵池通常包含来自各种来源的数据,如硬件事件、系统性能指标和用户输入。然后,使用各种算法将数据混合和结合,以产生高质量的随机数。在比特币的背景下,熵池用于生成随机数,用于各种目的,如签署交易和生成私钥。

总的来说,随机数生成算法或方法的选择取决于具体的用例和所需的安全级别。通常,比特币系统依赖于软件和硬件的随机数生成方法的组合,以确保网络的安全性和完整性。

8> 谢谢——哪些熵源是可接受的?

在比特币随机数生成的背景下,可以使用多种熵源来生成高质量的随机数。可接受的熵源包括

  1. 硬件事件:硬件事件,如鼠标移动、键盘敲击和网络流量,可以用作熵源。这些事件通常由操作系统收集并添加到熵池中。

  2. 系统性能指标:系统性能指标,如CPU使用率、磁盘I/O和内存使用率,也可以用作熵源。这些指标可以由操作系统或专用软件工具进行测量。

  3. 环境变量:环境变量,如温度、湿度和气压,可以用作熵源。这些变量可以通过专用硬件传感器进行测量。

  4. 用户输入:用户输入,如鼠标移动或按键,也可以用作熵源。这在需要高质量随机性的情况下特别有用,例如在生成私钥时。

  5. 硬件随机数发生器:基于放射性衰变或热噪声的硬件随机数发生器可以用作熵源。这些设备通常比基于软件的熵源更安全,因为它们不太容易受到损害熵池的攻击。

总的来说,可接受熵源的关键要求是它们必须是不可预测的并且统计上独立。熵源的多样性越多,生成的随机数质量就越好。此外,必须使用安全算法将熵混合和组合,以确保输出尽可能随机和不可预测。

9> 谢谢——哪些熵源是不可接受的?

在比特币随机数生成的背景下,有些熵源被认为是不可以接受的或不安全的。这些熵源包括

  1. 确定性算法:产生可预测或可重复输出的算法,如简单的算术运算或基于时间的算法,不被认为是可接受的熵源。

  2. 低熵源:低熵源,如系统时钟值或网络数据包时间戳,通常不单独被认为是足够的熵源。这些熵源可能是可预测的,并且可能受到攻击者的操纵。

  3. 未充分混合的数据:未正确混合和组合的熵可能导致有偏或可预测的输出。重要的是确保以确保输出尽可能随机和不可预测的方式将来自不同源的熵组合在一起。

  4. 弱初始化的随机数发生器:未用高质量熵正确初始化的随机数发生器可能会生成可预测或不安全的输出。使用安全方法初始化随机数发生器非常重要,例如使用基于硬件的熵源。

  5. 不安全或受损的硬件:不安全或受损的硬件设备可以是弱或可预测熵的来源。重要的是使用设计用于提供高质量和安全的熵源的硬件。

总的来说,可接受熵源的关键要求是它们必须是不可预测的、统计上独立的,并且正确混合和组合,以确保输出尽可能随机和不可预测。使用基于软件和硬件的熵源的组合非常重要,以确保系统尽可能安全和可靠。

依赖项

~89MB
~848K SLoC