Thanks

On Tue, Dec 6, 2022 at 10:39 AM Wes Turner <wes.tur...@gmail.com> wrote:

> > google/paranoid_crypto has a number of Randomness Tests:
>
>> google/paranoid_crypto has a number of Randomness Tests in Python IIR
>> From grep '^#'
>> https://github.com/google/paranoid_crypto/blob/main/docs/randomness_tests.md
>> :
>>
>> ```md
>> # Randomness tests
>> ## Goal of the tests
>> ## Non-goals
>> ## Usage
>> ## Tests
>> ### NIST SP 800-22
>> #### Frequency (Monobits) Test
>> #### Frequency Test within a Block
>> #### Runs Test
>> #### Test for the Longest Run of Ones in a Block
>> #### Binary Matrix Rank Test
>> #### Discrete Fourier Transform (Spectral) Test
>> #### Non-Overlapping Template Matching Test
>> #### Overlapping Template Matching Test.
>> #### Maurer’s “Universal Statistical” Test
>> #### Linear Complexity Test
>> #### Serial Test.
>> #### Approximate Entropy Test
>> #### Cumulative Sums (Cusum) Test.
>> #### Random Excursions Test.
>> #### Random Excursions Variant Test
>> ### Additional tests
>> #### FindBias
>> #### LargeBinaryMatrixRank
>> #### LinearComplexityScatter
>> ## Interface
>> ### Repeating tests
>> ## Testing
>> ### Pseudorandom number generators for testing
>> #### urandom
>> #### mt19937
>> #### gmp_n
>> #### mwc_n
>> #### java
>> #### lcgnist
>> #### xorshift128+
>> #### xorshift*
>> #### xorwow
>> #### pcg64, philox, sfc64
>> #### jsf32, jsf64
>> ## Design decisions
>> ```
>>
>> $ grep '^\s*class'
>> https://github.com/google/paranoid_crypto/blob/main/paranoid_crypto/lib/randomness_tests/rng.py
>> :
>>
>> ```python
>> class Rng:
>> class Urandom(Rng):
>> class Shake128(Rng):
>> class Mt19937(Rng):
>> class GmpRand(Rng):
>> class XorShift128plus(Rng):
>> class XorShiftStar(Rng):
>> class Xorwow(Rng):
>> class JavaRandom(Rng):
>> class LcgNist(Rng):
>> class Mwc(Rng):
>> class NumpyRng(Rng):
>> class Lehmer(Rng):
>> class Pcg64(NumpyRng):
>> class Philox(NumpyRng):
>> class Sfc64(NumpyRng):
>> class SubsetSum(Rng):
>> ```
>>
>> From
>> https://github.com/google/paranoid_crypto/blob/16e5f47fcc11f51d3fb58b50adddd075f4373bbc/paranoid_crypto/lib/randomness_tests/random_test_suite.py#L42-L80
>> :
>>
>> ```python
>> NIST_TESTS = [
>>     (nist_suite.Frequency, []),
>>     (nist_suite.BlockFrequency, []),
>>     (nist_suite.Runs, []),
>>     (nist_suite.LongestRuns, []),
>>     (nist_suite.BinaryMatrixRank, []),
>>     (nist_suite.Spectral, []),
>>     (nist_suite.NonOverlappingTemplateMatching, []),
>>     (nist_suite.OverlappingTemplateMatching, []),
>>     (nist_suite.Universal, []),
>>     (nist_suite.LinearComplexity, [512]),
>>     (nist_suite.LinearComplexity, [1024]),
>>     (nist_suite.LinearComplexity, [2048]),
>>     (nist_suite.LinearComplexity, [4096]),
>>     (nist_suite.Serial, []),
>>     (nist_suite.ApproximateEntropy, []),
>>     (nist_suite.RandomWalk, []),
>> ]
>>
>>
>> EXTENDED_NIST_TESTS = [
>>     (extended_nist_suite.LargeBinaryMatrixRank, []),
>>     # Computing the linear complexity has quadratic complexity.
>>     # A consequence of this is that LinearComplexityScatter only
>>     # uses a fraction of the input. A parameter [n, m] means
>>     # that n m-bit sequences are tested, where the i-th sequence
>>     # consists of the bits i, i + n, ..., i + (m-1) * m.
>>     (extended_nist_suite.LinearComplexityScatter, [32, 100000]),
>>     (extended_nist_suite.LinearComplexityScatter, [64, 50000]),
>>     (extended_nist_suite.LinearComplexityScatter, [128, 40000]),
>> ]
>>
>>
>> LATTICE_TESTS = [
>>     (lattice_suite.FindBias, [256]),
>>     (lattice_suite.FindBias, [384]),
>>     (lattice_suite.FindBias, [512]),
>>     (lattice_suite.FindBias, [1024]),
>> ]
>>
>>
>> TESTS = NIST_TESTS + EXTENDED_NIST_TESTS + LATTICE_TESTS
>> ```
>>
>>
>> - [ ] ENH: paranoid_crypto: add a __main__ so that python -m
>> paranoid_crypto.randomness_tests calls eg:
>>   - [x]
>> https://github.com/google/paranoid_crypto/blob/main/examples/randomness.py
>>   - [ ] REF: examples/randomness.py -> lib/randomness_tests/main.py
>>   - [ ] ENH: paranoid_crypto.randomness_tests: add a __main__ so that
>> `python -m paranoid_crypto.randomness_tests -h` works
>>   - [ ] ENH: setup.py: console_scripts entrypoint for
>> examples/randomness_tests/main.py
>>
>> - [ ] DOC:
>> https://en.wikipedia.org/wiki/Randomness_test#Notable_software_implementations:
>> link to google/paranoid_crypto
>>
>>
>>
>> On Tue, Nov 15, 2022 at 7:25 AM Chris Angelico <ros...@gmail.com> wrote:
>>
>>> On Tue, 15 Nov 2022 at 22:41, Chris Angelico <ros...@gmail.com> wrote:
>>> >
>>> > (I'm assuming that you sent this personally by mistake, and am
>>> > redirecting back to the list. My apologies if you specifically didn't
>>> > want this to be public.)
>>> >
>>> > On Tue, 15 Nov 2022 at 22:34, James Johnson <jj126...@gmail.com>
>>> wrote:
>>> > >
>>> > > It’s been a couple of years ago, but as I recall the duplicates
>>> seemed to be of two or three responses, not randomly distributed.
>>> > >
>>> > > I looked at my code, and I DID salt the hash at every update.
>>> > >
>>> > > At this point, my curiosity is engaged to know if this s/w solution
>>> is as good as others. I don’t have the training to test how often 9 follows
>>> 5, for example, but I am competitive enough to ask how it holds up against
>>> MTprng. I think it’s possibly very good, for s/w, and I’m emboldened to ask
>>> you to modify the code (it requires you data enter the numbers back to the
>>> machine, allowing time to pass;) to accumulate the results for 2 or 3
>>> million, and see how it holds up. I don’t think the numbers track the bell
>>> curve on distribution . I speculate it’s more square. I suppose this is
>>> desirable in a PRNG?
>>> > >
>>> >
>>> > I'll get you to do the first step of the modification. Turn your code
>>> > into a module that has a randbelow() function which will return a
>>> > random integer from 0 up to the provided argument. (This is equivalent
>>> > to the standard library's random.randrange() function when given just
>>> > one argument.) If you like, provide several of them, as randbelow1,
>>> > randbelow2, etc.
>>> >
>>> > Post that code, and then I'll post a test harness that can do some
>>> > analysis for you.
>>>
>>> Here's a simple test harness. There are other tests you could use, but
>>> this one is pretty straight-forward.
>>>
>>> https://github.com/Rosuav/shed/blob/master/howrandom.py
>>>
>>> For each test, it counts up how many times each possible sequence
>>> shows up, then displays the most and least common, rating them
>>> according to how close they came to a theoretical perfect
>>> distribution. A good random number generator should produce results
>>> that are close to 100% for all these tests, but the definition of
>>> "close" depends on the pool size used (larger means closer, but also
>>> means more CPU time) and the level of analysis done. In my testing,
>>> all of the coin-flip data showed values +/- 1%, and the others never
>>> got beyond 10%.
>>>
>>> This is the same kind of analysis that was used in the page that I
>>> linked to earlier, so you can play with it interactively there if
>>> you're curious. It also has better explanations than I would give.
>>>
>>> Again, there are plenty of other types of tests you could use, but
>>> this is a pretty easy one. True randomness should show no biases in
>>> any of these results, though there will always be some variance.
>>>
>>> ChrisA
>>> _______________________________________________
>>> Python-ideas mailing list -- python-ideas@python.org
>>> To unsubscribe send an email to python-ideas-le...@python.org
>>> https://mail.python.org/mailman3/lists/python-ideas.python.org/
>>> Message archived at
>>> https://mail.python.org/archives/list/python-ideas@python.org/message/5OWDW5XUE5JYAW3QKMNZYKXH3NNBPNNW/
>>> Code of Conduct: http://python.org/psf/codeofconduct/
>>>
>> _______________________________________________
> Python-ideas mailing list -- python-ideas@python.org
> To unsubscribe send an email to python-ideas-le...@python.org
> https://mail.python.org/mailman3/lists/python-ideas.python.org/
> Message archived at
> https://mail.python.org/archives/list/python-ideas@python.org/message/DCM552CL5I2SV47GTU4CUYLONTXWA6AG/
> Code of Conduct: http://python.org/psf/codeofconduct/
>
_______________________________________________
Python-ideas mailing list -- python-ideas@python.org
To unsubscribe send an email to python-ideas-le...@python.org
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at 
https://mail.python.org/archives/list/python-ideas@python.org/message/74PESTEFE3AHOTEKZP2GR4O7FPSGSMNM/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to