Lauren与密码学3,我是随机数。

Lauren: 随机数,我知道。就是随机的,不确定的,没有规律的数字。

Haorui: 差不多。来我们看看更专业的说法。随机数是一个随机数据序列集合中的某一个。序列中的数据之间是毫无关联的。且对下一个将要产生的随机数值是不可预测的,也没有一种方式能够超过50%的概率预测下一个随机位(这里指二进制数位)。它有三大特性,不可预测性,不可重复产生,无关联性。

Lauren: “煮个粟子”吧。

Haorui: 比如圆周率(π),圆的周长与直径的比值,是一个无限不循环小数。是否可取一段小数后面的数据作为随机数。答案是否定的,它符合无关联性,但是是可预测并可重复产生。随机数更像是一个善改的小女生,这一秒与下一秒说的话,是完全不一样。行为搞不懂,也无法揣测。

Lauren: 好像我就是耶。

Haorui: 哪我叫你随便女生好了,Sorry!是随机女生。

Lauren: 我学过C语言,里面有一个srand函数,可以产生随机数。在使用的时候,需要给函数提供一个种子,也就是一个变化的整数。

Haorui: 是的,Lauren真聪明!那么,srand函数产生的随机数符合我刚才说的三大特性吗?

Lauren: 如果种子一样的话,所产生的随机数是一样的。也就是说它可以重复产生。难道它不是随机数?

Haorui: 是的,在密码学里,我们称这种随机数为伪随机数。“伪”在这里的意思可理解为有规律。伪随机数一般由随机算法与随机种子组成。随机种子一般默认为系统时钟。而符合三大特性的随机数称为准随机数。根据安全级别,在密码学中,两种随机数都有用到。

Lauren:  你的意思是说,我们的电脑无法产生准随机数?

Haorui:  是的,一般的PC机是没有产生准随机数的功能。准随机数的产生是要专业的硬件芯片,称之为随机数生成器。比如金融用的POS机里就有这种芯片,用于专门产生准随机数。实现方式有很多种,比如:

-       模拟稳压二极管的噪音源,将它们转换为随机比特流;

-       基于半导体中光子发射固有的随机性,随后靠光电效应,光子被独立的,一个个随机的侦测到。光子侦测的定时机制用于产生随机比特位;

-       产生系统时钟的晶振的热噪音可以作为随机源等等;

Lauren: 听起来好复杂。

Haorui: 其时,用起来非常简单。是一个简单的芯片,比CPU简单多了。

Lauren: 说了这么多,随机数有什么作用呢?

Haorui: 根据随机数的三大特性,它用来作密码学中的密钥就再合适不过了。同时在密码学中有很多加密算法也需要随机数作初始参数。

Lauren: 太妙了,每次会话都可以用不同的密钥,而且密钥间毫无关联。某一次密钥的泄露,攻击者都无法猜到下一次。

Haorui: 安全级别要求不高的时候,我们可以用伪随机数。但是有很多攻击是针对伪随机数的。

Lauren: 所以伪随机数的种子一定要保密,否则攻击都就可以猜到密钥了。

Haorui: 聪明。今天到此为止。出一道考题,投骰子所生产的数列是准随机数吗?

Lauren: 让我想想。。。

你可能感兴趣的:(安全)