- TRNG
真随机数生成器,将随机的源作为输入,称为熵源。熵源可以是CPU温度,放射源,噪音等。Linux中/dev/random就是一个TRNG。使用TPM2.0模块也可以产生真随机数。 - PRNG
伪随机数生成器,将种子作为输入,使用确定算法产生位输出序列,输出仅和种子有关,用于产生不限长位流的算法。线性同余法,BBS就是常见的PRNG。 - CPRNG
密码安全伪随机数生成器,又称作确定性随机比特生成器(DRBG)。因为有些RNG生成的随机数具有可预测性,不能用于密码学,比如线性同余法。常用的CPRNG有NIST定义的Hash_DRBG,HMAC_DRBG,CTR_DRBG和以经废除的Dual_EC_DRBG以及微软的CryptGenRandom函数。大多数的CSPRNG结合使用来自OS的熵与高质量的PRNG。 - PRF
伪随机函数,PRF用于产生某个固定长度的伪随机比特串。PRF不是随机数生成器,而是给定输入返回一个看似随机的结果,如果输入相同输出也是相同的。通常用于密钥派生,比如通过多种来源作为种子,然后生成固定长度的密钥。常用的PRF是HMAC簇算法。IPsec和TLS中都需要配置PRF算法。 - PRP
伪随机置换,与PRF类似,但是PRP生成的结果是一对一的,通常用对称加密算法产生。只用于一些特殊场合。
参考:
https://datatracker.ietf.org/doc/rfc2409/
https://en.wikipedia.org/wiki/Pseudorandom_function_family
https://thiscute.world/posts/practical-cryptography-basics-4-secure-random-generators/
NIST SP 800-90A R1,2015年更新
https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-90Ar1.pdf