{'fraction_non_alphanumeric': 0.023809523809523808, 'fraction_numerical': 0.011904761904761904, 'mean_word_length': 5.162303664921466, 'pattern_counts': {'":': 0, '<': 0, '<?xml version=': 0, '>': 0, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
A true random number generator using ring oscillators and SHA-256 as post-processing

In cryptography, we often require sequences of numbers with unpredictable elements. Such sequences have to pass all known statistical tests for random sequences, e.g. NIST 800-22 test suite, Diehard, TestU01 or UC1. To hamper different attacks, random number generators should be implemented in the same chip as a cryptographic system using random numbers. It forces a designer to create a true random number generator purely digitally. The obtained sequences are biased and do not pass many statistical tests. Therefore an output of the random number generator should be subjected to a transformation called post-processing. In this paper a true random number generator consisted of several uniformly sampled ring oscillators and using hash function SHA-256 as post-processing, is presented. Both components are implemented in a single Field Programmable Gate Array (FPGA). We expect that the proposed solution, implemented in the same FPGA together with a cryptographic system, is more attack-resistant owing to many sources of randomness with significantly different nominal frequencies.