Как стать автором
Поиск
Написать публикацию
Обновить

Генератор случайных чисел, который можно запустить в голове

Уровень сложностиСложный
Время на прочтение8 мин
Количество просмотров27K
Всего голосов 49: ↑46 и ↓3+62
Комментарии18

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

"Выберите двухразрядное число, допустим, 23"

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

не проще ли брать младшие биты встроенного АЦП ??
по пдфке в NRF24LE1 имеется 12 битный АЦП, ткну пальцем в небо (влом вчитываться в описание) что реальных значащих бит там гораздо меньше. и младшие биты полностью шумовые.
следовательно настраиваем АЦП на самое короткое время выборки, считываем значение АЦП, маской оставляем младший бит, складываем с результатом и сдвигаем результат вправо.
через ннн-ое количество измерений получаем результат наполненный, только значениями младших битов, которые максимально шумны.
возможно это долго, но зато "честный" шум.

Кроме того что долго, нет гарантии что на всех кристаллах будет шум. Возможно на макетной плате шум и основная наводка 50 Гц, когда считываешь значения несколько раз в секунду кажется что шум. А считав 10 значений подряд окажутся одинаковые значения. Или что есть зависимость от температуры, источника питания (от него как-раз может быть шум). В нормальных условиях 12 бит должны без шума считываться, не такое большое разрешение. По хорошему бы сделать источник шума аналоговый на нескольких деталях, но это усложнение и проще в память сразу IMEI прописать при прошивке.

я вот наоборот, сколь не искал качественный АЦП внутри микроконтроллера нихера ни нашел :) пришлось снаружи вешать и плату несколько раз переделывать, чтобы шум прижать.
получить живые 12 бит в АЦП с заявленным низким потреблением это что-то из области фантастики :)
для ухудшения точности ацп можно еще тактировать от встроенного RC-генератора.
там шум такой, что на осциллографе видно :)

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

про "шумность" сидирования псп статическим прошитым числом я бы не советовал упоминать - засмеют :)

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

Я больше никогда не проиграю в "камень-ножницы-бумага"! Му-ха-ха!!!

почему?

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

Случайностей вокруг нас полно. Запустите на смартфоне секундомер и возьмите десятые доли секунд в тот момент, когда на них посмотрите. Или десятые доли котировки, если вы трейдер и пялитесь в графики с девяти до четырех. Или две цифры с номерного знака проезжающей мимо машины. Да мало ли.

две цифры с номерного знака проезжающей мимо машины

Тут не все так однозначно

Случайностей вокруг нас полно. Запустите на смартфоне секундомер и возьмите десятые доли секунд в тот момент, когда на них посмотрите. Или десятые доли котировки, если вы трейдер и пялитесь в графики с девяти до четырех. Или две цифры с номерного знака проезжающей мимо машины. Да мало ли.

Это только кажется. А когда статистически анализируют такую "случайность", то оказывается что она не такая уж случайность. И впоследствии может использоваться для атак. Но для бытового использования сгодится, согласен. Исторически для таких вещей монетку принято подбрасывать. :)

О, перлячка в примерах! Давненько такого не было.

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

Почти

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

Для небольших чисел и малой выборки достаточно взять и текущее millis time (а если совсем круто то nano time). Чтобы увеличить энтропию, можно измерить время несколько раз вокруг какой-то операции. Известно, что точное время выполнения операции предугадать невозможно, поэтому разницу можно брать как Сид. Чтобы ещё увеличить энтропию и утолить сомнения, старшие байты сида можно брать из другого измерения времени. Шансы пересечения становятся совсем малыми. Естественно, это не настоящий рандом, но и GUIDники могут пересекаться.

Это псевдо случайные числа. В голове числа более случайные

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