Pseudo Random Number Generation Lab

本文介绍了Linux内核中熵池的概念及其在生成随机数中的作用,阐述了/dev/random和/dev/urandom的区别,强调了前者在熵不足时的阻塞特性以及后者在非阻塞随机数生成上的应用。实验部分使用/dev/urandom生成随机数并通过ent工具验证其随机性,进一步展示了如何用C语言生成512位密钥,强调每次产生的密钥具有随机性。
摘要由CSDN通过智能技术生成

实验环境

  • ubuntu16.04

预备知识

  1. 在Linux内核中采用熵来描述数据的随机性。为了能产生足够高效随机数,Linux系统维护了一个专门用于收集噪声的熵池(entropy pool),熵池的信息来自外界的熵信息 如:设备驱动的噪音,鼠标点击的声音,设备风扇运作的噪音。将这些噪声收集起来被用于产生真正的随机数。如果熵池中没有足够的噪音资源,就需要等待熵池的收集。只要设备的物理混乱程度越大,熵增就越快,熵池的信息越饱和,随机性的效率就越高。
  2. 内核中随机数发生器 PRNG 为一个字符设备 random,random 设备了提供了 2 个字符设备供用户态进程使用——/dev/random和/dev/urandom:
  • dev/random 适用于对随机数质量要求比较高的请求,在熵池中数据不足时,读取 dev/random 设备时会返回小于熵池噪声总数的随机字节。/dev/random 可生成高随机性的公钥或一次性密码本。若熵池空了,对/dev/random 的读操作将会被阻塞,直到收集到了足够的环境噪声为止。这样的设计使得/dev/random 是真正的随机数发生器,提供了最大可能的随机数据熵;
  • /dev/urandom,非阻塞的随机数发生器,它会重复使用熵池中的数据以产生伪随机数据。这表示对/dev/urandom 的读取操作不会产生阻塞,但其输出的熵可能小于/dev/random 的。它可以作为生成较低强度密码的伪随机数生成器,对大多数应用来说,随机性是可以接受的。

开始实验

  1. 为了避免使用/dev/random时收集的环境噪声不够,我们使用/dev/urandom来进行实验。
  2. 首先我们收集1M大小的随机数,用ent工具来检测其随机性,ent对存储在文件中的字节序列应用进行各种测试,并报告测试结果该程序对于计算伪随机数生成器非常有用。
[07/16/20]seed@VM:~/.../pseudo-random-number$ head -c 1M /dev/urandom > pseudo
[07/16/20]seed@VM:~/.../pseudo
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值