计算机如何生成随机数?

admin 2025-08-06 09:18 565人围观 ,发现565个评论

乍一看,电子游戏、赌博、密码学似乎彼此之间毫无关系,但实际上,它们都使用“随机数”,没有随机数就无法建立现代人的生活。本文将解释计算机如何生成这样的随机数。

生成随机数比你想象的要难得多!

例如,如果你想在编程中使用随机数,Ruby中使用诸如“rand”或Python中使用“random()”之类的方法。此时生成的是通过计算获得的伪随机数,而不是完全随机数。

PRNG不能生成完美的随机数,但它可以快速且廉价地生成看似随机数。此外,如果制备特定的种子值,可以获得再现性,因此测试操作也是一个很大的问题。这就是为什么PRNG经常用于游戏和编程语言中的随机方法。

但是,由于PRNG生成的数字的随机性取决于种子值,因此还存在一个漏洞,即如果种子值泄露,可以预测数字的生成。实际上,卡巴斯基实验室(一种安全软件)中有一个密码管理器示例,它在获取种子值时遇到问题,并使随机生成的密码可预测。

另一种就是“固有随机数生成器(TRNG)”随机生成作为随机数源的数据。TRNG的特征是使用熵而不是种子值,种子值是一个特定的数字,可以生成更接近完美的随机数。因此,TRNG用于数字赌博领域,如骰子,洗牌和轮盘赌。

问题是如何使用熵作为随机数源的数据,这要求构成计算机的部分是随机的。TRNG通过使用诸如存储器波动性和光电效应等量子现象,将物理噪声转换为数字1和0来产生高度随机的数字。

另一方面,TRNG的缺点是生成数字需要时间。此外,作为随机数源的数据需要熵,因此空闲或新服务器无法创建与活动服务器一样随机的数据。

因此设计了“加密伪随机”数字生成器(CSPRNG),它实现了PRNG的速度和TRNG的安全性。

CSPRNG是一个生成器,它从“高质量的熵源创建种子值,并将其输入到算法中以生成高度安全的随机数”。简而言之,CSPRNG是一种“使用TRNG生成PRNG种子值”的机制。/Dev/random在类Unix操作系统中使用,Linux使用这个CSPRNG。

不容错过