This repository was a testbench for my bachelor's degree project.
Since then, the proof of concept TRNG from VLF radio noise has been published in an IEEE paper.
@INPROCEEDINGS{11208358,
author={Barbu, Matei and Trancă, Dumitru-Cristian and Stancu, Florin-Alexandru},
booktitle={2025 24th RoEduNet Conference: Networking in Education and Research (RoEduNet)},
title={True Random Number Generation from Very Low Frequency Radio Noise},
year={2025},
volume={},
number={},
pages={1-6},
keywords={Frequency modulation;Statistical analysis;Noise;Pipelines;White noise;Entropy;Standards;Random number generation;Stress;Testing;TRNG;VLF;FM;Radio Noise;FIPS 140–2},
doi={10.1109/RoEduNet68395.2025.11208358}}
Unmaintained. Decision justified for the following reasons:
-
The main source site, http://abelian.org, has been down for a long time.
-
Better testing infrastructure could be made over more performant clients.
Such as KiwiClient.
-
The proof of concept paper has been published.
This project was tested only with the Docker image I provided. You will find a Bash script for setting up and running a Docker container that can interact with a RTL-SDR device.
- Make sure Docker is installed on your host machine.
- Clone this repository to your host machine.
- Run start script and attach to the container.
- Do whatever data acquisition and signal processing you like.
$ git https://github.com/mateibarbu19/trng-methods
$ cd trng-methods
$ ./start.sh
$ docker attach test_trng
(.venv) tester@test_trng:~/app$ ./tests/test.shBy default, Docker containers are run with limited permissions for security
reasons. You can use the --privileged flag to give the Docker container full
access to the host's devices, but this can be a security risk.
I used a more targeted approach, which uses the --device flag to give the
Docker container access to a specific device on the host.
If you're experiencing issues, it could be a permissions problem on the host side. When Docker tries to pass through the USB device, the current user might not have the necessary permissions to access it.
Here are some steps you can take to resolve this issue on a Linux host:
-
Find the vendor and product ID of your RTL-SDR dongle:
$ lsusb | grep RTL2838 # query for the device Bus 001 Device 003: ID 0bda:2838 Realtek Semiconductor Corp. RTL2838 DVB-T
In this case, the vendor ID is
0bdaand the product ID is2838. -
Create a new
udevrule for the device. This will set the permissions for the device so that all users can read from and write to it. Create a file in/etc/udev/rules.d/and put the following line in it:SUBSYSTEM=="usb", ATTRS{idVendor}=="0bda", ATTRS{idProduct}=="2838", MODE:="0666"Replace
0bdaand2838with the vendor and product ID of your device. TheMODE=:"0666"sets the permissions so that all users can read from and write to the device. -
Reload the udev rules with the following command:
sudo udevadm control --reload-rules sudo udevadm trigger
You can read more about this issue here.