15b37fcf3Sryker 25b37fcf3SrykerMore number for the questions about SSL overheads.... 35b37fcf3Sryker 4*0a5d6edeSdjmThe following numbers were generated on a Pentium pro 200, running Linux. 55b37fcf3SrykerThey give an indication of the SSL protocol and encryption overheads. 65b37fcf3Sryker 75b37fcf3SrykerThe program that generated them is an unreleased version of ssl/ssltest.c 85b37fcf3Srykerwhich is the SSLeay ssl protocol testing program. It is a single process that 95b37fcf3Srykertalks both sides of the SSL protocol via a non-blocking memory buffer 105b37fcf3Srykerinterface. 115b37fcf3Sryker 125b37fcf3SrykerHow do I read this? The protocol and cipher are reasonable obvious. 135b37fcf3SrykerThe next number is the number of connections being made. The next is the 14*0a5d6edeSdjmnumber of bytes exchanged between the client and server side of the protocol. 155b37fcf3SrykerThis is the number of bytes that the client sends to the server, and then 165b37fcf3Srykerthe server sends back. Because this is all happening in one process, 175b37fcf3Srykerthe data is being encrypted, decrypted, encrypted and then decrypted again. 185b37fcf3SrykerIt is a round trip of that many bytes. Because the one process performs 195b37fcf3Srykerboth the client and server sides of the protocol and it sends this many bytes 205b37fcf3Srykereach direction, multiply this number by 4 to generate the number 215b37fcf3Srykerof bytes encrypted/decrypted/MACed. The first time value is how many seconds 225b37fcf3Srykerelapsed doing a full SSL handshake, the second is the cost of one 235b37fcf3Srykerfull handshake and the rest being session-id reuse. 245b37fcf3Sryker 255b37fcf3SrykerSSLv2 RC4-MD5 1000 x 1 12.83s 0.70s 265b37fcf3SrykerSSLv3 NULL-MD5 1000 x 1 14.35s 1.47s 275b37fcf3SrykerSSLv3 RC4-MD5 1000 x 1 14.46s 1.56s 285b37fcf3SrykerSSLv3 RC4-MD5 1000 x 1 51.93s 1.62s 1024bit RSA 295b37fcf3SrykerSSLv3 RC4-SHA 1000 x 1 14.61s 1.83s 305b37fcf3SrykerSSLv3 DES-CBC-SHA 1000 x 1 14.70s 1.89s 315b37fcf3SrykerSSLv3 DES-CBC3-SHA 1000 x 1 15.16s 2.16s 325b37fcf3Sryker 335b37fcf3SrykerSSLv2 RC4-MD5 1000 x 1024 13.72s 1.27s 345b37fcf3SrykerSSLv3 NULL-MD5 1000 x 1024 14.79s 1.92s 355b37fcf3SrykerSSLv3 RC4-MD5 1000 x 1024 52.58s 2.29s 1024bit RSA 365b37fcf3SrykerSSLv3 RC4-SHA 1000 x 1024 15.39s 2.67s 375b37fcf3SrykerSSLv3 DES-CBC-SHA 1000 x 1024 16.45s 3.55s 385b37fcf3SrykerSSLv3 DES-CBC3-SHA 1000 x 1024 18.21s 5.38s 395b37fcf3Sryker 405b37fcf3SrykerSSLv2 RC4-MD5 1000 x 10240 18.97s 6.52s 415b37fcf3SrykerSSLv3 NULL-MD5 1000 x 10240 17.79s 5.11s 425b37fcf3SrykerSSLv3 RC4-MD5 1000 x 10240 20.25s 7.90s 435b37fcf3SrykerSSLv3 RC4-MD5 1000 x 10240 58.26s 8.08s 1024bit RSA 445b37fcf3SrykerSSLv3 RC4-SHA 1000 x 10240 22.96s 11.44s 455b37fcf3SrykerSSLv3 DES-CBC-SHA 1000 x 10240 30.65s 18.41s 465b37fcf3SrykerSSLv3 DES-CBC3-SHA 1000 x 10240 47.04s 34.53s 475b37fcf3Sryker 485b37fcf3SrykerSSLv2 RC4-MD5 1000 x 102400 70.22s 57.74s 495b37fcf3SrykerSSLv3 NULL-MD5 1000 x 102400 43.73s 31.03s 505b37fcf3SrykerSSLv3 RC4-MD5 1000 x 102400 71.32s 58.83s 515b37fcf3SrykerSSLv3 RC4-MD5 1000 x 102400 109.66s 59.20s 1024bit RSA 525b37fcf3SrykerSSLv3 RC4-SHA 1000 x 102400 95.88s 82.21s 535b37fcf3SrykerSSLv3 DES-CBC-SHA 1000 x 102400 173.22s 160.55s 545b37fcf3SrykerSSLv3 DES-CBC3-SHA 1000 x 102400 336.61s 323.82s 555b37fcf3Sryker 565b37fcf3SrykerWhat does this all mean? Well for a server, with no session-id reuse, with 575b37fcf3Srykera transfer size of 10240 bytes, using RC4-MD5 and a 512bit server key, 58*0a5d6edeSdjma Pentium pro 200 running Linux can handle the SSLv3 protocol overheads of 595b37fcf3Srykerabout 49 connections a second. Reality will be quite different :-). 605b37fcf3Sryker 61*0a5d6edeSdjmRemember the first number is 1000 full ssl handshakes, the second is 625b37fcf3Sryker1 full and 999 with session-id reuse. The RSA overheads for each exchange 635b37fcf3Srykerwould be one public and one private operation, but the protocol/MAC/cipher 645b37fcf3Srykercost would be quite similar in both the client and server. 655b37fcf3Sryker 665b37fcf3Srykereric (adding numbers to speculation) 675b37fcf3Sryker 685b37fcf3Sryker--- Appendix --- 695b37fcf3Sryker- The time measured is user time but these number a very rough. 705b37fcf3Sryker- Remember this is the cost of both client and server sides of the protocol. 71ec3c43edSjmc- The TCP/kernel overhead of connection establishment is normally the 725b37fcf3Sryker killer in SSL. Often delays in the TCP protocol will make session-id 735b37fcf3Sryker reuse look slower that new sessions, but this would not be the case on 745b37fcf3Sryker a loaded server. 75*0a5d6edeSdjm- The TCP round trip latencies, while slowing individual connections, 765b37fcf3Sryker would have minimal impact on throughput. 775b37fcf3Sryker- Instead of sending one 102400 byte buffer, one 8k buffer is sent until 785b37fcf3Sryker- the required number of bytes are processed. 79*0a5d6edeSdjm- The SSLv3 connections were actually SSLv2 compatible SSLv3 headers. 805b37fcf3Sryker- A 512bit server key was being used except where noted. 815b37fcf3Sryker- No server key verification was being performed on the client side of the 825b37fcf3Sryker protocol. This would slow things down very little. 835b37fcf3Sryker- The library being used is SSLeay 0.8.x. 84*0a5d6edeSdjm- The normal measuring system was commands of the form 855b37fcf3Sryker time ./ssltest -num 1000 -bytes 102400 -cipher DES-CBC-SHA -reuse 865b37fcf3Sryker This modified version of ssltest should be in the next public release of 875b37fcf3Sryker SSLeay. 885b37fcf3Sryker 89*0a5d6edeSdjmThe general cipher performance number for this platform are 905b37fcf3Sryker 915b37fcf3SrykerSSLeay 0.8.2a 04-Sep-1997 925b37fcf3Srykerbuilt on Fri Sep 5 17:37:05 EST 1997 935b37fcf3Srykeroptions:bn(64,32) md2(int) rc4(idx,int) des(ptr,risc1,16,long) idea(int) blowfish(ptr2) 945b37fcf3SrykerC flags:gcc -DL_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -m486 -Wall -Wuninitialized 955b37fcf3SrykerThe 'numbers' are in 1000s of bytes per second processed. 965b37fcf3Srykertype 8 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes 975b37fcf3Srykermd2 131.02k 368.41k 500.57k 549.21k 566.09k 985b37fcf3Srykermdc2 535.60k 589.10k 595.88k 595.97k 594.54k 995b37fcf3Srykermd5 1801.53k 9674.77k 17484.03k 21849.43k 23592.96k 1005b37fcf3Srykersha 1261.63k 5533.25k 9285.63k 11187.88k 11913.90k 1015b37fcf3Srykersha1 1103.13k 4782.53k 7933.78k 9472.34k 10070.70k 1025b37fcf3Srykerrc4 10722.53k 14443.93k 15215.79k 15299.24k 15219.59k 1035b37fcf3Srykerdes cbc 3286.57k 3827.73k 3913.39k 3931.82k 3926.70k 1045b37fcf3Srykerdes ede3 1443.50k 1549.08k 1561.17k 1566.38k 1564.67k 1055b37fcf3Srykeridea cbc 2203.64k 2508.16k 2538.33k 2543.62k 2547.71k 1065b37fcf3Srykerrc2 cbc 1430.94k 1511.59k 1524.82k 1527.13k 1523.33k 1075b37fcf3Srykerblowfish cbc 4716.07k 5965.82k 6190.17k 6243.67k 6234.11k 1085b37fcf3Sryker sign verify 1095b37fcf3Srykerrsa 512 bits 0.0100s 0.0011s 1105b37fcf3Srykerrsa 1024 bits 0.0451s 0.0012s 1115b37fcf3Srykerrsa 2048 bits 0.2605s 0.0086s 1125b37fcf3Srykerrsa 4096 bits 1.6883s 0.0302s 1135b37fcf3Sryker 114