Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use cryptographically secure generador for private keys #118

Merged

Conversation

MaG21
Copy link
Contributor

@MaG21 MaG21 commented Nov 20, 2023

The random module should not be used for security purposes, therefore the use of this module to generate private keys is a security flaw. https://docs.python.org/3/library/random.html

Since this project is not targeting an specific python version, I'm not sure if it's wise to use the secrets module, because this module first appeared on in python 3.6. Instead I'm using _get_random_bytes() (which is os.urandom under the hood) to generate cryptographically secure numbers.

On the other hand and I'm not sure if this logic of generating random private keys is entirely secure. In my opinion, the right way of doing this is using ECDSA or using the library we already have in this project:

from Crypto.PublicKey import RSA
key = RSA.generate(2048)

private_key = key.export_key()
public_key = key.publickey().export_key()

The random module should not be used for security purposes, therefore
the use of this module to generate private keys is a security flaw.

Since this project is not targeting an specific python version, I'm not
sure if it's wise to use the `secrets` module, because this module first
appeared on in python 3.6. Instead I'm using `_get_random_bytes()`
(which is os.urandom under the hood) to generate cryptographically
secure numbers.

On the other hand and I'm not sure if this logic of generating random
private keys is entirely secure. In my opinion, the right way of doing
this is using ECDSA or using the library we already have in this
project:

from Crypto.PublicKey import RSA
key = RSA.generate(2048)

private_key = key.export_key()
public_key = key.publickey().export_key()
@MrNaif2018
Copy link
Collaborator

Thanks for your PR! Actually, this cryptography lib just uses os.urandom (:

@MrNaif2018
Copy link
Collaborator

@MrNaif2018 MrNaif2018 merged commit 6789aa0 into andelf:master Mar 14, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants