FUCKGOATS: Some Thoughts and Minimal Tests

Posted 2018-06-18

The FUCKGOATS is an auditable True Random Number Generator produced by the infamous NSA. What does this mean?

Auditable

By not inspecting the tools on which your life and reputation rely, you are, without question, placing your trust in the manufacturers of those tools. Such trust is unavoidable, as survival is a joint effort, and is even desirable, the alternative being a lonely and painful solipsism. But not all forms of trust are equal; there is trust given consciously and willingly, and that given otherwise.

This distinction, of implicit and explicit trust, is a prime determinant in the status of master or slave, or along similar lines, of personhood and nonpersonhood. For we may take a reasonable measure of personhood, being true individuation of will, to be the degree to which implicit trust is avoided, and deliberate trust is achieved. Or on the flip side, the degree to which one is enslaved by a power may be measured by the level of implicit trust one is forced to place in that power, usually by threat of violence.

The implications quickly follow. For instance, we see that existence in the web of trust is a mandatory component of personhood, as without it you are operating with implicit trust, not trust by choice. That is to say, without the web of trust, the very possibility of true choice simply disappears.

And for another implication, you may see the existence of technologies which you must use but cannot trust (and no, it being "open source" is besides the point: do you trust someone who has understood the code?), as clear evidence of your slavery. It's that simple.

So as to the point of auditability, we understand that, any tool in which we do not place our conscious, informed trust (by trust in ourselves or through a trusted other), is a tool which amplifies our slavery. For those who aspire to personhood, the ability to audit a tool is an atomic and effective means to personal development.

And to those who say, "But esthlos, certainly it's not possible to place conscious trust in everything; I don't place trust in the asteroid belt that it will not hurl a meteor in my path tomorrow," note that you are correct, though missing the point: the degree to which your trust is explicit delimits the power of your will. Human will is somewhat limited, at present. (" Work is of two kinds: first, altering the position of matter at or near the earth's surface relatively to other such matter; second, telling other people to do so.")

True Random Number Generator

Vaguely, a computer might be said to have a true random number generator if the output of that generator cannot be predicted given its previous outputs and the entire state of the computer. This is directly opposed to psuedorandom number generators, whose output can be predicted (usually exactly) on the basis of its history and the computer state (that is, the generation is algorithmic). To be clear, when we say "predicted", we don't mean exactly, but with probability better than chance.

As is excellently explained, the existence of a source of cryptographic entropy is vital to individuation and personhood, along similar lines the auditability above.

Show Me The Facts

Though an iron-level audit of the FUCKGOATS is beyond my current ability, auditing the output is easy. In fact, the entire use of the thing is a pleasure: just plug it in, and read bits from it:

dd iflag=fullblock if=/dev/ttyUSB0 bs=1K count=102400 of=fg.bin

No firmware, drivers, or other nonsense: what a relief!

The ent utility tests for what might be most accurately called the information density of its input. Here's what it thinks of fg.bin:

Entropy = 7.999998 bits per byte.

Optimum compression would reduce the size
of this 104857600 byte file by 0 percent.

Chi square distribution for 104857600 samples is 269.30, and randomly
would exceed this value 25.75 percent of the times.

Arithmetic mean value of data bytes is 127.5095 (127.5 = random).
Monte Carlo value for Pi is 3.141683698 (error 0.00 percent).
Serial correlation coefficient is -0.000048 (totally uncorrelated = 0.0).

As for dieharder:

#=============================================================================#
#            dieharder version 3.31.1 Copyright 2003 Robert G. Brown          #
#=============================================================================#
   rng_name    |           filename             |rands/second|
 file_input_raw|                          fg.bin|  6.11e+07  |
#=============================================================================#
        test_name   |ntup| tsamples |psamples|  p-value |Assessment
#=============================================================================#
   diehard_birthdays|   0|       100|     100|0.54358111|  PASSED  
      diehard_operm5|   0|   1000000|     100|0.07037446|  PASSED  
  diehard_rank_32x32|   0|     40000|     100|0.26716133|  PASSED  
    diehard_rank_6x8|   0|    100000|     100|0.25098818|  PASSED  
   diehard_bitstream|   0|   2097152|     100|0.03656758|  PASSED  
        diehard_opso|   0|   2097152|     100|0.00239162|   WEAK   
        diehard_oqso|   0|   2097152|     100|0.20246720|  PASSED  
         diehard_dna|   0|   2097152|     100|0.01032017|  PASSED  
