セキュアキー対応インテル® データ・プロテクション・テクノロジー: Gazzang 社のケーススタディー

セキュリティー暗号化

この記事は、インテル® デベロッパー・ゾーンに掲載されている「Intel® Data Protection Technology with Secure Key: Gazzang Use Case Study」の日本語参考訳です。



セキュアキー対応インテル® データ・プロテクション・テクノロジー1: Gazzang 社のケーススタディー

Gazzang 社は、ビッグデータ・ストアやクラウド環境における機密データ保存時の安全性を確保するべく、透過なデータ暗号化とキーの管理を提供しています。Gazzang 社のソリューションは、政府、業界、あるいは内部のコンプライアンスに従って、個人情報、企業 IP、その他の機密データを保護するために、世界有数の金融機関、医療機関、小売業者で採用されています。

暗号化されるデータのセキュリティーは、生成される暗号化キーの強度に依存します。Gazzang 社によるこのケーススタディーでは、第 3 世代インテル® Core™ ファミリー・プロセッサー (開発コード名: Ivy Bridge) に追加され、インテル® Xeon® プロセッサー E5 v2 およびインテル® Xeon® プロセッサー E7 v2 製品ファミリーでも対応しているインテル® RDRAND 命令セットをデータ・セキュリティー・ソリューションに活用して、暗号化キーの強度を高める方法を説明します。

優れたセキュリティーのためにランダム性が必要な理由

普段、「エントロピー」という用語を耳にすることはないかもしれませんが、この用語はセキュア・コンピューティングの世界では不可欠なものです。エントロピーは、不統一や不確実性を生成するシステムのプロパティーです。

エントロピーはランダム性を形成します。例えば、ゲーム・アプリケーションは、サイコロの目を変えるために単純な形式のランダム性を利用しています。より複雑な設定では、エントロピーにより魚や鳥の群れなどが自然な動作になります。逆に、エントロピーが不足すると、ゲーム・アプリケーションの動作が不自然になります。

IT セキュリティーでは、エントロピーは強固な暗号化キーを提供する乱数を生成するために使用されます。エントロピーが強いほど、暗号化キーも強固になります。

インテルはこの重要性を認識し、Ivy Bridge マイクロアーキテクチャーでセキュアキー対応インテル® データ・プロテクション・テクノロジーを追加しました。セキュアキーには RDRAND 命令が含まれます。セキュリティー・ソフトウェアは RDRAND 命令を用いて、プロセッサー・ベースのハイパフォーマンスかつ予測困難な、暗号化キーとして使用される乱数を生成することができます。

RNG の基本

暗号化処理は優れた乱数に依存します。例えば、ブラウザーでオンラインバンキングを利用するときに入力するログイン名とパスワードを保護するには、https 接続用の暗号化キーを生成します。OpenSSL* での RDRAND の使用方法については、インテルの Web サイトの記事を参照してください。[ⅰ]

データ保存時の暗号化も、優れた暗号化キーに依存します。暗号化される大量のファイルがそれぞれランダムな暗号化キーを要求することを想像すれば、優れたランダム性がシステムのセキュリティーとパフォーマンスに与える影響を理解できるでしょう。

