「暗号化したら性能が落ちた」、「暗号化したらCPU使用率が増加した」なんて事象は多くあると思います。
今回は「使用しているCPUが暗号化ハードウェアアクセラレーションが動作しているのか?」を確認する手順を紹介します。
使用しているCPUがハードウェアアクセラレーションに対応しているのか?
はCPUベンダーに問い合わせましょう。
ハードウェアアクセラレーションとは?
ハードウェアアクセラレーションとはなんでしょう?
通常のCPU上で動作するソフトウェアの実装では処理のレイテンシやスループットが遅い、消費電力が大きい、などといった問題があるような場合がある。
その際に、ハードウェア実装による支援で実行速度などを加速(アクセラレーション)し、
システム全体の性能や効率を向上させる技術である。
これでは何を言っているかわからないですね。。。
簡単に説明すると、
- 特定の機能を処理をさせるためにその特定の機能をCPUに組み込んでおく
- 組み込んだ機能を使用して処理を行い、より効率的に行うことを”アクセラレーション”
ということになります。
最近では画像処理に特化したGPU(Graphics Processing Unit)、
浮動小数点演算を専門に行うFPU(Floating Point Unit)、
音声などのデジタル信号処理に特化したDSP(Digital Signal Processor)などがあります。
暗号化ハードウェアアクセラレーションとは?
暗号化ハードウェアアクセラレーションとは何でしょう?
暗号化ハードウェアアクセラレーションとは、暗号化・復号化に特化したCPUの演算ユニットになります。
通常暗号化・復号化はCPUの演算としては大変重い処理になります。
そこでより効率的に暗号化・復号化するために、CPUに演算ユニットを組み込んでアクセラレーションさせるわけです。
暗号化技術はメジャーであるため、
最近のIntel製CPUであれば大抵暗号化ハードウェアアクセラレーションは導入されております。
それだけセキュリティがメジャーになり、暗号化がマストの機能としている証拠です。
暗号化ハードウェアアクセラレーションが動作確認
CPUが暗号化ハードウェアアクセラレーションが動作しているか確認するには、
ほぼすべての暗号アルゴリズムを使用できる「OpenSSL」を使用することオススメします。
参考:OpenSSL(https://www.openssl.org/)
Linux環境
まずはOpenSSLをインストールする手順は↓になります。
yum install openssl
では、実際にOpenSSLで暗号化アクセラレーションを確認してみます。
openssl speed
↓が実行結果になります。
数値が小さいとアクセラレーションが動作していないので、バイオスからCPUの設定を確認してみてください。
OpenSSL 1.0.2k-fips 26 Jan 2017
built on: reproducible build, date unspecified
options:bn(64,64) md2(int) rc4(16x,int) des(idx,cisc,16,int) aes(partial) idea(int) blowfish(idx)
compiler: gcc -I. -I.. -I../include -fPIC -DOPENSSL_PIC -DZLIB -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -DKRB5_MIT -m64 -DL_ENDIAN -Wall -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -Wa,--noexecstack -DPURIFY -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DRC4_ASM -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM -DECP_NISTZ256_ASM
The 'numbers' are in 1000s of bytes per second processed.
type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes
md2 2279.59k 4938.92k 6600.53k 7070.76k 7337.18k
mdc2 0.00 0.00 0.00 0.00 0.00
md4 31494.49k 127570.66k 295093.35k 383898.45k 593672.17k
md5 23270.85k 82694.24k 203724.58k 349466.45k 407390.23k
hmac(md5) 26959.19k 80615.37k 184179.74k 348252.93k 420085.76k
sha1 31707.07k 97720.59k 209027.04k 352261.97k 299889.16k
rmd160 23665.96k 55893.78k 104798.66k 142741.33k 142905.65k
rc4 162527.91k 325344.75k 365736.96k 451112.44k 396052.22k
des cbc 40887.81k 41067.24k 37180.67k 34788.46k 43656.53k
des ede3 15146.81k 14421.24k 15460.27k 16217.92k 16859.00k
idea cbc 48064.13k 50112.11k 51953.59k 52245.33k 47396.57k
seed cbc 46039.35k 46640.13k 46887.37k 47156.05k 47313.96k
rc2 cbc 22341.97k 23215.01k 23734.83k 23097.65k 22421.30k
rc5-32/12 cbc 85066.49k 101131.72k 104622.25k 109036.37k 109703.96k
blowfish cbc 72279.83k 78941.04k 79191.25k 78629.43k 77271.04k
cast cbc 65433.16k 71680.00k 72602.67k 73996.48k 70683.31k
aes-128 cbc 50335.85k 59084.42k 68833.92k 57635.71k 52230.83k
aes-192 cbc 35182.02k 56309.51k 58375.89k 60614.78k 59658.24k
aes-256 cbc 48926.12k 33287.36k 48098.53k 46813.01k 45510.35k
camellia-128 cbc 56041.56k 84932.21k 92463.76k 82087.25k 99178.27k
camellia-192 cbc 48332.30k 61399.09k 58987.35k 76115.90k 70334.17k
camellia-256 cbc 41649.91k 60283.37k 68456.77k 62221.65k 74739.95k
sha256 18143.89k 65219.76k 86792.11k 127246.20k 157750.61k
sha512 15876.54k 70561.12k 135738.51k 156780.37k 194005.84k
whirlpool 16331.95k 34973.87k 52035.76k 71146.49k 69584.21k
aes-128 ige 52675.24k 64097.87k 61633.83k 50962.77k 56242.55k
aes-192 ige 50935.14k 50835.73k 53531.75k 53038.90k 45303.83k
aes-256 ige 40062.65k 45925.65k 43612.72k 44628.33k 30172.72k
ghash 444077.61k 672676.36k 999207.58k 1075834.19k 1086913.18k
sign verify sign/s verify/s
rsa 512 bits 0.000139s 0.000010s 7193.2 99059.4
rsa 1024 bits 0.000421s 0.000029s 2373.1 34978.7
rsa 2048 bits 0.003090s 0.000089s 323.6 11202.3
rsa 4096 bits 0.022472s 0.000361s 44.5 2771.5
sign verify sign/s verify/s
dsa 512 bits 0.000137s 0.000119s 7298.0 8393.7
dsa 1024 bits 0.000306s 0.000339s 3265.2 2947.4
dsa 2048 bits 0.001110s 0.001314s 900.5 761.3
sign verify sign/s verify/s
256 bit ecdsa (nistp256) 0.0001s 0.0003s 8500.5 3259.6
384 bit ecdsa (nistp384) 0.0005s 0.0024s 1840.5 424.9
521 bit ecdsa (nistp521) 0.0015s 0.0023s 686.2 438.2
op op/s
256 bit ecdh (nistp256) 0.0002s 4438.8
384 bit ecdh (nistp384) 0.0019s 535.6
521 bit ecdh (nistp521) 0.0015s 647.1
Windows環境
Windowsではexeファイルからインストールを行います。 https://wiki.openssl.org/index.php/Binariesからインストールすることができます。
32Bit版と64Bit版があるので注意してください。
openssl speed
↓が実行結果になります。
C:\OpenSSL-Win64\bin\openssl.exe speed
↓が実行結果になります。数値が小さいとアクセラレーションが動作していないので、バイオスからCPUの設定を確認してみてください。
OpenSSL 1.1.0g 2 Nov 2017
built on: reproducible build, date unspecified
options:bn(64,64) rc4(16x,int) des(long) aes(partial) idea(int) blowfish(ptr)
compiler: cl " "VC-WIN64A
The 'numbers' are in 1000s of bytes per second processed.
type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes 16384 bytes
md2 0.00 0.00 0.00 0.00 0.00 0.00
mdc2 11968.63k 14174.08k 15524.72k 15236.77k 15240.04k 15554.81k
md4 39092.94k 127598.14k 321339.91k 517867.56k 612183.17k 633334.39k
md5 85834.51k 212298.24k 407567.61k 511915.49k 558301.18k 561408.68k
hmac(md5) 34400.01k 108299.74k 246339.03k 429680.09k 534839.64k 556034.73k
sha1 93547.53k 239259.50k 504027.84k 674043.22k 767996.38k 779527.95k
rmd160 23313.63k 60901.75k 117809.49k 153580.54k 169492.48k 171420.33k
rc4 532361.82k 584174.02k 488131.07k 477350.91k 457777.93k 458156.71k
des cbc 63985.71k 64872.96k 62350.65k 62287.74k 62126.71k 62998.67k
des ede3 23583.65k 24059.93k 23934.28k 22363.98k 23951.83k 24285.25k
idea cbc 79223.01k 81856.98k 82739.29k 83287.98k 83156.99k 83290.79k
seed cbc 66586.10k 67872.51k 67940.61k 67929.43k 68856.49k 69890.35k
rc2 cbc 37085.70k 37577.64k 37876.99k 37896.87k 37885.27k 37896.19k
rc5-32/12 cbc 0.00 0.00 0.00 0.00 0.00 0.00
blowfish cbc 96057.77k 101196.07k 102456.49k 102923.95k 104668.20k 106126.93k
cast cbc 102505.10k 107485.76k 109241.43k 108993.92k 109057.34k 110751.70k
aes-128 cbc 90333.55k 100321.67k 91040.72k 96689.50k 120387.56k 123484.92k
aes-192 cbc 86221.66k 94042.59k 100437.00k 105382.92k 104826.43k 104204.30k
aes-256 cbc 79175.11k 88095.47k 89897.56k 90563.58k 89806.17k 90854.74k
camellia-128 cbc 93169.84k 142213.72k 161890.65k 168188.71k 169347.75k 169935.19k
camellia-192 cbc 80523.54k 111180.17k 122162.71k 125057.71k 125845.50k 126107.65k
camellia-256 cbc 80690.91k 109659.37k 118858.63k 124953.94k 126050.30k 126916.33k
sha256 57056.38k 135874.28k 257871.04k 323560.15k 343233.88k 357218.55k
sha512 43514.53k 169828.35k 301612.71k 447498.34k 519566.66k 532032.17k
whirlpool 30189.78k 64736.45k 108283.05k 131898.52k 142518.50k 141996.95k
aes-128 ige 110499.76k 118170.11k 117925.38k 118858.85k 118892.60k 119383.14k
aes-192 ige 93570.14k 98765.65k 101480.34k 97292.97k 101624.03k 101651.48k
aes-256 ige 81511.62k 85562.67k 85616.13k 87167.34k 86977.19k 87158.08k
ghash 1105736.65k 3521044.95k 6299218.94k 7419105.82k 7766433.79k 7779631.10k
sign verify sign/s verify/s
rsa 512 bits 0.000073s 0.000005s 13728.0 218854.3
rsa 1024 bits 0.000129s 0.000009s 7763.4 114769.2
rsa 2048 bits 0.000819s 0.000024s 1220.3 42375.1
rsa 3072 bits 0.002311s 0.000048s 432.7 20696.9
rsa 4096 bits 0.005032s 0.000085s 198.7 11767.9
rsa 7680 bits 0.047619s 0.000283s 21.0 3532.0
rsa 15360 bits 0.245046s 0.001031s 4.1 969.8
sign verify sign/s verify/s
dsa 512 bits 0.000080s 0.000057s 12461.9 17604.2
dsa 1024 bits 0.000126s 0.000108s 7942.8 9239.3
dsa 2048 bits 0.000291s 0.000287s 3435.6 3481.9
sign verify sign/s verify/s
160 bit ecdsa (secp160r1) 0.0001s 0.0004s 10265.7 2828.8
192 bit ecdsa (nistp192) 0.0001s 0.0004s 9004.6 2340.6
224 bit ecdsa (nistp224) 0.0001s 0.0005s 6944.9 1838.0
256 bit ecdsa (nistp256) 0.0001s 0.0001s 17824.2 9189.0
384 bit ecdsa (nistp384) 0.0003s 0.0011s 3627.4 872.4
521 bit ecdsa (nistp521) 0.0005s 0.0022s 1906.2 457.0
163 bit ecdsa (nistk163) 0.0003s 0.0006s 3609.6 1581.0
233 bit ecdsa (nistk233) 0.0005s 0.0009s 1998.0 1171.1
283 bit ecdsa (nistk283) 0.0007s 0.0013s 1340.8 741.4
409 bit ecdsa (nistk409) 0.0016s 0.0021s 616.6 468.9
571 bit ecdsa (nistk571) 0.0034s 0.0045s 291.2 222.0
163 bit ecdsa (nistb163) 0.0003s 0.0007s 3610.6 1534.5
233 bit ecdsa (nistb233) 0.0005s 0.0009s 2011.7 1142.3
283 bit ecdsa (nistb283) 0.0007s 0.0014s 1333.8 698.4
409 bit ecdsa (nistb409) 0.0016s 0.0022s 613.2 452.5
571 bit ecdsa (nistb571) 0.0034s 0.0048s 292.5 208.2
253 bit ecdsa (X25519) 0.0000s 0.0000s 1.$ 1.$
op op/s
160 bit ecdh (secp160r1) 0.0003s 3360.9
192 bit ecdh (nistp192) 0.0004s 2847.0
224 bit ecdh (nistp224) 0.0005s 2203.1
256 bit ecdh (nistp256) 0.0001s 15683.7
384 bit ecdh (nistp384) 0.0010s 1005.8
521 bit ecdh (nistp521) 0.0018s 546.0
163 bit ecdh (nistk163) 0.0003s 3284.7
233 bit ecdh (nistk233) 0.0004s 2479.6
283 bit ecdh (nistk283) 0.0006s 1539.7
409 bit ecdh (nistk409) 0.0010s 973.5
571 bit ecdh (nistk571) 0.0023s 443.4
163 bit ecdh (nistb163) 0.0003s 3235.0
233 bit ecdh (nistb233) 0.0004s 2391.8
283 bit ecdh (nistb283) 0.0007s 1463.4
409 bit ecdh (nistb409) 0.0011s 928.6
571 bit ecdh (nistb571) 0.0023s 426.7
253 bit ecdh (X25519) 0.0000s 1.$
その他お役立ち情報
特定の暗号化アルゴリズムも指定できます。
openssl speed <暗号アルゴリズム>
鈴木春洋/岩田彰 ソフトリサーチセンター 2002年05月