随机数设备
熵(entropy)是描述系统混乱无序程度的物理量,一个系统的熵越大则说明该系统的有序性越差,即不确定性越大。在信息学中,熵被用来表征一个符号或系统的不确定性,熵越大,表明系统所含有用信息量越少。
计算机本身是可预测的系统,因此,用计算机算法不可能产生真正的随机数。但是机器的环境中充满了各种各样的噪声,如硬件设备发生中断的时间,用户点击鼠标的时间间隔等是完全随机的,事先无法预测。SylixOS 内核实现的随机数发生器正是利用系统中的这些随机噪声来产生高质量随机数序列。
SylixOS 中的随机数可以从两个特殊的文件中产生,一个是 /dev/urandom,另一个是 /dev/random。它们产生随机数的原理是利用当前系统的熵池来计算出固定数量的随机比特,然后将这些比特作为字节流返回。
用户可以通过操作以上两个设备通过标准IO的方式来获取随机数。同样地,用户也可以直接调用 getrandom 函数或 getentropy 函数来获取以上两个设备产生的随机数。
#include <sys/random.h>
ssize_t getrandom(void *buf, size_t buflen, unsigned int flags);
函数 getrandom 原型分析:
- 此函数返回随机数长度。
- 参数 buf 是存放随机数的缓冲区;
- 参数 buflen 是缓冲区长度;
- 参数 flags 是获取随机数的设备标志(SylixOS 暂时不支持)。
#include <sys/random.h>
int getentropy(void *buf, size_t buflen);
函数 getentropy 原型分析:
- 此函数成功返回0,失败返回-1。
- 参数 buf 是存放随机数的缓冲区;
- 参数 buflen 是缓冲区长度。