Is it an internal PRNG? Is it fed from /dev/random
or /dev/urandom
? How secure is it? If I have a hardware (TRNG) plugged in feeding my /dev/random
will this source of entropy get used by bitcoind
?
-
1Well OpenSSL handles most cryptography things in Bitcoin.– JoriApr 19, 2014 at 17:06
-
2In this particular case, it's the RAND_bytes call from OpenSSL.– Diego BaschApr 19, 2014 at 21:46
-
1@DiegoBasch: May I suggest you upgrade your comment to an answer, ideally with a link to the source?– user6049Apr 20, 2014 at 19:43
2 Answers
As others mentioned Bitcoin core uses OpenSSL random sources.
This means that it uses any random source available, like:
- the operation system, i.e. interrupts
- random sources of the CPU or the chip set
- dedicated hardware for entropy generation
So in order to make sure your hardware random generator works with Bitcoin you must make sure it works with OpenSSL.
It uses RAND_bytes from OpenSSL. The relevant call is CKey::MakeNewKey
.
getnewaddress
is in rpcwallet.cpp. It tries to get a key from the pool, and if the pool is empty it allocates a new one which is populated using RAND_bytes.