• 第一部分:复习上一节课的知识。
  • 第二部分
  • 第三部分

前言

  • 在密码学中,生成随机二进制比特流(通常称为随机数生成器或者伪随机数生成器)是一个重要的密码函数。
  • 大量基于密码学的网络安全算法和协议都需要使用随机数,这些协议通常通过随机数来实现密钥分发、互相认证、生成会话密钥等。
  • 本篇文章是对伪随机数生成器做一个简单的介绍,对一些伪随机数生成器的算法不做介绍。
  • 介绍几个概念和几个误区:
    • 伪随机数生成器本身不一定是流密码,但是很多流密码的密钥生成都是基于伪随机数生成器实现的
    • 伪随机数生成器简称为PRNG,全称为Pseudo-Random Number Generator,也被称为确定性随机位生成器,即DRBG(Deterministic Random bit Generator)
    • 真随机数生成器简称为TRNG,全称位True Random Number Generator,也被称为非确定性随机位生成器,即NRBG(Non-deterministic Random bit Generator)
    • 如果是在密码学中强调安全,其中文名就是密码学安全的伪随机数生成器简称为CSPRNG,全称为Cryptographically Secure Pseudo-Random Number Generator

以下摘自维基百科:

​ 伪随机数生成器,是一种用于生成数字序列的算法,其属性近似于随机数序列的属性。PRNG 生成的序列不是真正的随机序列,因为它完全由一个初始值决定,称为 PRNG 的*种子*(可能包括真正的随机值)。尽管可以使用硬件随机数生成器生成更接近真正随机的序列,但伪随机数生成器在实践中因其数字生成速度和可重复性而很重要。

​ PRNG 在模拟(例如用于蒙特卡洛方法)、电子游戏(例如用于程序生成)和密码学等应用中发挥着核心作用。加密应用程序要求输出不能从早期输出中预测,并且需要更复杂的算法,这些算法不会继承更简单的 PRNG 的线性度。

​ 良好的统计属性是 PRNG 输出的核心要求。一般来说,需要仔细的数学分析才能确信 PRNG 生成的数字足够接近随机,以适应预期用途。

  • 对随机数生成器的两个要求:
    • 随机性:在某种明确定义的统计意义下,数序列是随机的。比如分布均匀,序列中的位分布应该是均匀的,也就是0和1出现的概率应该相等。还比如独立性,序列中任何子序列都不能由其他子序列推导出来。
    • 不可预测性:序列后续成员不可预测。