|
Инициализация псевдослучайной последовательности, как это сделать? |
|
|
|
Mar 11 2011, 05:42
|

Профессионал
    
Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581

|
Отправная точка: миниатюрное устройство, где каждый новый компонент - лишний. устройство формирует ряд "случайных" сигналов, используя rand(). в сущности, алгоритм генерации ПСПЧ не принципиален. но есть большая проблема: два одинаковых устройства, включенные одновременно, генерируют абсолютно одинаковые "случайные" последовательности, что очень плохо. более того, после подачи питания устройство всегда стартует с одного и того же "места", что тоже очень плохо.
есть, конечно, функция srand(), которая могла бы помочь, но для нужного результата эту функцию нужно передать случайное число... круг замкнулся.
вопрос знатокам: посоветуйте, какими простыми и дешевыми средствами реализовать получение хотя бы одного-единственного, но на самом деле случайного числа в программе?
сразу ограничу круг советов: надежда на то, что после включения питания ячейки ОЗУ содержат случайные данные, не срабатывает, в подавляющем большинстве у одного и того же контроллера при более-менее одинаковых условиях содержимое ОЗУ после подачи питания так же более-менее одинаковое, вариации крайне недостаточные для того, чтобы считать их действительно случайными - проверено на некотором количестве atmega32.
--------------------
Я бы взял частями... но мне надо сразу.
|
|
|
|
|
 |
Ответов
|
Mar 14 2011, 05:56
|

Профессионал
    
Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581

|
не смотря на то, что лично для меня тема исчерпана, обсуждение продолжается поясню: 1. одновременно - не значит на самом деле одновременно, т.е. в абсолютно один и тот же момент. просто человек включает два девайса и они показывают ему одинаковое состояние. человек снова "передергивает" питание - и снова оба одно и то же... причем то же самое, что и в прошлый раз. именно от этого нужно было уйти. 2. самое простое решение было высказано: хранить в EEPROM число включений и использовать его для srand() - инициализации генератора ПСПЧ. это самое простое решение. не смотря на то, что два впервые изготовленных девайса будут вести себя точно так же, как описано в п.1, но стоит на "5 минут" унести один девайс в другую комнату и там его повключать, то вернувшись обратно синхронности уже не добиться. и угадать, на сколько включений произошло рассогласование внутренних счетчиков тоже будет сложно. 3. улучшение варианта п.3 элементрано: на стадии прошивки задается "случайное" первичное значение счетчика включений - это несложно сделать при помощи программатора с возможностью редактирования дампа EEPROM. 4. варианты внешнего усложенения схемы (генераторы шума на стабилитронах, транзисторах и т.п.) дадут лучшую случайность, но, во-первых, истинная случайность не требуется, а во-вторых, это усложняет схему, т.е. удорожает ее. кстати, эти варианты изначально были известны ... и отброшены. 5. кнопок, дребезг которых можно было бы использовать, или останавливать по ним таймер и т.п., в девайсе не предусмотрено
--------------------
Я бы взял частями... но мне надо сразу.
|
|
|
|
|
Mar 14 2011, 09:41
|
Гуру
     
Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047

|
Цитата(ARV @ Mar 14 2011, 08:56)  5. кнопок, дребезг которых можно было бы использовать, или останавливать по ним таймер и т.п., в девайсе не предусмотрено  Еще варианты - измерение напряжения встроенного опорного источника (отличается от экземпляра к экземпляру даже в одной партии кристаллов, хотя абсолютное число "вариантов" не так уж и велико). И измерение частоты встроенного калиброванного RC-генератора (если тактирование от внешнего кварца). Как вариант - измерение времени записи в ячейку(и) EEPROM данных. Цитата(ARV @ Mar 14 2011, 08:56)  3. улучшение варианта п.3 элементрано: на стадии прошивки задается "случайное" первичное значение счетчика включений - это несложно сделать при помощи программатора с возможностью редактирования дампа EEPROM. Тогда уж правильнее "сериализация" (инкремент серийного номера) (avreal, например, это обеспечивает). А от серийника считать "затравку".
|
|
|
|
|
Mar 14 2011, 11:17
|

неотягощённый злом
     
Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643

