/dev/random
использует временные интервалы ядра для добавления в пул энтропии. Количество энтропии в пуле отслеживается в переменной с именем entropy_count
.
Вот соответствующий фрагмент кода от random.c
. Это представляет время (в jiffies я думаю) между двумя последними прерываниями в переменной delta
и разницы в дельтах как delta2
.
delta = time - state->last_time;
state->last_time = time;
delta2 = delta - state->last_delta;
state->last_delta = delta;
if (delta < 0) delta = -delta;
if (delta2 < 0) delta2 = -delta2;
delta = MIN(delta, delta2) >> 1;
for (nbits = 0; delta; nbits++)
delta >>= 1;
r->entropy_count += nbits;
/* Prevent overflow */
if (r->entropy_count > POOLBITS)
r->entropy_count = POOLBITS;
Похоже, что оценка добавленной энтропии - это, по сути, минимальный уровень (не максимальный из-за начального сдвига битов перед циклом) логарифма дельты по основанию 2. Это имеет некоторый интуитивный смысл, хотя я не уверен, какие предположения понадобятся, чтобы сделать это формально правильным.
Итак, мой первый вопрос: «Какова причина этой оценки?»
Мой второй вопрос о delta = MIN(delta, delta2) ...
. Что это делает? Зачем брать минимум этой дельты и последний? Я не знаю, чего это должно достичь - возможно, это делает оценку лучше, может быть, просто более консервативной.
Редактировать: я нашел документ, в котором указана оценка , но в действительности он не дает аргументированного аргумента для нее (хотя в нем изложены некоторые неформальные условия, которым должен соответствовать оценщик).
Другие ресурсы, которые появились в комментариях:
- Википедия на
/dev/random
и/dev/urandom
- Бумага, которая пытается объяснить это (я скептически отношусь к этому, см. Комментарии)
- Сообщение в блоге
/dev/random
с комментариями от парня, который написал код выше. - Ответ secutity.SE о
/dev/random
пуле энтропии.
/dev/random
находится на шаткой основе - см. Подача / dev / случайный пул энтропии? , Я пингнул Томаса в надежде, что он ответит на твой вопрос.Ответы:
delta2
это не предыдущийdelta
, но разница между двумя последовательными значениямиdelta
. Это своего рода производная: еслиdelta
измеряет скорость,delta2
это ускорение.Интуитивная идея, лежащая в основе этой оценки, заключается в том, что прерывания происходят с более или менее случайными интервалами, продиктованными непредсказуемыми событиями из физического мира (например, нажатия клавиш или прибытие сетевых пакетов). Чем дольше задержка, тем больше непредсказуемых событий. Однако существуют физические системы, которые запускают прерывания с фиксированной скоростью;
delta2
мера представляет собой механизм защиты , которая обнаруживает такие случаи (если прерывания возникают через фиксированные промежутки времени, следовательно , решительно предсказуемы, всеdelta
будут иметь такое же значение, следовательно ,delta2
будет равно нулю).Я сказал «интуитивно», и сказать больше нечего. На самом деле, в модели «случайных физических событий» считать биты неправильно; если аппаратное событие происходит с вероятностью p для каждой единицы времени, и вы получаете задержку, выраженную через n битов, то вклад энтропии должен учитываться как n / 2 бит, а не n бит. Но мы знаем, что в действительности физические события не происходят в совершенно случайные моменты;
delta2
механизм допускает столько же.Таким образом, на практике «оценка энтропии» - это как раз оценка . Его ценность безопасности не в обоснованном, математически точном обосновании, а в обычном источнике безопасности: кажется, никто не нашел способ злоупотребить им (пока).
Эта страница была написана кем-то, кому надоели мифы о
/dev/random
ее оценке энтропии, и я думаю, что она объясняет вещи хорошо, с достаточным количеством деталей. Важно правильно понять некоторые основные идеи при работе с ГСЧ.источник