# STRIX ### Satellite True Random Information eXtractor A portable wireless True Random Number Generator built on an Arduino MKR Vidor 4000. ## Planned Design Entropy comes from FPGA ring oscillators whose sampled timing jitter is XOR-combined into output bits, with no pseudo-random post-processing. A SAMD21 serves the results over WiFi and USB. - Separate stream per entropy source - Raw and processed output modes, with a von Neumann extractor that can be toggled per output path - On-device health tests (NIST SP 800-90B repetition count and adaptive proportion) - Live statistics: bias, z-score, random walk and autocorrelation - Configurable random-walk / majority-vote bias amplifier ## Set Up Dev Environment Windows: 1. Install Arduino IDE from here or via chocolatey: `choco install arduino` 2. Install [Intel Quartus Lite](https://www.intel.com/content/www/us/en/software-kit/825278/intel-quartus-prime-lite-edition-design-software-version-23-1-1-for-windows.html). In the list of devices select `Cyclone 10 LP device support` ## FPGA Development - Intel Quartus - Open Project > select `strix.qpf` from the `fpga/src` directory in this repo. ## MCU Development - Arduino IDE - Boards Manager > Install 'Arduino SAMD Boards' (search for 'Vidor 4000') - Library Manager > Install - VidorPeripherals - WiFiNINA (1.8.5, not higher) - Open Project > `strix.ino` from the `arduino/strix` directory in this repo ## TODO - Implement ring-oscillator entropy generators on the MKR Vidor 4000 FPGA - Fetch random numbers from the FPGA via SPI - Serve random numbers via USB - Make Vidor pairable via Bluetooth/Wifi - serve randomness wirelessly - battery pack - 3D case --- ## [Development Notes](NOTES.md)