|
Цитата(rx3apf @ Mar 14 2011, 12:41)  Еще варианты - измерение напряжения встроенного опорного источника А относительно чего измерять? Внешний опорник ставить? Предлагаю считать количество нейтрино, прошедших сквозь прибор, за какой-то интервал времени:-) Кстати, что там с регистром OSCAL он вообще отличается среди образцов одной партии? Если да то ещё немного случайности добавит.
--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
|
|
|
|
Сообщений в этой теме
ARV Инициализация псевдослучайной последовательности Mar 11 2011, 05:42 Taradov Alexander У Атмела есть аппнот на эту тему, номер не помню п... Mar 11 2011, 06:29 ARV пока что не нашел такого апноута... с АЦП я пробов... Mar 11 2011, 06:53 Taradov Alexander QUOTE (ARV @ Mar 11 2011, 09:53) но для о... Mar 11 2011, 07:55 314 Висящий в воздухе вывод АЦП лихо реагирует на влаж... Mar 11 2011, 07:04 ARV в том-то и дело, что висящий вход лихо на все реаг... Mar 11 2011, 07:08 Petka Цитата(ARV @ Mar 11 2011, 08:42) есть, ко... Mar 11 2011, 07:24 ARV Цитата(Petka @ Mar 11 2011, 10:24) На сам... Mar 11 2011, 07:52 DpInRock Согласен с предыдущим оратором.
Хуже того, набор 1... Mar 11 2011, 08:05 rx3apf Цитата(ARV @ Mar 11 2011, 08:42) вопрос з... Mar 11 2011, 08:07 ARV Цитата(rx3apf @ Mar 11 2011, 11:07) Уника... Mar 11 2011, 08:20 domowoj Если говорить о псевдослучвайной последовательност... Mar 11 2011, 15:27 rx3apf Цитата(domowoj @ Mar 11 2011, 18:27) Если... Mar 11 2011, 15:56 domowoj Тогда усилить шумы стабилитрона
и оцифровать Mar 11 2011, 17:19 muravei Цитата(domowoj @ Mar 11 2011, 20:19) Тогд... Mar 13 2011, 09:53  SKov Цитата(muravei @ Mar 13 2011, 12:53) А ес... Mar 13 2011, 09:59   demiurg_spb Уважайте поиск! :-)
В ветке AVR по слову RAND ... Mar 13 2011, 10:12 zombi Цитата(ARV @ Mar 11 2011, 08:42) Отправна... Mar 11 2011, 18:51 forever_student Цитата(ARV @ Mar 11 2011, 08:42) ... посо... Mar 13 2011, 10:51 HALFer дребезг контактов (геркон, реле). обмотку на выход... Mar 14 2011, 01:06 =AK= Цитата(ARV @ Mar 14 2011, 16:26) 1. однов... Mar 14 2011, 06:22   rx3apf Цитата(demiurg_spb @ Mar 14 2011, 14:17) ... Mar 14 2011, 11:29 ARV снова у меня проблема rand() вместе с srand() не ... Mar 19 2011, 18:24 defunct Цитата(ARV @ Mar 19 2011, 20:24) посодейс... Mar 19 2011, 21:22 forever_student Цитата(ARV @ Mar 19 2011, 21:24) ...посод... Mar 19 2011, 21:43  ARV Цитата(forever_student @ Mar 20 2011, 00... Mar 20 2011, 09:54   rx3apf Цитата(ARV @ Mar 20 2011, 12:54) мне нуже... Mar 20 2011, 12:29    ARV Цитата(rx3apf @ Mar 20 2011, 15:29) У мен... Mar 20 2011, 13:38     rx3apf Цитата(ARV @ Mar 20 2011, 16:38) скажите ... Mar 20 2011, 14:05   defunct Цитата(ARV @ Mar 20 2011, 11:54) требующи... Mar 20 2011, 14:53 Warlockwolf Кодu32 iran;
u8 Radom(){
iran=(iran*... Mar 19 2011, 21:51 ARV всем в очередной раз спасибо. как обычно, в попытк... Mar 21 2011, 09:07 Метценгерштейн а не лучше ли использовать алгоритм ПСП, например ... Mar 2 2012, 13:34
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|