|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Ping based random number generator
Реализован генератор случайных чисел, использующий Ping (измерение времени отклика определенного хоста в сети Интернет) в качестве источника энтропии. Итогом разработки стали функции PRandomize() (обеспечивает инициализацию ГСЧ) и PRandom (обеспечивает, собственно, генерацию случайного числа). Функция PRandom имеет две перегружаемые реализации: без параметров (возвращает случайное число типа Extended в интервале от 0 до 1 включительно) и с целочисленными параметрами (минимум и максимум типа Int64), которая возвращает целое (типа Int64) случайное число в указанном диапазоне. Описание, исходные коды и демо доступны на сайте pbrng.16mb.com.
Критика, которая высказывалась ранее на данном форуме по поводу этой идеи, по возможности учтена и алгоритм построен так, чтобы в минимальной степени зависеть от внешних факторов. Частотный тест случайных чисел, полученных таким образом, показывает хорошее (равномерное) распределение (другие виды тестов пока не проводились). |
#2
|
||||
|
||||
Какая-то изначально неверная идея. Почему бы не использовать тогда погодные данные?
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#3
|
|||
|
|||
ну, я не могу ответить на такой вопрос. Использовать-то можно очень много чего (начиная от квантовых флуктуаций или космического излучения, и заканчивая «бульками» в аквариуме или «лавовыми лампами»). Температура чего-нибудь, скорость вращения, и все такое, конечно, тоже в этом списке. Можно и погодные данные, конечно, использовать. Мне, вот, пинг «приглянулся» для этих целей. Почему — не могу сказать. А почему бы и нет?
|
#4
|
||||
|
||||
при отвалившемся интернет или вообще при его отсутствии смысла нет...
Пишу программы за еду. __________________ |
#5
|
|||
|
|||
В описании проекта об этом честно говорится.
Варианты такие: 1) интернет изначально был (и программа успешно инициализировалась), а потом отвалился — приведет к тому, что будут все равно генерироваться истинно случайные числа (только "переинициализироваться" не удастся), так как собственно для генерации СЧ программе интернет не нужен (только для инициализации); 2) интернета изначально не было — приведет к тому, что будут генерироваться только псевдо-случайные числа, но с более ровным распределением, чем у стандартной дельфийской функции Random. Тут надо еще сделать такую ремарку, что в отношении этого проекта главной задачей для меня лично было — получить практический навык описания и документирования проекта (это — мой первый опыт). |
#6
|
|||
|
|||
Маленький апдэйт. Я построил частотный тест (пока что провел 100 тыс. испытаний). Сравнивал мой ГСЧ и System.Random (Delphi). Вот, что получилось:
На иллюстрации сверху — результаты работы моего ГСЧ (PBRNG), а снизу - результаты работы System.Random (Delphi). Первый столбец — это цифра (тест был рассчитан на выпадение цифр от 0 до 9). Второй столбец — это количество выпадений данной цифры (в абсолютном выражении). Третий столбец — это процентное отношение количества выпадений определенной цифры к общему количеству испытаний (внизу можно видеть: Total: 100016). Четвертый столбец — это пометка максимального и минимального числа «выпадений». Пятый столбец — это процентная разница между количеством выпадений данной цифры и количеством выпадений той цифры, которая выпала максимальное число раз. Можно видеть, что в случае PBRNG на 100000 испытаний получается, что разница между максимумом и минимумом немного меньше, чем в случае System.Random. Правда, я должен сознаться, что бывало (на протяжении этих 100 тыс. испытаний) и наоборот. У PBRNG за эти 100 тыс. испытаний чаще всего выпадала четверка (ее количество — 10235, что составляет 10.233% от 100016). Реже всех выпадала тройка (она выпала «всего лишь» 9754 раза, что составляет 9.752% от 100016). Таким образом, разница между «самой популярной» и «наименее популярной» цифрами составляет 0.481%. У System.Random эта разница составляет 0.532%. Разрабатываю генератор случайных чисел на основе пинга (информация — на сайте http://pbrng.16mb.com/) Последний раз редактировалось mxustin, 09.10.2015 в 21:37. |
#7
|
|||
|
|||
Сделал масштабную «шумовую» визуализацию:
Разрабатываю генератор случайных чисел на основе пинга (информация — на сайте http://pbrng.16mb.com/) |
#8
|
||||
|
||||
Цитата:
З.Ы. https://ru.wikipedia.org/wiki/%D0%92...BD%D0%BD%D0%B0 — Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#9
|
|||
|
|||
В свою очередь тоже хочу поблагодарить: очень ценная информация! Спасибо.
Разрабатываю генератор случайных чисел на основе пинга (информация — на сайте http://pbrng.16mb.com/) |
#10
|
||||
|
||||
Цитата:
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#11
|
|||
|
|||
Если Вы о том, чтобы попросить пользователя водить мышкой, кликать и нажимать случайные клавиши на клавиатуре, — то такая идея у меня была. И даже есть реализация (на уровне «для себя»). Доводить эту реализацию до уровня готового проекта я не стал. Причина заключается в том, что заставлять пользователя делать что-либо, я считаю, нужно по-минимуму. Сравните:
а) в PBRNG пользователю нужно подождать (примерно до секунды), чтобы ГСЧ инициализировался через пинг, и после этого — получать случайные числа; б) пользователю нужно «долго и нудно» водить мышкой и давить по клавишам, и только после этого.... Мне кажется, что первый вариант предпочтительнее. С этой точки зрения я и выбрал пинг. Что же касается вообще идей, откуда получать энтропию, — то да. Их много. Очень много. И получать ее от пользователя — одна из них, заслуживающая право на жизнь. Почему бы и нет. Почему лично я выбрал именно пинг — не могу сказать. Как-то вот, приглянулся мне этот способ. Осознаю, что он является просто одним из многих способов: не самый лучший, не самый худший, ИМХО. Цитата:
В таком направлении я тоже работал. В частности, изучал информацию о том, как предлагают получать энтропию «интеловцы», используя инструкцию rdrand, доступную процессорам с архитектурой Ivy Bridge. Реализация тоже есть. Считаю, что вполне достойный метод (используется аппаратный генератор, встроенный в процессор). Насчет того, чтобы самому паять что-то такое аппаратное — не очень охота. Разрабатываю генератор случайных чисел на основе пинга (информация — на сайте http://pbrng.16mb.com/) Последний раз редактировалось mxustin, 13.10.2015 в 19:06. |
#12
|
||||
|
||||
Главное, чтобы ГПСЧ твой обеспечил большую петлю случайных чисел, иначе всякие генераторы ломаются так: https://exelab.ru/art/?action=view&id=136
Рекомендую мерсеннтвистер, он себя уже хорошо зарекомендовал во вполне реальных проектах, где нужно было выдавать шум, слабо поддающийся анализу. — Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
Этот пользователь сказал Спасибо M.A.D.M.A.N. за это полезное сообщение: | ||
mxustin (13.10.2015)
|
#13
|
|||
|
|||
Согласен. Ну, я в ближайшее время планирую подвергнуть свой генератор тестам и испытаниям. Тогда можно будет говорить предметно (с цифрами).
Разрабатываю генератор случайных чисел на основе пинга (информация — на сайте http://pbrng.16mb.com/) |
#14
|
||||
|
||||
Цитата:
Еще один З.Ы.: http://www.sql.ru/forum/61224/generaciya-guid?hl=guid — Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
Этот пользователь сказал Спасибо M.A.D.M.A.N. за это полезное сообщение: | ||
mxustin (13.10.2015)
|
#15
|
|||
|
|||
То верно.
Про GUID — знаю, но все равно, спасибо за ссылку. Так, я думаю, что если хотя бы по абзацу описать все существующие способы получить энтропию, то, в принципе, на книжку наберется Разрабатываю генератор случайных чисел на основе пинга (информация — на сайте http://pbrng.16mb.com/) |