**Algorithm 1** The Proposed Random Bit Generator.

**Data:** Initialize initial conditions: *x*0, *y*0, *z*0, parameter values: *rx*,*ry*,*rz*, *βx*, *βy*, Bit subsequences *b*0, *d*<sup>0</sup> and bitstream length: .

**for** i=1: **do** *xi* = *rx* · mod (*xi*−1, 1)(<sup>1</sup> − mod (*xi*−1, 1) <sup>2</sup>*β<sup>x</sup>* <sup>−</sup> *<sup>x</sup>*<sup>2</sup> *i*−1 *βx yi* <sup>=</sup> *ry* · mod (*yi*−1, 1)(<sup>1</sup> <sup>−</sup> mod (*yi*−1, 1))  <sup>2</sup>*β<sup>y</sup>* <sup>−</sup> *<sup>y</sup>*<sup>2</sup> *i*−1 *βy* **if** mod (*xi* + *yi*, 1) ≤ mod (106(*xi* · *yi*), 1) **then** *bi* = 0 **else** *bi* = 1 **end if if** mod (106(*xi* + *yi*, 1)) ≤ mod (*xi* · *yi*, 1) **then** *di* = 0 **else** *di* = 1 **end if** % Perform bit reversal for every 10 bits **if** mod (*i*, 10) = 0 **then** *z i* 10 = *rzz <sup>i</sup>* <sup>10</sup> <sup>−</sup>1(<sup>1</sup> <sup>−</sup> *<sup>z</sup> <sup>i</sup>* <sup>10</sup> <sup>−</sup>1) **if** *z <sup>i</sup>* 10 ≤ mod (*xi* + *yi*, 1) **then** *<sup>b</sup>*(*i*−9):*<sup>i</sup>* <sup>=</sup> *bi*:−1:(*i*−9) **else** *<sup>d</sup>*(*i*−9):*<sup>i</sup>* <sup>=</sup> *di*:−1:(*i*−9) **end if end if end for**

bitstream= *XOR*(*b*, *d*)

The proposed technique was tested using the National Institute of Standards and Technology (NIST) statistical test package [38]. The suite consists of 15 tests that are used to test the randomness of a sequence. For each test, a *p*-value is calculated. If the value exceeds a significance value *a*, the test is passed. A set of 50 bit sequences of 106 bits each was considered, for parameter values *β<sup>x</sup>* = *β<sup>y</sup>* = 40, *rx* = *ry* = *rz* = 4 and arbitrarily chosen initial values. The results are shown in Table 1, where it can be seen that all the tests are passed. For tests that have multiple case runs, only the last *p*-value is printed.

In addition, Figure 11 depicts the autocorrelation and cross-correlation plots for a bit sequence of length 105, generated for parameter values *β<sup>x</sup>* = *β<sup>y</sup>* = 30, *rx* = *ry* = *rz* = 4. For pseudo-random sequences, the auto-correlation should have a delta like form, and the cross-correlation should be close to zero [3,13], which is verified in Figure 11a. For the cross-correlation, two bit sequences were generated for the same parameter values and initial conditions, with the only difference taken as follows: In (b), the initial condition of the first map was chosen as *x*<sup>0</sup> = 0.1 and *x* <sup>0</sup> = *<sup>x</sup>*<sup>0</sup> + <sup>10</sup><sup>−</sup>16. In (c), the parameter of the first map is chosen as *rx* = 4 and *r <sup>x</sup>* = <sup>4</sup> − <sup>10</sup><sup>−</sup>15. In (d), the parameter of the first map is chosen as *β<sup>x</sup>* = 40 and *β <sup>x</sup>* = 40 + 10<sup>−</sup>14.

As for the key space, the proposed technique utilizes two modified logistic maps and one logistic map, each with different initial conditions and parameters. Thus, in the case of the floating-point data type with *double* precision [39], there are overall eight key parameters, so the upper bound for the key space is (<sup>4</sup> − 3.6)108·<sup>16</sup> = 2210−110128 = 2210127 ≈ 22(103)42.3 ≈ <sup>2</sup>22423 = 2425. This is higher than the value of 2<sup>100</sup> that is required to resist brute force attacks, as reported in [40].


**Table 1.** NIST statistical test results, with *a* = 0.01.

**Figure 11.** (**a**) auto-correlation; (**b**) cross-correlation, with the initial condition of the first map being chosen as *x*<sup>0</sup> = 0.1 and *x* <sup>0</sup> = *<sup>x</sup>*<sup>0</sup> + <sup>10</sup>−16; (**c**) cross-correlation, with the parameter of the first map is chosen as *rx* = 4 and *r <sup>x</sup>* <sup>=</sup> <sup>4</sup> <sup>−</sup> <sup>10</sup>−15; (**d**) cross-correlation, with the parameter of the first map being chosen as *β<sup>x</sup>* = 40 and *β <sup>x</sup>* = 40 + 10<sup>−</sup>14.
