我制作了一个简单的 bash 脚本,用于检查 /dev/random 中的熵池级别。我意识到我这样做的方式,我在每次检查时稍微降低它(cat /proc/sys/kernel/random/entropy_avail)但是因为我以每 2 秒一次的频率检查它的水平,它已经足够了完全恢复甚至增加的时间。我进行了 1 小时 40 分钟的测量。与此同时,我没有做任何我认为会降低熵的事情(比如创建 SSH 密钥等)。但是我被告知(在 IRC 上)连接到 Internet 的简单事实可能会降低我的熵,因此我在完全与网络断开连接的笔记本电脑上重复了该实验,并且出现了完全相同的行为。
我不知道哪个程序正在降低池中的熵。我在断开连接的笔记本电脑上安装了非常少的 arch linux(总共安装了 646 个软件包),而我在测量期间连接到 Internet 的主笔记本电脑正在运行 gentoo,其中安装了大约 800 个软件包,并且没有在后台运行特定程序,除了“默认”的。我在两台机器上都安装了 DE(xfce)。这是数据的情节:
Edit2:禁用 ASLR(使用 grub 启动时添加了 norandmaps 内核参数)仍然会产生相同的行为,因此 ASLR 不是罪魁祸首。另一个显示禁用 ASLR 的数据的图:
编辑 3:显然我的问题是这个问题的重复。我遵循了作为公认答案给出的命令,即sudo perf record -e random:\* -g -a -D 1000 -T sleep 60
和perf script
。输出文件很大(4.4 Mb 的文本数据),这是前几行:
交换器 0 [000] 3491.433002:随机:mix_pool_bytes_nolock:ffffffff8173e956 池:字节 16 调用方 add_interrupt_randomness 5ea5d9 __mix_pool_bytes (/lib/modules/4.6.2-1-ARCH/build/vmlinux) 5ec601 add_interrupt_randomness (/lib/modules/4.6.2-1-ARCH/build/vmlinux) 2d5729 …
我想知道对于普通 Linux 用户来说,从安全性或任何其他相关观点来看,在 /dev/random 中没有或几乎没有熵是否被认为是不好的。
编辑:我不需要生成随机数(我会使用 /dev/urandom 甚至密码生成和磁盘加密)。只是为了好玩,我有一个 bash 脚本,它可以从 /dev/random 生成随机字符的字符串,当然,在玩了一会儿之后,我在 /dev/random 中没有熵并且它会阻塞。在 IRC 上,有人告诉我这样做“不好”,但没有给我任何理由。是不是因为普通 Linux 用户会使用 /dev/random 自动生成随机内容?如果是,涉及哪些程序?
我也明白在 /dev/random 中没有熵会使数字的生成具有确定性。但同样,我的计算机(普通 Linux 用户)是否需要真正的随机数?
编辑 2:我刚刚在大约 3 分钟内每秒监视 /dev/random 中的熵级别,在那里我启动了我的 bash 脚本,该脚本使用熵在监视开始时生成一串随机字符。我做了一个阴谋。我们确实可以看到,熵水平以某种方式振荡,所以我电脑上的一些程序正在使用 /dev/random 来生成东西。有没有办法可以使用文件 /dev/random 列出所有程序?
我们还可以看到,一旦熵池被清空,产生“可接受水平”的熵只需要不到一分钟的时间。
我有一个带超线程的四核 CPU(酷睿 i7 7700)。
cat /proc/cpuinfo | grep MHz
Run Code Online (Sandbox Code Playgroud)
返回 8 个不同的频率,其中一些频率不重复(例如我可以获得 3914.208 MHz 的单个值)。所以看起来显示的值确实是每个线程的频率,并且这些频率不需要成对相等。这可能吗?换句话说,单个核心的 2 个线程是否有可能具有不同的频率(在 IRC 上我被告知不会,他们说这种行为非常奇怪,因此我在这里提出问题)。如果不是,那么显示的频率是多少?
这是上述命令的实际输出:
cpu MHz : 799.804
cpu MHz : 861.987
cpu MHz : 1178.613
cpu MHz : 867.260
cpu MHz : 3418.066
cpu MHz : 800.024
cpu MHz : 1302.539
cpu MHz : 799.804
Run Code Online (Sandbox Code Playgroud)
编辑:与
cat /proc/cpuinfo
Run Code Online (Sandbox Code Playgroud)
我可以看到 MHz 按顺序对应于核心 0、1、2、3、0、1、2 和 3。因此,就像 Hamza Jabbour 所说,它是每个线程(也称为逻辑核心)的频率。
我想知道每个线程是否有可能有自己的频率,以及 /proc/cpuinfo 是否在超过 1 个 cpu 周期内收集有关频率的数据(我认为这可能会使虚拟核心的频率不成对匹配)。 )