Canonical
15 April 2026
トラブルシューティング
アップストリームの変更でスマートカードのFIPS認証が機能しなくなったときの対処方法
ある行政機関が組織内で運用しているUbuntuデバイスすべてにスマートカード認証を義務付けました。ところがコンプライアンス要件を満たすためにFIPSモードを有効にすると、スマートカード認証の機能が停止してしまい、1,000台近いシステムがFIPS認証への対応を待つことになりました。
Canonicalのサポートチームは、まずOpenSCのアップストリームでの変更が意図せずFIPSとの互換性を損なっていることを突き止めました。次に、すべてのディストリビューションのアップストリームの開発者と連携し、緊急用のホットフィックスと正式な修正の両方を提供しました。このときの対応を以下にご紹介しましょう。
はじめに:原因を突き止める
当初のエラーメッセージは一般的な認証失敗と同じでした。根本的な原因を示すものはありません。
Canonicalのサポートエンジニアはまず、Noble(24.04 LTS)テストシステムで問題を再現しました。pkcs11ツールはNobleのFIPS環境でセグメンテーションフォールトを起こしましたが、Jammy(22.04 LTS)では問題なく動作しました。この行政機関は、OpenSC、つまり各種のオペレーティングシステムで暗号用スマートカードを利用するためのオープンソースのソフトウェアツールキットを認証に使用していました。Ubuntu 22.04 LTSと24.04 LTSの間で、このOpenSCパッケージに何かの変更があったに違いありません。でも何でしょう?
問題の原因がFIPS対応の実装ではなく、アップストリームのOpenSCコードベースの変更にあると突き止めるまでに、数日もかかりませんでした。OpenSCのプロバイダー初期化におけるアップストリームの変更が、FIPSモードのOpenSSLとぶつかって障害を起こしていたのです。
調査:根本原因の確認
Canonicalは、OpenSSLとOpenSCの両方にアップストリームのバグを報告し、情報を求めました。そしてさらにデバッグを継続しました。
まもなく、FIPSに対応するOpenSSLプロバイダーの初期化に誤りがあることがわかりました。OpenSCがバックエンドでOpenSSLプロバイダーをFIPSプロバイダーではなくデフォルトのプロバイダーに設定していたため、スマートカード認証に必要なハッシュ処理がブロックされていたのです。
Canonicalは、これが根本原因であることを確認するテストを作成しました。そして依頼者の環境でテストしたところ、間違いはありませんでした。
この問題の原因は、エンタープライズLinuxにおけるアップストリーム依存の管理にありました。OpenSCが新しいリリースでプロバイダーの処理に変更を加えた結果、FIPSとの互換性を損なう動作が生じたのです。アップストリームにおける開発上の判断が、意図せず特定のコンプライアンス環境に影響を与えたということです。
このような場合に、アップストリームのどの変更が不具合を引き起こしたのかを特定し、理由を特定して最終的な修正を行うのがエンタープライズ向けのバグ修正サポートです。
修正:今すぐ対処、後で完全に解決
Canonicalは、OpenSCのメンテナンス担当者と協力し、最終的な診断に至りました。つまりアップストリームの変更により、OpenSCがFIPSポリシーに許可されないアルゴリズムをロードしようとしたことが問題の原因でした。OpenSSLは正しくNULLポインタを返しましたが、OpenSCはそれを有効なオブジェクトとして扱おうとしていました。しかも別の暗号オプションを試したり利用できる機能を確認したりすべきところを、エラーで終わっていました。
Canonicalのエンタープライズ向けバグ修正サポートは、機能を復旧する一般的な対策としてホットフィックスを共有しました。顧客のブロック状態を解消し、FIPSの導入を進めてもらうためです。
しかしホットフィックスは包括的な修正ではありません。この問題にはアップストリームでの対処が必要でした。つまり特定のディストリビューション向けのパッチではなく、OpenSC自体を修正し、UbuntuだけでなくFIPS環境でOpenSCを使用するあらゆるディストリビューションに対処する必要がありました。
今週、Canonicalは最終的な修正について合意しました。アップストリームのPRは現在マージ待ちです。マージが終わり次第、Ubuntuにバックポートします。これにより、同じ根本原因による3件の問題が解決される見込みです。
重要な要素:エコシステム全体での協力
この事例に対応したサポートチームのDariusz Gadomskiは、うまくいった理由を次のように振り返っています。
今回のケースでは、複数のグループによる協力が功を奏しました。みんな経歴は異なりますが、ユーザーの問題を解決するという目標は同じです。これがオープンソースの真の力です。多くの人が力を合わせ、みんなのために良いソフトウェアを作ります。
このバグの修正には、サポートエンジニアリング、Canonicalのセキュリティチーム、OpenSCのアップストリームコミュニティの協力が必要でした。最初は認証エラーに見えましたが、実際にはプロバイダー初期化に関するアップストリームの変更がFIPSとの互換性を損なっていました。診断には、OpenSC、OpenSSL、FIPSモードの相互作用を理解する必要があり、さらにアップストリームのメンテナンス担当者と協力して最終的な解決策を開発する必要がありました。