<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>Software-Hardware Random Numbers Generating Complex Based on Mobile Device</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Viktor Shynkarenko</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Denys Ostapets</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Artur Opriatnyi</string-name>
          <email>artur.opriatnyi@icloud.com</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Ukrainian State University of Science and Technologies</institution>
          ,
          <addr-line>Lazaryana Street 2, 49010 Dnipro</addr-line>
          ,
          <country country="UA">Ukraine</country>
        </aff>
      </contrib-group>
      <abstract>
        <p>The effectiveness of many modern technologies in such fields as statistics analysis, computer games, gambling, testing, computer graphics, simulation, cryptography, information security algorithms and any others depends on the quality of random number generating means. The article represents the development principles of the software - hardware pseudo and true random numbers generating complex based on using a mobile device. An analysis of entropy sources provided by mobile devices is submitted. The accelerometer, gyroscope, and magnetometer sensors of mobile device are chosen as entropy sources. The complex architecture and the TCP - connection based communication protocol between the complex parts have been developed. The total number of considered modes for generating pseudo and true random number sequences is six. The software of server, client and mobile parts of the complex is implemented. Research of pseudo and true random number sequences quality obtained in different modes using a statistical and visual tests suite is submitted. An analysis of the results and a comparison with the previously known ones is performed. Recommendations for using different generating modes are given.</p>
      </abstract>
      <kwd-group>
        <kwd>eol&gt;pseudorandom numbers</kwd>
        <kwd>PRN</kwd>
        <kwd>true random numbers</kwd>
        <kwd>TRN</kwd>
        <kwd>true random number generator</kwd>
        <kwd>TRNG</kwd>
        <kwd>pseudo random number generator</kwd>
        <kwd>PRNG</kwd>
        <kwd>mobile device</kwd>
        <kwd>entropy source</kwd>
        <kwd>accelerometer</kwd>
        <kwd>gyroscope</kwd>
        <kwd>magnetometer 1</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>1. Introduction</title>
      <p>Modern technologies widely use random number sequences in various fields – from simulation
modeling to cryptography. The effectiveness of many algorithms and systems used in these areas
depends on the quality of random number generation.</p>
      <p>
        There are two main approaches for obtaining random numbers [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ]:
•
•
      </p>
      <p>Generation of pseudorandom numbers (PRN) using special algorithms or tables.</p>
      <p>Use of special hardware devices that generate true random numbers (TRN).</p>
      <p>The PRN generation algorithm is a procedure that uses mathematical formulas or pre-calculated
values to create numerical sequences that may appear random at first glance. PRN generators can
produce many numbers in a short time and are deterministic, meaning that a certain sequence of
numbers can be reproduced later if the initial number in the sequence is known.</p>
      <p>
        Hardware devices for generating TRN use some form of noise signal (or entropy source). An
entropy source is a physical source of information whose output either appears random or becomes
random after applying a certain filtering/distillation process [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ].
      </p>
      <p>For many existing PRN generation algorithms, a significant challenge is ensuring their high
quality and unpredictability. The relatively high cost and limited speed of hardware devices for
TRN generation are the main obstacles to their widespread use. Thus, the presented work is
relevant.</p>
      <p>The purpose of the work is to research the quality of random number sequences obtained by
means of software–hardware true random number generator (TRNG) using different entropy
sources provided by mobile devices. Tasks to be solved in the work: analysis and selection of a
entropy source for a software–hardware generating complex of TRN provided by mobile devices;
architecture design of the software–hardware complex based on mobile devices for generating
random numbers; development of communication protocol between complex parts; software–
hardware complex implementation; analysis of the quality of random number sequences in TRN
and PRN modes using known sets of tests.</p>
      <p>By mobile devices, we will refer to smartphones, tablets, and other similar devices running
mobile operating systems.</p>
    </sec>
    <sec id="sec-2">
      <title>2. Entropy sources available in mobile devices</title>
      <p>
        The paper proposes using mobile device sensors as entropy sources. Sensors are devices used in
mobile devices to detect various aspects of the surrounding environment [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ]. Nowadays, there are
quite a few sensors available in smartphones, which are built-in and help the smartphone function.
Most of these sensors are designed to assess user experience. A random number generator that uses
the sensors of a modern mobile device can generate high-quality random bit sequences [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ]. The
main sensors in a smartphone that can be used for random number generation are shown on Figure
1.
      </p>
      <p>
        Motion sensors are used to monitor the movement of the device. These movements can include
tilt, shake, rotation, or oscillation [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ]. In [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ], data obtained from motion sensors and other various
types of sensors present on most boards used for IoT nodes are analyzed.
      </p>
      <p>
        An accelerometer is a device that measures the reaction force induced by acceleration or gravity
[
        <xref ref-type="bibr" rid="ref4">4</xref>
        ]. In mobile devices, accelerometers are mostly used for controlling the orientation of the image
on the screen (portrait or landscape mode). The work [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ] explores the possibility of implementing a
random number generator using data obtained from an accelerometer.
      </p>
      <p>
        A smartphone has two sensors that allow determining the physical orientation of the device – a
magnetometer sensor combined with an accelerometer sensor [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ]. These sensors are useful for
determining the device's physical position. For example, the geomagnetic sensor can be used in
combination with the accelerometer to determine the device's orientation relative to the magnetic
north pole [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ].
      </p>
      <p>
        A light sensor is a device that regulates the brightness level of the screen [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ]. It is available in
both inexpensive and expensive smartphones. Depending on the intensity of light, this sensor
controls the screen's brightness. In [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ], the authors demonstrated that the type of ambient light
measurements and sensor devices are sources of randomness.
      </p>
      <p>
        The gyroscope sensor is responsible for measuring the rotational speed around the device's axis
[
        <xref ref-type="bibr" rid="ref9">9</xref>
        ]. In [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ], a random number generator based on a gyroscope is proposed for drones.
      </p>
      <p>
        The barometer sensor is used to measure the surrounding environmental pressure [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ]. For
example, health apps on smartphones also use these sensors. Additionally, in the previously
mentioned work [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ], a random number generator based on barometer sensors was also considered.
      </p>
      <p>
        A magnetometer is a sensor that measures the magnetic field [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ]. There are two types of
magnetometers: stationary, which are used for measurements at fixed points, and mobile, which
are used in applications where movement detection is required.
      </p>
      <p>When selecting an entropy source for developing a random number generator based on a
mobile device, authors believe the following requirements should be considered:
•
•
•
•</p>
      <p>Sensor sensitivity.</p>
      <p>Availability of the sensor in most mobile devices.</p>
      <p>Data digitization speed.</p>
      <p>The number of bits obtained per measurement.</p>
      <p>The accelerometer, gyroscope, and magnetometer are present in almost all modern
smartphones, they are quite sensitive and allow for the acquisition of the highest number of bits
because they capture changes in three coordinates, whereas the light sensor and barometer capture
only a single value. Therefore, these sensors were chosen as the entropy source for the random
number generator.</p>
    </sec>
    <sec id="sec-3">
      <title>3. Complex architecture</title>
      <p>
        This work proposes the implementation of a software-hardware system that includes a random
number generator based on a mobile device and a server that provides clients with a convenient
software interface for generating random numbers. The system should generate sequences of
random (TRN) and pseudorandom (PRN) numbers. The PRN generator (PRNG) receives its seed
from the TRNG [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ].
      </p>
      <p>The following generating modes are offered:
•
•
generating of 32-bit unsigned TRN integers using entropy sources available in the mobile
device (accelerometer/gyroscope/magnetometer);
generating of 32-bit unsigned PRN integers, using hardware-generated seed (with
accelerometer/gyroscope/magnetometer).</p>
      <p>Thus, the total number of modes for generating number sequences is 6.</p>
      <p>The TCP protocol was chosen for data exchange between the mobile device and the server, as
well as between the server and clients. The structure and relationships between the elements of the
system are shown in Figure 2.</p>
      <p>
        A device running the iOS family of operating systems was chosen as the mobile device. For the
pseudorandom number generation algorithm, the BBS (Blum-Blum-Shub) algorithm was selected
due to its mathematical reliability and high entropy [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ].
      </p>
      <p>A special protocol has been developed to implement data exchange between complex elements.
The server must process 4 types of commands from the client: a command to set the generation
mode (along with a field that identifies the mode), a command to set the entropy source (along
with a field that identifies the entropy source), a command to generate a seed for the
pseudorandom number generator, and a command to generate a random number modulo (along
with a field specifying the modulus).</p>
      <p>In response to these commands, 4 types of replies are expected. Among them, two types of
errors exist: an error indicating an incorrect command format and an error indicating the absence
of a connection with the mobile device. Additionally, two types of successful command execution
responses exist: a response indicating the successful execution of the command and a response that
returns the generated random number. The random number generating requests between the client
and the server are presented in Table 1. The random number generating responses between the
client and the server are presented in Table 2.
Random number
generation</p>
      <sec id="sec-3-1">
        <title>Request identifier SM (set mode)</title>
        <p>GR
(generate
random)</p>
      </sec>
      <sec id="sec-3-2">
        <title>Possible parameters</title>
      </sec>
      <sec id="sec-3-3">
        <title>Parameter 1 –</title>
        <p>generator mode
identifier:
0 – true random
number generator,
Parameter 2 –
entropy source
identifier:
0 – accelerometer,</p>
      </sec>
      <sec id="sec-3-4">
        <title>1 – gyroscope,</title>
      </sec>
      <sec id="sec-3-5">
        <title>1 – pseudorandom</title>
        <p>number generator 2 – magnetometer
modulus (1 to 232-1)</p>
        <p>
          For the implementation of the server and client parts of the system, the Go programming
language was chosen [
          <xref ref-type="bibr" rid="ref13">13</xref>
          ]. JetBrains Goland [
          <xref ref-type="bibr" rid="ref14">14</xref>
          ] was selected as the development environment for
both the server and client parts. For the mobile device software development, the Dart language
was chosen, which was created for convenient user interface development [
          <xref ref-type="bibr" rid="ref15">15</xref>
          ], along with the
Flutter framework for mobile operating system development [
          <xref ref-type="bibr" rid="ref16">16</xref>
          ]. Android Studio [
          <xref ref-type="bibr" rid="ref17">17</xref>
          ] was selected
as the development environment for the mobile device, together with the Flutter plugin for
software development using the Flutter framework. A simple console program has been developed
as a client application, which establishes a TCP connection with the server and makes it possible to
execute user commands entered from the keyboard.
        </p>
      </sec>
    </sec>
    <sec id="sec-4">
      <title>4. Research of the quality of random numbers generated by the complex</title>
      <p>
        Among the possible methods for testing the randomness of number sequences, authors chose to
use the NIST test suite [
        <xref ref-type="bibr" rid="ref18">18</xref>
        ] and a visual graphical test [
        <xref ref-type="bibr" rid="ref19">19</xref>
        ]. The NIST test suite consists of 15 tests
designed to assess the randomness of binary sequences of arbitrary length generated by both
hardware and software random and pseudorandom number generators. The NIST test suite
includes the following tests [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ]:
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
      </p>
      <p>The Frequence (Monobit) Test.</p>
      <p>Frequency Test within a Block.</p>
      <p>The Runs Test.</p>
      <p>Tests for the Longest-Run-of-Ones in a Block.</p>
      <p>The Binary Matrix Rank Test.</p>
      <p>The Discrete Fourier Transform (Spectral) Test.</p>
      <p>The Non-overlapping Template Matching Test.</p>
      <p>The Overlapping Template Matching Test.</p>
      <p>Maurer’s “Universal Statistical” Test.</p>
      <p>The Linear Complexity Test.</p>
      <p>The Serial Test.</p>
      <p>The Approximate Entropy Test.</p>
      <p>The Cumulative Sums (Cusums) Test.</p>
      <p>The Random Excursions Test.</p>
      <p>The Random Excursions Variant Test.</p>
      <p>
        The NIST Randomness Test Suite program [
        <xref ref-type="bibr" rid="ref18">18</xref>
        ] was used to verify the sequences by the NIST
test suite. As a visual graphical test, it is proposed to generate an image where the color of each
pixel represents a bit of the random sequence. Black color represents 1, and white represents 0. If
the sequence of bits is random, there should be no visible patterns in the image, and the image
should look like "noise" – a chaotic arrangement of black and white pixels. If there are repeating
patterns, this may indicate that the sequence is not random. For the experiments, a laboratory set
based on a MacBook Pro M3 (for running the client and server) and iPhone 14 is used.
      </p>
      <p>Computer specifications:
•
•
•
processor: Apple M3 Pro (12-core CPU, 18-core GPU).</p>
      <p>RAM: 36GB.</p>
      <p>operating system: macOS Sequoia (version 15.2).</p>
      <p>
        All three sensor coordinates are converted into integers, which represent a bit sequence of
coordinates according to the IEEE 754 standard [
        <xref ref-type="bibr" rid="ref20">20</xref>
        ]. Based on a series of experiments, it has been
determined that the best randomness is achieved by the method of generating random numbers,
which uses the XOR operation on the 4 least significant bits for the accelerometer, the XOR
operation on the 16 least significant bits for the gyroscope, and the XOR operation on the 8 least
significant bits for the magnetometer.
      </p>
      <p>To verify the quality of the numbers generated by the developed system, 2000 numbers modulo
