The ChaCha20 DRNG is implemented using ideas specified in SP800-90A, AIS 20/31 as well as specified by Peter Gutmann's 1998 Usenix Security Symposium paper: "Software Generation of Practically Strong Random Numbers". The following list enumerates the different properties offered with the ChaCha20 DRNG.
Properties of the ChaCha20 DRNG:
The ChaCha20 DRNG implements an automated seeding from internally defined noise sources. This automated seeding implies that after an initialization call, the DRNG can be requested to generate random numbers. The caller does not need to consider the seeding strategy or provide seed data. However, if the caller wants to provide seed data, he can surely do that. The automated seeding is transparent to the caller.
In conjunction with the automated initial seed, the ChaCha20 DRNG performs an automated reseeding from the noise sources before the next random number is generated in the following cases: if the last generation is more than 600 seconds ago or more than 1<<30 bytes have been generated. The automated reseeding is transparent to the caller.
The ChaCha20 DRNG implements a continuous reseed using a high-resolution time stamp which is injected into the state before a new random number is generated.
The ChaCha20 DRNG implements enhanced backward secrecy with an update function. That update function re-creates the complete ChaCha20 state by generating one ChaCha20 block which is XORed with the previous state. This update function is invoked after each generation round of random numbers as well as when new seed is injected into the DRNG. This ensures that even when the internal state becomes known, any previously generated random numbers cannot be deduced from the state any more.