Как стать автором
Обновить

Собираем квантовый генератор случайных чисел

Время на прочтение4 мин
Количество просмотров22K
Всего голосов 41: ↑33 и ↓8+40
Комментарии69

Комментарии 69

Насколько можно понять из осциллограмм получается 1 бит в 50 мс. Т.е. 10 бит за 0,5с.

Можно ввести некоторый буфер и накапливать в нем биты, а по требованию выдавать пачку битов нужного объема из буфера.

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

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

Счеткий Гейгера это лютый оверхэд для такой задачи. С любого p-n перехода можно снимать истинно хаотичный тепловой шум. А чтобы полностью исключить влияние радио маяк, можно прибор обмотать шапочкой из фольги (засунуть в металлический корпус).

Только дробовой, а не тепловой. Но так вы правы, самый дешевый генератор белого шума — это диод с усилителем.
А сабжу из непонятно чего и палок шапочка из фольги вряд ли поможет.

самый дешевый генератор белого шума — это диод с усилителем.

Небольшое уточнение - включенный в обратную сторону и с достаточным напряжением для пробоя. Т.е. это стабилитрон с напряжением меньше чем питается схема или обратно-смещённый БЭ переход (в этом включении у них низкое напряжение пробоя, обычно в паспорте около 5V ).
На хабре есть статья про это : https://habr.com/ru/post/425123 Загадочное сердце драм-машины Roland TR-808
ps не вставляется ссылка в новом хабра-редакторе....

НЛО прилетело и опубликовало эту надпись здесь
Anyone who attempts to generate random numbers by deterministic means is, of course, living in a state of sin.
John von Neumann

Всё зависит от того, какая задача решается. Иногда и 4 — рандомное число. Там-где-то выше говорили, что лучше всего использовать этот аппаратный генератор случайных чисел хорошо для инициализации программного ГПСЧ, для которого уже известна функция распределения вероятности.

Думаю, почти всем требуется равномерное распределение, но местами может требоваться нормальное или вообще Пуассона какого-нибудь.

Зачем — в голову приходит либо моделирование каких-то процессов и систем, либо онлайн-казино. Про него писали когда-то на хабре и про то, как там какой-то битовой магией добывалось равномерное распределение шестигранного кубика из равномерного распределения от MIN_INT до MAX-INT. Остаток от деления на 6, кажется, не подходил, потому что степень двойки не кратна шести. (в общем случае точно)

Да хоть шум резистора можно использовать.

Зависимость от температуры разная, поэтому легко различимая.

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

НЛО прилетело и опубликовало эту надпись здесь
Я экспериментировал с советским стабилитроном в роли шумового генератора, даже без экранирования и транзистора получил сигнал примерно 2 В амплитудой.

Вопрос, что с ним делать дальше? Как его в компьютер ввести?

Как его в компьютер ввести?

RNDADDENTROPY скорее всего. Но сначала оцифровать,

С шумовыми диодами проще; разработчики побеспокоились, чтобы у сигнала были какие-то нормированные параметры. А вот с нестандартными источниками сложно сказать, сколько в сигнале случайности, сколько 50 Гц, сколько радио Маяк, сколько от солнечной активности.

Буду рад если подскажете цифровую часть схемы. Может быть зимой соберу и напишу подробно что получается.

Цифровая часть схемы, наверное, будет компаратор, сдвиговый регистр и USB интерфейс. Думаю, достаточно будет мелкого микроконтроллера с программным USB 1.0.

Более интересно, как оценить качество этого генератора.

Через компаратор подключаете к любой ардуине и через COM-порт читаете.
Спасибо!
КГ401?
Если не ошибаюсь, то какой-то из серии КС. Макетка с деталями где-то заныкана, давно было.

КС156 будет достаточно для TTL уровня (последние 2 цифры - это напряжение в десятых долях вольта)

Поможете отладить? Захотел спаять завтра-послезавтра. Есть различные детали (стабилитроны, транзисторы, ОУ, компараторы и т.п. список предоставлю), осциллограф, мультиметр. Но нет ардуины, не умею программировать. Опыта в электронике не очень много.
… не умею программировать. Опыта в электронике не очень много.

Возможна боль. И не вяжется с


