Я использую ящик openssl для генерации ключей и функций шифрования.
Я хотел бы заполнить PRNG (или, по крайней мере, добавить энтропию из приложения с помощью RAND_ADD()).
Однако кажется, что это невозможно (пока?).
cf модуль rand.
Как я могу добавить начальное значение/добавить случайное значение в PRNG OpenSSL из моего приложения ржавчины?
В качестве альтернативы, есть ли способ детерминированной генерации ключей с помощью openSSL (с использованием DRBG)?

«Добавление начального числа» почти всегда означает смешивание энтропии для API DRBG (также известного как CSPRNG). Таким образом, вы не получите детерминированный алгоритм.
Если вы хотите детерминированно генерировать ключи, не используйте PRNG. Вместо этого вы можете использовать метод получения ключа (KDF), например. Argon2 для паролей или HKDF для получения ключей из секрета. Обратите внимание, что при этом создаются симметричные ключи, такие как ключи AES.
Если вы хотите сгенерировать пару ключей для асимметричной криптографии, вопрос внезапно становится намного сложнее. Взгляните, например, на вопросы и ответы, где я спрашиваю, есть ли какие-либо проблемы с этим подходом. Проблема в том, что любое изменение в алгоритме генерации пары ключей повлияет на сгенерированный ключ; существует несколько математически эквивалентных стратегий для создания необходимых простых чисел RSA. Если вы хотите пойти по этому пути, то для этой цели больше подходят эллиптические кривые. В зависимости от варианта использования вы также можете вместо этого использовать упаковку закрытого ключа (шифрование закрытого ключа с помощью производного симметричного ключа).
По сути, не используйте ГПСЧ, если вы не можете полностью его контролировать. Если DRBG действительно необходим, попробуйте заменить DRBG своим собственным. Вы можете, например. реализовать один с использованием получения ключа с последующим шифрованием потока нулей в режиме счетчика с помощью полученного ключа (более современным способом было бы использование XOF, но это привело бы к сложностям реализации).