| Basically thread scheduling is an imperfect art. So when you tell a thread to sleep for 4ms, it may sleep for 1-16ms depending on other threads work load, resource contention, etc. This is a huge problem if you work in very precise time sensitive data (I do ISO17025 flow calibration systems), and when you start needing >100 data points per second, of dynamic IO you will run into millisecond timing issue standard time shared OS's will introduce. The solution to this is Real-Time OS's (not Real-Time webdevelopment) that handle scheduling differently, and prioritize IO tasks even higher. But most of these suck. :.:.: This random noise (from the scheduler) is a pretty good source of entropy (and the only assumption is your Unix box has other processes, that are using resources). Because your process, generally has no clue that hundreds of other processes are inflight and also being executed at the same time. So their interference, is effectively magic data from nowhere. Dan Kaminsky did a talk at Defcon last year where he mentioned the need for this type of CSRNG [1] I even tooled up a very basic (and flawed) implementation a few months ago to play with the notion [2] [1] https://www.youtube.com/watch?v=xneBjc8z0DE [2] https://github.com/valarauca/Simple-CSRNG |