LibreSSL

LibreSSLは、TLS/SSLプロトコルのオープンソースによる実装である。TLSの実装にOpenSSLを利用していたOpenBSDの開発者が、2014年4月に明らかとなったOpenSSLのハートブリード脆弱性を受けて独自にフォークしたものである。OpenSSLのコードを見直し、よりセキュアな実装とすることを目的としている。

LibreSSLはOpenSSL 1.0.1ブランチからフォークしたものであり、OpenBSDプロジェクトの標準TLSライブラリとして利用されている。

歴史 
OpenSSLのハートブリード脆弱性が明らかとなった後、OpenBSDプロジェクトではOpenSSLのソースコードの監査を新たに行った。その結果、OpenSSLをフォークし、OpenBSDプロジェクト自身によって管理する必要があると判断した。libressl.orgドメインの取得は2014年4月11日、プロジェクト名の発表は同月22日であった。

コードの見直しの最初の一週間で、C言語によるコードのうち90,000行以上が削減された。削減されたのは、古く使われていないコードや、古かったり現在となってはほとんど使われていないシステムのサポートのためのコードである。当初LibreSSLはOpenBSD 5.6においてOpenSSLを置き換えることを目的としていたが、安定版を他のプラットフォーム向けにもバックポートして公開することとした。2014年4月現在、LibreSSLプロジェクトでは外部からの継続的な経済的な支援を求めている。

6月5日、いくつかのOpenSSLのバグが公開された。いくつかのプロジェクトにはあらかじめバグの詳細が伝えられていたが、LibreSSLには伝えられていなかった。OpenBSDプロジェクトのテオ・デ・ラートは、OpenSSLの開発者がこの情報を意図的にOpenBSDおよびLibreSSLプロジェクトに伝えなかったとして非難している。

6月20日、GoogleによってOpenSSLの新たなフォークとしてBoringSSLが発表された。Googleは、バグ修正に関する情報をLibreSSLと相互にやり取りすることを表明しているほか、LibreSSL側の要請に応じてGoogle自身によるコミットを従来のライセンスだけでなくISCライセンスで再ライセンスしている。6月21日、テオ・デ・ラートはBoringSSLを歓迎する旨を表明し、他プラットフォーム向けのLibreSSL Portableの概要を発表した。6月20日にはLinux向けの、7月8日にはOS XおよびSolaris向けのポートの準備が開始された。

7月11日、ポータブル版のLibreSSL 2.0.0が公開された。また、2.1.4以降はWindowsにも対応している。macOS High Sierra以降、現行macOS VenturaではOpenSSLに代えLibreSSLが標準インストールされている。

OpenSSLからの変更点

メモリ関係 
LibreSSLでは、メモリ呼び出しがOpenSSLで用いられていた独自のものから標準ライブラリによるもの（ strlcpy、calloc、asprintf、reallocarray など）に変更されている。これにより、詳細なメモリデバッガを用いたり、ASLR・NXビット・スタックカナリアによってプログラムのクラッシュを観察することでバッファオーバーフローを検出することが可能となる。

CVSログからは、潜在的な二重解放の可能性が修正されていることもわかる。

積極的な対策 
潜在的な問題を早期に修正できるよう、安全のために設計されたコンパイルオプションやフラグ (-Wall, -Werror, -Wextra, -Wuninitialized) が既定で有効化されている。コードの可読性の向上（Kernel Normal Form、スペースによる整形、改行）や不要なラッパーやマクロの除去により、プログラムの正当性の検証やセキュリティ監査が容易となっている。

2038年問題にも対応済みである。

暗号化 
擬似乱数生成器による乱数のシード生成も、より安全となるよう改良されている。

また、新しい暗号アルゴリズム（ストリーム暗号であるChaCha、メッセージ認証コードであるPoly1305）、楕円曲線暗号（512ビットまでのbrainpool）にも対応している。

脆弱なプロトコルの無効化 
SSL 3.0における脆弱性であるPOODLEの報告をうけて、10月16日リリースのバージョン2.1.1よりSSL 3.0を既定で無効化した。

コード除去
ハートブリードへの対応としてLibreSSLから除去された最初の機能は、Heartbeat拡張そのものであった。また、他のオペレーティングシステムやハードウェアアーキテクチャのサポート（バージョン9までの「クラシックな」Mac OS、NetWare、OS/2、OpenVMS、16-bitのWindowsなど)、不要あるいは安全ではないと考えられるプリプロセッサマクロ、アセンブリ言語、C言語、Perlのための古いデモ・ドキュメントファイルも除去されている。

NSAによるバックドアが存在すると疑われているは、これを必要とする標準と共にサポートが廃止された。

MD2、SSL 2.0、ケルベロス認証、 (J-PAKE)、 (SRP)といった使われていないプロトコル、安全ではないアルゴリズムのサポートも廃止されている。

その他 
OpenSSLに対する批判の一つに、報告されているにもかかわらず長年修正されずに放置されているバグの数が挙げられる。LibreSSLではこれらのバグの修正も行っている。

脚注

関連項目 

Transport Layer Security
Comparison of TLS implementations
 OpenSSL
 OpenBSD
 OpenSSH

外部リンク 
 
 LibreSSL source code (OpenGrok)
 OpenSSL Valhalla Rampage（コードの見直しに関する情報をまとめているブログ）

暗号ソフトウェア
OpenBSD
オープンソースソフトウェア
2014年のソフトウェア
Transport Layer Security