Лучшие семена, чем время (0)?

Ничего себе - это - интересное обсуждение. Мои собственные мысли на этом:

FP делает некоторые задачи относительно простыми (по сравнению с языками ни-одного-FP). Языки ни-одного-FP уже начинают брать идеи от FP, таким образом, я подозреваю, что эта тенденция продолжится, и мы будем видеть больше слияния, которое должно помочь людям сделать прыжок к FP легче.

9
задан trikker 9 September 2009 в 00:22
поделиться

11 ответов

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

Даже при использовании начального числа последовательность «случайных» чисел детерминирована на основе этого начального числа. Исследователь Игровой комиссии Невады понял это в отношении определенных слотов, которые он должен был проверить, и использовал эти знания, чтобы заработать немало денег, прежде чем его поймают.

Если вам нужна случайность мирового класса, вы можете добавить в свою систему оборудование, которое обеспечивает для очень рандомизированного числа. Вот как это делают известные покерные сайты (по крайней мере, так они говорят).

Если не считать этого, объедините ряд факторов вашей системы, которые все изменяются независимо и быстро, с минимальной предсказуемостью, чтобы создать очень достойное семя. Ответ на связанный пост на SO предложил использовать Guid.NewGuid (). GetHashCode (). генератор показывает, что, поскольку последовательность GUID V4 псевдослучайна, учитывая начальное состояние, можно прогнозировать до следующих 250 000 GUID возвращенный функцией UuidCreate [2]. Вот почему GUID не следует использовать в криптографии, например, как случайные ключи.

Источник: Глобальный уникальный идентификатор Википедии

12
ответ дан 4 December 2019 в 06:35
поделиться

В системах unix вы можете взять несколько байтов из / dev / random в качестве начального числа для вашего ГСЧ. / dev / random должен быть очень хорошим случайным, используя различные источники энтропии, доступные на ПК. Конечно, это полностью зависит от реализации.

Один из случаев, когда это может быть полезно, - это криптографические приложения, поскольку время (0) относительно легко угадать.

5
ответ дан 4 December 2019 в 06:35
поделиться

Слишком долго для комментария, но интересная история о 32-битных начальных числах на заре онлайн-покера.

Алгоритм тасования, используемый в Программное обеспечение ASF всегда начинается с заказанная колода карт, а затем генерирует последовательность случайных чисел используется для изменения порядка колоды. В реальном колода карт, их 52! (~ 2 ^ 226) возможны уникальные тасования. Напомним, что начальное число для 32-битного случайного числа генератор должен быть 32-битным числом, это означает, что их чуть более 4 миллиард возможных семян. Поскольку колода повторно инициализируется, и генератор повторно заполняется перед каждой перетасовкой, только 4 миллиард возможных перетасовок может привести из этого алгоритма. 4B возможно shuffles тревожно меньше 52!.

Инструмент, разработанный RST для использования этого уязвимость требует пяти карт от колода будет известна. На основе пять известных карт, программа ищет через несколько сотен тысяч возможные перетасовки и выводы, которые один идеально подходит. На случай, если Texas Hold 'em Poker, это означает программа принимает на вход две карты что обманщику раздали, плюс первые три общие карты которые сдаются в открытую (флоп). Эти пять карт известны после первый из четырех раундов торговли, и достаточно для определения (в реальном времени, во время игры) точное перемешивание.

http://www.ibm.com/developerworks/library/s-playing/

6
ответ дан 4 December 2019 в 06:35
поделиться

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

  • объявить неинициализированный массив char случайного размера в стеке
  • выделить случайные байты памяти
  • просят пользователя переместить мышь
  • просят пользователя вставить случайный компакт-диск в дисковод для компакт-дисков и читать случайные байты в случайном месте из первой дорожки
  • открыть микрофон или камеру пользователя, собрать случайное количество секунд ввода, вычислить хэш и начальное число
  • Windows : используйте CryptGenRandom , чтобы получить буфер криптографически случайных байтов
  • Unix : как уже упоминалось, читать из / dev / random
4
ответ дан 4 December 2019 в 06:35
поделиться

В unix попробуйте читать из / dev / random. Чтение с этого устройства происходит медленно, поэтому не делайте этого слишком часто - например, только для установки начального числа. Случайное устройство получает данные из энтропии, сгенерированной оборудованием (шума окружающей среды от устройств), и в течение заданного периода времени их не может быть бесконечного количества. Если у вас закончится энтропия, библиотеки SSL могут выйти из строя. Через некоторое время энтропия восполняется (на самом деле это бассейн энтропии). Также существует urandom afaik, который более экономичен, но менее случайен и не блокируется в условиях низкой энтропии.

Через некоторое время энтропия восполняется (на самом деле это бассейн энтропии). Также существует urandom afaik, который более экономичен, но менее случайен и не блокируется в условиях низкой энтропии.

Через некоторое время энтропия восполняется (на самом деле это бассейн энтропии). Также существует urandom afaik, который более экономичен, но менее случайен и не блокируется в условиях низкой энтропии.

4
ответ дан 4 December 2019 в 06:35
поделиться

Существует веб-служба, которая предлагает бесплатные и платные "истинные" случайные биты, генерируемые из атмосферного шума: http://www.random.org/

Wired опубликовал статью о двух парнях, которые использовали в основном шум от ПЗС-чипа веб-камеры для генерации случайных чисел: http://www.wired.com/wired/archive/11.08/random.html

2
ответ дан 4 December 2019 в 06:35
поделиться

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

time(NULL):   Repeats every 64 years.  
tickCouter()  Repeats every X days.

Вы можете попытаться получить какое-нибудь случайное значение от природы.
Молния ударяет по всему миру в последнюю секунду (очевидно, что это онлайн)? (Возможно, вам придется провести исследование, чтобы увидеть, является ли это переменным).

1
ответ дан 4 December 2019 в 06:35
поделиться

Вы можете сохранить случайное начальное число при выходе из программы и загрузить его при запуске, поэтому вам нужно будет инициализировать свой ГСЧ со временем (0) только при первом запуске программы.

1
ответ дан 4 December 2019 в 06:35
поделиться

Использование (только) времени в качестве начального числа ГПСЧ имеет в основном две проблемы:

  1. Оно предсказуемо (что делает его непригодным для криптографии)
  2. Последовательные начальные числа имеют в значительной степени линейную зависимость

Для первой проблемы обычно необходимо, чтобы вы взяли столько источников энтропии, сколько сможете.

Что касается второй проблемы, статья Общие дефекты инициализации генераторов псевдослучайных чисел Макото Мацумото может дать некоторое представление.

0
ответ дан 4 December 2019 в 06:35
поделиться

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

0
ответ дан 4 December 2019 в 06:35
поделиться

Поскольку вы уже используете boost, вам, вероятно, понадобится boost :: random_device .

(По крайней мере, в Linux. Я не помню, доступна ли еще очевидная реализация CryptGenRandom в Windows.)

1
ответ дан 4 December 2019 в 06:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: