Client-side · true random number generator
Randomness,
harvested from the room.
A hyperchaotic coupled chaotic-map lattice, seeded by your microphone and amplified into unpredictable bits — entirely in this tab. No audio, sample, or number ever leaves your device.
Idle — click to start harvesting entropy.
Entropy source
Microphone input
Lattice state (8 cells)
Throughput
0 bit/s
Numbers generated
0
Live output
Latest 256-bit number
"Hybrid" XORs the conditioned TRNG output with crypto.getRandomValues — standard defense-in-depth so output is never weaker than your platform's own CSPRNG.
A 256-bit AES key derived from the harvested entropy above. Copy it now: it will not be shown again, and anything encrypted with it cannot be recovered if the key is lost.
Byte-value distribution (last 65,536 bytes)
Validation
Randomness test battery
A simplified NIST SP 800-22–style battery, run continuously over the most recent output. p ≥ 0.01 is a pass at the standard significance level.
Shannon entropy
—
Min-entropy estimate (SP 800-90B)
—
How it works
Chaos amplifies weak entropy into strong entropy.
Ambient sound is quantized to bytes and fed into an 8-cellcoupled chaotic map lattice (CCML): each cell runs a tent map with control parameter α ≈ 2 (maximal chaos), diffusing outward to its neighbors every round. Small, structured, even near-silent input gets amplified by the map's sensitivity to initial conditions — the same butterfly-effect property that makes weather unpredictable past a few days.
Every 4 rounds, the 8 cell states are extracted as 64-bit words, cross-mixed with a 32-bit rotate-and-XOR, and concatenated into a 256-bit number. That raw output is then whitened with SHA-256 — the NIST SP 800-90B–recommended step before treating noise-source output as cryptographic-quality — and optionally combined with your browser's own CSPRNG.
Adapted from amanyagami/Random-Number-Generation, a 2021 research prototype. Two correctness issues in the original were fixed for this port: the tent map was defined but never actually applied in the diffusion loop, and the output extraction (int(x·1e8) mod 2⁶⁴) only ever filled ~27 of 64 bits per word, leaving fixed zero-bands in the output. Extraction here instead reads each cell's raw IEEE-754 bit pattern, using the full double-precision mantissa.
Tent map f(x), α ≈ 2
Lyapunov exponent λ(α) = ln(α)
Privacy
Nothing leaves this tab. Audio is read via the Web Audio API and processed by an AudioWorklet and a Worker, both running locally; no network request is ever made with your audio, the generated numbers, or anything derived from them. Closing this tab or clicking "Enable microphone" again discards everything. If the microphone is unavailable or denied, the page falls back to a clearly weaker pointer-motion entropy source instead of failing outright.