I want to be good natured about it, not combative. I tried whatever random
function I found in documentation online, and used it. Without analyzing
the world, I was simply dissatisfied with the results.

Here’s what I settled on. I actually “put my thumb on the scales,” to rule
out repetitions for seven questions, so randomness didn’t ultimately answer
my question.

I’m not sure that the function I “got” was the Mersenne Twister. I do know
Mersenne was a truly great mathematician.

I acknowledge that updating with time.asctime() EVERY time I update the
hash would be random; I’m not qualified to know if it would be “more”
random. After you ask about the bell curve v square distributions, I am
quite out of my depth.

Here’s my “wizard” for anyone who wants to sell him cryptocurrency or
overcome his objections to the environmentalist agenda, or query him about
foreign policy. I hope you find it better than average.

https://drive.google.com/file/d/1EqQsMfBHDrNpOBQrI7CJxrpbowvKPD2G/

Regards,

James J

On Tue, Nov 15, 2022 at 4:31 AM Wes Turner <wes.tur...@gmail.com> wrote:

> While FWIU it is advisable to keep seeding an RNG after startup - that's
> what e.g. rngd does - the cryptography.io docs do advise to just use
> `os.urandom()` (which is not the same as random.SystemRandom()?).
>
> There probably should be better default random in CPython; though I'm
> personally not at all qualified to assess, TIL about NIST 800-22 and FIPS
> 140-2 for evaluating sources of entropy.
>
> Differential entropy > Differential entropies for various distributions
> https://en.wikipedia.org/wiki/Differential_entropy
>
>
> ***
>
> (TIL that quantum information is never destroyed; so which physical
> processes are actually nonreversible like hashing and RNG are supposed to
> be is up for consideration as classical information is a subset of quantum
> information. Do black holes shift gamma radiation may actually be relevant!
> Perhaps a permanent magnet under a (double-jointed?) bar and ball pendulum
> on a magnetic bearing would produce enough Brownian motion to get enough
> uniform random to call it sufficiently entropic for purposes of CSPRNG?
> Nondeterministic NDE fluid calculations diffract into many possible
> outcomes, but a brute force combinatorial search of all the possible return
> values is still deterministically ordered. And the quantum computing folks
> are working on increasing coherence / reducing error propagation; like ECC.)
>
> - [ ] DOC: The docs could advise regarding which decent enough open source
> hw RNG would be supported by os.urandom or random.SystemRandom if rngd is
> not configured to keep nondeterministically seeding with entropy that
> should presumably be from a Uniform random entropic process
>
> There should be better software random in python.
>
>
> On Tue, Nov 15, 2022, 1:19 AM James Johnson <jj126...@gmail.com> wrote:
>
>> Thank you for replying with such specific assistance. I am made acutely
>> aware that I am only a Python enthusiast, and not an academic.
>>
>> Hashes are deterministic, not random, but byte by byte, they can be very
>> random. Please accept the attached script as a "hack," that might be novel,
>> or a curiosity. My first script was defective several ways. In this, I seed
>> the hash by hashing the uu-8 ENCODED string value of the time - it is not
>> random, but it is rarely the same twice. I used 0-9 because it is decimal,
>> and 0-59, because hours and minutes come in 60's.
>>
>> I found that taking time.time_nc() gave me far more odds than evens.
>>
>> I do not know how the scheme I devised of adding hex digits together
>> would scale to larger ranges - it is done by adding hex digits that vary
>> from 0 - 15 repeatedly, but, since the number of hex digits varies with the
>> range, it could actually work for larger ranges.
>>
>> The random function in Python is not really adequate for a magic eight
>> ball program, so as a consumer I am dissatisfied without examining it at a
>> quantum level, for repeated reference thousands of times each.
>>
>> Thank you for your kind attention, and I hope the (much improved) hack
>> can be helpful to other enthusiasts.
>>
>> James J
>> (A.A. Faulkner University)
>>
>> On Mon, Nov 14, 2022 at 11:23 AM Wes Turner <wes.tur...@gmail.com> wrote:
>>
>>> QRNG "Quantum Random Number Generation" -> Hardware random number
>>> generator > Physical phenomena with random properties > Quantum random
>>> properties
>>>
>>> https://en.wikipedia.org/wiki/Hardware_random_number_generator#Quantum_random_properties
>>>
>>>
>>> FWIW, SciPy and SymPy have various non-CSPRNG random distributions:
>>>
>>> - https://docs.scipy.org/doc/scipy/reference/stats.html
>>>   -
>>> https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.uniform.html#scipy.stats.uniform
>>>
>>> - https://docs.sympy.org/latest/modules/stats.html
>>>   - https://docs.sympy.org/latest/modules/stats.html#sympy.stats.Uniform
>>>   -
>>> https://docs.sympy.org/latest/modules/stats.html#sympy.stats.DiscreteUniform
>>>
>>> "RFC 8937: Randomness Improvements for Security Protocols" (2020)
>>> https://www.rfc-editor.org/rfc/rfc8937.html
>>>
>>> ***
>>>
>>> FWIW,
>>> UUIDs and W3C DIDs require entropy e.g. from a CSPRNG or better:
>>> https://www.w3.org/TR/did-core/#terminology :
>>>
>>> > Universally Unique Identifier (UUID)
>>> > A type of globally unique identifier defined by [RFC4122]. UUIDs are
>>> similar to DIDs in that they do not require a centralized registration
>>> authority. UUIDs differ from DIDs in that they are not resolvable or
>>> cryptographically-verifiable
>>>
>>> On Mon, Nov 14, 2022, 11:54 AM Wes Turner <wes.tur...@gmail.com> wrote:
>>>
>>>> https://docs.python.org/3/library/random.html :
>>>>
>>>> > Warning: The pseudo-random generators of this module should not be
>>>> used for security purposes. For security or cryptographic uses, see the
>>>> secrets module
>>>>
>>>> https://docs.python.org/3/library/secrets.html#module-secrets
>>>>
>>>> PEP 506 – Adding A Secrets Module To The Standard Library
>>>> https://peps.python.org/pep-0506/#alternatives
>>>> https://github.com/python/peps/blob/main/pep-0506.txt
>>>>
>>>> PEP 12: new PEP template:
>>>> https://github.com/python/peps/blob/main/pep-0012/pep-NNNN.rst
>>>>
>>>> Pseudorandom number generator > Cryptographic PRNGs
>>>>
>>>> https://en.wikipedia.org/wiki/Pseudorandom_number_generator#Cryptographic_PRNGs
>>>>
>>>> Random number generator attack > Defenses
>>>> https://en.wikipedia.org/wiki/Random_number_generator_attack#Defenses
>>>>
>>>>
>>>> /? CSPRNG
>>>> https://www.google.com/search?q=CSPRNG
>>>>
>>>> From "THE LINUX CSPRNG IS NOW GOOD!"
>>>> https://words.filippo.io/dispatches/linux-csprng/ :
>>>>
>>>> > [ get random() is from OpenBSD and LibreSSL ]
>>>>
>>>> > Performance and ChaCha20
>>>> > Some people would say they needed a userspace CSPRNG for PERFORMANCE.
>>>> I never really believed most of them, but to be fair Linux was using a
>>>> kinda slow SHA-1 extractor back then. However, since Linux 4.8 (2016) the
>>>> default getrandom(2) source is a fast ChaCha20-based CSPRNG, with separate
>>>> pools per NUMA node to avoid contention. (Just ignore the rude comments in
>>>> the code about applications not running their own CSPRNG, this is still
>>>> Linux after all.)
>>>> >
>>>> > There's even a neat trick XOR'ing some of the CSPRGN output back into
>>>> the ChaCha20 state to prevent an attacker from recovering any past output
>>>> from before the time of compromise.
>>>> >
>>>> > Some of these improvements came along thanks to the Wireguard work by
>>>> Jason A. Donenfeld
>>>>
>>>> "Problems emerge for a unified /dev/*random" (2022)
>>>> https://lwn.net/Articles/889452/
>>>>
>>>> From
>>>> https://www.redhat.com/en/blog/understanding-red-hat-enterprise-linux-random-number-generator-interface
>>>> :
>>>>
>>>> """
>>>> How does the kernel initialize its CSPRNG?
>>>> The kernel has an “entropy pool,” a place where unpredictable input
>>>> observed by the kernel is mixed and stored. That pool serves as a seed to
>>>> the internal CSPRNG, and until some threshold of estimated entropy is
>>>> reached initially, it is considered uninitialized.
>>>>
>>>> Let’s now see how the kernel initializes its entropy pool.
>>>>
>>>> 1. After the kernel takes control on power-on, it starts filling its
>>>> entropy pool by mixing interrupt timing and other unpredictable input.
>>>>
>>>> 2. The kernel gives control to systemd.
>>>>
>>>> 3. Next, systemd starts and initializes itself.
>>>>
>>>> 4. Systemd, optionally, loads kernel modules which will improve the
>>>> kernel's entropy gathering process on a virtual machine (e.g., virtio-rng).
>>>>
>>>> 5. Systemd loads the rngd.service which will gather additional input
>>>> entropy obtained via a random generator exposed by hardware (e.g., the x86
>>>> RDRAND instruction or similar) and jitter entropy1; this entropy is fed
>>>> back into the kernel to initialize its entropy pool, typically in a matter
>>>> of milliseconds.
>>>>
>>>> After the last step, the kernel has its entropy pool initialized, and
>>>> any systemd services started can take advantage of the kernel’s random
>>>> generator.
>>>>
>>>> Note that the virtio-rng kernel module loading in step (3), is an
>>>> optional step which improves entropy gathering in a virtual machine by
>>>> using the host's random generator to initialize the guest systems in KVM.
>>>> The rngd.service loading at the final step (4) is what ensures that the
>>>> kernel entropy pools are initialized on every scenario, and furthermore it
>>>> continues mixing additional data in the kernel pool during system runtime.
>>>> """
>>>>
>>>> https://github.com/nhorman/rng-tools/blob/master/fips.c :
>>>>
>>>> ```c
>>>> /* fips.c -- Performs FIPS 140-1/140-2 RNG tests
>>>> ```
>>>>
>>>> /? FIPS 140-1/140-2 RNG tests
>>>> https://www.google.com/search?q=FIPS+140-1%2F140-2+RNG+tests
>>>>
>>>> /? CMVP "cprng"
>>>> https://www.google.com/search?q=CMVP+%22cprng%22
>>>> https://csrc.nist.gov/publications/detail/fips/140/3/final
>>>>
>>>> https://www.google.com/search?q=rng+tests
>>>>
>>>> - https://www.johndcook.com/blog/rng-testing/ :
>>>>
>>>>   > We test RNGs using the standard test suites: PractRand, TestU01
>>>> (BigCrush), DIEHARD(ER), NIST SP 800-22.
>>>>
>>>> Randomness tests:
>>>>
>>>> https://en.wikipedia.org/wiki/Randomness_test#Notable_software_implementations
>>>> :
>>>> - https://en.wikipedia.org/wiki/Diehard_tests
>>>> - https://en.wikipedia.org/wiki/TestU01
>>>> - /? NIST 800-22 https://www.google.com/search?q=nist+800-22
>>>>
>>>> /? nist 800-22 site:github.com
>>>> https://www.google.com/search?q=nist+800-22+site%3Agithub.com
>>>>
>>>> -
>>>> https://github.com/google/paranoid_crypto/blob/main/docs/randomness_tests.md
>>>>
>>>>
>>>> From https://cryptography.io/en/latest/random-numbers/
>>>> https://github.com/pyca/cryptography/blob/main/docs/random-numbers.rst
>>>> :
>>>>
>>>>
>>>> ```rst
>>>> Random number generation
>>>> ========================
>>>>
>>>> When generating random data for use in cryptographic operations, such
>>>> as an
>>>> initialization vector for encryption in
>>>> :class:`~cryptography.hazmat.primitives.ciphers.modes.CBC` mode, you do
>>>> not
>>>> want to use the standard :mod:`random` module APIs. This is because
>>>> they do not
>>>> provide a cryptographically secure random number generator, which can
>>>> result in
>>>> major security issues depending on the algorithms in use.
>>>>
>>>> Therefore, it is our recommendation to `always use your operating
>>>> system's
>>>> provided random number generator`_, which is available as
>>>> :func:`os.urandom`.
>>>> For example, if you need 16 bytes of random data for an initialization
>>>> vector,
>>>> you can obtain them with:
>>>>
>>>> .. doctest::
>>>>
>>>>     >>> import os
>>>>     >>> iv = os.urandom(16)
>>>>
>>>> This will use ``/dev/urandom`` on UNIX platforms, and
>>>> ``CryptGenRandom`` on
>>>> Windows.
>>>>
>>>> If you need your random number as an integer (for example, for
>>>> :meth:`~cryptography.x509.CertificateBuilder.serial_number`), you can
>>>> use
>>>> ``int.from_bytes`` to convert the result of ``os.urandom``:
>>>>
>>>> .. code-block:: pycon
>>>>
>>>>     >>> serial = int.from_bytes(os.urandom(20), byteorder="big")
>>>>
>>>> In addition, the `Python standard library`_ includes the ``secrets``
>>>> module,
>>>> which can be used for generating cryptographically secure random
>>>> numbers, with
>>>> specific helpers for text-based formats.
>>>>
>>>> .. _`always use your operating system's provided random number
>>>> generator`:
>>>> https://sockpuppet.org/blog/2014/02/25/safely-generate-random-numbers/
>>>> .. _`Python standard library`:
>>>> https://docs.python.org/3/library/secrets.html
>>>>
>>>> ```
>>>>
>>>>
>>>> On Mon, Nov 14, 2022, 10:57 AM Barry <ba...@barrys-emacs.org> wrote:
>>>>
>>>>>
>>>>>
>>>>> > On 14 Nov 2022, at 14:31, James Johnson <jj126...@gmail.com> wrote:
>>>>> >
>>>>> > 
>>>>> > I wrote the attached python (3) code to improve on existing prng
>>>>> functions. I used the time module for one method, which resulted in
>>>>> disproportionate odd values, but agreeable means.
>>>>> >
>>>>> > I used the hashlib module for the second. It is evident that the
>>>>> code is amateur, but the program might result in better PRN generation.
>>>>> >
>>>>> > The "app" lends itself to checking, using statistical tools (see
>>>>> comments.)
>>>>>
>>>>> Have you used any cryptographic tools to prove the quality of your
>>>>> PRNG?
>>>>> What results did you get?
>>>>> How does your PRNG compare to what python already has?
>>>>>
>>>>> Without that this analysis this will be unlikely to be considered as a
>>>>> candidate for python stdlib.
>>>>>
>>>>> Barry
>>>>>
>>>>> >
>>>>> > I remain a fan,
>>>>> >
>>>>> > James Johnson
>>>>> > <testrandom.py>
>>>>> > _______________________________________________
>>>>> > 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/VENAT2YTVYVHTBSEVHHMIURCU6MG2CEO/
>>>>> > 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/HWQV4AKQAUM7CY4NWS2IRIVLRAYMKR3V/
>>>>> Code of Conduct: http://python.org/psf/codeofconduct/
>>>>>
>>>> --
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/ODL773AIV43GLUSO5UUNIPZYTPYJPQOZ/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to