My Shiny Weblog!

programming, photography and lifestyle

Скорост на OpenSSL

Като един стар потребител на GBDE и GELI под FreeBSD, трябваше да реша дали да ползвам криптография на хард диска под Mac OS X. Такава опция се предлага под името FileVault, за съжаление не се предлага криптиране на всичко, а само на директорията на потребителя. Може би е по-добре от нищо, въпреки че този софтуер не е с отворен код, не е много ясно колко е сигурен и дали няма някакви задни вратички. Тъй като не съм ползвал GELI на новите Intel процесори реших да изпробвам скоростта на криптографията за да добия представа колко бързо биха се движили нещата на един MacBook. Резултатите определено ме изненадаха. Това е изхода от командата openssl speed на Intel Core 2 Duo T7500 @2.2 Ghz под Mac OS X:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
OpenSSL 0.9.7l 28 Sep 2006
built on: Sun Sep 23 16:08:24 PDT 2007
options:bn(64,32) md2(int) rc4(ptr,char) des(idx,cisc,16,long) aes(partial) blowfish(ptr) 
compiler: cc -arch ppc -arch ppc64 -arch i386 -arch x86_64 -g -Os -pipe -arch ppc -arch ppc64 -arch i386 -arch x86_64 -pipe -DOPENSSL_NO_IDEA -DFAR=
available timing options: TIMEB USE_TOD HZ=100 [sysconf value]
timing function used: getrusage
The 'numbers' are in 1000s of bytes per second processed.
type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes
md2               1552.85k     3271.94k     4524.06k     5004.22k     5164.34k
mdc2              4204.74k     4619.19k     4757.31k     4799.52k     4809.07k
md4              15855.41k    52902.28k   142198.50k   246969.80k   317057.24k
md5              14586.42k    49474.84k   135840.67k   240148.54k   310968.00k
hmac(md5)        23251.10k    67720.57k   162782.12k   248777.43k   295469.61k
sha1             13182.11k    38272.95k    84104.41k   120792.72k   138000.81k
rmd160           10561.06k    29464.19k    61316.10k    84022.98k    94703.13k
rc4              95640.12k   101646.10k   103312.30k   104252.21k   104393.09k
des cbc          16022.67k    16444.10k    16548.69k    16572.95k    16563.80k
des ede3         14062.49k    14317.53k    14461.25k    14502.85k    14512.43k
idea cbc             0.00         0.00         0.00         0.00         0.00 
rc2 cbc          20614.51k    21266.65k    21172.40k    21248.60k    21301.63k
rc5-32/12 cbc   108723.99k   127935.88k   136458.55k   142723.90k   140491.69k
blowfish cbc     54604.80k    58116.54k    58851.96k    59112.73k    59182.62k
cast cbc         36548.64k    38542.89k    38942.15k    39032.53k    39075.71k
aes-128 cbc      42344.46k    43862.27k    44255.02k    44202.57k    44116.52k
aes-192 cbc      36427.04k    37333.01k    37566.63k    37475.22k    37503.20k
aes-256 cbc      31756.28k    32454.77k    32637.07k    32536.94k    32590.66k
                  sign    verify    sign/s verify/s
rsa  512 bits 0.001318s 0.000088s    758.8  11322.0
rsa 1024 bits 0.006495s 0.000284s    154.0   3523.2
rsa 2048 bits 0.038285s 0.000990s     26.1   1010.2
rsa 4096 bits 0.245003s 0.003464s      4.1    288.7
                  sign    verify    sign/s verify/s
dsa  512 bits 0.000852s 0.001004s   1173.1    996.4
dsa 1024 bits 0.002756s 0.003275s    362.9    305.4
dsa 2048 bits 0.009637s 0.011214s    103.8     89.2

Изненадващото тук са флаговете, с които е компилирана OpenSSL библиотеката. Многото архитектури са необходими, защото формата е Mach-O Universal Binary, но защо по дяволите са им debugging symbols и оптимизация по размер на мен не ми е ясно. За да сравня скоростите пуснах същата команда под FreeBSD на подобен AMD процесор – Athlon 64 BE-2350 @2.1 Ghz. Ето резултатите:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
OpenSSL 0.9.7e-p1 25 Oct 2004
built on: Tue Jan 15 23:14:00 UTC 2008
options:bn(64,64) md2(int) rc4(ptr,int) des(ptr,risc2,4,int) aes(partial) blowfish(idx) 
compiler: cc
available timing options: USE_TOD HZ=128 [sysconf value]
timing function used: getrusage
The 'numbers' are in 1000s of bytes per second processed.
type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes
md2               1450.30k     3046.74k     4234.28k     4708.83k     4860.78k
mdc2              6157.28k     7144.84k     7452.65k     7531.02k     7556.85k
md4              16149.12k    52186.87k   138171.42k   232540.73k   290777.63k
md5              12785.97k    40424.24k    98705.48k   156653.62k   188383.28k
hmac(md5)        16880.80k    48613.17k   110836.90k   164453.99k   190657.17k
sha1             12315.62k    35868.05k    79622.37k   114612.21k   130918.83k
rmd160           10203.07k    26992.17k    55980.67k    76481.20k    85377.83k
rc4             159730.21k   167051.92k   172490.07k   173262.90k   173469.21k
des cbc          41227.53k    42887.93k    43608.70k    43793.49k    43847.37k
des ede3         16126.92k    16532.56k    16658.32k    16737.51k    16669.78k
idea cbc             0.00         0.00         0.00         0.00         0.00 
rc2 cbc          22156.48k    22952.47k    22989.78k    23065.41k    22981.71k
rc5-32/12 cbc    97653.25k   106976.49k   109700.90k   110490.45k   110563.13k
blowfish cbc     72234.94k    77850.37k    78994.44k    79397.11k    79810.08k
cast cbc         55748.97k    58467.84k    59135.72k    59470.92k    59308.97k
aes-128 cbc      93595.45k    97407.40k    99297.23k    99676.31k    99890.51k
aes-192 cbc      83154.82k    86677.42k    88213.47k    88343.16k    88592.05k
aes-256 cbc      75277.20k    78369.54k    79912.43k    79991.79k    80222.88k
                  sign    verify    sign/s verify/s
rsa  512 bits   0.0003s   0.0000s   3800.2  44370.9
rsa 1024 bits   0.0008s   0.0001s   1254.2  19837.2
rsa 2048 bits   0.0042s   0.0001s    238.2   7371.1
rsa 4096 bits   0.0264s   0.0004s     37.9   2430.1
                  sign    verify    sign/s verify/s
dsa  512 bits   0.0002s   0.0002s   6090.2   5498.6
dsa 1024 bits   0.0004s   0.0005s   2614.9   2185.4
dsa 2048 bits   0.0011s   0.0014s    875.9    713.2

Тук флагове за компилатора няма и архитектурата е само AMD64. Но разликите в скоростите са много големи. Казано накратко, вторите резултати показват около 2.5 пъти по-бърз AES, 8 пъти по-бърз DSA и RSA. Това е доста интересен факт, очаквах да има някакви разлики в скоростта, но не и толкова големи. Този факт може да се дължи на много неща, тъй като между двете машини има прекалено големи разлики в софтуера и хардуера. Дори OpenSSL версийте са различни. Мисля, че и паметите играят някаква роля в случая, лаптопа по традиция е с DDR2 667, a другата машина е с доста бърза DDR2 800. За сметка на това пък Core 2 има доста повече кеш. Глупаво е да се правят заключения за каквото и да било от тези резултати, не знам как биха се отразили и на скороста на FileVault. Публикувам ги тук просто, като интересен факт.