2015-09-01 3 views
9

Как мы знаем, Вихрь Мерсенна is not crytographically secure:Есть ли CSPRNG C++ 11?

Вихрь Мерсенна не криптографически безопасный. (МТ основан на линейную рекурсии. Любая последовательность псевдослучайных чисел, порожденная линейной рекурсией является небезопасной, так как с достаточно длительным subsequencje из выходов, можно предсказать, остальные выходы.)

Но многие источники, такие как Stephan T. Lavavej и даже this website. Совет почти всегда (дословно) использовать Вихрь Мерсенна, как это:

auto engine = mt19937{random_device{}()}; 

Они бывают разных вкусов, как с помощью std::seed_seq или сложные способы манипулирования std::tm, но это самый простой подход.

Даже если std::random_deviceis not always reliable:

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

/dev/urandom против /dev/random дебаты rages on.

Но, хотя стандартная библиотека обеспечивает хорошую сборку PRNG, она, похоже, не предоставляет никаких CSPRNG. Я предпочитаю придерживаться стандартной библиотеки, а не использовать заголовки POSIX, Linux и т. Д. Можно ли манипулировать Mersenne Twister, чтобы сделать ее криптографически безопасной?

+0

To downvoter, как я могу улучшить свой вопрос? – user5287986

+0

Не downvoter (фактически поддерживается), но я думаю, вы должны сделать ссылки кликабельными. – dandan78

+11

* Можно ли манипулировать Mersenne Twister, чтобы сделать его криптографически безопасным? * № –

ответ

5

Visual Studio гарантирует, что random_device криптографический безопасные и недетерминированы: https://msdn.microsoft.com/en-us/library/bb982250.aspx

Если вы хотите что-то быстрее или кросс-платформенным, вы можете, например, использовать GnuTLS: http://gnutls.org/manual/html_node/Random-number-generation.html Это обеспечивает случайные числа регулируемого качества. GNUTLS_RND_RANDOM - это то, что вы хотите, я думаю.

Как уже говорилось, пожалуйста, забудьте о MT в криптографических контекстах.

Смежные вопросы