Почему perl, ruby ​​use/dev/urandom

I strace 'd простой script с использованием 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 нужен генератор псевдослучайных чисел для такого тривиального script? Я ожидал бы открытия /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

Попробуйте найти "Отказ в обслуживании с помощью алгоритмических атак сложности".

Вкратце, если Perl script принимает внешний вход (из файла, сети и т.д.) и сохраняет эти данные в хэше, злоумышленник, который может влиять на данные, может использовать алгоритм хеширования для ухудшения хэшей (O ( 1) поиск) в связанные списки (O (N) поиск). Чтобы защитить от этого типа атаки, некоторые параметры алгоритма хеширования рандомизируются при запуске программы, так что злоумышленник не может построить последовательность хеш-ключей, которые вызовут проблему.

Это явно не относится к Perl. Любая программа, которая использует алгоритм хеширования, потенциально уязвима для этого типа атаки.