Linux*/Java* スタック上におけるインテル® AES-NI パフォーマンス・テスト

同カテゴリーの次の記事

インテル® AES New Instructions (インテル® AES-NI)

この記事は、インテル® ソフトウェア・ネットワークに掲載されている「Intel® AES-NI Performance Testing on Linux/Java Stack」(http://software.intel.com/en-us/articles/intel-aes-ni-performance-testing-on-linuxjava-stack/) の日本語参考訳です。


目次

1. 要旨

2. はじめに

2.1. 目標
2.2. インテル® AES-NI の機能
2.3. 目的
2.4. 対象者
2.5. 用語
2.6. 謝辞

3. システムのセットアップと設定

3.1. コンポーネント
3.2. テストシステムでインテル® AES-NI を有効/無効にする
3.3. ローカルホストからインテル® AES-NI ステータスを確認する
3.4. ソフトウェアのセットアップ
3.4.1. Oracle* JVM でインテル® AES-NI を有効にする

4. テストケース

5. パフォーマンス・テスト結果

5.1. JDK パフォーマンスの向上 – 1 分間に実行される命令数の評価
5.2. アプリケーション・パフォーマンスの向上 – 異なるファイルサイズおよびキーサイズのインテル® AES-NI パフォーマンスへの影響

5.2.1. AES128
5.2.2. AES256
5.2.3. 向上率

6. セキュリティーの使用法と有用性についての考察

7. まとめと今後の課題

8. 関連ドキュメント

表の目次

表 1 – 用語
表 2 – システム・コンポーネント
表 3 – BIOS でインテル® AES-NI を有効にする方法
表 4 – 1 分間に実行される AES 暗号化命令数の比較
表 5 – AES128 暗号化/復号化パフォーマンスの測定値
表 6 – AES256 暗号化/復号化パフォーマンスの測定値
表 7 – 一般的なファイルサイズの例

図の目次

図 1 – AES128 暗号化/復号化パフォーマンスの測定値
図 2 – AES256 暗号化/復号化パフォーマンスの測定値
図 3 – 暗号化パフォーマンスの向上率
図 4 – 復号化パフォーマンスの向上率

要旨

最新のコンピューター技術とネットワーキング技術の開発により、かつてないほど社会の「つながり」が深くなり、常に「オンライン」状態となったことで、データ量が飛躍的に増加しました。このようなデータには、金融、医療、個人情報、さらに国家安全保障に関連するものなど、重要な情報が含まれており、データを保護するためには、高度なセキュリティーとプライバシー対策が不可欠です。

米国の医療分野では、使用/保管されている個人の健康情報 (PHI: Personal Health Information) の暗号化を義務付ける Health Insurance Portability and Accountability Act (HIPAA、医療保険の携行性と責任に関する法律) などの法律があります [HIPAA Security Rule – “Implement a mechanism to encrypt and decrypt EPHI.” Rule 164.312(e)(2)(ii), 164.312(a)(2)(iv) を参照]。

しかしながら、セキュリティー技術の導入は、費用やシステムの複雑さ、(ソフトウェアのセキュリティー・レイヤーでの追加処理により) アプリケーションの応答時間が長くなるなどの理由から、後回しにされることがあります。導入費用とシステムが複雑になることは避けられないかもしれませんが、アプリケーション・パフォーマンスの低下は革新的な技術により軽減できます。その一例として、ハードウェア・ベースの暗号化/復号化機能を提供するインテル® AES New Instructions (インテル® AES-NI) があります。インテル® AES-NI を利用することで、データ保護に必要なセキュリティー・レイヤーの追加によりアプリケーション・パフォーマンスが低下しても、それを補うのに十分な高速化が得られる可能性があります。

ここでは、Linux*/Java* ソフトウェア・スタック上でインテル® AES-NI によるパフォーマンスの向上を測定し、インテル® AES-NI の利用が医療分野にとって有益であり、インテル® AES-NI によりさらに多くの組織が業界および消費者のセキュリティーに対する懸念を払拭できることを証明します。インテル® AES-NI を利用することで、アプリケーション・ファイルの暗号化/復号化において、一貫して大幅なパフォーマンスの向上が見られました。さまざまなキーサイズとファイルサイズで、暗号化では 38% (平均)復号化では 37.5% (平均) もパフォーマンスが向上しています。

2 . はじめに

2.1. 目標

この記事では、Linux*/Java* ソフトウェア・スタック上でインテル® AES-NI 命令 (詳細はセクション 2.2 を参照) を使用することで得られるパフォーマンスの向上を示します。サーバー向けのプロセッサーで最初に AES-NI に対応したのはインテル® Xeon® プロセッサー 5600 番台 (コード名: Westmere-EP) です。

ここでは、次の 2 つのケースにおいてインテル® AES-NI を有効/無効にした場合のパフォーマンスの向上を検証します。

  1. 全体的な Java* JDK パフォーマンスの向上
  2. アプリケーション・ファイルの暗号化/復号化パフォーマンスの向上

2.2. インテル® AES-NI の機能

インテル® AES-NI (http://www.intel.com/content/www/us/en/architecture-and-technology/advanced-encryption-standard–aes-/data-protection-aes-general-technology.html) は、新しいマイクロプロセッサー命令のセットです。AES アルゴリズムのサブステップを直接ハードウェアに実装し、AES アプリケーションの実行を高速化して、サイドチャネル攻撃を防ぎます。インテル® AES-NI には、最初と最後のラウンドの暗号化と復号化を高速化する 4 つの命令、各ラウンドでミックスカラム操作を行う命令、次のキーを生成する命令、キャリーなし乗算命令を高速化する CLMUL 命令の計 7 つの命令があります。

インテル® AES-NI のセキュリティー上の利点は 2 つあり、幅広い応用とサイドチャネル攻撃に対する抵抗力です。ビルトイン・ハードウェアにより暗号化が高速化されるため、データセンターにおける暗号化の導入を促進します。また、幅広く暗号化を利用できるため、より多くの情報を保護することができます。AES の純粋なソフトウェア実装は、サイドチャネル攻撃に対して脆弱です。インテル® AES-NI は、キャッシュとメモリーにおけるデータ操作/テーブル・ルックアップを減らすハードウェア実装なので、ソフトウェアのサイドチャネル攻撃のリスクは低下します。そのため、インテル® AES-NI は AES をより広い範囲で利用し、強固にデータを保護できるようにします。

2.3. 目的

この記事により、インテル® AES-NI 技術を利用するエンドユーザーは、インテル® AES-NI 対応ハードウェアで実行する Linux*/Java* ソフトウェア・スタックにおけるベンチマーク・メカニズムを確立し、インテル® AES-NI 命令を利用する利点とソフトウェア・ベースのインテル® AES-NI 実装を使用する利点を評価することができます。主な内容は次のとおりです。

  1. オペレーティング・システム、ソフトウェア・スタック、およびツールの定義
  2. インテル® AES-NI 対応プラットフォームとソフトウェア・スタック (オペレーティング・システムと API) の設定の定義
  3. 保管データのパフォーマンス・テスト結果
  4. a. SpecJVM2008 は、保管データのベンチマークで 20% 向上。
    b. Java* アプリケーションは、さまざまなファイルサイズ (50MB – 1GB) で一貫した範囲の向上。

  5. セキュリティーの使用法と有用性についての考察
  6. a. 医療機器
    b. 安全なパッチ管理

  7. パフォーマンス解析とセキュリティー解析

2.4. 対象者

この記事は、Linux*/Java* ソフトウェア・スタックにおけるインテル® AES-NI 命令のパフォーマンスへの影響を知りたいと考えるソフトウェア開発者および技術者向けです。

2.5. 用語

用語 説明
AES Advanced Encryption Standard の略。高度暗号化標準。
AES-NI AES New Instructions の略。AES の新しい命令。
JDK Java Development Kit の略。Java* 開発キット。
IDE Integrated Development Environment の略。統合開発環境。
BKM Best Known Method の略。最も一般的な手法。
CLMUL Carry-less Multiplication の略。キャリーなし乗算。
HIPAA Health Insurance Portability and Accountability Act の略。米国の医療保険の携行性と責任に関する法律。
PHI Personal Health Information の略。個人の健康情報。

表 1 – 用語

2.6. 謝辞

JVM においてインテル® AES-NI を利用するための BKM を提供してくださった Aleksey Ignatenko 氏に謝意を表します。

3. システムのセットアップと設定

3.1. コンポーネント

コンポーネント 詳細
ハードウェア インテル® Xeon® プロセッサー X5690 (開発コード名: Westmere-EP)、2 ソケット、3.47GHz、Supermicro BIOS X8DTU-LN4+ モード、12GB RAM、500GB HDD。
オペレーティング・システム Cent OS 5.6 (Linux* OS)。
アプリケーション 1. Oracle* JDK 1.7
2. Mozilla* nss ライブラリー 3.12.10 RTM
3. Java* IDE (NetBeans* 7.0) – コード開発用 (オプション)
アプリケーション 1. CPUID
2. SPECjvm2008

表 2 – システム・コンポーネント

3.2. テストシステムでインテル® AES-NI を有効/無効にする

ステップ 説明
1 システムの電源を投入し、F2 キーまたは Del キーを押してシステムの BIOS を起動します。
2 [Advanced] > [Processor & Clock Options] > [Intel® AES-NI] で [Enable] または [Disable] を選択します。(BIOS のベンダーが異なるとメニューは違うことがあります)
3 Enter キーを押します。
4 F10 キーを押して、設定の変更を保存し、終了します。
5 クライアントを再起動し、オペレーティング・システムをロードします。

表 3 – BIOS でインテル® AES-NI を有効にする方法

3.3. ローカルホストからインテル® AES-NI ステータスを確認する

Linux* の /proc/cpuinfo コマンドは、ハードウェアがインテル® AES-NI に対応しているかどうかを正確に検出できません。CPUID (http://www.etallen.com/cpuid/) ツールを使用することで、正確に検出することができます。以下に BIOS でインテル® AES-NI 命令が有効な Linux* での CPUID の出力例を示します。

3.4. ソフトウェアのセットアップ

3.4.1. Oracle* JVM でインテル® AES-NI を有効にする

JVM でインテル® AES-NI サポートを有効にする既知の最適手法 (BKM) は、インテルの社内用サイトから取得しました。この BKM の NSS 暗号化ライブラリーは、ハードウェアで利用可能な場合にインテル® AES-NI 命令を Oracle* JVM で使用します。

以下に JVM で AESNI サポートを有効にする手順を示します。

1. NSS アーカイブ http://ftp.mozilla.org/pub/mozilla.org/security/nss/releases/NSS_3_12_10_RTM/src/nss-3.12.10-with-nspr-4.8.8.tar.gz を入手します (CPU でサポートされていると、AES NI が有効になります)。

2. NSS ライブラリーをビルドします。

a. Linux* 上で unpack し、mozilla/security/nss に移動します。
b. 次のコマンドを実行します:
make BUILD_OPT=1 USE_64=1 nss_build_all
ここで、USE_64=1 は、x64 システムであることを示します。

3. NSS 暗号化プロバイダーを使用するように JDK を設定します。

a. mozilla/dist/LinuxXXXX_glibc_PTH_64_OPT.OBJ/lib からすべての *.so ファイルを取得します。
b. Oracle* JDK6 の場合、NSS ライブラリーを JDK6/jre/lib/amd64 に配置します。
c. attach の 2 つのファイルを JDK6/jre/lib/security に配置します (SunPKCS11 セキュリティー・プロバイダーが 1 番目に挿入されます)
d. 設定した JDK を使用してアプリケーションを実行します。

ステップ 3 が完了したら、システムでテストを開始できます。

4. テストケース

パフォーマンスの向上を評価するため、ここでは次の 2 つのテストケースを使用しました。

JDK パフォーマンスの向上: インテル® AES-NI が有効な場合の NSS ライブラリーをテストするため、SPECjvm2008 の crypto.aes ベンチマークを実行しました。

a. SPECjvm2008 フォルダーから次のコマンドを実行します:
java –server –jar SPECjvm2008.jar crypto.aes
b. BIOS でインテル® AES-NI をオン/オフにしてテストを実行し、結果を比較します。
c. SPECjvm2008 は http://www.spec.org/jvm2008/ からダウンロードできます。

以下に SPECjvm2008 ベンチマーク・テストにより提供されるレポートの例を示します。

アプリケーション・パフォーマンスの向上: アプリケーション・パフォーマンスへの影響をテストするため、ここでは AES128 キーと AES256 キーを使ってさまざまなサイズ (50MB、100MB、200MB、512MB、および 1GB) のファイルを暗号化/復号化する Java* アプリケーションを使って、アプリケーション・レベルの暗号化/復号化のパフォーマンスを測定しました。以下は、Java* アプリケーションによるログの例です。

5. パフォーマンス・テスト結果

5.1. JDK パフォーマンスの向上 – 1 分間に実行される命令数の評価

SPECjvm2008 (および付属のベンチマーク・ツール) を使用して、システムでインテル® AES-NI 命令が有効な場合と無効な場合の 1 分間に実行される命令数を比較しました。その結果を表 4 に示します。

Linux*/Java* の結果 (Cent OS 5.6 + nss ライブラリー + JDK 1.7)
非 AES-NI (命令/分) AES-NI (命令/分) 向上率 (%)
実行 1 523.36 627.18 19.84
実行 2 521.42 626.52 20.16
実行 3 523.98 626.24 19.52
平均 522.92 626.65 19.84

表 4 – 1 分間に実行される AES 暗号化命令数の比較

(値が大きいほうが良い)

重要なポイント: サーバー上で実行する JDK でインテル® AES-NI が有効な場合、SPECjvm2008 は約 20% のパフォーマンス向上を記録した。

5.2.アプリケーション・パフォーマンスの向上 – 異なるファイルサイズおよびキーサイズのインテル® AES-NI パフォーマンスへの影響

それぞれのテスト実行で、アプリケーションを 100 回ずつ実行し、その平均を計算しました。(つまり、テスト実行ごとにインテル® AES-NI が有効な場合と無効な場合を 100 回ずつ、計 200 回実行しました)。

5.2.1. AES128

非 AES-NI AES-NI 結果
テスト実行 サイズ 暗号化にかかった時間 (ミリ秒) 復号化にかかった時間 (ミリ秒) 暗号化にかかった時間 (ミリ秒) 復号化にかかった時間 (ミリ秒) 暗号化の向上率 (%) 復号化の向上率 (%)
1 50MB 1064 1109 562 658 47.18 40.67
2 50MB 1061 1155 575 685 45.81 40.69
平均 46.49 40.68
3 100MB 2011 2113 1189 1247 40.88 40.98
4 100MB 1996 2216 1275 1420 36.12 35.92
平均 38.50 38.45
5 200MB 4303 4422 2883 2820 33.00 36.23
6 200MB 4186 4320 2881/td> 2783 31.18 35.58
平均 32.09 35.90
7 512MB 10458 11680 6328 7421 39.49 36.46
8 512MB 10196 11697 5855 7323 42.58 37.39
平均 41.03 36.93
9 1GB 26451 24200 17235 16095 34.84 33.49
10 1GB 26113 24111 16051 16123 38.53 333.13

表 5 – AES128 暗号化/復号化パフォーマンスの測定値

(値が小さいほど良い)

図 1 – AES128 暗号化/復号化パフォーマンスの測定値

5.2.2. AES256

非 AES-NI AES-NI 結果
テスト実行 サイズ 暗号化にかかった時間 (ミリ秒) 復号化にかかった時間 (ミリ秒) 暗号化にかかった時間 (ミリ秒) 復号化にかかった時間 (ミリ秒) 暗号化の向上率 (%) 復号化の向上率 (%)
1 50MB 1026 1066 563 677 45.13 36.49
2 50MB 947 1084 559 638 40.97 41.14
平均 43.05 38.82
3 100MB 2036 2218 1297 1388 36.30 37.42
4 100MB 2045 2252 1274 1408 37.70 37.48
平均 37.00 37.45
5 200MB 4282 4962 2984 2881 30.31 41.94
6 200MB 4300 4989 2826 2880 34.28 42.27
平均 32.30 42.11
7 512MB 10754 11729 6401 7443 40.48 36.54
8 512MB 10081 11822 6402 7502 36.49 36.54
平均 38.49 36.54
9 1GB 23976 25295 15721 16043 34.43 36.58
10 1GB 23581 25033 15774 16266 33.11 35.02
平均 33.77 35.80

表 6 – AES256 暗号化/復号化パフォーマンスの測定値

(値が小さいほど良い)

図 2- AES256 暗号化/復号化パフォーマンスの測定値

5.2.3. 向上率

以下に、異なるキー長とファイルサイズにおける暗号化/復号化処理のパフォーマンス向上率を示します。

図 3 – 暗号化パフォーマンスの向上率

図 4 – 復号化パフォーマンスの向上率

重要なポイント

  • AES128 キーではインテル® AES-NI が有効な場合、ファイルの暗号化が 39% (平均) 向上し、復号化が 37% (平均) 向上した。
  • AES256 キーではインテル® AES-NI が有効な場合、ファイルの暗号化が 37% (平均) 向上し、復号化が 38% (平均) 向上した。

注:
性能に関するテストや評価は、特定のコンピューター・システム、コンポーネント、またはそれらを組み合わせて行ったものであり、このテストによるインテル製品の性能の概算の値を表しているものです。システム・ハードウェア、ソフトウェアの設計、構成、ワークロードなどの違いにより、実際の性能は掲載された性能テストや評価とは異なる場合があります。システムやコンポーネントの購入を検討される場合は、ほかの情報も参考にして、パフォーマンスを総合的に評価することをお勧めします。インテル製品の性能評価についてさらに詳しい情報をお知りになりたい場合は、「インテル・パフォーマンス-ベンチマークの限界」(http://www.intel.com/content/www/us/en/benchmarks/resources-benchmark-limitations.html) を参照してください。

今後の課題は、このテストを Windows*/Java* スタックで実行し、同様の結果が得られるかどうかを検証することです。

6. セキュリティーの使用法と有用性についての考察

インターネットの普及、接続される機種の増加、最新のコンピューター技術とネットワーク技術により、「データ」は最も重要なものになりました。現在、インターネットでやり取りされるデータや情報の大部分は、効果的な安全の確保と暗号化が行われていません。医療分野では、個々の PHI が犯罪者の手に渡った場合、その貴重な情報を利用して、相互接続されたシステムや罪のない一般市民に大打撃を与える危険性があるため、データ・セキュリティーは非常に重要になります。医療分野で一般的に使用されているワークフローの例として、医療情報の電子化 (EMR: Electronic Medical Records)、セキュリティーで保護されたメッセージング、医師・患者間のコミュニケーション、検査結果の EMR への転送、患者用ポータル、電子処方箋などがあります。

組織の機密保持要件を満たすため、データの暗号化は義務化されつつありますが、さまざまな理由により後回しにされることもあります。よくある理由は、導入費用、システムやソフトウェアの複雑さ、(暗号化/復号化レイヤーが必要になるため) アプリケーションの応答時間が長くなることです。多くの病院、診療所、医療施設では、これらの理由からシステム間で暗号化されていないデータをやり取りしています。インテル® AES-NI のような技術を利用することで、上位のソフトウェア・ベースの暗号化システムではなく、ハードウェア・レイヤーでシームレスに暗号化/復号化を行い、優れたパフォーマンスを実現するとともに、データの暗号化に伴う使用上の不満を軽減することができます。

以下に、一般的なファイルサイズとその代表的な用途を示します。

Linux*/Java* の結果 (Cent OS 5.6 + nss ライブラリー + JDK 1.7)
サイズ タイプ 使用例
50MB パッチ管理 ウイルスパッチのアップデート
100MB データ転送/医療機器 サーバーから医療スタッフのラップトップへの PHI データのダウンロード
200MB データ転送 検査結果の EMR への転送
512MB 医療機器 中画質のレントゲン画像
1GB 医療機器 高画質の 3D レントゲン画像

表 7 – 一般的なファイルサイズの例

ファイルの用途に応じて、許容可能な応答時間やデータの処理時間が得られます。インテル® AES-NI 技術の優れた点は、インテル® AES-NI を利用することで、使いやすさに影響を与えることなく、顧客のアプリケーションの応答時間を短縮し、セキュリティーを向上できることです。

7. まとめと今後の課題

このテストに使用した Linux*/Java* スタックでは、インテル® AES-NI 対応ハードウェアを使用することで、暗号化/復号化処理において一貫して大幅なパフォーマンスの向上が見られました。

医療分野では、データのプライバシーとセキュリティーは非常に重要です。インテル® AES-NI は、データアクセス時間の増加といった暗号化/復号化のオーバーヘッドを上回るパフォーマンスの向上を提供します。特に、エンドユーザーに意識させることなく、オペレーティング・システムを含むシステム全体を暗号化しなければならないフルディスク暗号化 (FDE) ではこれが顕著です。今後の取り組みとして、FDE アプリケーションのパフォーマンスも評価に含めていく予定です。

8. 関連ドキュメント

  • www.intel.com/technology/dataprotection
  • Shay Gueron, “Advanced Encryption Standard (AES) Instruction Set rev 2”, Intel whitepaper, June 2009. http://software.intel.com/en-us/articles/advanced-encryption-standard-aes-instructions-set/
  • http://www.cs.bc.edu/~straubin/cs381-05/blockciphers/rijndael_ingles2004.swf
  • IDF Sessions – September 22-24, 2009 www.intel.com/idf/sf09/audio_sessions.htm
    • ECTS003 – Intel® AES-NI: New Technology for Improving Encryption Efficiency and Enhancing Data Security in the Enterprise Cloud Securing the Enterprise with Intel(R) Intel® AES-NI
    • ECTS002 – Intel® Trusted Execution Technology: A More Secure Launch Environment for the Enterprise Cloud
  • 2010 IDF Session https://intel.wingateweb.com/us10/scheduler/catalog/catalog.jsp
    • DCCS002 – Securing Today’s Data Centers Against Tomorrow’s Attacks

著作権と商標について

本資料に掲載されている情報は、インテル製品の概要説明を目的としたものです。本資料は、明示されているか否かにかかわらず、また禁反言によるとよらずにかかわらず、いかなる知的財産権のライセンスも許諾するものではありません。製品に付属の売買契約書『Intel’s Terms and Conditions of Sale』に規定されている場合を除き、インテルはいかなる責任を負うものではなく、またインテル製品の販売や使用に関する明示または黙示の保証 (特定目的への適合性、商品適格性、あらゆる特許権、著作権、その他知的財産権の非侵害性への保証を含む) に関してもいかなる責任も負いません。

インテルによる書面での合意がない限り、インテル製品は、その欠陥や故障によって人身事故が発生するようなアプリケーションでの使用を想定した設計は行われていません。

インテル製品は、予告なく仕様や説明が変更される場合があります。機能または命令の一覧で「留保」または「未定義」と記されているものがありますが、その「機能が存在しない」あるいは「性質が留保付である」という状態を設計の前提にしないでください。これらの項目は、インテルが将来のために留保しているものです。インテルが将来これらの項目を定義したことにより、衝突が生じたり互換性が失われたりしても、インテルは一切責任を負いません。この情報は予告なく変更されることがあります。この情報だけに基づいて設計を最終的なものとしないでください。

本資料で説明されている製品には、エラッタと呼ばれる設計上の不具合が含まれている可能性があり、公表されている仕様とは異なる動作をする場合があります。現在確認済みのエラッタについては、インテルまでお問い合わせください。

最新の仕様をご希望の場合や製品をご注文の場合は、お近くのインテルの営業所または販売代理店にお問い合わせください。

本資料で紹介されている資料番号付きのドキュメントや、インテルのその他の資料を入手するには、1-800-548-4725 (アメリカ合衆国) までご連絡いただくか、インテルの Web サイトを参照してください。http://www.intel.com/design/literature.htm

Intel、インテル、Intel ロゴ、Xeon は、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。

* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

© 2012 Intel Corporation.無断での引用、転載を禁じます。

コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

関連記事