Thanks! (I was ignorant; reinventing the wheel if mine is adequate) On Tue, Nov 15, 2022 at 9:41 AM Wes Turner <wes.tur...@gmail.com> wrote:
> How does this algo differ from Hash_DRBG and/or HMAC_DRBG in > NIST.SP.800-90Ar1.pdf > https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-90Ar1.pdf > ? > > Good luck! > > On Tue, Nov 15, 2022 at 10:25 AM James Johnson <jj126...@gmail.com> wrote: > >> That list teaches a vocabulary in which to speak about randomness. Since >> my attempt draws its inspiration from addition, I fear it may not pass >> other tests. >> >> Thank you for the list. Also, many PRNG’s to call. That will help >> immensely. >> >> You have shown patience in addressing my effort, but I’m not optimistic >> about larger ranges. 0-9 is < 16, and it may hold up in that limited >> capacity. >> >> On Tue, Nov 15, 2022 at 7:58 AM Wes Turner <wes.tur...@gmail.com> wrote: >> >>> 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/T3CM5FIVVUZRDP7RQ2QRNQTPWUR4WAR7/ >>> Code of Conduct: http://python.org/psf/codeofconduct/ >>> >> -- >> Truth causes consequences; consequences bring pain; pain exorcises guilt! >> > -- Truth causes consequences; consequences bring pain; pain exorcises guilt!
_______________________________________________ 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/SZOMVE5BFDK25EWAQ5HGMI2LHLURKM5J/ Code of Conduct: http://python.org/psf/codeofconduct/