1024 were generated for all 6 possible mode variants. The results of testing the generated sequences
of numbers using the NIST test suite showed that the obtained sequences in all 6 modes have
characteristics of randomness. The testing was carried out using 10 tests from the set. For
Overlapping Template Matching Test, Maurer’s “Universal Statistical” Test, Linear Complexity
Test, Random Excursions Test and Random Excursions Variant Test generated sequences don’t
meet the requirements of length.</p>
      <p>The approximate time to generate 1000 numbers on the used setup was as follows: for TRN
using the accelerometer, 27 minutes 10 seconds; for TRN using the gyroscope, 7 minutes 9 seconds;
for TRN using the magnetometer, 13 minutes 32 seconds; for PRN, 66.2 milliseconds.</p>
      <p>
        The results of testing the randomness of numbers generated using a mobile device in this work
can also be compared with the results obtained in work [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ]. In the specified work, the
characteristics of the randomness degree of numbers generated by a device that uses the noise of a
semiconductor device (Zener diode) were obtained. From the obtained results, it is clear that the
generating of random numbers using accelerometer, gyroscope and magnetometer sensors
available in mobile devices gives no worse results than the generating of random numbers based on
a device that uses the noise of a Zener diode [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ].
      </p>
    </sec>
    <sec id="sec-5">
      <title>5. Conclusions</title>
      <p>The developed software–hardware complex allows to obtain PRN and TRN sequences using the
accelerometer, gyroscope, and magnetometer sensors of a mobile device as a source of entropy.
Based on the results of the experiments, it has been determined that the PRN and TRN sequences
obtained in all 6 modes meet the randomness requirements. In cases where high performance is
required, the PRNG with the BBS algorithm and a true random seed can be used, as it produces
results of similar quality to the TRNG based on the mobile device sensors. Also, sequences of
numbers obtained using the accelerometer, gyroscope, and magnetometer sensors of a mobile
device have no worse randomness characteristics than sequences obtained using the noise of a
semiconductor device (Zener diode) as a source of entropy.</p>
      <p>a)
