Рейтинг:1

Как воспроизвести семена в генераторе случайных чисел, например WELL, KISS и т. д.

флаг cn

мне интересно Прокладка семян генератора случайных чисел.
(Я уверен, что терминология, набивка семян, неверна. Если кто-то знает правильное слово, пожалуйста, дайте мне знать :) )

Что такое дополнение семян, которые я упомянул?

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

Однако в ПОЦЕЛУЙ алгоритм (Джордж Марсалья, 2011, 64-битная версия), вам нужно всего 2 семени, СПГ и хз. В случае Wichmann_hill, вам нужно 3 семени, с1, с2, с3. В Алгоритм WELL19937, тебе нужно 624 семени.

На мой взгляд, легко получить 1 или 2 семени. Но получить 624 сида для WELL19937 будет сложно.

Итак, я думаю, что некоторые алгоритмы будут реализовывать «дополнение семян», что означает генерацию одного семени для сидов по запросу, таких как SHA256. В случае SHA, если входное сообщение не соответствует длине, мы генерируем несколько сообщений, которые называются Прокладка.

Что я хочу спросить.

  1. Есть ли правильная терминология «дополнения семян» в генераторе случайных чисел?

  2. Как «добить семена»? Есть ли какой-то стандарт?

SAI Peregrinus avatar
флаг si
Этот сайт обмена стеками посвящен криптографии. Криптография использует криптографически безопасные генераторы псевдослучайных чисел (CSPRNG), которые не используют повторяющееся внешнее начальное число. Для безопасного CSPRNG воспроизведение семени ДОЛЖНО быть невозможным.
TyeolRik avatar
флаг cn
@SAIPeregrinus Да. Я знаю, что этот сайт посвящен криптографии. Кроме того, псевдослучайное число (не CSPRNG) связано с криптографией. Потому что один из самых известных учебников, прикладная криптография, Брюс Шнайер, представляет классический генератор псевдослучайных чисел, такой как LCG, LFSR и т. д. Хорошо, тогда, если вы считаете, что этот сайт неуместен, не могли бы вы порекомендовать, где мне спросить?
SAI Peregrinus avatar
флаг si
Если вы спрашиваете о программировании такого PRNG, вы просто передаете входные данные любым методом, который требует используемый язык, например, передаете указатель на структуру для версии C. Заполнение будет определяться компилятором и архитектурой. Это было бы уместно для Stackoverflow.
SAI Peregrinus avatar
флаг si
Если вы спрашиваете о том, как найти начальное число из вывода PRNG, это уместно здесь, но такого процесса заполнения нет.
TyeolRik avatar
флаг cn
@SAIPeregrinus Нет, я не прошу найти семена из выходов PRNG, что похоже на Hash Collision. Я спрашиваю: **Как разместить правильные (много) семян?** Не получать 624 семян, а манипулировать семенами из ОДНОГО СЕМЯ, что почти похоже на заполнение SHA.
SAI Peregrinus avatar
флаг si
Из беглого просмотра статьи на (https://www.iro.umontreal.ca/~lecuyer/myftp/papers/lfsr04.pdf) видно, что семя — это просто битовый вектор начального состояния. Код, кажется, поддерживает это, так как init принимает int*. Таким образом, вы просто инициализируете массив целых чисел (без заполнения) значениями, которые хотите использовать в качестве начального значения. Возможно, просто используйте memcpy. Вероятно, лучше подходит для обмена стеками, чем здесь, но код в этой статье довольно трудно читать (нет четких имен функций/переменных), поэтому вы можете не получить большой помощи.
TyeolRik avatar
флаг cn
@SAIPeregrinus Я прочитал эту статью, а также [перекодировал самостоятельно] (https://github.com/TyeolRik/rngset/blob/main/well.go). Но я **на самом деле не спрашиваю** о кодировании, но **спрашивая о том, «что такое хорошее семя»**. Как вы знаете, в исходном коде init принимает ```int*```, что означает только пользовательский ввод. Но в реальном мире, как я уже говорил, трудно получить «хорошие семена». Поэтому я спрашиваю, как получить хорошие семена с одним или двумя семенами... (без CSPRNG, который взят из /dev/random/ )
SAI Peregrinus avatar
флаг si
Хорошее начальное число — это равномерно случайные данные. Он должен иметь энтропию Шеннона, близкую к 1 бит/бит. Самый простой способ получить это — использовать аппаратный RNG, который отбеливает свой вывод с помощью CSPRNG, любой другой дизайн будет хуже с точки зрения безопасности или производительности. Если вы пытаетесь получить воспроизводимое начальное число, например, для симуляций Монте-Карло, тогда вы просто сохраняете некоторый вывод из вашего csprng в файл и используете с ним любой RNG, который вы хотите, поскольку вам не нужна безопасность.

Ответить или комментировать

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