FIPS140とは何か?「FIPS140最前線」 第三回
ラムバス株式会社 FAEの古川です。前回に引き続き、FIPS140の具体的な内容について、その特徴や、セキュリティ機能の目標、認証取得のチャレンジなどについて解説します。
FIPS140要件の特徴:FIPS140にはセキュリティレベルが1から4まであります。このレベルに応じて、求められる要件が変わってくるものも存在します。ここではすべてのレベルで要件となっているものを中心に記載しています。
- セルフテスト:これは既知解テスト(Known answer test)と完全性確認の組み合わせになります。あらかじめモジュールに組込まれた暗号アルゴリズムごとの入出力の比較と、ロジックのインテグリティチェック(完全性検証)を行います。FIPS140では、起動時に必ずこれを実施する必要があり、このとき外部からの開始の指示がなくとも自動的に行われる必要があります。期待通りの結果が得られれば、稼働状態に遷移でき、失敗した場合はエラー状態に遷移する必要があります。
- セルフテストの実施によりモジュールの信頼性は向上しますが、当然ながら起動時間に対するペナルティも発生します。
- そこでFIPS140-3からは、上位のサービスに組み込まれているコアアルゴリズムのセルフテストの省略が認められているケースもあります。たとえば、SHA-256はHMACやECDSAで利用されますが、一定の条件を満たせばSHA-256のテストをHMACやECDSAのセルフテストの際に省略することが許されます。
- そこでFIPS140-3からは、上位のサービスに組み込まれているコアアルゴリズムのセルフテストの省略が認められているケースもあります。たとえば、SHA-256はHMACやECDSAで利用されますが、一定の条件を満たせばSHA-256のテストをHMACやECDSAのセルフテストの際に省略することが許されます。
- また実際の認証取得試験においては、セルフテストを意図的に失敗させてみせる必要があります。このときハードウェアベースの暗号モジュールの場合、この様なネガティブテストの実施にはハードルが存在します。通常SoCでは、その様に動作しないため、アルゴリズムごとのテストのために、別途ファームウェアを用意するなどの対策が必要になる場合があります。
- セルフテストの実施によりモジュールの信頼性は向上しますが、当然ながら起動時間に対するペナルティも発生します。
- ゼロ化:保護されていない平文のSSP (Sensitive Security Parameters)やモジュール内の鍵コンポーネントなどをゼロに(消去)する機能を暗号モジュールが提供する必要があります。また一時的なSSPは、その後の利用が不要となった時点でゼロ化することが求められています。
- さらに、OTPなどにSSPが存在する場合については、すべて0、1もしくはランダムな値で上書きする機能が必要です。加えてFIPS140-3からは、この処理が実施されたことを外部に通知するインジケータの設置が求められています。
- ただし、暗号化されているCSPやモジュール内部で、さらに別の認証されたモジュールで保護されている場合、レベル4を除きゼロ化の対象にはなりません。
- さらに、OTPなどにSSPが存在する場合については、すべて0、1もしくはランダムな値で上書きする機能が必要です。加えてFIPS140-3からは、この処理が実施されたことを外部に通知するインジケータの設置が求められています。
- 乱数生成に対する要求:暗号モジュールは鍵生成や鍵合意などの処理において乱数が必要です。攻撃者が簡単に推測できないよう、偏りのない乱数を得ることがセキュリティの要となります。実際には乱数の元となるエントロピー(シードなどと呼ばれる場合もあります)と、それを元に生成され実際に使用される乱数があります。
通常、前者のエントロピーの取得は低速で時間のかかる処理であり、後者は比較的高速です。エントロピーの生成に関してはSP800-90Bで規定されており、それを元に生成される乱数(決定論的ランダムビット生成器)はSP800-90Aで規定されています。これらを組込んだ乱数器全体としての実装および検証の指針がSP800-90Cとなります。SP800-90Cは現在(2022年11月)最終と考えられるドラフトが公開されています。- ヘルステスト:通常のセルフテスト(既知解テストおよび完全性テスト)とは異なり、エントロピーソースに対してはヘルステストと呼ばれるテストがあり、これを起動時およびオプションとして稼働中に実施することが要件となっています。このヘルステストでは、エントロピーソースから得られたエントロピーに対して、SP800-22で述べられているような統計情報やその分布を精査する趣旨のテストではなく、エントロピーソースが使用している、さらに内部のノイズソースの故障をいち早く検出するのが、その目的となります。これはノイズソースが環境の温度や湿度などの外的要因により影響を受けることが念頭にあります。
- 実際には1024個(以上の)サンプルを取得し、これに対して承認された2種類のテストを実施します。
- Repetition Count Test(繰返し回数試験)では、ノイズソースが長時間ひとつの出力値に留まるような(0もしくは1が繰り返し連続して出力される)致命的な故障を迅速に検出すること を目的としています。
- Adaptive Proportion Test(適応プロポーション試験)では、ノイズソースの微妙な故障でエントロピーが大きく損なわれる状況を検出することを目的としています。
- 加えて、エントロピーソースの開発者が独自の想定故障モデルを用意し、テストを追加することが勧められています。
- Repetition Count Test(繰返し回数試験)では、ノイズソースが長時間ひとつの出力値に留まるような(0もしくは1が繰り返し連続して出力される)致命的な故障を迅速に検出すること を目的としています。
- この様にヘルステストは、故障状態に起因する問題を防ぐことに主眼がおかれています。
- ヘルステスト:通常のセルフテスト(既知解テストおよび完全性テスト)とは異なり、エントロピーソースに対してはヘルステストと呼ばれるテストがあり、これを起動時およびオプションとして稼働中に実施することが要件となっています。このヘルステストでは、エントロピーソースから得られたエントロピーに対して、SP800-22で述べられているような統計情報やその分布を精査する趣旨のテストではなく、エントロピーソースが使用している、さらに内部のノイズソースの故障をいち早く検出するのが、その目的となります。これはノイズソースが環境の温度や湿度などの外的要因により影響を受けることが念頭にあります。
関連トピック:
- エントロピーソースの認証は、暗号モジュール本体の認証取得とは分けて行うことも可能になりました。これにより、過去に取得したエントロピーソースの認証を参照した新たな暗号モジュールのFIPS140認証取得が可能になります。
- 2022年4月よりESV(Entropy Source Validation)プログラムがスタートしました。
FIPS140-3において、あらたに追加された主な要件:最後にFIPS140-2から140-3への主要な変化点のまとめになります。
- SP800-90A/B/Cの仕様に適合した乱数生成:このSP800-90Bでは、エントロピーに関する理論的な根拠を示す必要があり、関連するドキュメントの提出にチャレンジが存在します。今までは(2020年11月以前のFIPS140-2)approved modeにおいて、non-approvedなRBG(Random Bit Generator)をエントロピーソースとして使用することが認められていました。これは、たとえば一般的なLinux OSの /dev/random、/dev/urandomであっても認められており、セキュリティポリシーにはエントロピーソース(An entropy source for NIST SP800-90 DRBG)として記載されていました。
- 記載方法として、今までは、NDRBG(Non-Deterministic Random Bit Generator)となっていましたが、今後FIPS140-3ではENTとなります。また、このエントロピーソース内部のノイズソースの分類として、physical, non-physicalが設けられ、ENT(P)/ENT(NP)と区別して記載されます。
- インジケータの設置:暗号処理の実施など、すべてのセキュリティサービスで承認されたサービス(アルゴリズム)であるかどうかのインジケータの設置が必要。
- FIPS140-2においても、 FIPS140-3においても、認証された暗号モジュールにはnon-approvedなセキュリティファンクション(暗号アルゴリズム)を含めることが互換性確保などの観点から一般的です。ここで問題となるのが、暗号モジュールの利用者が、利用している暗号アルゴリズムがapprovedなのかnon-approvedなのか区別する必要があることです。暗号モジュールに付属するドキュメントでは、これまでも記載はありましたが、FIPS140-3において利用者はこのインジケータを通して、個別の暗号処理がapprovedなのかnon-approvedなのかを容易に判断できるようになりました。
- Degraded mode(縮退)モード(オプション):稼働中のセルフテストに失敗した場合など、エラー状態の原因となった機能を切り離しての動作の継続が認められる。
- これにはいくつか条件があり、起動時のセルフテストに失敗した場合は、対象外で稼働中になんらかの原因によってエラー状態になり、その後の復帰の場合に限られます。この時この縮退状態に入ったことを通知し、故障状態の機能を切り離すことが必要です。加えて、利用者がその故障した機能を利用しようとした際には、インジケータを通して通知する必要があります。
- 制御出力インターフェース:他の暗号モジュールに対して、新たに定義された制御出力インターフェースからコマンドを送信することが認められる。
- 背景としては、昨今の分散およびヘテロジニアスなコンピューティング環境があり、分散可能なセキュリティサブシステムの構成を可能にする目的があります。ただこの時、物理的な暗号境界はシングルチップで閉じる必要があります。
- EOL:ライフサイクルアシュアランスにて、End Of Lifeが設けられ、暗号モジュールが不要となった際の安全な破棄方法の記載が必要。
- セキュリティレベル1、2では、SSPやユーザー情報などを暗号モジュールから消去する方法の記載が必要。
- セキュリティレベル3、4では、ベンダーが指定した文書によって、メモリ技術の劣化前に耐用年数終了手続きのタイムラインをセキュリティポリシーに記載する必要があります。
- セキュリティレベル1、2では、SSPやユーザー情報などを暗号モジュールから消去する方法の記載が必要。
- Userロール:ロール関連では、Crypto Officerが最低限必要なロールとなり、ユーザーロールは必ずしも求められなくなりました。
- FIPS140-3からは、User Roleはmay supportとなり、オプション扱いとなりました。
関連トピック:
- 現行のFIPS140-3の要件とはなっていませんが、ISO17825にてSCAおよびFIAなどの非侵襲攻撃 (non-invasive attack)の対策の標準化が進められており、近々これが正式リリースされると、FIPS140-3レベル3/4にて要件に加わることが見込まれています。
- 先述のIG(実装ガイダンス)も、更新されており、FIPS140-3 Derived Test Requirements(派生テスト要件)にあるAS、TE、VEの数を、たとえば一般的なセキュリティレベル2で見るとAS(Relevant Assertions:関連主張)が302項目、VE、TE(ベンダーおよびテストエビデンス要求)が747項目と、FIPS140-2での場合と比較して約5割増となっています。より詳細な実装の確認が求められています。
今回はFIPS140-3取得のチャレンジ、その特徴と新しい要件を解説しました。最後までお付き合い頂き、ありがとうございました。
次回は、FIPS140認証を容易化する、ラムバス社のソリューションをご紹介させて頂く予定です。
ラムバス株式会社
古川徹 / Furukawa, Toru
ISPにてインターネットサーバー管理、IPネットワーク構築などを経て、2002年にSSHコミュニケーションズ・セキュリティ株式会社に入社、ネットワークセキュリティ関連プロダクトを中心にFAEとして従事。その後、幾度かの部門買収や会社合併を経て2019年よりラムバス株式会社FAEとして活躍中。
https://www.rambus.com/
これまでの「FIPS140最前線」の記事はこちらよりお読みください。
最新の「FIPS140最前線」記事はメールマガジンにてご案内致します。是非JAPANSecuritySummit Updateのメールマガジンにご登録ください。
メールマガジンの登録はこちらからお願いします。