随机数在密码学中非常重要,保密通信中大量运用的会话密钥的生成即需要真随机数的参与。如果一个随机数生成算法是有缺陷的,那么会话密钥可以直接被推算出来。若果真发生这种事故,那么任何加密算法都失去了意义。

Pseudo Random number Generator


  • ANSI X9.17 PRG
  • Two PRGs are specified in FIPS-186, based on DES or SHA-1
  • NIST SP 800-90 specifies hash-based, HMAC-based, CTR-based, and ECC based generators.
  • ANSI X9.31 and ANSI X9.62
  • OpenSSL specifies a SHA-1 based PRG.

True Random Number Generator

在计算机科学中,硬件随机数生成器(英语:Hardware Random Number Generator),或真随机数生成器(英语:True Random Number Generator, TRNG)是一种通过物理过程而不是计算机程序来生成随机数字的设备。这样的设备通常是基于一些能生成低等级、统计学随机的“噪声”信号的微观现象,如热力学噪声、光电效应和量子现象。这些物理过程在理论上是完全不可预测的,并且已经得到了实验的证实。硬件随机数生成器通常由换能器、放大器和模拟数字转换器组成。其中换能器用来将物理过程中的某些效果转换为电信号,放大器及其电路用来将随机扰动的振幅放大到宏观级别,而模拟数字转换器则用来将输出变成数字,通常是二进制的零和一。通过重复采样这些随机的信号,一系列的随机数得以生成。

Linux Random

根据 Myths about /dev/urandom ([snapshot] 中译) , 一般情况下可以直接使用 /dev/random 生成随机数

Linux 4.9+ has a new design for /dev/urandom: it XORs RdRAND/SEED with ChaCha20 (this design is borrowed from Adam Langley's implementation in BoringSSL, also used in libsodium) thus providing a fast and save interface for cryptographically secure pseudo random numbers.


Linux CSPRNG architecture overview random.c.png

The architecture presented here is accurate for the Linux kernels from version 4.18 to at least version 5.4 .

Linux source code: https://github.com/torvalds/linux/blob/master/drivers/char/random.c

Dual_EC——DRBG

2013年12月路透社曾爆料称著名加密产品开发商RSA在收取NSA上千万美元后,在其软件Bsafe中嵌入了NSA开发的,被植入后门的伪随机数生成算法( Dual_EC——DRBG ,双椭圆曲线确定性随机比特生成器),NSA还利用NIST认证该漏洞算法为安全加密标准,使得该算法成为大量软件产品默认使用的随机数生成器,而这个后门算法使得NSA能够大规模破解加密数据。

Extended Random

NSA在一个RSA加密产品—— Extended Random 协议中植入了后门,这个前NSA技术总监参与开发的安全工具事实上大大降低了RSA软件的安全性。 Extended Random 协议的开发得到了五角大楼的资助,设计本意是增加双椭圆曲线算法产生的秘钥数值的随机性,增加安全性。但约翰霍普金斯大学的加密学专家Matt Green教授等人在一篇即将发布的研究报告中指出,在Extended Random的帮助下,攻击者破解RSA双椭圆曲线加密软件密码的速度将能加快数万倍。

Sony PS3

Sony PS3 因为签名时所用的随机数是同一个,所以被反推出私钥。