Я понимаю, что / dev / random - хороший источник энтропии, и это то, что обычно используется. Как раз когда я читаю GC, по крайней мере в Java, кажется приемлемым, что демон сборки мусора выполняется недетерминированно , Если это правда, почему бы нам не использовать время сбора мусора в качестве источника энтропии вместо переменной / dev / random?
random
garbage-collection
edthethird
источник
источник
Ответы:
«Неуказанный» и «случайный» - это два совершенно разных понятия.
Точная работа сборщика мусора не указана и зависит от сборщика мусора (обычно реализуется с помощью виртуальной машины определенного типа, но не обязательно).
Следовательно, у вас нет определенного (то есть детерминированного) времени, когда будет собираться мусор.
Однако любая данная реализация будет следовать некоторым правилам, и существует высокая вероятность того, что два последующих запуска одной и той же программы будут иметь очень похожие шаблоны сборки мусора.
Поэтому фактическая энтропия, обеспечиваемая сборщиком мусора, будет очень низкой (и выяснить, какие части вы действительно можете использовать в качестве энтропии, будет непросто).
Для сравнения: A
HashMap
в Java не гарантирует какой-либо порядок поиска для своих членов (в основном потому, что гарантируя, что это добавит накладные расходы, которые не стоит платить в большинстве случаев). Однако для данной реализации и данного набора вставок / удалений вы можете определенно рассчитать результирующий порядок. Тот факт, что нет гарантии для любого данного заказа, не означает, что заказ является случайным.источник
Во-первых, мы должны быть осторожны, чтобы не попасть в ловушку рассуждений, манипулируя простыми словами. Например, мы могли бы спросить, поскольку NFA является «недетерминированным конечным автоматом», почему бы нам не использовать его для получения случайных чисел? В этом случае это будет, потому что это не то, что означает «недетерминированный» в NFA; на самом деле, когда мы моделируем NFA на заданном входе, поведение симуляции является полностью детерминированным.
«Детерминированный» - это загруженная фраза. Для программиста или программиста недетерминированное поведение означает просто «определение точного поведения, о котором сложно думать», и зависит от слишком многих факторов, включая ввод программы.
Однако это не означает, что это не является детерминированным для кого-то, мотивированного для атаки на криптосистему. Иногда факторы окружающей среды и исходные данные могут быть ограничены, и повторяющиеся модели возникают из «недетерминированного» поведения.
источник