我在Linux上,它具有地址空间布局随机化。是否有必要在堆栈上声明一个缓冲区,保持未初始化,并将其用于熵,或者我可以只获取堆栈中已有内容的地址,将其转换为整数并且(知道它有点随机到期)解决空间布局随机化)使用该整数代替熵?
指针方法的优点在于它不会产生编译器警告,因为当您尝试操作时,单位化缓冲区会执行,但在我的测试中,它似乎只是地址的低位部分(可能是最后一个或两个字节) )将从调用更改为调用。熵缓冲区似乎表现得更差,通常根本没有任何内容。
答案 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
读取几个字节?