generating random with crypto
iber last edited by
I'm having a trouble generating a random using the crypto module.
I'm following the documentation but I stumble upon an error.
I'm working with the latest firmware (1.2.2.b1)
>>> import crypto >>> from crypto import AES >>> iv = crypto.getrandbits(128) Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: 'module' object has no attribute 'getrandbits'
Seems like there's no
getrandbitsmethod on the crypto module.
uos.urandomis based on a linear feedback shift register, that is seeded with a number derived from the MAC address. The values will "look" like random for a whole period, but still easily predictable.
crypto.getrandbitsis based on a hardware random number generator that gathers it's bits from random events (noise) received by the WiFi and Bluetooth radios. This source, according to the Espressif, passes randomness tests.
@obertuckerz112, needed for writing a few AES examples? probably not. Needed for real life applications? The experts in cryptography say that you need a good source (as in unpredictable) of random numbers for things like the initialization vector (IV). Clearly,
In order to allow people to construct the best possible applications, we hence provide access to the hardware random number generator
getrandbitsas an usable source and recommend the people to use it instead of
uos.urandomfor cryptography purposes.
obertuckerz112 last edited by
Do you specifically need it?
@abilio Good to know.
@Feiko, the result from
uos.urandomcomes from a pseudo random number generator. The one in crypto comes from a hardware number generator, that according to Espressif documents passes the diehard tests. I think that's probably why @iber is interested into it.
iv = uos.urandom(16)
This should also work right.
iber last edited by
great, looking forward to it.
I currently moved on using a 'not so random' value ;)
@iber, You're totally right. The code for it was merged into master a day after the last release, but with all the restructuring of the documentation, it ended up being published before it was included in a firmware release. I will be available in today's release. Hope you find the addition useful :)