Я экспериментировал с советским стабилитроном в роли шумового генератора, даже без экранирования и транзистора получил сигнал примерно 2 В амплитудой.



Вот такая прикидка у меня получается. ФНЧ на втором входе компаратора поможет отсеять "длинные" серии 0 или 1. Ток стабилитрона, ЕМНИП, надо задавать поменьше, что-бы дробовая природа шума явственнее проступала. До сотни мкА, примерно.
image
Можно попробовать ввести в ПК через GPIO FT232. Или в "малинку", тоже через GPIO.


P.S. http://www.unn.ru/books/met_files/Yakimov_Noise.pdf

Спасибо, будьте добры, проверьте так ли я собрал и подскажите номиналы для LPF. Я не совсем понимаю зачем он нужен.
Заголовок спойлера

… номиналы для LPF. Я не совсем понимаю зачем он нужен.

Пожалуй, что нужен, но совсем в другом виде. Это я под впечатлением исходного опуса нарисовал… Не нужно подстраивать порог переключения компаратора напряжением на втором входе. Оно и так достаточно стабильно будет. Наверное — надо подстраивать гистерезис компаратора по средней амплитуде шума?
Впрочем — попробуйте, например, 10 Гц (плёночный конденсатор на 470 нФ и резистор на 33 кОм).


Какой именно операционник/компаратор имеется для макетирования? "Висящих" по постоянному току входов быть не должно.


Что касается питания стабилитрона на предложенной схеме — всё совсем неправильно. Для проверки — достаточно простого резистора. Если хочется генератор тока — то простейшие делаются примерно так.


Сегодня пробежало мимо: https://www.electronicsforu.com/electronics-projects/simple-low-cost-white-noise-generator

Микросхемы в наличии: LM358, TL072CP, TL071CN, KIA339P.

Было бы здорово, если бы вы нарисовали схему с минимумом деталей, я повторю и спаяю.

Ну, вот так, примерно.
U1 — это TL071, U2 — KIA339, R3 — переменный на 100 кОм (коэффициент усиления шума), R6 — нагрузка выхода U2 (верхний вывод можно подключать к другому напряжению — например, к 5 или 3.3 В, с соответствующим уменьшением номинала), D1 (в зависимости от номинала) следует включать так, чтобы напряжение между выводом "+" U1 и положительным питанием было поменьше (т.е. стабилитрон на 5 В надо включить как в схеме, а стабилитрон на 8 В — обменять местами с R1).
D1 шумит, U1 усиливает шум, U2 преобразует шум в импульсы.
На будущее — можно предусмотреть место для RC-цепочки между выходом U1 и входом "-" U2. Немного ограничить сверху частотный диапазон шума, чтобы облегчить работу этого не самого быстрого компаратора.


С номерами выводов ИМС разберётесь?


image

Да, конечно, я умею разводить платы, это не проблема. Не уверен насчёт сроков, но найну собирать. Спасибо!

Смакетировать сперва на беспаечной? Где-то амплитуду шума пишут 3 мВ, где-то — намного больше.
Если "в продакт" — компаратор другой поставить, не счетверённый у которого используется только один канал.

Хм, если "в продакт". то два диода и по два канала с отличающимся уровнями на каждый (или АЦП).

Иначе для схемы хрен получится сделать самотестирование и контроль физических условий на соответствие модели.

Работа понемногу идёт, сегодня перерисовал схему в симуляторе, вроде как надо работает.

https://youtu.be/B0fLxY3d6QU

Неиспользуемые входы TL0x2 лучше замыкать на плюс питания. Кстати, почему не хотите заложить одноканальный TL071, который тоже есть в наличии.
LM339 можно заменить на LM393/LM2903 (если найдутся в распае или ближайшем радиомагазине) — корпус меньше.


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

математический комментарий о допустимости генерации случайного битового потока из белого шума

В теории - допустимо, но не реализуемо. Идеальный битовый поток, конечно, тривиально получается из идеального белого шума, но идеальный белый шум имеет бесконечную мощность, а где взять денег на её оплату?!

К счастью, во-первых, шум не белый ввиду, как минимум, ограничений компаратора. И, во-вторых, к примеру, используемая в схеме "разность" "оригинального" "цветного шума" и "усредненного" "цветного шума", по своей конструкции, не может получать достаточно длинные последовательности 0-й или 1-иц.

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

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

