Можете ли вы объяснить оценку энтропии, используемую в random.c


12

/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) .... Что это делает? Зачем брать минимум этой дельты и последний? Я не знаю, чего это должно достичь - возможно, это делает оценку лучше, может быть, просто более консервативной.

Редактировать: я нашел документ, в котором указана оценка , но в действительности он не дает аргументированного аргумента для нее (хотя в нем изложены некоторые неформальные условия, которым должен соответствовать оценщик).

Другие ресурсы, которые появились в комментариях:


1
Обратите внимание, что значение оценки энтропии в Linux /dev/randomнаходится на шаткой основе - см. Подача / dev / случайный пул энтропии? , Я пингнул Томаса в надежде, что он ответит на твой вопрос.
Жиль "ТАК - перестань быть злым"

Если кого-то интересует эта тема, то обращение к ней в Википедии является довольно хорошей отправной точкой: en.wikipedia.org/wiki//dev/random
slm

1
@Lucas - взгляните и на эту статью: [Интерпретация оценки энтропии Linux] ( eprint.iacr.org/2012/487.pdf )
slm

@slm Интересно, хотя я не уверен, что это правильно - шаг обоснования минимальной функции с помощью колмогоровской сложности - большой скачок в рассуждениях, и мне не ясно, что это концептуально звучит.
Лукас

@Lucas - Думаю, я передам это, я вне своей лиги с этим Q 8-)
slm

Ответы:


5

delta2это не предыдущий delta, но разница между двумя последовательными значениями delta. Это своего рода производная: если deltaизмеряет скорость, delta2это ускорение.

Интуитивная идея, лежащая в основе этой оценки, заключается в том, что прерывания происходят с более или менее случайными интервалами, продиктованными непредсказуемыми событиями из физического мира (например, нажатия клавиш или прибытие сетевых пакетов). Чем дольше задержка, тем больше непредсказуемых событий. Однако существуют физические системы, которые запускают прерывания с фиксированной скоростью; delta2мера представляет собой механизм защиты , которая обнаруживает такие случаи (если прерывания возникают через фиксированные промежутки времени, следовательно , решительно предсказуемы, все deltaбудут иметь такое же значение, следовательно , delta2будет равно нулю).

Я сказал «интуитивно», и сказать больше нечего. На самом деле, в модели «случайных физических событий» считать биты неправильно; если аппаратное событие происходит с вероятностью p для каждой единицы времени, и вы получаете задержку, выраженную через n битов, то вклад энтропии должен учитываться как n / 2 бит, а не n бит. Но мы знаем, что в действительности физические события не происходят в совершенно случайные моменты; delta2механизм допускает столько же.

Таким образом, на практике «оценка энтропии» - это как раз оценка . Его ценность безопасности не в обоснованном, математически точном обосновании, а в обычном источнике безопасности: кажется, никто не нашел способ злоупотребить им (пока).


Эта страница была написана кем-то, кому надоели мифы о /dev/randomее оценке энтропии, и я думаю, что она объясняет вещи хорошо, с достаточным количеством деталей. Важно правильно понять некоторые основные идеи при работе с ГСЧ.


Упс, я оговорился, я должен был сказать изменение в дельтах. Я должен сказать, что у большинства оценок есть «хорошо обоснованное, математически точное обоснование», это то, что отличает их от догадок - и если оно работает вообще, у него должно быть какое-то формальное обоснование. Совершенно нормально не заботиться об этих вещах и заботиться только о прагматике безопасности, но это не относится ко всем. Несогласие с тем, что интересно, не является вопросом «правильных основных идей».
Лукас

Я не говорю, что вы неправы в том, что это практическая оценка для целей, для которых он был разработан.
Лукас
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.