c - 随机数种子生成器 : Using System On Time

标签 c security encryption random rsa

我试图理解为什么这段代码是一个安全漏洞。据我了解,在程序打开时使用系统时间生成随机数种子是不安全的,但这怎么可能被猜到呢?我不确定我看到了可能的漏洞。

由于 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/

相关文章:

c# - 解密 EFS 加密文件

c# - 在 Angular 中加密并在 C# 上解密

javascript - 如何在高空照片中高效地找到地平线?

c++ - 在编译时验证参数是 c/c++ 预处理宏中的 ARRAY 类型

c - (struct)的大小是多少?

ios - 如何保证进程在 iOS 中的准确时间启动

security - GWT RPC - 它是否足以防范 CSRF?

delphi - CryptAcquireContext和CryptDeriveKey x64模式

android - 有哪些解决方案来保证服务器端和移动客户端通信的安全?

java - 如何获取 Access-Token 和 Access-Token-Secret?