P.S.

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

А действительно ли данные получаются случайными, если на генерацию так влияют внешние наводки?

О тонкой настройке источника напряжения так и ничего не написано. Опять не статья, а так огрызок. Куда ж Ты катишься, Хабр?

И с физикой у переводчика не очень:
R2 ограничивает максимум протекающего через Q1, Q2 и Q3 тока, поскольку даже небольшое его количество может привести к тому, что пара Дарлингтона станет полностью проводящей.
А что насчет светодиода? Вроде как существуют такие, где источником случайности является флуктуация яркости света.
Ток, протекающий через ионизационную камеру, очень мал. Чтобы повысить его до уровня, позволяющего выполнить измерение, я собрал предусилитель на биполярных транзисторах.

Дальше можно не читать...


Кто в курсе — как оценить энтропию, полученную подобным дендро-фекальным методом?

Я дочитал до фразы «Для получения высокого тока» и полез в заголовок смотреть — перевод или нет.
Я не большой спец в схемотехнике, но как по мне так это тихий ужас. Чем плох предусилитель на операционнике, раз уж они используются? А срастить фильтр нижних частот с компаратором — сильно сложно?

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

Что Вы имеете ввиду за оценку энтропии? С учётом ФНЧ на 33 Гц, порядка 10 бит/с.

Если у источника сигнала малый выходной ток (большое сопротивление) то более целесообразны полевые транзисторы. И, может быть, трансимпедансный усилитель (преобразователь тока в напряжение).
Ну и — шум-то нам и нужен.


Оценку — типа такой: https://habr.com/ru/company/ruvds/blog/566406/#comment_23248232

Ну и — шум-то нам и нужен.

Шум шуму рознь, у каждого свои свойства. Зачем товарищу паразитный тепловой шум? Если товарищ охотится за квантовым шумом от альфа-частиц?

Тесты есть, из распространённого - тест от NIST, Diehard, Dieharder. Но автор, к сожалению, так глубоко не копал.

Не могу найти, вроде здесь же на Хабре как-то проскакивал куда более основательный подобный проект - человек прогнал тесты, подключил девайс в качестве источника энтропии в Linux. Но там конструкция чуть другая была - источник фонил на оголённую матрицу веб-камеры.

Тесты есть, из распространённого - тест от NIST, Diehard, Dieharder.

Строго говоря, они не предназначены для тестирования распределения Пуансона и его производных, т.е. для квантовых шумов.

А если выход описанного устройства добавить в условно более-менее криптографический ДСЧ "/dev/{,u}random", типа ioctl(RNDADDENTROPY), то уж чего-чего, а уж эти-то тесты покажут, что "Всё хорошо, прекрасная маркиза! Всё хорошо, как никогда!"

Но теста, что получается правильное распределение вызываемое 29,6 кБк после осреднения ФНЧ 33 Гц, конечно же не хватает. Возможно у товарища с математикой напряжёнка?

...что степень активности используемого в нем америция составляет 0.9 МКи...

Маркировка же "< 29,6 KBq (< 0,8 μCi)

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

Как бы, если мы усредняем 30 тыс. распадов в секунду с помощью ФНЧ 33 Гц, то получим квантовый шум порядка 3%. На мой взгляд, надо было бы наоборот, отфильтровать все низкие частоты ниже 1 кГц.

С такой схемой можно и без радиоактивного источника обойтись…

P.S.

Перемычка JP2 также, как R10, R11 и R12 используется для тонкой настройки генератора опорного напряжения

Компаратор и "тонкая" настройка - основная проблема этого ДСЧ.

Как бы, если мы усредняем 30 тыс. распадов в секунду с помощью ФНЧ 33 Гц, то получим квантовый шум порядка 3%. В принципе, при точности номиналов радиодеталей 5% можно будет подобрать опорное напряжение с точностью ±2,5%, так что получить частоты 0/1 не хуже 20:80%, наверное, вполне реально.

Но, ввиду, периода полураспада 432,6 лет, как максимум, через 4 года средний ток станет меньше на 0,6% и ДСЧ может начать выдавать 0-и (или 1-цы) с весьма большой вероятностью. Ну, если в него дыма запустить, то тоже начнёт строго выдавать 0-и (или 1-цы).

