Speed Comparison of Public Key Algorithms

These numbers were determined with the dh_speed and pubkey_speed utilities provided in source:scripts.

64 bit on Intel Xeon E5-2630v3 2.4 GHz (one core):

Public Key Signature - Generation

Key type Strength* Operations/s gmp gcrypt openssl
RSA 512 50 bits sign (e=3) 19'352 5'075 15'571
sign (e=f4) 18'921 5'668 13'324
RSA 768 62 bits sign (e=3) 7'779 2'776 7'020
sign (e=f4) 9'675 2'794 8'202
RSA 1024 73 bits sign (e=3) 4'264 1'333 4'694
sign (e=f4) 3'775 1'147 4'826
RSA 1536 89 bits sign (e=3) 1'201 490 1'236
sign (e=f4) 1'183 574 1'248
RSA 2048 103 bits sign (e=3) 471 274 822
sign (e=f4) 548 230 800
RSA 3072 125 bits sign (e=3) 116 64 152
sign (e=f4) 112 64 157
RSA 4096 142 bits sign (e=3) 52 30 74
sign (e=f4) 51 31 72
RSA 6144 171 bits sign (e=3) 17 11 29
sign (e=f4) 17 11 28
RSA 8192 193 bits sign (e=3) 8 5 13
sign (e=f4) 8 5 13
ECDSA 256 128 bits sign N/A N/A 11'934
ECDSA 384 192 bits sign N/A N/A 1049
ECDSA 521 260 bits sign N/A N/A 1731

* = cryptographic strength estimates according to RFC 3766 using www.keylength.com

Public Key Signature - Verification

Key type Strength Operations/s gmp gcrypt openssl
RSA 512 50 bits verify (e=3) 50'736 88'586 208'418
verify (e=f4) 50'739 55'714 127'066
RSA 768 62 bits verify (e=3) 27'278 81'614 171'022
verify (e=f4) 34'774 40'800 128'251
RSA 1024 73 bits verify (e=3) 18'577 74'595 116'195
verify (e=f4) 18'579 30'782 64'122
RSA 1536 89 bits verify (e=3) 7'496 64'670 81'471
verify (e=f4) 7'486 19'712 36'715
RSA 2048 103 bits verify (e=3) 4'328 54'602 51'670
verify (e=f4) 4'330 12'047 21'686
RSA 3072 125 bits verify (e=3) 1'590 28'473 22'716
verify (e=f4) 1'511 5'603 8'787
RSA 4096 142 bits verify (e=3) 962 20'399 14'725
verify (e=f4) 953 3'562 5'326
RSA 6144 171 bits verify (e=3) 460 13'786 7'756
verify (e=f4) 454 1'813 2'902
RSA 8192 193 bits verify (e=3) 270 7'269 3'894
verify (e=f4) 271 1'105 1'833
ECDSA 256 128 bits verify N/A N/A 6'370
ECDSA 384 192 bits verify N/A N/A 1155
ECDSA 521 260 bits verify N/A N/A 1052

Diffie-Hellman Key Exchange

DH group Strength Operations/s gmp gcrypt openssl gmp* gcrypt* openssl*
MODP 768 62 bits A=g^a mod p 2'339 1'346 2'761 5'637 2'928 6'990
S=B^a mod p 3'492 1'270 3'816 7'633 3'671 7'784
MODP 1024 73 bits A=g^a mod p 1'498 674 2'075 3'772 2'691 4'707
S=B^a mod p 1'597 626 3'408 4'567 2'393 5'154
MODP 1536 89 bits A=g^a mod p 485 255 673 2'559 1'568 3'088
S=B^a mod p 493 232 679 2'800 1'318 3'405
MODP 2048 103 bits A=g^a mod p 212 124 294 1'047 675 1'456
S=B^a mod p 214 111 295 1'085 574 1'486
MODP 3072 125 bits A=g^a mod p 63 43 81 372 265 505
S=B^a mod p 67 38 91 449 294 513
MODP 4096 142 bits A=g^a mod p 29 20 39 217 165 291
S=B^a mod p 29 18 39 218 137 297
MODP 6144 171 bits A=g^a mod p 9 6 9 62 56 132
S=B^a mod p 9 6 11 74 52 134
MODP 8192 193 bits A=g^a mod p 4 3 5 42 38 74
S=B^a mod p 4 3 5 42 34 75
ECP 192 96 bits A=g^a mod p N/A N/A 1'415 -
S=B^a mod p N/A N/A 4'778
ECP 224 112 bits A=g^a mod p N/A N/A 3'965
S=B^a mod p N/A N/A 11'094
ECP 256 128 bits A=g^a mod p N/A N/A 5'192
S=B^a mod p N/A N/A 13'102
ECP 384 192 bits A=g^a mod p N/A N/A 444
S=B^a mod p N/A N/A 1'455
ECP 521 260 bits A=g^a mod p N/A N/A 743
S=B^a mod p N/A N/A 2'060

