Red Hat Enterprise Linux 8 での暗号強度設定を統合するcrypto-policies

暗号化スイートおよびプロトコルの設定

TLSによる暗号化、sshでの暗号化、ストレージの暗号化 など、 RHELの中には「暗号化」を扱う場面が多数あります。これらで利用される暗号化のアルゴリズムやプロトコルをセキュリティポリシーにあわせて適切に設定するには専門知識が必要になります。

一言で「暗号化」と言いましたが、たとえばTLSは通信相手の認証も含むため、鍵交換、データの暗号化、署名、ハッシュといったステップがあり、それぞれにアルゴリズムの選択肢があります。これらをまとめた「暗号化スイート」を適切なものに設定する必要があります。

基本的には強度が高い(秘密の情報を知らない人が突破するのが困難な)暗号化スイートを指定することで安全性が上がりますが、いつも強度が高い暗号化スイートを選べるとは限りません。強度が低い暗号化スイートを使うことが必要となる典型的なケースは、フィーチャーホンや特定のアプライアンスなどの古い暗号化スイートしかサポートしていない機器との通信が必要な場合です。

TLSなどでは、実際のデータをやりとりする前に、互いに利用可能な暗号化スイートのリストを交換した上で、両方が利用可能な暗号化スイートから実際に利用する暗号化スイートを選択します。この選択の優先順位も設定により決まります。

暗号はだんだん弱くなる

暗号の強度はおおまかに言って「解読したり偽装したりするために必要な時間」を目安に考えられます。そのため攻撃方法の研究が進んだり、コンピュータの計算能力が向上していくことで暗号はだんだんと弱くなっていき、やがては実用上の意味がなくなります(暗号危殆化)。現在利用されている暗号化方式が危殆化する前に、より強い暗号化方式を考案、評価、標準化して一般に利用できるようにするため不断の努力が重ねられています。

たとえば開発当時に知られていた攻撃手法と標準的な計算機を使って攻撃すると解読に100万年かかるとされた暗号化方式であっても、年月とともに効果的な攻撃方法がみつかったり計算機が高速化することで1000年で解読できるようになることはごく普通に考えられます。この弱くなった暗号を数千台のクラスタで攻撃すると数ヶ月程度で攻撃が成功するため、実際的に暗号化の意味がなくなります。

強度が高い暗号化スイートは多くの場合暗号化・復号化にかかる計算時間も増えますので、計算時間と強度のバランスも利用するべき暗号化スイートの選択に影響します。

適切な設定は何か?

相互運用性とセキュリティ強度のバランスをどう調整するべきかは状況により異なります。 NISTなどの機関では実際的な攻撃がどの程度容易であるかを考慮して、特定の方式を含む暗号化スイートの利用禁止を宣言したり、システムの特性により利用するべき暗号化スイートのガイドを公開したりしています。各システムの運用管理者が個別に暗号化スイートについて取捨選択をおこなうことは困難ですので、多くの場合はガイドにあわせて設定することになります。

crypto-policiesによる設定

RHEL 8 では暗号化スイートの設定作業を簡単にするため crypto-policies という仕組みが導入されました。以下のソフトウェアについて、利用可能な暗号化スイートのデフォルト設定をまとめて行います。残念ながら暗号化を扱う全ての場面をサポートできてはいません(dm-cryptoでのストレージ暗号化など)が、主要なライブラリをカバーしています。

  • GnuTLS library
  • OpenSSL library
  • NSS library
  • OpenJDK
  • Libkrb5
  • BIND
  • OpenSSH
  • Libreswan

RHEL 8.1リリースのタイミングで go言語および libsshにも対応する予定です。

crypto-policiesの利用方法は非常にシンプルです。

RHEL 8 betaのcrypto-policiesでは LEGACY, DEFAULT, FUTURE, FIPS の4種類のプロファイルが用意されています。/etc/crypto-policies/config に希望のプロファイル名を指定して、 update-crypto-policies コマンドをrootで実行します。これで上記のソフトウェア群について、デフォルトの暗号化スイートを設定できます。