Да это схема будет сама по себе от Т плавать с таким входным каскадом.

В интеловских процессорах с 2012 года встроен аппаратный генератор случайных чисел. Полностью цифровая схема на двух транзисторах и двух инверторах, источник энтропии — тепловой шум, производительность — 3 гигабита в секунду. Можно найти в гугле — Intel’s Bull Mountain Digital Hardware RNG

Проблема инструкции RDRAND в том, что нет средств проверить корректность её работы. А чёртову прорву гигабайт в секунду, в деле шифрования, это ж кто угодно ж может.

RDRAND — это псеводслучайная последовательность, сгенерированная на основе DRSEED. А DRSEED — как раз тот самый исходный поток, который можно как угодно исследовать на качественность распределения

RDSEED - ... Data is whitened on Intel CPU's (using AES-CBC).

Так и что Вы там сможете исследовать?! Вы даже проверить, что это результат AES-CBC, а не, скажем, SHA-1 не сможете. Не говоря уж о проверке соответствия распределения исходных бит текущей температуре.

Боюсь, что ручки вот они! Никто ничего не докажет.

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

...лучшие мировые практики...

Вы меня пугаете! К примеру:

  • Лет 20 назад маркетинг RSA тоже призывал (собственно, как и всегда это делает маркетинг) использовать лучше мировые практики: Dual_EC_DRBG (ANSI X9.82 DRBG, ISO 18031, ...). Хотя ещё тогда реалисты указывали на потенциальные проблемы;

  • А лет 7 назад случился Сноуден... И, как бы, всем миром стыдливо помогали NIST/ANSI/RSA хоть немного сохранить лицо.

В общем, на мой личный взгляд, если я не могу проверить конкретные модели физических процессов в ДСЧ, то это не только не "лучшие мировые практики", это вообще не физический ДСЧ, а хрен знает что.

Но да, доступ к RDSEED открыли только в 2015 году, начиная с Broadwell. Видимо, по многочисленным просьбам трудящихся, кто не доверяет проприетарным алгоритмам и у кого есть алгоритмы генерации псевдослучайных чисел покруче. В реальной жизни генераторы энтропии используются не сами по себе, а как затравка для генерации псевдослучайных последовательностей

И не только в интеловских. nRF24LE1 от Nordic Semiconductor тоже имеет такой генератор, основанный на тепловом шуме:

я использую OpAmp

Проверил. Даже гугл переводчик знает, что OpAmp — операционный усилитель.

Выход повышается, если входной сигнал (приходящий слева) оказывается выше опорного напряжения (поступающего снизу слева) и понижается, если ниже.

Вообще феерично.

Ну и автору в настройках осциллографа выставить бы соединение точек, нагляднее было бы.
Америций-241 является источником альфа-излучения. Альфа-частицы (показаны зеленым) ионизируют воздух в камере и делают его слабопроводящим. При подаче напряжения между электродами и/или корпусом начинает протекать слабый ток. Его сила зависит от количества ионов в воздухе, которое, в свою очередь, зависит от количества распадов Am-241 в секунду. Радиоактивный распад – это lдействительно случайный процесс, в связи с чем ток должен иметь соответствующие колебания.

Хм-м-м… не происходит-ли усреднение в самом детекторе? Каково время рекомбинации ионов азота при атмосферном давлении, больше 10 мкс (1/30 кБк, для красоты делённая на три)?

НЛО прилетело и опубликовало эту надпись здесь

Зато без тавтологии получилось и верно при этом ;)

Штука интересна исключительно тем, что случайность в ней квантовая.
Например, если кто-то верит что квантовая механика как-то связана с сознанием, может попытаться воздействовать своим сознанием на случайные числа из этого генератора (не получится конечно, но каждый может попробовать).

А как же ошибка выжившего? ;-)

Для особо ленивых и криворуких:

https://archive.random.org/binary - случайные числа из реликтового излучения. С марта 2006 каждый день по 1 МБ.

Я только по подумал о записи чисел "файлы" ака консервы =) А тут такой ресурс ,

однозначно можно найти применение.

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

Зарегистрируйтесь на Хабре, чтобы оставить комментарий