Atmospheric noise and random number generation java

I was interested to learn how atmospheric noise can be used to generate true random numbers. I know that RANDOM.ORG does this, but they (of course) do not explain what a process is and how it can be implemented. I would like to know how this process works and how it can be implemented in java. I looked through this article, but this is for .net, so I do not understand. I also reviewed RANDOM.ORG's article on true randomness. If someone can give me a general idea of ​​this, and how this can be implemented, it would be very helpful.

+6
source share
4 answers

You need to connect a radio to your car (for example, this one: Philips FM1236 / F TV tuner / FM radio / PCI card video card).

Connect it to a free PCI slot, you can test its operation using some audio device (for example, VLC Player).

Then you tune it to the frequency of no sending and connect your program to the device that represents it in order to make an audio recording (the correct way to do this depends on the card you use, but this will help: http://docs.oracle.com/javase/tutorial/ sound / capturing.html )

Then you process the audio recording in the simplest way: store it as a wave on your disk and read it by byte for each byte.

+4
source

Most likely, if you bought a computer in the last year, it has a real random number generator built directly into the CPU. This became available when Intel began shipping its Core and Xeon processors with Ivy Bridge > processors in April 2012.

There's a great article on the IEEE Spectrum that describes how Intel's digital random number generator works. They basically tied two NOT gates into a loop, creating an unpredictable pattern that settles to state 0 or 1 due to random effects of thermal noise. Thermal noise is just random atomic vibrations, which is pretty much the same basic physical phenomenon that RANDOM.ORG uses when it displays “atmospheric noise”.

For a truly in-depth analysis of Intel RNG and its product quality, see this PDF document from Cryptographic Research , especially on page 7.

Intel has added a new x86 instruction called RDRAND , which allows programs to directly extract these hardware random numbers. Starting with Java 7, the JVM has not yet added native support for this instruction (if it ever will be).

However, you can use RDRAND from Java using JNI. This is the approach I took with the drnglib project. For instance:

 DigitalRandom random = new DigitalRandom(); System.out.println(random.nextInt()); 

The nextInt() method is implemented as an internal JNI call that calls RDRAND. Here's the appropriate call stack:

RDRAND performance is very good. Using drnglib with eight threads yields ~ 760 MB / s of random data.

+6
source

On the random.org website:

At the end of 2009, RANDOM.ORG underwent a major restructuring in response to the growing number of customers and their need for good reliability and performance. Currently, there is a distributed configuration in which several nodes in different geographical locations generate randomness, statistically test it and then transmit distilled random bits to the cloud hosting service from which the RANDOM.ORG services are launched. This new architecture enhances the reliability as well as the performance of the service and helps make RANDOM.ORG suitable for the serious applications (such as lottery drawings) that are now offered. Trying and true, random numbers are still generated by atmospheric noise, but the hardware and software used today is far from the $ 10 recipient from Radio Shack, who started it all in 1997.

They do not have images of nodes that measure atmospheric noise, but they have pictures of nodes of radio noise.

+2
source

Wikipedia has an interesting page called Hardware Random Number Generators . Check this. Very well written and with useful links to different manufacturers. However, some of their products are not cheap.

+1
source

Source: https://habr.com/ru/post/902579/


All Articles