我试图理解为什么这段代码是一个安全漏洞。据我了解,在程序打开时使用系统时间生成随机数种子是不安全的,但这怎么可能被猜到呢?我不确定我看到了可能的漏洞。
由于 D. Wagner 的 DMCA 请求而删除了代码示例
最佳答案
首先,您的代码有一个错误,它根本不使用 time_in_sec
中的值 - 它在以下行中覆盖了该值:
seed = time_micro_sec >> 7;
此外,time_micro_sec
只有 1000000 个可能值,右移 7 位后减少到只有 7813 个可能值。这个空间很容易通过暴力搜索。
即使您修复了这些错误,最终 srand()
/rand()
随机数生成器也不是加密强度高的 PRNG。该接口(interface)最终受到 srand()
接受 unsigned int
参数这一事实的限制,这在常见平台上将初始状态下的熵限制为仅 32 位。这不足以防止对种子的暴力攻击。
不要将 srand()
/rand()
用于安全关键的随机数。
关于c - 随机数种子生成器 : Using System On Time,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16160273/