-
Notifications
You must be signed in to change notification settings - Fork 158
New issue
Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? # to your account
RSA key generation comparatively slow #144
Comments
Line 99 in 7395997
EDIT: After benchmarking this some more, it actually looks like the number of primes used to generate the key is the influencing factor. I increased the number of primes from Line 279 in 7395997
|
The main reason asfaik is that the underlying operations are nowhere nearly as optimized as the code in OpenSSL and whatever library C# is calling into. @aloucks that will generate a different RSA key setup though, and most applications today assume using 2 primes and not more asfaik. |
In https://github.com/jellevos/scicrypt/blob/master/scicrypt-numbertheory/src/lib.rs I have implemented an algorithm that is almost exactly the same as OpenSSL's. Depending on the machine and parameters it is slightly faster or slightly slower than OpenSSL. I am happy to give it a try to reimplement it in this crate (the algorithm is not complicated). Of course, if the bottleneck is the underlying arithmetic, then it might not make a large difference. |
@jellevos would definitely be curious what the performance is if you did port it over |
ftr: older issue with similar topic: #29 |
Once dignifiedquire/num-bigint#48 lands, prime generation should be a little faster. |
@darconeous |
do'h! |
@jellevos can you open a PR? |
#394 switches to using I'm not sure if it improves performance as I haven't benchmarked it, but regardless whatever performance problems remain are in |
I need to frequently generate RSA keys in bulk. I am using the following Rust code to generate a key:
Running this code in release mode to generate 100 RSA keys takes about 18 seconds on my machine. In comparison, I used the following code in C (OpenSSL) and C# (CNG) to generate the same-size RSA key.
C - OpenSSL
C# - CNG
To generate 100 keys, the C code takes about 6.7 seconds and the C# code takes about 5.5 seconds. I was surprised that the Rust key generation took about 3x more time than both C and C#.
The text was updated successfully, but these errors were encountered: