Как вы меняете генератор с ящиком Рэнда? - PullRequest
0 голосов
/ 25 февраля 2020

"The Rust Rand Book" документирует различные генераторы. thread_rng утверждает, что криптографически безопасен, а другие нет. Но я не вижу ссылок на то, как заменить генератор. Я также не вижу способа узнать, какой генератор используется при использовании thread_rng. Я хотел бы провести тестирование различных доступных опций, как я могу это сделать?

1 Ответ

4 голосов
/ 25 февраля 2020

Q: Но я не вижу никакой ссылки на то, как заменить генератор.

Слово "изменение" здесь не совсем подходит, потому что Вы просто создаете другой экземпляр RNG и используете его. Например, вы не можете изменить того, что возвращает thread_rng.

Скажите, что вы хотите использовать SmallRng. Прежде чем вы сможете создать случайные данные с ним, вы должны создать экземпляр. Есть несколько способов сделать это, from_entropy - самый простой. В качестве альтернативы вы можете предоставить свое собственное семя с from_seed. Обратитесь к документации для получения дополнительной информации.

После создания ГСЧ теперь вы можете генерировать случайные данные, как и в случае с thread_rng:

let mut rng = SmallRng::from_entropy();
println!("{}", rng.gen::<u32>());

Q: Я также не вижу способа узнать, какой генератор используется при использовании thread_rng.

Документы для состояния ThreadRng : «ThreadRng использует тот же PRNG, что и StdRng для безопасности и производительности». Документы StdRng состояния:

Алгоритм PRNG в StdRng выбран для того, чтобы быть эффективным на текущей платформе, быть статистически сильным и непредсказуемым (то есть криптографически secure PRNG).

В настоящее время используется блочный шифр ChaCha с 20 раундами. Это может измениться, когда появятся новые доказательства безопасности и производительности шифра.

...