Генератор Истинных Случайных Чисел, использующий атмосферный шум - PullRequest
5 голосов
/ 03 ноября 2011

Мне нужно создать систему One Time Pad, и для этого мне нужно создать свой собственный TRNG. Я хочу знать, как сделать запись атмосферного шума и использовать его для генерации случайных чисел. До сих пор я пытался записать WAV-файл и прочитать его на Java, но значения не кажутся очень ... случайными. Какие-либо предложения? Я знаю о Random.org, но я не могу по-настоящему использовать их генераторы, я должен построить свой собственный, поэтому мне нужно немного узнать, как ребята из Random.org создали свой генератор чисел с атмосферным шумом как источник «случайности».

Ответы [ 6 ]

5 голосов
/ 07 августа 2012

Решение не в реальном времени

Что вы можете сделать, это записать звук, окружающий комнату, и сохранить временный WAV-файл. Если вы знаете, как работает файл WAV, который основан на спецификации RIFF. Затем удалите заголовок WAV длиной 44 байта. Затем прочитайте аудиобайты и выполните правильные преобразования в зависимости от того, хотите ли вы генерировать слова, DWORDS или байты, это зависит от вас. Тогда у вас должно быть несколько случайных значений для работы. Затем используйте эти случайные значения соответственно.

Решение в реальном времени

Поскольку я не знаю, хотите ли вы запрограммировать это на Java или другом языке. Кроме того, я не знаю предполагаемой платформы; поэтому я не могу рекомендовать вам какие-либо библиотеки обработки аудио в реальном времени.

Для C # вы можете использовать NAudio и записывать аудио в режиме реального времени и получать аудио байты. Затем вы можете конвертировать аудио байты в DWORD, QWORD, WORD и т. Д. У вас должно быть несколько случайных значений. Не забудьте остановить запись и освободить неуправляемые ресурсы, когда генерация случайных чисел прекратилась.

Хорошие ресурсы по спецификации файла WAV

The WAV File Structure

Ссылка на спецификацию (легко понять)

3 голосов
/ 15 апреля 2012

Ответ неизвестен и, вероятно, намеренно.Хотя трудно быть уверенным, сайт, кажется, является комбинацией благотворительности и коммерческой работы.Каждый радиоисточник генерирует только несколько кбит / с случайных данных.Как он описывает это во многих ссылках, я не вижу доказательств CSRNG.Это не важноДля целей OTP, если это не совсем случайно, это прославленный потоковый шифр.(Я думаю, это то, что Брюс и другие всегда говорили.)

Мне трудно вспомнить, когда был сломан хороший CSRNG.Я бы порекомендовал вам использовать что-то вроде ISAAC или правильно реализованный блочный / потоковый шифр.Perfect Paper Passwords делает это.Используйте конструкцию Fortuna с внутренними компонентами Fortuna, используя вышеупомянутые шифры / алгоритмы, чтобы получить большинство случайных данных.Система Fortuna может регулярно вводить в нее данные с помощью TRNG.Самый лучший TRNG по бюджету - random.org плюс локально сгенерированный материал.Лучшее дешевое аппаратное решение - плата VIA Artigo с VIA Padlock (ускорение TRNG + для SHA-1, SHA256, AES и RSA) за 300 долларов.У них есть библиотеки, чтобы помочь вам использовать вещи тоже.(Существует даже псевдо-TRNG, который использует синхронизацию процессора при загрузке сети.)

Помните, что криптография обычно является самым сильным звеном в цепочке.Безопасность системы существует на многих уровнях: процессор, встроенное ПО, встроенное ПО (esp DMA), код режима ядра, ОС, доверенное промежуточное ПО или функции ОС, приложение.Безопасность в целом включает пользователей, политику, физическую безопасность, EMSEC и т. Д. Любой, кто слишком беспокоится о RNG, обычно тратит впустую усилия.Просто используйте принятое решение или что-то, что я упомянул выше.Затем сосредоточьтесь на отдыхе.Особенно, как люди и системы взаимодействуют.Конфигурация, патчирование, выбор ОС, политики.Большинство проблем случаются там.

