Синхронизация генераторов случайных чисел

Ivan Tiko
Offline
Зарегистрирован: 22.11.2015

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

Клапауций 321
Offline
Зарегистрирован: 17.12.2015

Ivan Tiko пишет:

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

никак

andriano
andriano аватар
Онлайн
Зарегистрирован: 20.06.2015

Очередной Калапуций прав. Генераторы случайных чисел синхронизировать принципиально невозможно. Именно потому, что они генерируют случайные числа.

Иначе обстоит дело с генераторами псевдослучайных чисел (ГПСЧ). Их синхронизировать возможно.

Для этого, минимум, генераторы должны быть идентичны.

Т.е. пользуетесь не системным, а собственным ГПСЧ, который (один и тот же код) должны использоваться на обеих платформах. Естественно, они также должны быть инициализированы одним и тем же числом.

 

Не так просто и с одновременностью. Даже если Вам удастся добиться, чтобы генераторы генерировали ПСЧ одновременно (кстати, какой именно этап генерирования ПСЧ следует синхронизировать, генерация - процесс длящийся во времени), то эта одновременность будет согласно Теории Относительности Эйнштейна проявляться лишь в очень незначительном количестве систем отсчета (0% от всех возможных систем отсчета).

nik182
Offline
Зарегистрирован: 04.05.2015

andriano пишет:

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

Да ладно !?

99% генераторов случайных чисел генирируют не случайные числа! Я знаю только один - из ядра пентиума, на тепловом шуме электронов, который генерит действительно случайные числа. Остальные дают остаток от деления двух целых чисел. Берём программу генерации с одинаковой разрядностью - и на РС и на arduino и на любом другом процессоре будем иметь одну и ту же числовую последовательность псевдо случайных величин.

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

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

Клапауций 111
Offline
Зарегистрирован: 26.12.2015

nik182 пишет:

Остальные дают остаток от деления двух целых чисел.

ок. поведай народу как генерится рандом на компьютере.

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

nik182
Offline
Зарегистрирован: 04.05.2015

Зачем? Я вроде всё сказал. Остаток от деления двух чисел. Попробуй сгенерить десяток чисел несколько раз без инициализации рандом генератора. Будешь очень удивлен. Инициализация чаще всего производится перескоком на какой - то элемент последовательности, номер которой генериться из текущего времени, ID процессора или ещё какой то случайной величины, доступной разработчику, например кода АЦП внутреннего температурного датчика. Поэтому кажется что числа случайные. Подпрограмма генерации случайного числа без инициализации или инициализированная одним и тем же числом всегда даст одну и ту же последовательность. Именно это необходимо топикстартеру. Банковские счета защищаются совсем не стандартными генераторами. Я ж написал, что есть нормальный. Входит в систему команд пентиума. Можешь быть спокоен. Мир поживёт без властелина. 

В догонку цитата из http://cppstudio.com/post/339/

При повторном запуске программы, печатаются те же самые числа. Суть в том, что функция rand() один раз генерирует  случайные числа, а при последующих запусках программы всего лишь отображает сгенерированные первый раз числа. Такая особенность функции rand() нужна для того, чтобы можно было правильно отладить разрабатываемую программу. При отладке программы, внеся какие-то изменения, необходимо удостовериться, что программа срабатывает правильно, а это возможно, если входные данные остались те же, то есть сгенерированные числа. Когда программа успешно отлажена, нужно, чтобы при каждом выполнении программы генерировались случайные числа. Для этого нужно воспользоваться функцией srand() из стандартной библиотеки С++. Функция srand() получив целый положительный аргумент типа unsigned или unsigned int (без знаковое целое) выполняет рандомизацию, таким образом, чтобы при каждом запуске программы функция srand() генерировала случайные числа.

Формула стандартного генератора есть здесь: http://habrahabr.ru/post/208178/

 

Ivan Tiko
Offline
Зарегистрирован: 22.11.2015

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

Клапауций 111
Offline
Зарегистрирован: 26.12.2015

Ivan Tiko пишет:

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

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

andriano
andriano аватар
Онлайн
Зарегистрирован: 20.06.2015

nik182 пишет:

andriano пишет:

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

Да ладно !?

99% генераторов случайных чисел генирируют не случайные числа!

nik182, Вы тоже не читатель, а писатель?

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

nik182
Offline
Зарегистрирован: 04.05.2015

Вы батенька иезуит однако. Вам придраться к формулировкам надо, что бы своё эго потешить? Топик стартер задал конкретный вопрос. По генераторам случайных чисел на компьюторе. Все компьютеры программно генерят псевдо случайные последовательности чисел. Других нет. В зависимости от алгоритма эти псевдо случайные последовательности больше или меньше приближаются к случайным. В стандартах языка програмирования нигде нет упоминания про псевдослучайность полученных чисел. Я прекрасно знаю о наличии различных генераторов. Ваш категоричный ответ топик стартеру абсолютно справедлив с формальной точки зрения. Однако он ни как не приблизил к приемлимому решению в рамках поставленной задачи. Попросту говоря он совершенно бесполезен и даже вреден, так как во первых занимает место, не предлагая решения, во вторых своей конкретностью категоритеского нет убивает желание других прочитавших искать решение. Повторяю. В рамках поставленной задачи решение есть. Ваше нет не справедливо. Иногда лучше подумать, потом писать.   

