PaPoo
cover
technews
Author
technews
世界の技術ニュースをリアルタイムでキャッチし、日本語でわかりやすく発信。AI・半導体・スタートアップから規制動向まで、グローバルテックシーンの「今」をお届けします。

OpenSSL 4.0.0登場:古いものを削り、新しい暗号機能を盛り込んだ大型アップデート

OpenSSL 4.0.0 が GitHub で公開されました。ひとことで言うと、「互換性をかなり気にしつつも、古い機能を整理して、新しい暗号機能をしっかり足した feature release」です。
OpenSSL は、Webサイトの HTTPS などで使われる暗号ライブラリの大定番。表に見える派手さは少ないですが、世の中の安全な通信を支える“縁の下の力持ち”です。だからこそ、この手のリリースは地味に見えて、実はかなり重要だと思います。

この記事のキーポイント

OpenSSL 4.0.0 はどんなリリース?

OpenSSL のリリースノートによると、4.0.0 は「significant new functionality」を追加する feature release です。
つまり、単なる不具合修正ではなく、機能面でも設計面でもかなり手を入れた版です。

ただし、こういう大きなリリースにはほぼ必ず付き物があります。そう、​互換性の変更です。
今回も「潜在的に大きい、あるいは互換性に影響しうる変更」がたくさん入っています。これは現場の人からすると少し面倒ですが、長い目で見れば、古い荷物を降ろして前に進むための痛みでもあります。個人的には、この“整理整頓感”はかなり好感が持てます。

まず大きいのは、古いものの削除

今回のリリースでは、いくつもの古い機能や古い書き方が削除されています。ここは影響が大きいので要注意です。

削除された主なもの

古いプロトコルや仕組みを切るのは、セキュリティ製品としては自然な流れです。
特に SSLv3 は、2015年から非推奨で、1.1.0 以降はデフォルトで無効になっていました。今回ついに完全削除です。
正直、まだ残っていたのか、と感じる人もいるかもしれませんが、現実のソフトウェアは「すぐに切れない古い互換性」を抱え続けるものです。そこをようやく整理した、という見方ができると思います。

engine の削除も大きめです。engine は OpenSSL に機能追加するための古い仕組みですが、今後は別の方向に寄せていく、という意思表示でしょう。
古い拡張機構を守るより、全体をシンプルにする方針は、保守性の面でかなり筋がいいと思います。

API の変化もかなり重要

OpenSSL は、ただ機能を足すだけでなく、API の形も少しずつ変わっています。今回の 4.0.0 では、その影響がはっきり見えます。

目立つ変更

ここで出てくる opaque という言葉は、ざっくり言うと「中身を外から直接いじれないようにした」という意味です。
昔は構造体の中身をアプリ側が直接触れることもありましたが、今はライブラリが内部構造を隠し、必要な関数経由で操作する方向が主流です。

これは一見すると不便ですが、長期的にはかなり合理的です。
なぜなら、内部構造を隠せば、OpenSSL の開発側は内部実装を変えやすくなるからです。アプリ側が中身にべったり依存していると、ライブラリの進化が止まってしまいます。
つまり、​​「壊れやすい自由」を減らして、「壊れにくい設計」を増やした」​とも言えます。私はこの流れ、わりと好きです。

証明書まわりはさらに厳格に

OpenSSL 4.0.0 では、証明書検証のチェックも強化されています。

追加されたチェック

ここでいう CRL は、証明書失効リスト(Certificate Revocation List)のことです。
簡単に言うと、「この証明書はもう信用しない」というブラックリストのようなものです。
AKID は証明書の識別に関わる情報で、検証の厳しさを上げることで、より正確に証明書の妥当性を判定できるようになります。

こうした変更は、表面的には派手ではありません。でも、セキュリティの世界ではかなり重要です。
「通ればいい」ではなく「より正しく厳密に通す」という方向へ進んでいるわけで、ここは実務的にかなり価値があると思います。

暗号処理の細かい改善もいろいろ

地味だけどありがたい変更もあります。

変更点の一部

このあたりは、利用者には見えにくいけれど、実装の整理としてはかなり重要です。
特に snprintf() の変更は、「自前の実装を持つより、標準ライブラリを使う」方向で、保守性の面でわかりやすい改善です。

atexit() や cleanup の扱い変更は、アプリケーションの終了処理に影響しうるので、組み込み方によっては注意が必要です。
こういう部分は「昔はなんとなく動いていた」コードほど、アップデート時に引っかかりやすいところだと思います。

新機能もかなり豪華

削るだけではなく、新しい機能もしっかり入っています。ここが 4.0.0 の面白いところです。

追加された主な新機能

ECH は特に注目

ECH は、ざっくり言うと「TLS 通信の最初のやり取りをより隠しやすくする仕組み」です。
これがなぜ重要かというと、従来の通信開始時には、アクセス先の情報の一部が見えやすかったからです。ECH はそこを改善する方向の技術で、プライバシー面でかなり注目されています。

もちろん、実際の普及はクライアント・サーバー・CDN など周辺の対応にも左右されます。
でも、OpenSSL に入ったのは大きな一歩です。こういう基盤ライブラリが対応すると、エコシステム全体が少しずつ動きやすくなります。

post-quantum も入っている

curveSM2MLKEM768 のような post-quantum 系の名前が入っているのも印象的です。
post-quantum は「将来の量子コンピュータでも壊れにくい暗号」を目指す分野です。まだ一般ユーザーには遠い話に見えるかもしれませんが、インフラの世界ではすでにかなり真剣に見られています。

個人的には、OpenSSL がこういう領域を着実に取り込んでいるのは、かなり頼もしいと思います。
「今すぐ必要」ではなくても、「あとで必ず必要になる」ものに先回りしている感じがあるからです。

FIPS や Windows 対応も着実

派手ではないけれど、実務ではうれしい話もあります。

FIPS 関連

FIPS モジュールのインストール時に、self tests を あとで実行する ようにできるようになりました。
これは openssl fipsinstall-defer_tests オプションで使えます。

FIPS は米国政府系の要件に関係する暗号基準で、導入現場では手続きや検証がやや重くなりがちです。
なので、テストを柔軟に扱えるのは運用上ありがたいはずです。

Windows 関連

Windows では、​static runtimedynamic runtime のどちらでもリンクできるようになりました。
これはビルド環境の違いに合わせやすくする改善で、地味ですが現場には効きます。
こういう「ちゃんと困るところを見てくれている」アップデートは好印象です。

じゃあ、ユーザーや開発者は何に気をつけるべき?

OpenSSL 4.0.0 は魅力的な新機能が多い一方で、互換性の影響もかなりあります。
特に注意したいのは次のあたりです。

もし古い OpenSSL との互換性に強く依存しているプロジェクトなら、移行作業はそれなりに大変になるはずです。
ただ、そのぶんコードベースが整理され、今後の保守はしやすくなる可能性が高いです。

まとめ:OpenSSL 4.0.0 は「古さを片づけて未来へ進む」リリース

OpenSSL 4.0.0 は、単なるバージョンアップではなく、かなりはっきりした方針転換を感じるリリースです。
古い SSLv3 や engine のような仕組みを外しつつ、ECH、post-quantum、cSHAKE、FIPS 運用改善など、次世代向けの機能をしっかり入れています。

率直に言うと、こういうリリースは導入する側にはちょっと厄介です。互換性チェックが増えるからです。
でも、基盤ライブラリがいつまでも昔の互換性にしがみついていると、どこかで必ず限界が来ます。
その意味で OpenSSL 4.0.0 は、​​「痛みはあるけど、かなり健全なアップデート」​だと思います。


参考: Release OpenSSL 4.0.0 · openssl/openssl

同じ著者の記事