6月19日、Phoronixが「Linux 7.2 Gets Rid Of The Last Optimized MD5 Implementation」と題した記事を公開した。
Linux 7.2で、カーネルに長年残り続けてきた最後のアーキテクチャ固有MD5最適化実装が削除される。対象はPowerPC向けの実装だ。MD5の衝突脆弱性は2004年頃から広く知られており、セキュリティ用途での使用はとうに見切られてきた。それでも「チェックサムなど非セキュリティ用途では性能上有用」という理由から、アーキテクチャ最適化コードはカーネルに生き残ってきた。その最後の一つが、ついに消えることになる。
一度は生き残ったPowerPC実装——なぜ今削除されるのか
2024年、MIPSとSPARCのMD5最適化実装は「維持コストに見合わない」として削除された。PowerPCも同時期に削除候補に挙がったが、あるPowerPCユーザーが「自組織の複数アプリケーションがMD5を使っており、パフォーマンス上の恩恵がある」と反論したことで存続が決まった経緯がある。そのユースケースは**AF_ALG**とlibkcapi-hasherを組み合わせたものだった。
AF_ALGとは、Linuxカーネルが持つ暗号APIをソケットインターフェース経由でユーザー空間から利用できる仕組みだ(カーネルドキュメント参照)。カーネルの高速な暗号実装をアプリケーションから直接呼び出せるため、MD5チェックサムの高速化手段として使われていた。
ところがLinux 7.2では、このAF_ALG自体が廃止方向へ動いている。廃止の理由として挙げられているのは、インターフェース設計上のセキュリティ上の懸念や、メンテナンスコストに対する有用性の低下だ。PowerPCのMD5最適化実装を存続させる根拠だったユースケースが消滅したため、削除への障壁もなくなった。
今回の変更は、Linux 7.2向け暗号サブシステムのパッチとして正式にマージされており、PowerPCのMD5コードは「アーキテクチャ固有の最後のMD5実装」として取り除かれた。
現代のCPUには「汎用実装で十分」
削除の根本的な背景は、現代プロセッサの性能向上にある。かつてはアーキテクチャ固有の手書きアセンブラ実装が有意な速度差を生んでいたが、現在はコンパイラの最適化能力が向上し、汎用実装(ジェネリック実装)でも実用上十分な性能が得られるという判断だ。MIPSやSPARCの削除時も同様の理由が示されていた。
なお、PowerPC環境でどうしても高速なMD5が必要なケースについては、パッチのコメント内で言及がある。カーネル側の最適化実装に特権命令は含まれていないため、ユーザー空間へ移植することは技術的に難しくないとされている。
MD5のサポート自体はカーネルに残る
誤解のないよう補足すると、MD5のサポート自体はLinuxカーネルから消えるわけではない。汎用実装は引き続き存在し、全CPUアーキテクチャ上のレガシー用途に対応する。削除されるのは、特定アーキテクチャ向けのアセンブラ等による最適化コードのみだ。
Linuxカーネルはここ数年、古い暗号実装の整理やコードの簡素化を継続的に進めている。今回の変更はその流れの一環であり、パフォーマンスよりもコードの保守性を優先した判断といえる。
詳細はLinux 7.2 Gets Rid Of The Last Optimized MD5 Implementationを参照していただきたい。