Okmor
Okmor аватар
Offline
Зарегистрирован: 16.10.2015

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

Зачем?

Привяжите к вашему девайсу часы и генерируйте хеш от времени алгоритмом, что известен только вам. На ПК на одинаковом промежутке времени актуализируйте соответственный пароль из того же алгоритма. - Все..

vk007
Offline
Зарегистрирован: 16.06.2015

Часы синхронизировать надо будет, если не постоянно, то хоть периодически.

Logik
Offline
Зарегистрирован: 05.08.2014

nik182 пишет:

Все компьютеры программно генерят псевдо случайные последовательности чисел. Других нет. 

Да ну?! https://ru.wikipedia.org/wiki/Аппаратный_генератор_случайных_чисел

nik182 пишет:

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

Неужели?!

 Generate random number ... Notice though that this modulo operation does not generate uniformly distributed random numbers in the span (since in most cases this operation makes lower numbers slightly more likely).

Уже небойсь на нобелевскую метили, после опытов с rand(). Не торопитесь! Нужно сразу почитать что такое длинная последовательность  и команда RdRand. А уж  потом выплескивать сюда результаты своих исследований не в тему. Вопрос был сформулирован о СЧ, и ответ дан по теме. А если Вы на пару с ТС путаете и вам пофиг что СЧ что ПСЧ, то это не повод тут изливатся. Я верю что вы прощупли стандартный rand и нашли его проблемы, продолжайте изучать способы генерации СЧ, это путь сложный и длинный, вот и идите себе, идите...

 

Okmor
Okmor аватар
Offline
Зарегистрирован: 16.10.2015

Часы синхронизировать не надо.

Парольна девайсе обновляется каждую минуту. На ПК актуальными всегда 3 предыдущих и 3 следующих пароля. По последнему введенному паролю, ПК знает какое время на девайсе и каждый раз подстраевает внутрипрограмные часы (не привязанные к ПК). Самые плохие системные часы дают расхождение где то 5-10 минут в год. Соответственно достаточно вводить раз в два месяца пароль для синхронизации часов.

И вообще можно обойтись без синхронизации паролей.

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

#1
а-б-а-л-д-е-т-ь.....
синхронизировать случайные ( пусть даже ПС ) процессы ? прикольно....
..а разница этих процессов ( можно и по другому назвать ) в миллисекунды , ...... , пико.... , фемо.... - не играет рояля чёли ?

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

Ivan Tiko пишет:

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

ты в двух шагах ,  почти , от создания "машины времени"...
....если поможем - будет "МЫ" в 0,00007 шагах от создания "машины времени"

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

andriano пишет:

ГПСЧ. Их синхронизировать возможно.

как ?

andriano
andriano аватар
Онлайн
Зарегистрирован: 20.06.2015

SU-27-16 пишет:

andriano пишет:

ГПСЧ. Их синхронизировать возможно.

как ?

Два идентичных ГПСЧ на двух разных устройствах будут выдвавть одну и ту же последовательность ПЧС, если загрузить в них одно и то же инициализирующее значение.

nik182
Offline
Зарегистрирован: 04.05.2015

Logik пишет:

 Generate random number ... Notice though that this modulo operation does not generate uniformly distributed random numbers in the span (since in most cases this operation makes lower numbers slightly more likely).

Уже небойсь на нобелевскую метили, после опытов с rand(). Не торопитесь! Нужно сразу почитать что такое длинная последовательность  и команда RdRand. А уж  потом выплескивать сюда результаты своих исследований не в тему. Вопрос был сформулирован о СЧ, и ответ дан по теме. А если Вы на пару с ТС путаете и вам пофиг что СЧ что ПСЧ, то это не повод тут изливатся. Я верю что вы прощупли стандартный rand и нашли его проблемы, продолжайте изучать способы генерации СЧ, это путь сложный и длинный, вот и идите себе, идите...

Простите, а где в приведённой английской цитате слова о псевдо случайности? Тут написано, что генирируемая последовательность не является равномерно распределённой. К псевдослучайности это не имеет никокого отношения. Ещё раз. Программно нельзя сгенерить случайную последовательность. Это доказано кучей дисертаций. Все случайные последовательности генереряться с применением сторонних не программых генераторов. Вопрос заданный о генерации случайного числа (СЧ) на компьюторе, без применения стороннего аналового ГСЧ автоматически подразумевает генерацию ПСЧ. Если вы этого не понимаете, то разговоры про нобелевскую премию преждевременны. 

Okmor
Okmor аватар
Offline
Зарегистрирован: 16.10.2015

Относительно паролей.

Девайс содержит счетчик N=1, 2, 3, .... версии пароля. Версия пароля шифруется только вам известным fp алгоритмом в хеш типа АААА. После чего создается проверочный хеш ББББ= fx(АААА) по закрытому алгоритму.

На выходе имеем последовательность ААААББББ и проверяем ББББ=fх(fp(N)). На сервере распаковываем это дело проверяем и извлекаем версию пароля. Ее сохраням и принимаем условие, что версию пароля понижать нельзя. 

Добавля к версии пароля id девайса, мы сможем отследить пользователей без надобности вводить логин. Также для, пущей важности, все это дело можно пересыпать мусором.

- Вот довольно грубое описание системы паролей без надобности их синхронизации.