はじめに

FIPS コンプライアンスは多くの MySQL 導入システムにとって極めて重要です。特に、米政府機関や規制上の義務を負う組織にとってはなおさらです。FIPS 140-3 と ISO/IEC 19790 の整合性により、これらの要件の適用範囲が拡大しています。

本記事では、FIPS、OpenSSL、MySQL の関係を明確にし、以下のトピックについて説明します。

  • FIPS とは何か
  • OpenSSL とは何で、MySQL はそれをどのように使っているのか    
  • バージョン固有の OpenSSL / FIPS 詳細
  • OS のバージョンと MySQL のバージョンに基づいて、FIPS コンプライアンスのレベルを判断する方法    
  • FIPS モードとは何か
  • MySQL パッケージとFIPS
  • その他の重要な詳細

FIPS (Federal Information Processing Standards, 連邦情報処理標準) は、NIST (U.S. National Institute of Standards and Technology, 米国国立標準技術研究所) が連邦政府のコンピュータシステムで用いるために発行した、一連の標準とガイドラインです。

FIPS が対象とする範囲:

  • 暗号化アルゴリズム
  • コンピュータセキュリティ
  • ネットワークプロトコル
  • 情報技術管理
米国連邦政府機関は、適用対象の FIPS 標準に準拠することが求められています。

FIPS 140 

  • FIPS 140 は暗号化モジュールのセキュリティ要件を定義しています。
  • MySQL においては、暗号化機能を担当するソフトウェアコンポーネントとして OpenSSL ライブラリを利用しています。

FIPS 140 のバージョンと ISO/IEC 19790 の歴史的概要

 
機能/属性 FIPS 140-2 FIPS 140-3 ISO/IEC 19790
リリース年 2001 2019 2012
ステータス 段階的廃止中 現行の NIST 標準 国際標準
セキュリティレベル
(厳格性が増すレベル)
1-4 1-5 1-5
(FIPS 140-3 と類似)
主な焦点 一般的な暗号化モジュールのセキュリティ 140-2 より強化されたセキュリティ – ソフトウェア焦点、サイドチャネル保護 暗号化モジュールのセキュリティ
国際的な整合性 該当なし ISO/IEC 19790 と整合 FIPS 140-3 と整合する国際標準
追加詳細 140-3 に置き換えられつつある 段階的に 140-2 を置き換えている FIPS 140-3 と併用または代替として使われる場合が多い

OpenSSL とは何か、および MySQL は OpenSSL をどのように使用するか

OpenSSL は広く使用されているツールキットであり、暗号化ライブラリを含んでいます。MySQL は MySQL サーバーおよびすべての C/C++ 実行可能ファイルとライブラリで、以下のような暗号化のために OpenSSL を使っています。

  • ネットワーク暗号化 – TLS (Transport Layer Security – 安全なネットワーク通信を確保)
  • データの暗号化と復号化
  • 暗号鍵の生成と使用
  • デジタル証明書の作成と検証
  • ハッシュアルゴリズム
注: MySQL は暗号化コードを開発していません。C/C++ 用には OpenSSL を、Java、.Net などの他の言語用には同等の承認された暗号化ライブラリを使用しています。これらの詳細は「ライセンス情報ユーザーマニュアル」を含む LICENSE ファイルに含まれており、README ファイルで参照されています。

OpenSSL 1.0.2 と FIPS:

  • OpenSSL 1.0.2 は FIPS 140-2 検証で使用される FIPS オブジェクトモジュールを持っています。
  • 1.0.2 の課題は、FIPS 140-3 の要件を満たしていないことです。これをサポートしているバージョンの OpenSSL を使用することが重要です。

OpenSSL 1.1.1 と FIPS:

  • OpenSSL 1.1.1 (およびそれ以降のバージョン) には「FIPS オブジェクトモジュール」がありません。
  • これは、FIPS オブジェクトモジュールの概念が古い FIPS 140-2 標準に特有のものだからです。
  • 現在の標準である FIPS 140-3 では、暗号化モジュールの検証方法が変更されました。オブジェクトモジュールの代わりに、FIPS 140-3 では OpenSSL 3.0 で導入された「FIPS プロバイダ」の概念を使用します。
したがって、OpenSSL 1.1.1 (およびそれ以降) に FIPS オブジェクトモジュールがないことは欠陥ではなく、単に新しい FIPS 検証方法へのシフトを反映しています。

OpenSSL 3.0 と FIPS:

  • OpenSSL 3.0 は、FIPS プロバイダの導入により、FIPS コンプライアンスの扱い方に大きな変化がありました。この新しいプロバイダは、OpenSSL 3.0 が FIPS 140-3 標準にどう適合するかを理解する鍵となります。
  • OpenSSL 3.0 では、FIPS 140-2 で定義され古い OpenSSL バージョンで使用されていた「FIPS オブジェクトモジュール」の概念を実装していません。代わりに「FIPS プロバイダ」を使用します。これは FIPS モードでの利用が承認された、暗号化アルゴリズムと機能のみを含む別のモジュールです。
  • OpenSSL 3.0 の新しい 3.0 FIPS プロバイダは、この新しい FIP 140-3 のメソッドをサポートし、FIPS コンプライアンスを達成するためのより安全で柔軟な方法を提供します。
OpenSSL 3.0 の FIPS プロバイダは、FIPS 140-3 標準の要件を満たすことができる仕組みです。
FIPS 140-2 から FIPS 140-3 への移行の詳細については、FIPS 140-3 移行の取り組み (英語) を参照してください。 

OS のバージョンと MySQL のバージョンを元に FIPS コンプライアンスのレベルを判断する方法