2 голосов
/ 19 января 2012

Я вспоминаю статью на random.org, которую сейчас не могу найти.Я все помню, что они использовали lsb шума, который они измеряли.MSB, безусловно, не будут случайными.Затем генерируется строка из 1 и 0 на основе lsb.Не делайте глупостей, таких как простое двоичное преобразование, это не сработает.Возможно, вам придется сэмплировать шум в двоичном виде, чтобы распределение lsb было более равномерным.

Уловка, которую они использовали для обеспечения равномерного распределения, заключалась в том, чтобы не использовать эту строку из 1 и 0 в качествеслучайные числа.Вместо этого они будут анализировать строку по 2 бита за раз.Каждый раз, когда совпадают биты (т.е. 00 или 11), они добавляют 1 к своей случайной строке.Каждый раз, когда биты переворачивались (т. Е. 01 или 10), они добавляли 0 к своей случайной строке.

Если вы создаете свой собственный TRNG, убедитесь, что вы его проверили!

0 голосов
/ 13 марта 2019

Истинные генераторы случайных чисел (TRNG) обычно поступают из естественных источников, таких как сейсмические сигналы, нестационарные биосигналы и т. Д. Эти два генератора сталкиваются с двумя проблемами: 1) Точки данных распределены неравномерно 2) Этогенерация большой последовательности чисел занимает очень много времени (особенно когда требование исчисляется миллионами).Однако самым важным преимуществом с их стороны является их непредсказуемый характер.Чтобы преодолеть их проблемы и сохранить их преимущество, лучше объединить выход TRNG для заполнения генератора псевдослучайных чисел.Для этого вы можете попробовать использовать значения амплитуды атмосферного шума в случайные моменты времени и использовать его для заполнения PRNG.Это поможет вам получить большое количество равномерно распределенных значений.Поскольку начальное число непредсказуемо, выход PRNG также становится непредсказуемым.

0 голосов
/ 23 июня 2013

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

Скорее всего, ваш процессор уже содержит генератор случайных чисел, если у вас есть процессор Core / Xeon на базе Intel Ivy Bridge, который стал доступен в апреле 2012 года. (Новая архитектура Haswell также имеет эту функцию).

Генератор случайных чисел Intel использует случайные эффекты теплового шума внутри нестабильной цифровой схемы. Тепловой шум - это просто случайные атомные колебания, которые в значительной степени представляют собой тот же физический феномен, который используется Random.org при измерении атмосферного шума. Выбранные случайные биты проходят сложный процесс кондиционирования и тестирования, чтобы исключить загрязнение неслучайными сигналами. Я настоятельно рекомендую эту прекрасную статью о IEEE Spectrum , в которой подробно описан процесс.

Intel добавила новую инструкцию x86 под названием RDRAND, которая позволяет программам напрямую получать эти случайные числа. Хотя Java пока не поддерживает прямой доступ к RDRAND, это возможно с помощью JNI. Именно такой подход я использовал в проекте drnglib . Например:

DigitalRandom random = new DigitalRandom();
System.out.println(random.nextInt());

Метод nextInt() реализован как собственный вызов JNI, который вызывает RDRAND. Производительность довольно хорошая, учитывая качество случайности. Используя восемь потоков, я сгенерировал ~ 760 МБ / с случайных данных.

0 голосов
/ 03 ноября 2011

Вряд ли можно получить реальные случайные числа из программного обеспечения. Даже статика в вашем WAV-файле, вероятно, будет зависеть от периодических EMI, генерируемых вашим компьютером, и поэтому не является чисто случайной.

Можете ли вы использовать специальное оборудование или вы вынуждены придерживаться чистого программного обеспечения? Почему псевдослучайные числа не удовлетворят ваши потребности? Они будут хорошо работать на относительно небольшом количестве случайных выборок. Поскольку вы хотите использовать случайные числа в OTP, я думаю, вы не будете использовать их в больших масштабах.

Можете ли вы предоставить немного больше деталей?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...