为什么Perl,Ruby使用/dev/urandom



strace一个简单的脚本,使用perl和bash。

$ strace perl -e 'echo "test";' 2>&1 | grep 'random'
open("/dev/urandom", O_RDONLY)          = 3
$ strace bash 'echo "test"' 2>&1 | grep 'random'
$

为什么 perl 需要伪随机数生成器来制作这样一个微不足道的脚本?我希望只有在第一次使用随机数据后才能打开/dev/urandom

编辑:我还测试了python和ruby

$ strace python -c 'print "test"' 2>&1 | grep random
$
$ strace ruby -e 'print "testn"' 2>&1 | grep random
open("/dev/urandom", O_RDONLY|O_NOCTTY|O_NONBLOCK|O_CLOEXEC) = 3

为什么 perl 和 ruby 会用不同的模式打开它?

尝试搜索"通过算法复杂性攻击拒绝服务"。

简而言之,如果Perl脚本接受外部输入(来自文件,网络等)并将该数据存储在哈希中,则可以影响数据的攻击者可以利用哈希算法将哈希(O(1)查找)恶化到链表(O(N)查找)中。为了防御此类攻击,哈希算法的某些参数在程序启动时是随机的,因此攻击者无法构造会导致问题的哈希密钥序列。

这显然不是 Perl 特有的。 任何使用散列算法的程序都可能容易受到此类攻击。

最新更新