为什么perl,ruby使用/ dev / urandom

时间:2014-11-17 22:46:17

标签: python ruby linux bash perl

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需要pseudorandom number generator这样一个简单的脚本?我希望只有在第一次使用随机数据后才会打开/dev/urandom

编辑:我还测试了python和ruby

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

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

1 个答案:

答案 0 :(得分:17)

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

简而言之,如果Perl脚本接受外部输入(来自文件,网络等)并将该数据存储在散列中,那么可以影响数据的攻击者可以利用散列算法来恶化散列(O(1)查找链接列表(O(N)查找)。为了抵御这种类型的攻击,哈希算法的某些参数在程序启动时被随机化,这样攻击者就无法构造一系列会导致问题的哈希键。

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