Почему случайное начальное число сохраняется на диск только при загрузке и завершении работы?

Альтернативой является драйвер paragon.

Этот драйвер значительно быстрее, чем ntfs-3g, но он не является OpenSource. Если он нужен вам для конкретного приложения, где вы не сможете обойтись без него, его определенно стоит изучить.

4
28.08.2017, 14:05
1 ответ

Это помогает перестать думать об этом как об "энтропии". Это не имеет ничего общего с энтропией, и ошибочное представление о генерации псевдослучайных чисел с точки зрения энтропии является корнем многих заблуждений по этому вопросу. Так что перестаньте думать об «энтропии».

Это, как следует из названия, начальное числодля генератора псевдослучайных чисел.

Что нужно помнить о ГПСЧ, так это то, что они не случайны. Они полностью детерминированы. Если известны начальные входные значения и конкретный алгоритм PRNG, можно определить каждое отдельное будущее «случайное» выходное значение.

В этом случае алгоритм хорошо известен. В конце концов, он опубликован как часть ядра с открытым исходным кодом. Таким образом, ключом к случайности является seed. Предоставляемый уровень «случайности» — это непредсказуемостьот одного вывода к другому.Зная алгоритм и предыдущие результаты, но не начальное число, невероятно сложнопредсказать, каким будет следующий случайный результат. (Это не формальное и не полное определение того, что значит для ГПСЧ быть криптографически безопасным, но подойдет как ограниченное приближение для целей этого ответа.)

Это основное причина широко обсуждаемых проблем с Linux /dev/urandom, которые я просто собираюсь здесь замять. При начальной загрузке начальное число такжехорошо известно. Все случайные выходные данные полностью предсказуемы до тех пор, пока PRNG не будет повторно засеян , т. е. снабжен новым начальным числом, которое является уникальным (или настолько близким, насколько это возможно) для этого запуска этого цикла. установка операционной системы в первый раз.

Вот что /var/lib/systemd/random-seed(в операционных системах systemd), /var/lib/urandom/random-seed(в несистемных операционных системах Linux) и /var/db/entropy-file(в FreeBSD/TrueOS) посвящены: хранению значения повторного заполнения, которое может быть применено, как первого значения повторного заполнения, как как можно скорее после следующей начальной загрузки.

Важно то, что как только оно используется при начальной загрузке, оно немедленнозаменяется другим, другим начальным значением. Это, как вы предполагаете, для того, чтобы, если система не выключается корректно, она не перезагружалась с тем же начальным значением, что и при предыдущей начальной загрузке.

Таким образом, менять его между начальной загрузкой и завершением работы довольно бессмысленно.Он должен быть изменен сразу после того, как он был прочитан и использован, а замена должна храниться в секретев течение всего времени существования этого запуска операционной системы. Но тем временем нет смысла постоянно обновлять его, если только его ценность не была раскрыта каким-либо образом.

Начальное значение не является своего рода накопленной «энтропией».Это секрет. Это начальное значение для следующего запуска PRNG. Его нельзя раскрывать за пределами Trusted Computing Base, и его трудно предсказать. По иронии судьбы, поскольку он должен быть только непредсказуемым, он на самом деле может быть результатом самого ГПСЧ, и на самом деле это происходит с такими инструментами, как systemd-random-seed, которые принимают вывод из повторно заполненного PRNG для использования в качестве следующего начального значения при следующей начальной загрузке.

Таким образом, причина изменения его при завершении работы заключается в том, что если следующее начальное значение каким-то образом было раскрыто во время выполнения операционной системы, замена его при завершении работы немного усложняет злоумышленнику изучение того, что будет происходить дальше в PRNG. быть засеянным.

И это включает в себя разоблачение, потому что это предсказуемо. Теоретически, если вы знаете, что каждое начальное число берется из непосредственного запуска ГПСЧ против предыдущего начального числа, то знание любого начального числа позволяет вам определить все последующие начальные значения. К счастью, PRNG такжепериодически дополнительноповторно заполняется по мере работы операционной системы из другихисходных источников, поэтому следующее начальное значение, взятое из Вывод PRNG и его сохранение при завершении работы непредсказуемы, даже если известно предыдущее начальное число, которое использовалось при начальной загрузке для текущего запуска операционной системы.

Эта секретность распространяется на то, чтобы не дублировать ее, когда вы «клонируете» системы из центральных общих образов.

Итак, резюмируем: следующее начальное значение не "энтропия".Он не накапливается в каком-либо значимом смысле, и поэтому не нуждается в каком-либо наращивании или «обновлении» во время выполнения. Его необходимо заменить сразу после использования, и для того, чтобы сделать последовательность семян самих непредсказуемой последовательностью, так как в противном случае следующее семя является полностью предсказуемым результатом PRNG, а последнее семя также должно обновляться из вывода PRNG один раз, в какой-то момент после повторного заполнения PRNG через секундвремя, для которого время выключения является хорошим (но не идеальным) приближением, учитывая, что где-то между запуском и shutdown операционная система выполнит собственное повторное заполнение.

Дополнительная литература

6
27.01.2020, 20:53

Теги

Похожие вопросы