/etc/crypto-policies/config

# be applied by default to applications. The available policies are 
# restricted to the following profiles.
#
# * LEGACY: Ensures maximum compatibility with legacy systems (64-bit
#   security)
#
# * DEFAULT: A reasonable default for today's standards (112-bit security).
#
# * FUTURE: A level that will provide security on a conservative level that is
#   believed to withstand any near-term future attacks (128-bit security).
#
# * FIPS: Policy that enables only FIPS 140-2 approved or allowed algorithms.
#
# After modifying this file, you need to run update-crypto-policies
# for the changes to propagate.
#
DEFAULT

通常は、DEFAULTプロファイルのままで特に何もせず利用するのがおすすめです。古い機器との接続が必要な場合や、高いセキュリティが必要な場合にはそれぞれLEGACY, FUTUREプロファイルをご利用ください。

crypt-policiesによるデフォルト設定はどう実装されているの?

crypto-policiesパッケージはプロファイル毎に各ソフトウェア用の設定をあらかじめ持っています。update-crypto-policiesコマンドはプロファイル設定に従ってシンボリックリンクを切り替えるだけの単純なものです。

rpmパッケージには生成済みの設定とプロファイル切り替えのシェルスクリプトだけが含まれますが、この設定はポリシーをもとにスクリプトから生成されています。src.rpmかgitlabでホストされているupsreamプロジェクトから確認できます。独自にプロファイルを作成したい場合などはこちらを調査するのが良いです。もし一般的にサポートされるとよさそうなプロファイルがあれば、サポート窓口まで機能拡張リクエストを送っていただければと思います。

gitlab.com

各ソフトウェアのパッケージがcrypto-policiesを利用して暗号化スイートの設定をおこなっています。どのように設定を反映するかの詳細は各ソフトウェアにより変わり、デフォルトの設定ファイルでincludeするもの、サーバ起動時のオプションを変えるものなどがあります。

openssh serverの場合

systemdのsshd.service内で環境変数としてcrypto-policiesの設定をとりこみ、sshd実行時のコマンドラインオプションとして渡しています。コマンドラインオプションは設定ファイルより優先されるため、今までと同じ設定を/etc/ssh/sshd_config に書いていても動作への影響がありません。 /etc/sysconfig/sshd に CRYPTO_POLICY= と空文字列を指定することでcrypto-policiesのデフォルト設定を無視することができます。

/usr/lib/systemd/system/sshd.service より

[Service]
Type=notify
EnvironmentFile=-/etc/crypto-policies/back-ends/opensshserver.config
EnvironmentFile=-/etc/sysconfig/sshd
ExecStart=/usr/sbin/sshd -D $OPTIONS $CRYPTO_POLICY
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartSec=42s

openssl の場合

/etc/pki/tls/openssl.cnf 内で、crypto-policiesのポリシーをincludeしています。

[ crypto_policy ]

.include /etc/crypto-policies/back-ends/opensslcnf.config

crypto-policies の注意点

「RHEL 8でcrypto-policiesを使わない」という選択肢は存在しません。前述のとおり、暗号化を扱う各ソフトウェアのデフォルト設定でcrypto-policiesを参照しています。OpenSSH Serverをのぞけば一般的な設定手順でオーバーライドが可能ですので、必要な場合は個別にソフトウェアを設定します。

まとめ

  • 組織のポリシーにあわせて暗号化の強度を考慮した設定をすることがあります。
  • RHEL 8 ではcrypto-policiesを利用することで、システム全体の暗号化の強度を簡単に調整できます。
  • RHEL 7 までと同じ手順で構築しても利用する暗号化スイートの設定が同一にならない場合があります。必要に応じて適宜オーバーライドしてご利用ください。

関連リンク

fedoraproject.org

gitlab.com

access.redhat.com

* 各記事は著者の見解によるものでありその所属組織を代表する公式なものではありません。その内容については非公式見解を含みます。