/dev/random uses OS level entropy (sourced from hardware events). /dev/urandom is pseudo-random that is less random than /dev/random, but it provides quicker access to pseudo-random values. If you try to read data from /dev/urandom, you can read large quantities. If you try to read data from /dev/random, you will find that you are often blocking, waiting for the system to provide more entropy