Entropy is stirred in using a polynomial feedback algorithm. Entropy is extracted using a secure hash function on the pool.
To provide for a secure initial entropy pool on server startup, entropy is periodically withdrawn from the pool and XOR exchanged with a group of disk-based entropy pools. Each pool is 256 bytes and we keep 16 pools. On startup, one of the disk-based entropy pools is chosen to seed the internal internal pool (in addition to the time-based randomness).
Entropy is continuously extracted from parts of the code that deal with inherently random processes. For example, the exact time (to the nanosecond where possible) at which a remote network connection is detected by the system contains true randomness due to clock skew between computers. The amount of time (to the nanosecond) that a remote machine takes to respond to our queries also contains true randomness due to clock skew. This randomness is extracted and mixed into the entropy pool.
ConferenceRoom's random number generation algorithm has been certified free of bias and predictability by Technical Systems Testing. The certification process involved evaluation of the algorithms for technical soundness, inspection of the source code to ensure the alogorithms were implemented as specified, and extensive statistical testing of the generator's output to ensure it actually produced unbiased and unpredictable output.
This entropy pool based random number generator is used throughout ConferenceRoom wherever randomness is needed. It used to generate the sequence numbers in the resolver to ensure that an attacker cannot easily generate a forged response with the correct sequence number. It is used to generate session keys for the Java client's blowfish encryption. It is used to generate the salt values for ConferenceRoom's host masking algorithm. It is used to generate random challenges to secure ConferenceRoom's internal challenge-response authentication protocols.