in reply to Re: New software TRNG
in thread New software TRNG

It works by counting the number of for-loop cycles per eight microseconds several times and dividing the counts into two groups. A bit (0 or 1) is then determined by which group wins. A draw means "try again". This process is repeated for each bit.

I have tested it and it does produce results which are fairly uniform and because of the way it operates, the results are theoretically independent of each other.

Replies are listed 'Best First'.
Re^3: New software TRNG
by AnomalousMonk (Archbishop) on Jan 29, 2014 at 20:25 UTC

    Is the exclusive use in the function of variables that are non-local-ized globals an essential source of the entropy it supplies? If so, please be aware that entropy may "leak" from the function and make the operation of any program employing it very random indeed. If not, please consider using lexical (my) variables.

Re^3: New software TRNG
by hdb (Monsignor) on Jan 29, 2014 at 20:35 UTC

    I wanted to give it a try but as I run all my scripts under strict and warnings it did not compile.

      I have just seen your reply. To be honest, there are some large gaps in my knowledge of Perl and I did not know the importance of strict and warnings. I am now working on my script to address this and I will repost it when I have done so. I hope that you will give it ago again once I have done this.

      Thank you very much.

        As a simple test one could look at the distribution of the random numbers. A good quality generator should distribute the numbers uniformly (and pseudo generators usually do this by construction). I have been counting for 10 buckets and 500,000 trials. ($freq{ int TRNGrand $r }++ for 1..$n; with $r=10; and $n=500000;). One would expect 10% of the numbers in each bucket (ie 50,000). The maximum relative error is around 10.5% in this exercise, ie +/-5000. Using rand, the maximum relative error is around 0.5%.

        This would most likely lead to a failure of the usual statistical test like Diehard_tests but then you might want to see whether this deviation is a welcome additional source of randomness or leads to a predictable bias that could be exploited when you use your numbers for encryption (as one example).

        In any case, generating those 500,000 numbers took nearly 8 hours (rand took less than a second), so I will refrain from more comprehensive testing of your code.