diehard_count_1s_str|   0|    256000|     100|0.14504447|  PASSED  
diehard_count_1s_byt|   0|    256000|     100|0.04346282|  PASSED  
 diehard_parking_lot|   0|     12000|     100|0.19200425|  PASSED  
    diehard_2dsphere|   2|      8000|     100|0.39891032|  PASSED  
    diehard_3dsphere|   3|      4000|     100|0.48542674|  PASSED  
     diehard_squeeze|   0|    100000|     100|0.33472292|  PASSED  
        diehard_sums|   0|       100|     100|0.30085025|  PASSED  
        diehard_runs|   0|    100000|     100|0.99751791|   WEAK   
        diehard_runs|   0|    100000|     100|0.57012941|  PASSED  
       diehard_craps|   0|    200000|     100|0.68010118|  PASSED  
       diehard_craps|   0|    200000|     100|0.17918854|  PASSED  
 marsaglia_tsang_gcd|   0|  10000000|     100|0.00000000|  FAILED  
 marsaglia_tsang_gcd|   0|  10000000|     100|0.00000000|  FAILED  
         sts_monobit|   1|    100000|     100|0.79478018|  PASSED  
            sts_runs|   2|    100000|     100|0.97291823|  PASSED  
          sts_serial|   1|    100000|     100|0.38448403|  PASSED  
          sts_serial|   2|    100000|     100|0.99929253|   WEAK   
          sts_serial|   3|    100000|     100|0.39921137|  PASSED  
          sts_serial|   3|    100000|     100|0.10097663|  PASSED  
          sts_serial|   4|    100000|     100|0.45707791|  PASSED  
          sts_serial|   4|    100000|     100|0.82096272|  PASSED  
          sts_serial|   5|    100000|     100|0.44969349|  PASSED  
          sts_serial|   5|    100000|     100|0.60287297|  PASSED  
          sts_serial|   6|    100000|     100|0.52825100|  PASSED  
          sts_serial|   6|    100000|     100|0.92793644|  PASSED  
          sts_serial|   7|    100000|     100|0.95060736|  PASSED  
          sts_serial|   7|    100000|     100|0.52448800|  PASSED  
          sts_serial|   8|    100000|     100|0.76509476|  PASSED  
          sts_serial|   8|    100000|     100|0.82820895|  PASSED  
          sts_serial|   9|    100000|     100|0.07769700|  PASSED  
          sts_serial|   9|    100000|     100|0.88497857|  PASSED  
          sts_serial|  10|    100000|     100|0.57704537|  PASSED  
          sts_serial|  10|    100000|     100|0.62145501|  PASSED  
          sts_serial|  11|    100000|     100|0.09353924|  PASSED  
          sts_serial|  11|    100000|     100|0.07304953|  PASSED  
          sts_serial|  12|    100000|     100|0.42271948|  PASSED  
          sts_serial|  12|    100000|     100|0.74765858|  PASSED  
          sts_serial|  13|    100000|     100|0.62853625|  PASSED  
          sts_serial|  13|    100000|     100|0.85367143|  PASSED  
          sts_serial|  14|    100000|     100|0.18879689|  PASSED  
          sts_serial|  14|    100000|     100|0.97272781|  PASSED  
          sts_serial|  15|    100000|     100|0.98723682|  PASSED  
          sts_serial|  15|    100000|     100|0.08419882|  PASSED  
          sts_serial|  16|    100000|     100|0.76081543|  PASSED  
          sts_serial|  16|    100000|     100|0.75893685|  PASSED  
         rgb_bitdist|   1|    100000|     100|0.17135399|  PASSED  
         rgb_bitdist|   2|    100000|     100|0.28925726|  PASSED  
         rgb_bitdist|   3|    100000|     100|0.95616928|  PASSED  
         rgb_bitdist|   4|    100000|     100|0.32585309|  PASSED  
         rgb_bitdist|   5|    100000|     100|0.72943312|  PASSED  
         rgb_bitdist|   6|    100000|     100|0.21215751|  PASSED  
         rgb_bitdist|   7|    100000|     100|0.14075440|  PASSED  
         rgb_bitdist|   8|    100000|     100|0.28562129|  PASSED  
         rgb_bitdist|   9|    100000|     100|0.17273637|  PASSED  
         rgb_bitdist|  10|    100000|     100|0.63410649|  PASSED  
         rgb_bitdist|  11|    100000|     100|0.99758648|   WEAK   
         rgb_bitdist|  12|    100000|     100|0.33444739|  PASSED  