MySQL はオペレーティングシステム (OS) に応じて、2 つの異なる方法で OpenSSL ライブラリにリンクします。

  • OpenSSLを同梱する Linux OS の場合
    • MySQL は OpenSSL ライブラリを動的にリンク
      • OpenSSL のバージョンは Linux OS とバージョンによって異なる
      • コマンドラインで > openssl version -v を実行
    • -v がバージョン 3 を返す場合: コマンドライン > openssl version -d を使用して、設定ファイルの場所を特定
      • コマンドによって出力されるディレクトリパスに設定ファイルはあり、構成ファイル名は openssl.cnf という名称
  • 汎用 Linux と Windows、MacOS の場合
    • OpenSSL は MySQL のバイナリとライブラリに同梱
    • この OpenSSL ライブラリは OS から FIPS 認証を継承しない
    • もし FIPS 認証が必要な場合 ― これらの MySQL パッケージは NIST によって認証されておらず、オプションはなく、コンプライアンス違反

FIPS モードとは?

FIPSモードとは、連邦情報処理標準 (Federal Information Processing Standard, FIPS) 刊行物の 140-2 または 140-3 に準拠するセキュリティ構成です。

OS が FIPS モードで動作していると、FIPS 140-2 または 140-3 標準を満たす暗号化アルゴリズムとプロトコルのみを使用するように制限されます。これにより、機密データのセキュリティレベルが向上します。

MySQL パッケージと FIPS

OpenSSL への動的リンクをサポートする MySQL インストールパッケージは以下の通りです:

  • RPMS
  • DEBS

これらのインストールは OS から FIPS モードを継承します。

MySQL Windows、MacOS、および汎用の Linux 向けの MySQL パッケージには OpenSSL ライブラリが同梱されています。

  • これらのパッケージは FIPS モードをサポートしていません。
注: MySQL C/C++ ビルドは、非 FIPS アルゴリズムを自動的に呼び出しません。ただし、コードが FIPS 準拠でない MySQL 暗号化関数を呼び出す場合 – その呼び出しは失敗します。

下表に示すように、OS とそれが提供する OpenSSL のバージョン、NIST からの検証証明書番号を含めて使用し、FIPS 140 コンプライアンスのレベルを判断します。

FIPS コンプライアンスおよび証明書の参照表

ディストリビューション

ベースバージョン

OpenSSL バージョン

FIPS ポリシーメソッド

コンプライアンスレベル

FIPS 証明書番号

Oracle Linux

RHEL

7

1.0.2

FIPS 2.0 オブジェクトモジュール

(1.0.2 と互換)

FIPS 140-2

4170

Oracle Linux

RHEL

8

1.1.1

FIPS モジュールなし、

システム全体の暗号化ポリシーを設定 (FIPS モード用の特定のポリシーを含む)

FIPS 140-2

4215

4642, 4271

Oracle Linux

RHEL

9

3

FIPS 3.0 プロバイダ検証


 

FIPS 140-3

4779
4746

Canonical Ubuntu

18.04

1.1.1

FIPS モジュールなし

システム全体の暗号化ポリシーを設定 (FIPS モード用の特定のポリシーを含む)

 

4540

Canonical Ubuntu

22.04

3

FIPS 3.0 / FIPS 140-3

FIPS 140-2

4794

SUSE (SLES)

15

3

FIPS 140-3

 

4725


その他の重要な詳細

  • 古い Linux 上の古いバージョンの MySQL の場合
    • MySQL 8.0.34以前: サーバー側 / クライアント側の FIPS モードの制御は、サーバーが FIPS モードで動作するかどうかを制御するシステム変数、ssl_fips_mode システム変数を使用
  • FIPS モードを持たない OpenSSL 1.1.1 を実行している場合 – ssl_fips_mode は常に OFF を表示
    • 実際には、Linux OS の OpenSSL FIPS モードがオンになっている可能性がある
    • そのようなシステム上で動作している場合、システム全体で FIPS モードが有効になっているため、MySQLは非 FIPS 準拠の暗号化機能を呼び出せない
  • OpenSSL 3.0+ と FIPS 3.0 を実行している場合
    • OpenSSL 構成
    • OS を通じる場合 – たとえば Oracle Linux 9 の場合は、FIPS モードの構成を参照
      • FIPS モードを確認する > sudo fips-mode-setup --check
      • FIPS モードを有効にする > sudo fips-mode-setup –-enable
      • その後に再起動
    • コンテナやその他の環境では – 特定の環境での FIPS モードのドキュメントを参照

まとめ

安全でコンプライアンスに準拠した MySQL システムを導入するには、FIPS と OpenSSL、MySQL の関係を理解しなければなりません。理解すべきことには、FIPS 標準、OpenSSL の暗号化の役割、およびバージョン固有のコンプライアンスの詳細が含まれています。OS と MySQL のバージョンを基にコンプライアンスレベルを判断する方法、FIPS モードを理解する方法、MySQL パッケージのサポート状況を評価する方法の理解が必須です。特に、OpenSSL のバージョンと FIPS 140-3 への移行、そして OpenSSL 3.0 の FIPS プロバイダの把握が肝要です。特に規制産業の組織にとってはこれらが再前提であり、それによって情報に基づいた FIPS コンプライアンス戦略が可能になり、データセキュリティが確保されます。FIPS 標準 とOpenSSL のバージョンを常に最新に保つことが必須であるといえます。

MySQL をお選びいただき、ありがとうございます。

参照情報

(訳者註: 本記事の元となった英語版の公開日は、2025年2月20日です)