Monero использует PRNG на базе хеш-функции Keccak. По сути, в данном случае результат предыдущего раунда хеширования является вводом для следующего.
Начальное число берётся из источников энтропии, обеспечиваемых операционной системой.
В случае с Linux и MacOS начальное число берётся из /dev/urandom
.
В случае с Windows для получения начального числа используется вызов WinAPI CryptGenRandom
.
Повторного извлечения начального числа не происходит.
Это касается исходного варианта реализации на C++ для Monero. Следует отметить, что существует множество альтернативных вариантов реализации для создания приватного ключа, включая JavaScript, Python, Android/Java, но их необходимо исследовать на предмет правильности от случая к случаю.
В исходном коде Monero вы также можете найти генератор случайных байтов на базе lipsodium. Он является частью встроенной библиотеки и, очевидно, не используется в фактическом коде Monero.