Some work has also progressed on the software aspects of random number generation. Even though this site is all about generating true random numbers via hardware, some software is necessary to process them, even to just simply store them. There is a great deal of debate over what is and is not hardware random number generation, and we will descend into this philosophical quagmire later on. The toad of truth lurks therein. Somewhere. Bravely armed with just enlightenment and a large spoon, we will find it and demonstrate that it is all a question of balance and proportion. Like sausages, the answer is a bit of hardware and a bit of software.

To that end, it was necessary to initially generate a derangement of 8 bit numbers for use in a Pearson hash(info). The hash function will be used for various components of the randomness extraction code. Randomness extraction is an intensely personal matter, and typically is custom written for each individual application. With no true random number generator to hand, we fell back to the old ways. Below is the box that 256 8 bit numbers were drawn from (without replacement). Total randomness is guaranteed as in addition to Paul mixing up the pieces of paper, Dom decided that something was buried at the bottom of the box and started digging. There was an anxious moment when we thought that he might make a more direct contribution to the draw, but he eventually go bored when enough shuffling and digging had taken place.

PearsonHash/0-255draw.JPG

Dom felt very strongly that we should display his endeavours, so here is the derangement that will form the keystone of our random number extraction. It has been generated by both man and beast. In accordance with our principles, we openly present this table to demonstrate that we do not generate random numbers through opaqueness and secrecy. The mysterious physical processes underpinning the universe give us our true randomness. We do not practice security through obscurity[1].

        223  65  254  33  178  25  158  211  12  193  235  43  169  118  232 
        73  98  251  145  161  120  130  56  13  104  75  206  208  109  180  6 
        14  192  219  17  46  137  63  86  140  248  26  239  72  62  179  113 
        215  156  100  114  151  28  90  66  23  167  134  95  255  76  112 
        207  88  128  170  199  159  195  231  107  24  226  124  221  61  162 
        55  165  94  202  218  40  197  214  121  0  91  201  177  58  216  38 
        102  183  64  29  141  70  115  187  175  57  205  11  123  116  59  74 
        32  47  148  166  233  77  152  153  20  126  250  81  30  244  45  213 
        110  247  245  154  82  191  172  157  60  163  53  67  125  84  242 
        117  19  10  186  127  143  36  101  253  49  31  198  181  168  68  92 
        71  209  87  4  42  160  44  78  234  200  80  139  194  182  2  217 
        228  21  249  222  54  171  48  5  15  203  173  196  188  119  27  150 
        174  144  8  97  34  108  96  238  69  155  210  236  142  189  50  138 
        131  204  225  237  185  103  85  212  105  83  220  133  227  7  146 
        1  79  252  230  240  243  3  132  176  89  106  129  35  122  99  41 
        39  184  37  190  51  93  22  147  136  52  135  164  241  229  224 
        149  18  246  9  16  111 

Keen readers will notice that this is somewhat equivalent to random matrix techniques for universal hashing. An interesting aspect of a Pearson hash is that if the hash output is extended to the maximum size of 2048 bits, the resultant permutation space is 256! and not 256^256 as might be initially expected. Still, that's approximately 10^500 permutations. More than the number of dinners most have had.

The beauty of the Pearson hash is that it can combine a series of numbers into a single hash value more effectively than simply performing a linear XOR on them. If the numbers were low values, say only 4 bits each, XORing them would not only ignore order but produce hashes of 4 bits in width. A Pearson hash always produces an 8 bit value even if you hashed 1 bit wide values. The consequence is that you do not need to crudely build up octets a bit at a time. Simply hash individual bits as they become available. Transformation to 8 bit width will occur automatically. Try it.

[#1] See https://en.wikipedia.org/wiki/Security_through_obscurity for more details

Add new attachment

Only authorized users are allowed to upload new attachments.

List of attachments

Kind Attachment Name Size Version Date Modified Author Change note
jpg
0-255draw.JPG 44.0 kB 1 22-Nov-2015 03:53 cossoft
pdf
Pearson Hash Paper.pdf 420.0 kB 1 18-Dec-2015 03:37 cossoft
« This page (revision-) was last changed on 13-May-2016 02:10 by Helen
G’day (anonymous guest) User Preferences

Currently being read by 51 soul(s) or robot(s) like so:

Flag Counter