В исходном коде ядра в random.c
упоминается, что get_random_int
«Похоже на urandom, но с целью минимального истощения запаса энтропии». Однако где (и как) get_random_int
взаимодействует с пулом энтропии?
Теперь urandom
на самом деле звонит extract_entropy_user
, но я не вижу ничего подобного в get_random_int
. Кажется, что get_random_int
использует свои собственные источники энтропии (не связанные с активностью клавиатуры, мыши и диска):
hash[0] += current->pid + jiffies + get_cycles();
и не заботится (и не обновляет) о состоянии энтропии, доступной системе в целом?
Как get_random_int
истощает запас энтропии? Где это обновляется? Я знаю, что что-то упускаю или неправильно читаю исходный код, потому что, когда я запускаю программу, я вижу, как она истощает пул энтропии, просто выполняя cat на entropy_avail.
Я просмотрел http://xorl.wordpress.com/2011/01/16/linux-kernel-aslr-implementation/, но, похоже, не упоминается, как это работает.