Источники энтропии для Linux

9

Допустим, я хочу получить гигабайт или около того случайных данных из / dev / random, подходящих для одноразовой записи (так что / dev / urandom отсутствует.) Как мне заполнить мой / dev / random достаточной энтропией, чтобы сделать это? Я ищу конкретные команды и программы для этого. Я не хочу ничего покупать. Я использую Arch Linux, если это имеет значение.

PyRulez
источник
Разве такая программа не превратит / dev / random в нечто такое же, что и / dev / urandom, которое вы не хотите использовать? Или вы имеете в виду что-то, что получает дополнительную энтропию от какого-либо устройства или по сети?
Антон
@Anthon Я говорю о конкретных программах для извлечения случайности из источника энтропии, таких как дробовой шум, тепловой шум, некоторые устройства и т. Д. Программа не создала бы саму случайность.
PyRulez
... например, команда или программа, которая говорит Here — type something:, а затем измеряет интервалы времени между нажатиями клавиш с более высокой точностью, чем может контролировать человек?
G-Man говорит: «Восстановите Монику»
1
В нем упоминается одноразовый блокнот как одно из двух исключений из утверждения о том, что «почти все криптографические алгоритмы…« только »обеспечивают вычислительную безопасность». Если вы не можете процитировать что-то, что я пропустил, где написано, что одноразовые планшеты не могут использовать urandom?
бесполезно

Ответы:

4

Две программы, которые могут увеличить пул энтропии, не требуя дополнительного оборудования, rng-toolsи haveged. rng-toolsиспользует RNG, доступные в современных процессорах и чипсетах, havegedиспользует современную случайность процессора (поведение кеша и т. д.). Оба доступны в Arch, и в вики Arch есть интересная страница, где их обсуждают. Я не пытался использовать их для создания гигабайта данных, но это должно быть возможно за разумное время.

Вы явно исключаете покупку чего-либо, но для полноты картины в LWN есть интересная статья об энтропии с NeuG , которая включает в себя обсуждение havegedи другие различные подходы. Вы можете купить плату STM8S, способную работать с NeuG менее чем за 10 долларов, или FST-01 за 35 долларов.

Стивен Китт
источник
4

К сожалению, / dev / random также не подходит для использования в одноразовых планшетах, по крайней мере, не в виде одноразовых планшетов (с доказуемыми гарантиями безопасности), которые большинство людей представляют, когда думают или внедряют одноразовые планшеты. Большая часть информации, приведенной ниже, обобщена из (очень длинной) статьи на http://www.2uo.de/myths-about-urandom/

Проблема в том, что / dev / random не является действительно случайным; он использует CSPRNG для генерации своего вывода. Фактически, / dev / random использует точно такой же CSPRNG, что и / dev / urandom. Единственное отличие состоит в том, что / dev / random блокирует, если его внутренняя оценка энтропии недостаточна.

Слово «оценка» в предыдущем предложении является ключевым. Большинство людей считают, что эта оценка всегда точна и точна, но на самом деле она не совсем точна. В тот момент, когда оценка неверна, вы теряете все доказуемые гарантии безопасности одноразового планшета, и все, что у вас остается, - это вычислительная безопасность - не лучше, чем если бы вы использовали / dev / urandom!

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

Предпосылка этого вопроса заключается в том, что проблемы с / dev / random можно «исправить», добавив больше энтропии. К сожалению, это предположение неверно. Вредоносный источник энтропии гораздо хуже, чем вообще никакой энтропии, потому что источники энтропии часто имеют доступ к внутренним данным и могут тайно экспортировать эти данные, используя выходные данные ГСЧ - см. Http://blog.cr.yp.to/20140205-entropy .html для полного обсуждения (слишком долго, чтобы подвести итог здесь). В частности, аппаратный источник энтропии (как рекомендовано в нескольких других ответах) является очень плохим выбором с точки зрения безопасности, так как это оборудование имеет первостепенное значение для совершения злонамеренных действий, и оно по сути непригодно для использования.

