我需要一些弱熵。我知道我可以使用未初始化的缓冲区,但如果我只需要一个整数值,那么它的地址是否足够?

时间:2009-12-06 22:12:05

标签: c entropy

我在Linux上,它具有地址空间布局随机化。是否有必要在堆栈上声明一个缓冲区,保持未初始化,并将其用于熵,或者我可以只获取堆栈中已有内容的地址,将其转换为整数并且(知道它有点随机到期)解决空间布局随机化)使用该整数代替熵?

指针方法的优点在于它不会产生编译器警告,因为当您尝试操作时,单位化缓冲区会执行,但在我的测试中,它似乎只是地址的低位部分(可能是最后一个或两个字节) )将从调用更改为调用。熵缓冲区似乎表现得更差,通常根本没有任何内容。

5 个答案:

答案 0 :(得分:6)

如果您在Linux上需要弱熵,为什么不阅读/dev/urandom?它是/dev/random的非阻塞变体,更少......随机(但同样,非阻塞)。

答案 1 :(得分:3)

从根本上说,如果你需要任何东西的熵,你需要从一些外部源,而不是编译器的一些怪癖,或内存分配布局的期望。无法保证编译器会为您提供不同的指针。你可能会编写在一个系统上运行良好的代码,但完全无法在另一个系统上给出熵。

正如其他人所建议的那样,使用/ dev / random是一个好主意。如果那不可用,如果你只需要一点熵就可以调用time()函数(time.h)。

然而,当人们要求一点点熵时,我会非常担心,因为这表明某种依赖于随机值。只有少量熵意味着它会频繁返回相同的值,可能导致系统以意想不到的方式失败。我的强烈建议是始终从/ dev / random等来源获得良好的熵。

答案 2 :(得分:2)

/ dev / random出了什么问题?

不要将未初始化的内存用于熵。 特别是堆叠。它在连续运行中看起来非常相似。 它非常可预测,而且不是很随机。

答案 3 :(得分:1)

你到底是什么意思? C中的规范熵源(用于非加密目的)来自time <time.h>

访问未初始化的变量是未定义的行为,可能会对某些平台产生不可预测的后果。不要这样做。

答案 4 :(得分:1)

为什么不从/dev/random/dev/urandom读取几个字节?