* = using reduced exponent size (libstrongswan.dh_exponent_ansi_x9_42 = no) as recommended by RFC3526

32 bit, native on a Core2Duo T9400 (one core)

Public Key Signature - Generation

Key type Strength* Operations/s gmp gcrypt openssl
RSA 512 50 bits sign (e=3) 3'708 1'814 2'286
sign (e=f4) 3'946 1'780 2'150
RSA 768 62 bits sign (e=3) 1'483 625 521
sign (e=f4) 1'486 626 783
RSA 1024 73 bits sign (e=3) 724 301 488
sign (e=f4) 722 285 475
RSA 1536 89 bits sign (e=3) 242 99 117
sign (e=f4) 243 98 111
RSA 2048 103 bits sign (e=3) 110 30 80
sign (e=f4) 109 28 89
RSA 3072 125 bits sign (e=3) 35 9 33
sign (e=f4) 35 15 32
RSA 4096 142 bits sign (e=3) 15 6 9
sign (e=f4) 15 6 9
RSA 6144 171 bits sign (e=3) 4 2 3
sign (e=f4) 4 2 3
RSA 8192 193 bits sign (e=3 ) 2 1 2
sign (e=f4) 2 1 1
ECDSA 256 128 bits sign N/A N/A 546
ECDSA 384 192 bits sign N/A N/A 233
ECDSA 521 260 bits sign N/A N/A 113

* = cryptographic strength estimates according to RFC 3766 using www.keylength.com

Public Key Signature - Verification

Key type Strength Operations/s gmp gcrypt openssl
RSA 512 50 bits verify (e=3) 76'683 36'626 55'685
verify (e=f4) 32'577 15'860 25'086
RSA 768 62 bits verify (e=3) 52'707 31'167 37'112
verify (e=f4) 17'375 10'054 15'034
RSA 1024 73 bits verify (e=3) 37'826 25'688 28'879
verify (e=f4) 11'402 6'640 10'380
RSA 1536 89 bits verify (e=3) 22'143 18'505 10'393
verify (e=f4) 5'892 3'770 3'686
RSA 2048 103 bits verify (e=3) 14'175 8'307 11'625
verify (e=f4) 3'481 1'423 3'535
RSA 3072 125 bits verify (e=3) 7'207 4'930 5'654
verify (e=f4) 1'729 1'150 1'857
RSA 4096 142 bits verify (e=3) 5'887 4'960 2'263
verify (e=f4) 1'049 684 672
RSA 6144 171 bits verify (e=3) 3'171 2630 977
verify (e=f4) 544 335 324
RSA 8192 193 bits verify (e=3) 2'015 1638 839
verify (e=f4) 334 194 181
ECDSA 256 128 bits verify N/A N/A 459
ECDSA 384 192 bits verify N/A N/A 196
ECDSA 521 260 bits verify N/A N/A 94

Diffie-Hellman Key Exchange

DH group Strength Operations/s gmp gcrypt openssl gmp* gcrypt* openssl*
MODP 768 62 bits A=g^a mod p 468 293 371 1'271 866 1'060
S=B^a mod p 489 205 393 1'418 618 1'101
MODP 1024 73 bits A=g^a mod p 216 136 192 792 540 706
S=B^a mod p 222 92 195 845 372 728
MODP 1536 89 bits A=g^a mod p 71 46 70 395 279 379
S=B^a mod p 71 31 71 409 188 382
MODP 2048 103 bits A=g^a mod p 31 20 31 161 112 155
S=B^a mod p 31 14 31 163 74 156
MODP 3072 125 bits A=g^a mod p 10 6 11 77 55 81
S=B^a mod p 10 4 11 77 36 80
MODP 4096 142 bits A=g^a mod p 4 3 4 34 24 35
S=B^a mod p 4 2 4 34 16 35
MODP 6144 171 bits A=g^a mod p 1 1 1 17 11 17
S=B^a mod p 1 0 1 17 7 17
MODP 8192 193 bits A=g^a mod p 1 1 0 11 7 10
S=B^a mod p 1 0 1 11 4 10
ECP 192 96 bits A=g^a mod p N/A N/A 961 -
S=B^a mod p N/A N/A 950
ECP 224 112 bits A=g^a mod p N/A N/A 724
S=B^a mod p N/A N/A 716
ECP 256 128 bits A=g^a mod p N/A N/A 577
S=B^a mod p N/A N/A 564
ECP 384 192 bits A=g^a mod p N/A N/A 243
S=B^a mod p N/A N/A 239
ECP 521 260 bits A=g^a mod p N/A N/A 117
S=B^a mod p N/A N/A 116

* = using reduced exponent size (libstrongswan.dh_exponent_ansi_x9_42 = no) as recommended by RFC3526