rgb_minimum_distance|   2|     10000|    1000|0.45413674|  PASSED  
rgb_minimum_distance|   3|     10000|    1000|0.64403835|  PASSED  
rgb_minimum_distance|   4|     10000|    1000|0.72951905|  PASSED  
rgb_minimum_distance|   5|     10000|    1000|0.64637899|  PASSED  
    rgb_permutations|   2|    100000|     100|0.48035733|  PASSED  
    rgb_permutations|   3|    100000|     100|0.80765266|  PASSED  
    rgb_permutations|   4|    100000|     100|0.99200983|  PASSED  
    rgb_permutations|   5|    100000|     100|0.91284388|  PASSED  
      rgb_lagged_sum|   0|   1000000|     100|0.87959282|  PASSED  
      rgb_lagged_sum|   1|   1000000|     100|0.01018062|  PASSED  
      rgb_lagged_sum|   2|   1000000|     100|0.87569262|  PASSED  
      rgb_lagged_sum|   3|   1000000|     100|0.01294655|  PASSED  
      rgb_lagged_sum|   4|   1000000|     100|0.00003086|   WEAK   
      rgb_lagged_sum|   5|   1000000|     100|0.00009491|   WEAK   
      rgb_lagged_sum|   6|   1000000|     100|0.72738399|  PASSED  
      rgb_lagged_sum|   7|   1000000|     100|0.00000000|  FAILED  
      rgb_lagged_sum|   8|   1000000|     100|0.41770033|  PASSED  
      rgb_lagged_sum|   9|   1000000|     100|0.00000078|  FAILED  
      rgb_lagged_sum|  10|   1000000|     100|0.90321003|  PASSED  
      rgb_lagged_sum|  11|   1000000|     100|0.00007829|   WEAK   
      rgb_lagged_sum|  12|   1000000|     100|0.88981556|  PASSED  
      rgb_lagged_sum|  13|   1000000|     100|0.00000088|  FAILED  
      rgb_lagged_sum|  14|   1000000|     100|0.00000042|  FAILED  
      rgb_lagged_sum|  15|   1000000|     100|0.00000000|  FAILED  
      rgb_lagged_sum|  16|   1000000|     100|0.40896145|  PASSED  
      rgb_lagged_sum|  17|   1000000|     100|0.01254384|  PASSED  
      rgb_lagged_sum|  18|   1000000|     100|0.36024537|  PASSED  
      rgb_lagged_sum|  19|   1000000|     100|0.00000001|  FAILED  
      rgb_lagged_sum|  20|   1000000|     100|0.39678503|  PASSED  
      rgb_lagged_sum|  21|   1000000|     100|0.00064669|   WEAK   
      rgb_lagged_sum|  22|   1000000|     100|0.87902281|  PASSED  
      rgb_lagged_sum|  23|   1000000|     100|0.00004497|   WEAK   
      rgb_lagged_sum|  24|   1000000|     100|0.00000000|  FAILED  
      rgb_lagged_sum|  25|   1000000|     100|0.00005972|   WEAK   
      rgb_lagged_sum|  26|   1000000|     100|0.20365054|  PASSED  
      rgb_lagged_sum|  27|   1000000|     100|0.00122854|   WEAK   
      rgb_lagged_sum|  28|   1000000|     100|0.76503450|  PASSED  
      rgb_lagged_sum|  29|   1000000|     100|0.00000000|  FAILED  
      rgb_lagged_sum|  30|   1000000|     100|0.30703574|  PASSED  
      rgb_lagged_sum|  31|   1000000|     100|0.00000000|  FAILED  
      rgb_lagged_sum|  32|   1000000|     100|0.69183974|  PASSED  
     rgb_kstest_test|   0|     10000|    1000|0.92884220|  PASSED  
     dab_bytedistrib|   0|  51200000|       1|0.00000000|  FAILED  
             dab_dct| 256|     50000|       1|0.23779837|  PASSED  
Preparing to run test 207.  ntuple = 0
        dab_filltree|  32|  15000000|       1|0.23801359|  PASSED  
        dab_filltree|  32|  15000000|       1|0.67308112|  PASSED  
Preparing to run test 208.  ntuple = 0
       dab_filltree2|   0|   5000000|       1|0.01247750|  PASSED  
       dab_filltree2|   1|   5000000|       1|0.25390150|  PASSED  
Preparing to run test 209.  ntuple = 0
        dab_monobit2|  12|  65000000|       1|1.00000000|  FAILED

So you can see, the thing works damn well!

Eventually, I hope to conduct a circuit-level audit. Until then, I have some reading to do.

Leave a Reply (USE HTML! Space not preserved!)