Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Разное > Ваши программы
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 02.10.2015, 01:07
mxustin mxustin вне форума
Прохожий
 
Регистрация: 12.09.2015
Адрес: http://pbrng.16mb.com/home/
Сообщения: 18
Версия Delphi: RAD Studio XE8
Репутация: 10
Лампочка Ping based random number generator

Реализован генератор случайных чисел, использующий Ping (измерение времени отклика определенного хоста в сети Интернет) в качестве источника энтропии. Итогом разработки стали функции PRandomize() (обеспечивает инициализацию ГСЧ) и PRandom (обеспечивает, собственно, генерацию случайного числа). Функция PRandom имеет две перегружаемые реализации: без параметров (возвращает случайное число типа Extended в интервале от 0 до 1 включительно) и с целочисленными параметрами (минимум и максимум типа Int64), которая возвращает целое (типа Int64) случайное число в указанном диапазоне. Описание, исходные коды и демо доступны на сайте pbrng.16mb.com.

Критика, которая высказывалась ранее на данном форуме по поводу этой идеи, по возможности учтена и алгоритм построен так, чтобы в минимальной степени зависеть от внешних факторов. Частотный тест случайных чисел, полученных таким образом, показывает хорошее (равномерное) распределение (другие виды тестов пока не проводились).
Ответить с цитированием
  #2  
Старый 02.10.2015, 01:44
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Какая-то изначально неверная идея. Почему бы не использовать тогда погодные данные?
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #3  
Старый 02.10.2015, 02:21
mxustin mxustin вне форума
Прохожий
 
Регистрация: 12.09.2015
Адрес: http://pbrng.16mb.com/home/
Сообщения: 18
Версия Delphi: RAD Studio XE8
Репутация: 10
По умолчанию

ну, я не могу ответить на такой вопрос. Использовать-то можно очень много чего (начиная от квантовых флуктуаций или космического излучения, и заканчивая «бульками» в аквариуме или «лавовыми лампами»). Температура чего-нибудь, скорость вращения, и все такое, конечно, тоже в этом списке. Можно и погодные данные, конечно, использовать. Мне, вот, пинг «приглянулся» для этих целей. Почему — не могу сказать. А почему бы и нет?
Ответить с цитированием
  #4  
Старый 02.10.2015, 08:04
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

при отвалившемся интернет или вообще при его отсутствии смысла нет...
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #5  
Старый 02.10.2015, 09:58
mxustin mxustin вне форума
Прохожий
 
Регистрация: 12.09.2015
Адрес: http://pbrng.16mb.com/home/
Сообщения: 18
Версия Delphi: RAD Studio XE8
Репутация: 10
По умолчанию

В описании проекта об этом честно говорится.

Варианты такие:

1) интернет изначально был (и программа успешно инициализировалась), а потом отвалился — приведет к тому, что будут все равно генерироваться истинно случайные числа (только "переинициализироваться" не удастся), так как собственно для генерации СЧ программе интернет не нужен (только для инициализации);

2) интернета изначально не было — приведет к тому, что будут генерироваться только псевдо-случайные числа, но с более ровным распределением, чем у стандартной дельфийской функции Random.

Тут надо еще сделать такую ремарку, что в отношении этого проекта главной задачей для меня лично было — получить практический навык описания и документирования проекта (это — мой первый опыт).
Ответить с цитированием
  #6  
Старый 09.10.2015, 21:33
mxustin mxustin вне форума
Прохожий
 
Регистрация: 12.09.2015
Адрес: http://pbrng.16mb.com/home/
Сообщения: 18
Версия Delphi: RAD Studio XE8
Репутация: 10
По умолчанию