Gazzang zNcrypt* (http://www.gazzang.com/products/zncrypt) は、AES-NI2 (Advanced Encryption Standard New Instructions) 対応インテル® データ・プロテクション・テクノロジー暗号化アクセラレーターを用いてパフォーマンスを向上する、透過なデータ暗号化ソリューションです。企業は zNcrypt を利用して、クラウドで大量の Hadoop* や NoSQL ビッグデータ・プロジェクトを暗号化し、これらの次世代データストアのコンプライアンスを維持します。

データを復号化するには、zNcrypt は 256 ビットの暗号化キーを生成し、ソフトウェア・ベースのキー・マネージャーである Gazzang zTrustee* にストアして管理します。zTrustee は、Hadoop、Cassandra*、および MongoDB* 環境で使われている最も一般的なキー・マネージャーです。[ⅱ]

Gazzang zNcrypt は、RDRAND 命令などにより、優れたエントロピーを使用して強力な暗号化キーを生成します。この新しい命令はさまざまな方法で利用できます。例えば、アセンブリーから直接呼び出すことができます。インテル® デベロッパー・ゾーンの記事にあるコードサンプルをご覧ください。[ⅲ]

次の節では、Linux* システムで RDRAND 命令を用いて /dev/random を生成するサンプルを紹介します。これは RDRAND の唯一の使用方法というわけではありませんが、多くの開発者にとって、この新しい機能を素早く活用する効率良い方法です。

Linux* の /dev/random

Linux* オペレーティング・システムは、暗号化プールの概念を採用しています。さまざまなソースからのエントロピーをこのプールに供給できます。エントロピー・プールを作成するソースがより優れていれば、プールから取得できる乱数もより良いものになります。優れた乱数ジェネレーターには、次の特徴が求められます。[ⅲ]

  • 新しい値はそれぞれ、前の値と統計的に独立していなければいけません。つまり、生成される値のシーケンスで特定の値が、RNG のランダムシーケンスの次の値として続いてはいけません。
  • インターバルから選択される数の全体的な分布は一様分布であるため、RNG の出力ですべての数は等しく、ほかの数よりも「ポピュラーな」 (頻繁に出現する) 数はありません。
  • シーケンスが予測できないため、攻撃者は生成されるシーケンスの一部またはすべての値を推測することができません。予測は、前方予測 (将来の値) と後方追跡 (過去の値) によって行われます。

一般に、ソフトウェア開発者は /dev/urandom (“u” は unlimited=無制限の略) または /dev/random から読み取ることで乱数を取得します。/dev/urandom の呼び出しはエントロピー・プールが空でもブロックされないため、システムは読み取り要求を絶えず迅速に行えます。ランダム性が弱くなっても、ほとんどのケースではこの手法が適しているでしょう。

では、データの一定のストリームからエントロピー・プールを作成し、プールが空にならないと保証できないでしょうか。RDRAND と rng-tools を組み合わせると、これを実現できます。

rng-tools と RDRAND の使用

エントロピー・プールを作成するにはさまざまな方法があります。一般的な方法は、Haveged を使用します。[ⅳ] この記事では、rng-tools を使って RDRAND からバイトを取得し、エントロピーを /dev/random に格納します。RDRAND は rng-tools バージョン 4 でサポートされました。このオープンソース・プロジェクトのソースコードは Sourceforge から提供されています。[ⅴ]

まず、rng-tools バージョン 4 をインストールします。

  • ソースをダウンロードします。[ⅵ]
  • tar -xf で展開します。
  • ./configure
  • make
  • make install

rng-tools をインストールしたら、root で次のコマンドを実行して rngd デーモンを開始します。

# rngd –no-tpm=1 -o /dev/random

TPM (Trusted Platform Module) 入力を無効にし、/dev/random を出力デバイスとして定義します。rng-tools バージョン 4 以上は RDRAND がサポートされているかどうかを検出してから、エントロピーに使用します。

-n 1|0, –no-tpm=1|0
乱数入力のソースに tpm を使用しません (デフォルト:0)
-o file, –random-device=file
乱数出力にカーネルデバイスを使用します (デフォルト: /dev/random)

rng-tools を実行し、RDRAND でエントロピーを作成しているため、fopen() 関数を用いて乱数を取得できます。すでに /dev/random を使用している場合、アプリケーションでほかの変更は必要ありません。

int byte_count = 64;
char data[64];
FILE *fp;
fp = fopen("/dev/urandom", "r");
fread(&data, 1, byte_count, fp);
fclose(fp);

Gazzang のテスト・プロシージャー

Gazzang 社は、データ保存時の暗号化キーについて RDRAND と dm-crypt および eCryptfs をテストしました。また、データ移動時の暗号化キーとさまざまなタイプのワークロードにおける gpg 非対称キーペア作成と使用について OpenSSL をテストしました。

シミュレーション・テストでは、zTrustee クライアントと zTrustee サーバーを単一テストマシンでホストしたため、クライアントとサーバーのパフォーマンスの違いがテスト結果に影響しています。スクリプトで一連の zTrustee コマンドを実行しましたが、これは、使用されているエントロピー・ジェネレーターの質により影響を受けた可能性があります。最初に、サーバーを登録するスクリプトを実行し、登録にかかった時間を測定しました。次に、サーバーを登録してローカルの zTrustee 構成を削除するスクリプトを 5 分間繰り返し実行し、登録できた回数をカウントしました。

次に、クライアントでデポジットのプットとゲットを行い、各操作にかかった時間を測定しました。また、クライアントで 1000 バイトのエントロピーをサーバーから要求し、操作にかかった時間を測定しました。最後に、クライアントが 1000 バイトのエントロピーをサーバーから 5 分間要求し、エントロピー・コマンドが完了できた回数を測定しました。

RDRAND は独自のデバイスを作成しないため、rng-tools バージョン 4 を用いてハードウェア・ランダム性ジェネレーターからデータを読み取り、/dev/random のエントロピー・プールへデータを書き込みました。システムに接続されているキーボードやマウスからエントロピーを収集しないように、すべてのテストはキーボードとマウスを外して行われました。全テストは 3 回行われ、各テストのデータを平均化しました。

テスト環境

オペレーティング・システム
  Ubuntu* 12.04
  3.5.0-37-generic x86_64
ハードウェア
  インテル® Xeon® プロセッサー E5-2697 v2 @ 2.70GHz
  cpu MHz : 1200.000
  キャッシュサイズ : 30720KB
  siblings : 24
  コア数 : 12
HDD
  WDC WD1002FAEX-00Z3A0
  1 x 1TB SATA 7200RPM
RAM
  32GB (4x8GB DDR3 -1333MHz)
BIOS
  ベンダー : American Megatrends Inc.
  バージョン : RMLSDP.86I.R2.28.D690.1306271008
  リリース日 : 06/27/2013
  アドレス : 0xF0000
  ランタイムサイズ : 64KB
  ROM サイズ: 8192KB

結果

以下の表 (値が低いほど良い) から、登録コマンドは RDRAND を使用したほうが、使用しない場合よりも高速であり、優れたセキュリティーとパフォーマンスを実現していることが分かります。RDRAND を使用したプット、ゲット、エントロピー処理では、パフォーマンスに影響することなくセキュアキーのエントロピー・ソースの利点が得られています。RDRAND と Haveged の組み合わせでは、RDRAND によるエントロピーに貢献しない追加のサイクルが Haveged で使用されるため、パフォーマンスが低下しています。


Ivy Bridge プラットフォーム (インテル® Xeon® プロセッサー E5-2697 v2 @ 2.70GHz、32GB RAM、1 x 1TB SATA 7200RPM HDD、Ubuntu 12.04 3.5.0-37-generic x86_64) におけるインテル® RDRAND 命令と Haveged の比較[1]

まとめ

ランダム性、不確実性、およびエントロピーはビジネスでは一般に避けられる用語ですが、強固でセキュアなデータ環境には不可欠なものです。Gazzang 社は、優れたエントロピー・ソースを利用して機密データやシステムを保護するべく、インテルと協力して取り組んでいます。

インテルの RDRAND 命令を使用した Gazzang zNcrypt のテスト結果では、パフォーマンスを維持しつつ (場合によっては向上させながら)、一定の優れたエントロピーのストリームを /dev/random に作成できることが示されました。

参考文献 (英語)

http://software.intel.com/en-us/articles/user-manual-for-the-rdrand-library-linux-version
http://www.gazzang.com/blog/itemlist/tag/intel
http://software.intel.com/en-us/articles/intel-digital-random-number-generator-drng-software-implementation-guide
http://www.issihosts.com/haveged/
http://sourceforge.net/projects/gkernel/files/rng-tools/
http://sourceforge.net/projects/gkernel/files/rng-tools/4/rng-tools-4.tar.gz/download

[1] 性能に関するテストに使用されるソフトウェアとワークロードは、性能がインテル® マイクロプロセッサー用に最適化されていることがあります。SYSmark* や MobileMark* などの性能テストは、特定のコンピューター・システム、コンポーネント、ソフトウェア、操作、機能に基づいて行ったものです。結果はこれらの要因によって異なります。製品の購入を検討される場合は、他の製品と組み合わせた場合の本製品の性能など、ほかの情報や性能テストも参考にして、パフォーマンスを総合的に評価することをお勧めします。構成: [構成の説明 + 使用したテスト + テストを行った人]。詳細については、http://www.intel.com/performance/resources/benchmark_limitations.htm (英語) を参照してください。

1 セキュアキーを利用するには、第 3 世代インテル® Core™ i7/i5 プロセッサーを搭載したコンピューター・システムおよび正しいシーケンスでセキュアキー命令を実行可能なソフトウェアが必要です。対応状況については、リセラーまたはメーカーにお問い合わせください。詳細は、「インテル® DRNG (Digital Random Number Generator) ソフトウェア実装ガイド」を参照してください。

2 AES-NI を利用するには、AES-NI 対応プロセッサーを搭載したコンピューター・システムおよび正しいシーケンスで AES-NI 命令を実行可能なソフトウェアが必要です。AES-NI は、一部のインテル® プロセッサーで利用可能です。対応状況については、リセラーまたはメーカーにお問い合わせください。詳細は、「インテル® AES New Instructions (インテル® AES-NI)」を参照してください。

Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。
© 2014 Intel Corporation. 無断での引用、転載を禁じます。
* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

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

タイトルとURLをコピーしました