It uses radios?
YEp! They detect noise from the Earth's atmosphere in several countries to produce truly random results. random number generators in computers follow an algorithm to ensure you can get "any number", but they still aren't 100% "random". Sure, they seem random, but because an algorithm picks the numbers, you can technically reverse engineer it all to make predictions - so it's not "truly random". But with the atmosphere, it's very hard to predict the noise levels being picked up by the radios especially because they're set to only pick up on certain frequencies.
Think about it like this... A dice has 6 sides, so each side has a 1/6th chance of being on top. However, you could technically take the dice, face it a certain way, and then toss it a certain way at a certain speed... and although it's very difficult, you could theoretically get the dice to land on the same spot consistently. That's because even though the dice has 6 sides that all have the same chance of facing up, the speed, angle, and direction in which you throw it affects the outcome. So how do you make this even more random? This is the same as a coin flip. If you start the coin at the same height, same speed, same exact spot for flipping, same angle, etc... Guess what - it lands on the same side each time. The randomness is from humans flipping it.
Well - imagine if there was a way to throw the dice at a
random angle, random speed, random height, and random direction. We would see more random results than if someone threw the dice at the same speed, same angle, same height and same direction every time. However, it's extremely hard to actually randomize these things. A human can try to act random, but that is actually very difficult for humans to do, so even though it appears random - everyone has a different dice throw, and let me tell you - You absolutely CAN get a dice to land on a side. There has been research into this and many people believe that some lucky streaks in dice gambling games
can be partially attributed to rituals... An experienced dice player may love to start the dice with the number 1 facing up, at a certain height from the table, throw it a certain height/speed/angle/direction/etc... You may even consider this cheating, but it's really just controlling the input (how the dice is thrown) and hoping for the best... It's hard, but I have managed in the past to get a dice to land on the same "3 sides" almost each time... So while it's not entirely useful, I was able to have close to a 1/3 chance of landing a '6' on my dice fairly consistently on my flat table, throwing from the same height, same angle, same direction, and at a similar speed... Much better than a 1/6th chance at rolling a 6. So, we MUST make the input (how the dice is thrown, or the number is generated) completely random so it cannot be engineered or predicted!
An algorithm can be created to randomly choose the speed/height/angle/direction, but again - algorithms for randomness aren't good either. So, what's the solution? Picking something that is "truly random"... like the atmosphere.
You can use algorithms, but if you expect a truly random result you must have a truly random input.
So here's our algorithms:
function speed(input):
// do things with input
return speed
function height(input):
// do things with input
return height
function direction(input):
// do things with input
return direction
function angle(input):
// do things with input
return angle
In this example, there would be algorithms/formulas for taking the input and manipulating it into a number.
For example, we could take an input of "This is a sentence", and return the number of words, which would be 4. However, giving a sentence as our input is not random. And simply returning the number of words is not a very good algorithm. Now imagine we took a string as input ... "akdaloenankalktaldlt" and then returned the number of unique characters.. Okay, a bit better, but still not great.
Now imagine we take a long recording of the atmospheric noise of Earth. That input is unpredictable by humans unless you can track trillions of molecules simultaneously in the sky, and thus almost any algorithm can produce a random result. With a complex algorithm (such as observing variations, spikes, etc in noise, vibrations, temperature, etc) and returning a result, we end up with a random result. This is because even if the algorithm is defined, the input is completely random so there's no way to predict the next outcome - assuming the algorithm doesn't completely trivialize the random input.
Obviously I have simplified it a bit to explain it, and any algorithm you use should ensure a random data set still produces random results as well, but the input really should be "truly random":
For example, there is "pseudo random" and "true random" and a few other terms to refer to different types of random.
Pseudo random is used in programming languages all the time - Some versions of PHP for example use a combination of the current system time(), a unique id, a process ID, and some math...
This is problematic because if you can figure out the server's exact time and either the unique ID or the PID, you can bruteforce the algorithm to try to identify a "random" result in use, or the next random result. However, imagine if PHP's rand() used atmospheric noise in the function. Because it would be near impossible for a hacker to guess the randomness of Earth's atmospheric noise they would not be able to bruteforce their way into guessing the next random number or a randomly generated number already in use. This is because the noise is the "seed" that the algorithm uses to generate a random number. For PHP, there was a fairly common thing where if you used the seed "1024" and then used rand(0,100), you would get a pattern of 97, 97, 39, 77, 93 ...etc. Even though it's supposed to be random, because you know the seed of 1024, you could re-generate the "randomness". This is the downfall of algorithms... the input decides the output. This is why a "truly random" input such as atmospheric noise, CPU processing times, temperatures, lava lamps, etc are so important for generating random results - which can be numbers, cryptographic keys, etc.
So, if you can take a random input (examples: atomic decay in nuclear material, lava lamp visuals, atmospheric noise, etc) then you can feed the random input into an algorithm to output a random number. You can still say you want a random number between 1 and 10 but instead of the algorithm just following hackable/discoverable inputs (like PHP's server time use in rand() ), you are using a completely random and unpredictable input to generate an output.
CloudFlare for example uses a wall of 100 lava lamps on a 24/7/365 video stream to take the randomness of the lava lamp blobs (and anyone else there in the video), feed screenshot data (input) into algorithms, and return completely random cryptographic results. Because nobody can predict the lava lamp blobs down to the milisecond, it's a lot more secure than CloudFlare just picking a random number or series of numbers to use for their crypto keys!