Маленький апдэйт. Я построил частотный тест (пока что провел 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  
Старый 10.10.2015, 11:20
mxustin mxustin вне форума
Прохожий
 
Регистрация: 12.09.2015
Адрес: http://pbrng.16mb.com/home/
Сообщения: 18
Версия Delphi: RAD Studio XE8
Репутация: 10
По умолчанию

Сделал масштабную «шумовую» визуализацию:
__________________
Разрабатываю генератор случайных чисел на основе пинга (информация — на сайте http://pbrng.16mb.com/)
Ответить с цитированием
  #8  
Старый 13.10.2015, 08:36
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Цитата:
Сообщение от mxustin
Сделал масштабную «шумовую» визуализацию
Очень полезно, спасибо.
З.Ы. https://ru.wikipedia.org/wiki/%D0%92...BD%D0%BD%D0%B0
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #9  
Старый 13.10.2015, 13:33
mxustin mxustin вне форума
Прохожий
 
Регистрация: 12.09.2015
Адрес: http://pbrng.16mb.com/home/
Сообщения: 18
Версия Delphi: RAD Studio XE8
Репутация: 10
По умолчанию

В свою очередь тоже хочу поблагодарить: очень ценная информация! Спасибо.
__________________
Разрабатываю генератор случайных чисел на основе пинга (информация — на сайте http://pbrng.16mb.com/)
Ответить с цитированием
  #10  
Старый 13.10.2015, 18:16
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Цитата:
Сообщение от mxustin
В свою очередь тоже хочу поблагодарить: очень ценная информация! Спасибо.
Как на счёт использования биологического источника энтропии? Или шумящего диода.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #11  
Старый 13.10.2015, 18:59
mxustin mxustin вне форума
Прохожий
 
Регистрация: 12.09.2015
Адрес: http://pbrng.16mb.com/home/
Сообщения: 18
Версия Delphi: RAD Studio XE8
Репутация: 10
По умолчанию

Если Вы о том, чтобы попросить пользователя водить мышкой, кликать и нажимать случайные клавиши на клавиатуре, — то такая идея у меня была. И даже есть реализация (на уровне «для себя»). Доводить эту реализацию до уровня готового проекта я не стал. Причина заключается в том, что заставлять пользователя делать что-либо, я считаю, нужно по-минимуму. Сравните:

а) в PBRNG пользователю нужно подождать (примерно до секунды), чтобы ГСЧ инициализировался через пинг, и после этого — получать случайные числа;
б) пользователю нужно «долго и нудно» водить мышкой и давить по клавишам, и только после этого....

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

Цитата:
Или шумящего диода.

В таком направлении я тоже работал. В частности, изучал информацию о том, как предлагают получать энтропию «интеловцы», используя инструкцию rdrand, доступную процессорам с архитектурой Ivy Bridge. Реализация тоже есть. Считаю, что вполне достойный метод (используется аппаратный генератор, встроенный в процессор).

Насчет того, чтобы самому паять что-то такое аппаратное — не очень охота.
__________________
Разрабатываю генератор случайных чисел на основе пинга (информация — на сайте http://pbrng.16mb.com/)

Последний раз редактировалось mxustin, 13.10.2015 в 19:06.
Ответить с цитированием
  #12  
Старый 13.10.2015, 19:33
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Главное, чтобы ГПСЧ твой обеспечил большую петлю случайных чисел, иначе всякие генераторы ломаются так: https://exelab.ru/art/?action=view&id=136
Рекомендую мерсеннтвистер, он себя уже хорошо зарекомендовал во вполне реальных проектах, где нужно было выдавать шум, слабо поддающийся анализу.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
Этот пользователь сказал Спасибо M.A.D.M.A.N. за это полезное сообщение:
mxustin (13.10.2015)
  #13  
Старый 13.10.2015, 19:42
mxustin mxustin вне форума
Прохожий
 
Регистрация: 12.09.2015
Адрес: http://pbrng.16mb.com/home/
Сообщения: 18
Версия Delphi: RAD Studio XE8
Репутация: 10
По умолчанию

Согласен. Ну, я в ближайшее время планирую подвергнуть свой генератор тестам и испытаниям. Тогда можно будет говорить предметно (с цифрами).
__________________
Разрабатываю генератор случайных чисел на основе пинга (информация — на сайте http://pbrng.16mb.com/)
Ответить с цитированием
  #14  
Старый 13.10.2015, 20:17
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Цитата:
Сообщение от mxustin
Согласен. Ну, я в ближайшее время планирую подвергнуть свой генератор тестам и испытаниям. Тогда можно будет говорить предметно (с цифрами).
Кстати, QueryPerformanceCounter, который ты используешь, итак по сути своей может являться источником энтропии.
Еще один З.Ы.: http://www.sql.ru/forum/61224/generaciya-guid?hl=guid
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
Этот пользователь сказал Спасибо M.A.D.M.A.N. за это полезное сообщение:
mxustin (13.10.2015)
  #15  
Старый 13.10.2015, 20:21
mxustin mxustin вне форума
Прохожий
 
Регистрация: 12.09.2015
Адрес: http://pbrng.16mb.com/home/
Сообщения: 18
Версия Delphi: RAD Studio XE8
Репутация: 10
По умолчанию

То верно.

Про GUID — знаю, но все равно, спасибо за ссылку. Так, я думаю, что если хотя бы по абзацу описать все существующие способы получить энтропию, то, в принципе, на книжку наберется
__________________
Разрабатываю генератор случайных чисел на основе пинга (информация — на сайте http://pbrng.16mb.com/)
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 19:48.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter