Since Linux 5.18, the internal state of the ChaCha-based CSPRNG is a 256 bits (32 bytes) BLAKE2s hash. There is also a fast key erasure mechanism which reseeds the CSPRNG every minute (source).
I know we can read as much random data from /dev/urandom
but I didn't understand how "conceptually" we can get, for example, a 512 bits secret (so 512 bits of entropy) from this output if the seed of the CSPRNG is only 256 bits.
Finally, the “crng” is our ChaCha-based pseudorandom number generator, which takes a 32-byte “seed” as a ChaCha key, and then expands this indefinitely, so that users of the RNG can have an unlimited stream of random numbers. The seed comes from the various entropy sources that pass through BLAKE2s.
https://www.zx2c4.com/projects/linux-rng-5.17-5.18/
I stumbled upon this question/answer which make me reconsider my thought process. I think I have found the answer but I'd like a confirmation. Here is my understanding :
A CSPRNG is intended to be indistinguishable from a true random source. There is no point of comparing the entropy of the seed and the entropy of the CSPRNG output. The output entropy is maximal. Specifically the entropy of a sequence of numbers generated by a CSPRNG is precisely its length in bits.
Basically, the output of a CSPRNG is not limited by the entropy of the data that was used to seed it.
However, this answer does not support my explanation...
There is no relationship between source entropy and the output entropy from a TRNG other than you can't output more entropy than you put in
Relationship between source and output entropy