インテル® クリプトグラフィー・プリミティブ・ライブラリーで FIPS 140 レベル 1 を超える情報セキュリティーを実現

インテル® IPPセキュリティー暗号化

この記事は、インテルのウェブサイトで公開されている「Exceed FIPS 140 Level 1 Information Security with Intel® Integrated Performance Primitives Cryptography」の日本語参考訳です。原文は更新される可能性があります。原文と翻訳文の内容が異なる場合は原文を優先してください。


今日のデジタル環境では、特に機密情報を管理する組織にとって、暗号化モジュールのセキュリティーを確保することが非常に重要です。インテル® クリプトグラフィー・プリミティブ・ライブラリー (旧称インテル® IPP Cryptography) は、セキュリティー・インフラストラクチャーを強化すると同時に、米国およびカナダ政府機関で採用されている暗号化要件である連邦情報処理規格 (FIPS) 140 シリーズへの準拠を保証するように設計された高性能関数を提供します (FIPS の一般情報 (英語))。

FIPS 認証と FIPS 準拠

FIPS 140-3 は、4 つのセキュリティー・レベル (最も容易なレベル 1 から最も厳格なレベル 4 まで) を定義しています。一般に、ソフトウェアはレベル 2 までの認証が可能です。

インテル® クリプトグラフィー・プリミティブ・ライブラリーは、エンドユーザーが FIPS レベル 1 要件に適合するのに役立つ FIPS モード API のビルディング・ブロック (セルフテストや FIPS 承認機能ステータス照会など) を提供します。セルフテストの対象となる FIPS 承認 API の一覧は、「Covered Algorithms」セクションを参照してください。

注: インテル® クリプトグラフィー・プリミティブ・ライブラリー自体は FIPS 認証されていませんが、FIPS 準拠です。つまり、インテル® クリプトグラフィー・プリミティブ・ライブラリーでは、Cryptographic Algorithm Validation Program (CAVP) テストと認証は行われますが、インテル® クリプトグラフィー・プリミティブ・ライブラリーの高性能プリミティブの使用コンテキストはより高度なアプリケーションに依存するため、完全な Cryptographic Module Validation Program 認証は行われません。

CAVP テストの結果については、以下のリンクを参照してください。

または、インテル® IPP コミュニティー (英語) までお問い合わせください。

インテル® クリプトグラフィー・プリミティブ・ライブラリーは、暗号化シングルバッファーの場合は IPPCP_FIPS_MODE=on、暗号化マルチバッファーの場合は MBX_FIPS_MODE=on の FIPS モードでビルドできます (詳細は、GitHub リポジトリーにある readme の「Build」セクション (英語) を参照してください)。

インテル® クリプトグラフィー・プリミティブ・ライブラリーを使用するアプリケーションは、FIPS 140 要件に適合し、NIST 認証を取得することで FIPS 認証を受けたり、顧客に対して FIPS 準拠となる場合があります。

インテル® クリプトグラフィー・プリミティブ・ライブラリー: FIPS 140 レベル 1 への適合

インテル® クリプトグラフィー・プリミティブ・ライブラリーは、アプリケーションが FIPS レベル 1 準拠の実現に必要なビルディング・ブロックを提供します。主な機能は、以下のとおりです。

  1. モジュール識別: IPPCP 用の ippcpGetLibVersion() API や crypto_MB 用の mbx_getversion() API などの API を通じて、モジュール名、識別子、バージョンを出力できます。
  2. FIPS 承認サービス照会: ippcp_is_fips_approved_funcmbx_is_fips_approved_func などの関数は、サービスが FIPS 承認済みかどうかを示します。
  3. セルフテスト: 暗号化アルゴリズムの整合性と適切な動作を保証するセルフテスト用に fips_selftest_ippcp などの API を提供しています。

インテル® クリプトグラフィー・プリミティブ・ライブラリーが提供するものと、アプリケーションで実装が必要なものの詳細は、「Level 1 固有要件」 (英語) を参照してください。

FIPS モードでのビルド

インテル® クリプトグラフィー・プリミティブ・ライブラリーを FIPS モードでビルドするには、次の CMake フラグが必要です。

  • ippcp の場合: -DIPPCP_FIPS_MODE=on
  • Crypto Multi-Buffer の場合: -DMBX_FIPS_MODE=on

これらを設定することで、セルフテストと FIPS サポート照会用の追加の API が有効になり、ユーザーは暗号化実装を検証できます。

インテル® C++ コンパイラーと ippcp を使用する場合の設定例:

CC=icx
CXX=icpx
cmake CMakeLists.txt -B_build -DARCH=intel64 -DIPPCP_FIPS_MODE=on[-DIPPCP_SELFTEST_USE_MALLOC=on]

GCC と Crypto Multi-Buffer を使用する場合の設定例:

CC=gcc
CXX=g++
cmake CMakeLists.txt -B_build -DARCH=intel64 -DMBX_FIPS_MODE=on

API の使用例

インテル® クリプトグラフィー・プリミティブ・ライブラリーの例 Crypto Multi-buffer の例
//------ FIPS-required part

// 1. check that the function is FIPS-approved:
if(!ippcp_is_fips_approved_func(AESEncryptCBC)) {
    return -1; // cannot use this function in FIPS mode.
}

// 2. Run the Selftest
fips_test_status selftest_status = IPPCP_ALGO_SELFTEST_OK;

// Query buffer size for the test and allocate it 
//(using Intel(R) IPP Cryptography with IPPCP_SELFTEST_USE_MALLOC=on)
int BuffSize = 0;
selftest_status += fips_selftest_ippsAESEncryptDecrypt_get_size(&BuffSize);
std::vector<Ipp8u> pBuff(BuffSize);

// Run the test
selftest_status += fips_selftest_ippsAESEncryptCBC(pBuff.data());

// Check selftest status
if (IPPCP_ALGO_SELFTEST_OK != selftest_status) {
    return -1; // selftest is not successful -> cannot use this function in FIPS mode.
}

//------ FIPS-required part ends (only needed before the first use of algorithm)

//------ Common Intel(R) IPP Cryptography usage
// ...
IppStatus status = ippsAESEncryptCBC(plain, cipher, block_size, pAES, cipherV);
// ...

//------ FIPS-required part

// 1. check that the function is FIPS-approved:
if(!mbx_is_fips_approved_func(nistp256_ecdh_mb8)) {
    return -1; // cannot use this function in FIPS mode.
}

// 2. Run the Selftest
if (fips_selftest_mbx_nistp256_ecdh_mb8() != MBX_ALGO_SELFTEST_OK) {
    return -1; // selftest is not successful -> cannot use this function in FIPS mode.
}

//------ FIPS-required part ends (only needed before the first use of algorithm)

//------ Common Crypto Multi-buffer Library usage
// ...
mbx_nistp256_ecdh_mb8(sharedAB, prvA, pubBx, pubBy, pubBz_curr, 0);
mbx_nistp256_ecdh_mb8(sharedBA, prvB, pubAx, pubAy, pubAz_curr, 0);

// ...

インテル® クリプトグラフィー・プリミティブ・ライブラリーでサポートされるアルゴリズム

インテル® クリプトグラフィー・プリミティブ・ライブラリーは、AES、RSA 暗号化/復号化、RSA 署名/検証、ハッシュ、HMAC、署名/検証、楕円曲線、Crypto Multi-buffer の RSA など、幅広いアルゴリズムをサポートしています。これらのアルゴリズムはすべて、FIPS 要件への準拠を保証するセルフテストでサポートされています。各アルゴリズム固有のセルフテスト API を呼び出すことで、FIPS モードで使用する前にその適切な動作を検証できます。

サポートされるシンボルの正確な一覧は、include/ippcp/fips_cert.hFIPS_IPPCP_FUNC 列挙子と、include/crypto_mb/fips_cert.hFIPS_CRYPTO_MB_FUNC 列挙子を参照してください。

アプリケーションにデータ・セキュリティーを追加

インテル® クリプトグラフィー・プリミティブ・ライブラリーは、FIPS 140 レベル 1 準拠をサポートする、パフォーマンスが最適化された暗号化プリミティブのセットを提供します。インテル® クリプトグラフィー・プリミティブ・ライブラリーを FIPS モードで活用することで、開発者は政府および業界標準に準拠したセキュアなアプリケーションを構築し、機密データを確実に保護できます。

インテル® クリプトグラフィー・プリミティブ・ライブラリーを利用した FIPS 140 要件の実装に関する詳細は、インテル® クリプトグラフィー・プリミティブ・ライブラリーのドキュメント (英語) を参照してください。

FIPS 準拠アルゴリズムのリスト拡張に関する質問や要望は、Github (英語) またはオンライン・サービス・センター (英語) からご連絡ください。

皆様からのフィードバックとご提案をお待ちしております。

関連情報


製品および性能に関する情報

1 性能は、使用状況、構成、その他の要因によって異なります。詳細については、http://www.intel.com/PerformanceIndex/ (英語) を参照してください。

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