b)
c)
Figure 3: Bitmap for TRN (generated by: a – accelerometer, b – gyroscope, c – magnetometer)
a)
b)
c)
Figure 4: Bitmap for PRN (seed generated by: a – accelerometer, b – gyroscope, c – magnetometer)
The authors have not employed any Generative AI tools.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <given-names>D.</given-names>
            <surname>Ostapets</surname>
          </string-name>
          ,
          <string-name>
            <given-names>V.</given-names>
            <surname>Dziuba</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.</given-names>
            <surname>Ivin</surname>
          </string-name>
          ,
          <article-title>Hardware random numbers generator based on microcontroller</article-title>
          ,
          <source>MATEC Web of Conferences</source>
          <volume>390</volume>
          ,
          <issue>04002</issue>
          (
          <year>2024</year>
          ). doi:
          <volume>10</volume>
          .1051/matecconf/202439004002.
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <given-names>A</given-names>
            <surname>Statistical Test</surname>
          </string-name>
          <article-title>Suite for Random and Pseudorandom Number Generators for Cryptographic Applications</article-title>
          . URL: https://nvlpubs.nist.gov/nistpubs/legacy/sp/nistspecialpublication800-
          <fpage>22r1a</fpage>
          .pdf.
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          <article-title>[3] Introduction to Randomness and Random Numbers</article-title>
          . URL: https://www.random.org/randomness/.
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          <article-title>[4] Motion sensors</article-title>
          . URL: https://developer.android.com/develop/sensors-andlocation/sensors/sensors_motion.
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <given-names>C.</given-names>
            <surname>Hennebert</surname>
          </string-name>
          ,
          <string-name>
            <given-names>H.</given-names>
            <surname>Hossayni</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Lauradoux</surname>
          </string-name>
          ,
          <article-title>Entropy harvesting from physical sensors</article-title>
          ,
          <source>Sixth ACM Conference on Security and Privacy in Wireless and Mobile Networks</source>
          (
          <year>2013</year>
          )
          <fpage>149</fpage>
          -
          <lpage>154</lpage>
          . doi:
          <volume>10</volume>
          .1145/2462096.2462122.
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <string-name>
            <given-names>J.</given-names>
            <surname>Voris</surname>
          </string-name>
          ,
          <string-name>
            <given-names>N.</given-names>
            <surname>Saxena</surname>
          </string-name>
          ,
          <string-name>
            <given-names>T.</given-names>
            <surname>Halevi</surname>
          </string-name>
          , Accelerometers and Randomness: Perfect Together,
          <source>Fourth ACM Conference on Wireless Network Security</source>
          (
          <year>2011</year>
          )
          <fpage>115</fpage>
          -
          <lpage>126</lpage>
          . doi:
          <volume>10</volume>
          .1145/1998412.1998433.
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          <article-title>[7] Position sensors</article-title>
          . URL: https://developer.android.com/develop/sensors-andlocation/sensors/sensors_position.
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8]
          <string-name>
            <given-names>A.</given-names>
            <surname>Suciu</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Lebu</surname>
          </string-name>
          ,
          <string-name>
            <given-names>K.</given-names>
            <surname>Marton</surname>
          </string-name>
          ,
          <source>Unpredictable Random Number Generator Based on Mobile Sensors, IEEE International Conference on Intelligent Computer Communication and Processing</source>
          (
          <year>2011</year>
          ). doi:
          <volume>10</volume>
          .1109/ICCP.
          <year>2011</year>
          .
          <volume>6047913</volume>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          <article-title>[9] Environment sensors</article-title>
          . URL: https://developer.android.com/develop/sensors-andlocation/sensors/sensors_environment.
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [10]
          <string-name>
            <given-names>M. P.</given-names>
            <surname>Pawlowski</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Jara</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Ogorzalek</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A. J.</given-names>
            <surname>Jara</surname>
          </string-name>
          ,
          <article-title>Harvesting Entropy for Random Number Generation for Internet of Things Constrained Devices Using On-Board Sensors (</article-title>
          <year>2015</year>
          ) doi: 10.3390/s151026838.
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [11]
          <string-name>
            <given-names>S.M.</given-names>
            <surname>Cho</surname>
          </string-name>
          ,
          <string-name>
            <given-names>E.</given-names>
            <surname>Hong</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.H.</given-names>
            <surname>Seo</surname>
          </string-name>
          ,
          <article-title>Random Number Generator Using Sensors for Drone</article-title>
          , IEEE Access (
          <year>2020</year>
          ) doi: 10.1109/ACCESS.
          <year>2020</year>
          .
          <volume>2972958</volume>
          .
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          [12]
          <string-name>
            <given-names>L.</given-names>
            <surname>Blum</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Blum</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Shub</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A Simple</given-names>
            <surname>Unpredictable Pseudo-Random Number</surname>
          </string-name>
          <string-name>
            <surname>Generator</surname>
          </string-name>
          ,
          <source>SIAM Journal on Computing</source>
          (
          <year>1986</year>
          )
          <fpage>364</fpage>
          -
          <lpage>383</lpage>
          . doi:
          <volume>10</volume>
          .1137/0215025.
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          [13]
          <article-title>Build simple, secure, scalable systems with Go</article-title>
          . URL: https://go.dev.
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          [14]
          <string-name>
            <surname>Goland - Go Productive</surname>
          </string-name>
          . URL: https://www.jetbrains.com/go/.
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          [15]
          <article-title>Paint your UI to life</article-title>
          . URL: https://dart.dev.
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          [16]
          <article-title>Build for any screen</article-title>
          . URL: https://flutter.dev.
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          [17]
          <string-name>
            <given-names>Android</given-names>
            <surname>Studio</surname>
          </string-name>
          . URL: https://developer.android.com/studio.
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          [18]
          <string-name>
            <given-names>NIST</given-names>
            <surname>Randomness</surname>
          </string-name>
          <article-title>Testsuite</article-title>
          . URL: https://github.com/stevenang/randomness_testsuite.
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          [19]
          <string-name>
            <given-names>B.</given-names>
            <surname>Allen</surname>
          </string-name>
          ,
          <article-title>Rseudo-Random vs</article-title>
          .
          <source>True Random</source>
          . URL: https://boallen.com/random-numbers.html.
        </mixed-citation>
      </ref>
      <ref id="ref20">
        <mixed-citation>
          [20]
          <article-title>IEEE Standard for Binary Floating-Point Arithmetic (IEEE Std 754-</article-title>
          <year>1985</year>
          ). URL: https://www.ime.unicamp.br/~biloti/download/ieee_
          <fpage>754</fpage>
          -
          <lpage>1985</lpage>
          .pdf.
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>