gpt4 book ai didi

c - 使用 RNDADDENTROPY 将熵添加到/dev/random

转载 作者:IT王子 更新时间:2023-10-29 00:36:03 33 4
gpt4 key购买 nike

我有一个设备会产生一些噪声,我想将其添加到嵌入式 Linux 系统中/dev/random 设备的熵池中。

我正在阅读 man page on /dev/random而且我不太了解您传递给 RNDADDENTROPY ioctl 调用的结构。

   RNDADDENTROPY
Add some additional entropy to the input pool, incrementing
the entropy count. This differs from writing to /dev/random
or /dev/urandom, which only adds some data but does not
increment the entropy count. The following structure is used:

struct rand_pool_info {
int entropy_count;
int buf_size;
__u32 buf[0];
};

Here entropy_count is the value added to (or subtracted from)
the entropy count, and buf is the buffer of size buf_size
which gets added to the entropy pool.

此结构中的 entropy_count 是我要添加的位数吗?为什么这不总是 buf_size * 8(假设 buf_size 以字节为单位)?

此外,为什么 buf 是一个零大小的数组?我该如何为其赋值?

在此感谢您的帮助!

最佳答案

我正在使用硬件 RNG 来储存我的熵池。我的结构是静态大小看起来像这样(我的内核有一个稍微不同的 random.h;只需复制什么你在你的中找到并将数组大小增加到你想要的任何大小):

#define BUFSIZE 256
/* WARNING - this struct must match random.h's struct rand_pool_info */
typedef struct {
int bit_count; /* number of bits of entropy in data */
int byte_count; /* number of bytes of data in array */
unsigned char buf[BUFSIZ];
} entropy_t;

无论你在 buf 中传递什么,都将被散列并搅动熵池。如果您使用的是/dev/urandom,则为 bit_count 传递什么并不重要因为/dev/urandom 忽略它等于零并继续前进。

bit_count 的作用是推出/dev/random 将阻塞的点并等待从物理 RNG 源中添加更多熵的东西。因此,可以猜测 bit_count。如果你猜低,最坏的将会发生的是/dev/random 将比其他方式更快地阻塞将有。如果你猜得高,/dev/random 将像/dev/urandom 一样运行比它阻塞之前的时间长一点。

您可以根据熵源的“质量”进行猜测。如果它很低,比如人类输入的字符,你可以将它设置为 1 或 2每字节。如果它很高,比如从专用硬件 RNG 读取的值,您可以将其设置为每字节 8 位。

关于c - 使用 RNDADDENTROPY 将熵添加到/dev/random,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17118705/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com