64 bit, under VirtualBox, Core2Duo T9400 (one core):

Public Key Signature - Generation

Key type Strength* Operations/s gmp gcrypt openssl
RSA 512 50 bits sign (e=3) 12'715 3474 7'405
sign (e=f4) 12'453 3463 4'471
RSA 768 62 bits sign (e=3) 5'414 1234 2'371
sign (e=f4) 5'617 1142 2'974
RSA 1024 73 bits sign (e=3) 2'756 769 1'565
sign (e=f4) 2'765 516 1'523
RSA 1536 89 bits sign (e=3) 980 181 548
sign (e=f4) 978 279 525
RSA 2048 103 bits sign (e=3) 447 126 160
sign (e=f4) 453 122 147
RSA 3072 125 bits sign (e=3) 140 45 51
sign (e=f4) 146 44 46
RSA 4096 142 bits sign (e=3) 71 19 36
sign (e=f4) 62 11 34
RSA 6144 171 bits sign (e=3) 19 7 11
sign (e=f4) 20 6 10
RSA 8192 193 bits sign (e=3) 7 3 4
sign (e=f4) 8 3 4
ECDSA 256 128 bits sign N/A N/A 1'204
ECDSA 384 192 bits sign N/A N/A 551
ECDSA 521 260 bits sign N/A N/A 280

* = cryptographic strength estimates according to RFC 3766 using www.keylength.com

Public Key Signature - Verification

Key type Strength Operations/s gmp gcrypt openssl
RSA 512 50 bits verify (e=3) 131'663 50'944 86'962
verify (e=f4) 85'975 25'927 34'702
RSA 768 62 bits verify (e=3) 114'546 47'151 67'016
verify (e=f4) 51'425 23'467 36'163
RSA 1024 73 bits verify (e=3) 89'899 41'223 57'059
verify (e=f4) 40'736 9'569 26'082
RSA 1536 89 bits verify (e=3) 59'941 33'632 33'338
verify (e=f4) 20'979 9'520 12'731
RSA 2048 103 bits verify (e=3) 35'728 22'385 16'076
verify (e=f4) 12'313 5'140 4'630
RSA 3072 125 bits verify (e=3) 16'474 21'272 12'929
verify (e=f4) 6'318 3'377 2'305
RSA 4096 142 bits verify (e=3) 9'081 4'894 4'643
verify (e=f4) 2'975 919 2'128
RSA 6144 171 bits verify (e=3) 3'758 6'793 2'666
verify (e=f4) 1'540 1'047 894
RSA 8192 193 bits verify (e=3) 3'039 3'871 1'204
verify (e=f4) 1'643 579 462
ECDSA 256 128 bits verify N/A N/A 1'098
ECDSA 384 192 bits verify N/A N/A 484
ECDSA 521 260 bits verify N/A N/A 239

Diffie-Hellman Key Exchange

DH group Strength Operations/s gmp gcrypt openssl gmp* gcrypt* openssl*
MODP 768 62 bits A=g^a mod p 1'631 756 1'040 3'847 2'121 2'786
S=B^a mod p 1'931 565 1'119 5'474 1792 3'300
MODP 1024 73 bits A=g^a mod p 805 342 484 2'722 1'381 1'764
S=B^a mod p 866 232 382 3'271 1037 1'993
MODP 1536 89 bits A=g^a mod p 268 130 99 1'340 783 873
S=B^a mod p 279 88 135 1'590 574 920
MODP 2048 103 bits A=g^a mod p 121 56 70 592 320 343
S=B^a mod p 123 38 50 634 216 366
MODP 3072 125 bits A=g^a mod p 38 20 21 282 172 159
S=B^a mod p 38 13 14 289 118 165
MODP 4096 142 bits A=g^a mod p 16 6 8 125 75 70
S=B^a mod p 16 4 9 126 49 67
MODP 6144 171 bits A=g^a mod p 5 2 3 59 38 31
S=B^a mod p 5 1 1 61 25 31
MODP 8192 193 bits A=g^a mod p 2 1 0 34 22 17
S=B^a mod p 2 0 1 39 14 18
ECP 192 96 bits A=g^a mod p N/A N/A 988 -
S=B^a mod p N/A N/A 1'058
ECP 224 112 bits A=g^a mod p N/A N/A 873
S=B^a mod p N/A N/A 963
ECP 256 128 bits A=g^a mod p N/A N/A 823
S=B^a mod p N/A N/A 851
ECP 384 192 bits A=g^a mod p N/A N/A 360
S=B^a mod p N/A N/A 364
ECP 521 260 bits A=g^a mod p N/A N/A 180
S=B^a mod p N/A N/A 210

* = using reduced exponent size (libstrongswan.dh_exponent_ansi_x9_42 = no) as recommended by RFC3526