djao
источник
Я не говорил, что исправляю это с большей энтропией, мне просто нужно больше для большего ключа. Это хороший момент, хотя о том, что он неисправен. Можете ли вы порекомендовать какие-либо альтернативы?
PyRulez
1
Это хороший ответ, за исключением последнего упоминания об аппаратных источниках. Аппаратные источники энтропии являются единственным надежным, проверяемым способом получения энтропии. Вы (или кто-то, кому вы доверяете) действительно должны провести аудит источника - для этого требуется наличие проектной информации и подтверждение того, что производственный процесс учитывает проектную информацию. Вы даже можете комбинировать источники энтропии, чтобы, если хотя бы один из них был в порядке, результат был бы хорошим (NB, для этого вам нужно правильно их объединить).
Жиль "ТАК - перестань быть злым"
Жиль, прочтите вторую ссылку, которую я разместил. Совершенно неверно утверждать, что если хотя бы один источник энтропии в порядке, то и результат в порядке. Вся цель этой ссылки - опровергнуть это ложное утверждение!
джао
Более того, недостаточно провести аудит источника и производственного процесса. Вам необходимо провести аудит вашего индивидуального устройства, чтобы убедиться, что ваше устройство было изготовлено в соответствии с производственным процессом. Это гораздо более сложная задача, чем аналогичная задача в программном обеспечении, которая состоит просто из проверки контрольной суммы.
джао
Что касается альтернатив: нет альтернативного волшебного способа получить 1 ГБ случайных данных с ПК. Для этого вам понадобится аппаратное устройство (но обратите внимание на то, что я сказал о том, что оборудование сложно проверять). Если вы хотели использовать / dev / random, то / dev / urandom также хорош; это не хуже, чем / dev / random для всех криптографических приложений.
джао
3

Похоже, компонент HW - лучшая идея. Есть некоторые генераторы HW, но вы должны доверять им по мере их появления.

Два, вероятно, хороших решения - заставить компонент создавать шум; два основных решения, по-видимому, - это температурный сдвиг и шум лавин, создаваемый диодом (см. http://web.archive.org/web/20061117145903/http://willware.net:8080/hw-rng.html ).

Поскольку такие компоненты, как гироскоп и акселерометр, стали более разумными, заставить их работать с максимальной чувствительностью и использовать их значение LSB также может быть хорошим решением, но AFAIK никто так не проверял.

Забавно, так как есть много бумаги о том, как НЕ делать ГСЧ, но нет открытой и проверенной реализации HW

Lesto
источник
2

Вы можете использовать pycsprng.py . Криптографически безопасно? Я не совсем уверен, но я хотел бы некоторого рецензирования.

python pycsprng.py | pv | dd of=data.file bs=1024 count=1000

Канал к не pvявляется обязательным и поможет вам узнать, сколько данных было передано.

Вы можете обнаружить, что большие размеры блоков (bs) увеличивают производительность. Вы должны будете отрегулировать счетчик, чтобы не создавать слишком большой файл, если вы увеличиваете размер блока.

Дэрил Такер
источник
3
Это просто использует /dev/urandom...
Стивен Китт
1
pycsprng.pyбуквально сценарий 10 SLOC, который получает случайность от os.urandom. Документы говорят, что «возвращаемые данные должны быть достаточно непредсказуемыми для криптографических приложений [...] В UNIX-подобных системах это будет запрашивать /dev/urandom» . Это действительно так (хотя это устаревший источник), и Security.SE говорит, что это нормально для криптографии .
Гроностай
Не один тайм-код крипто!
PyRulez
0

То, что вы получаете от аналогового канала микрофона, когда вы не подключаете микрофон, обычно просто статично. Передайте через bzip2, например, для отбеливания, смешайте его с другим источником случайности (urandom или другое гнездо для микрофона), возможно, передайте результат через openssl для хорошей меры, и то, что вы получите, должно быть довольно случайным.

Однако было бы трудно доказать какие-либо жесткие и быстрые свойства безопасности относительно случайности результата.

Йоханнес Бауэр
источник
0

Если вы используете ядро ​​Linux 2.6.9 или новее на процессоре amd64 / x86_64, в виртуальной или физической среде, вы можете попробовать ncomputers.org/pandom - генератор истинных случайных чисел, который обеспечивает энтропию 8 КиБ / с 64 бит / 64 бит через/dev/random

образец вывода

ncomputers
источник
Ссылки сломаны, не удалось найти резервную копию.
SLM
0

Чтобы сгенерировать 100 МБ аппаратных случайных данных, вы можете:

  • Запишите 20 минут аудио (96 кГц, 16 бит, моно) со встроенным микрофоном вашего компьютера (доступно на ноутбуке). Вы получите файл WAV ~ 220 МБ.

  • Откажитесь от бесполезных битов и перемешайте биты двоичных данных (много способов сделать это) с некоторой математикой

  • Экспортируйте перемешанные биты как двоичный файл размером ~ 100 МБ

Вот статья об этом: Попытка генерировать истинную энтропию и случайные данные со звуком (и встроенным микрофоном вашего компьютера) .

Basj
источник