LibreSSL

読み:リブレ・エスエスエル
外語:LibreSSL 英語
品詞:商品名

SSL/TLSのオープンソースによる実装の一つ。OpenSSLの派生改良版で、今後の主流になると見込まれている。

目次

LibreSSLは、OpenSSLの全面的なリファクタリングを実施し、コードベースのモダン化とクリーンナップを通じセキュリティの改善を図ることを目的として、The OpenBSD Projectによりフォークされたコードベースである。

LibreSSLはOpenSSLからの置き換えが想定され、次の4つから構成されている。

  • openssl ‐ 鍵や証明書管理のためのツール
  • libcrypto ‐ 暗号化のためのライブラリー
  • libssl ‐ OpenSSLと後方互換性のあるTLSライブラリー
  • libtls ‐ LibreSSLの新しいTLSライブラリー

当時最新だったOpenSSL 1.0.1ブランチがベースで、以降、OpenBSDプロジェクトではLibreSSLが標準のTLSライブラリとなった。

ライセンス

OpenSSLと同様に、Apache License 1.0と4条項BSDライセンスという、宣伝条項を含むライセンスと、ISCライセンス、パブリックドメインが混在する。

OpenSSLからライセンスは変更できないのでGPL非互換なのは従来同様であるが、Linuxはじめ様々なOSが対応している。

対応プラットフォーム

標榜

LibreSSLの最初のゴールは、次としている。

  • OpenSSLとのAPI/ABI互換性を維持する ‐ 我々は第一として代替品になるつもりである
  • より多くの人々をコードベースで作業させる ‐ ※それは怖いことじゃないよ※
  • バグの修正 ‐ モダンなコーディングの実戦
  • 移植性の確保

簡単には、OpenSSLプロジェクトが怠慢で今までしてこなかった必要なことを、代わりにする、という宣言である。

「怖いことじゃない」というのは、後に詳細するスライドで書かれているように、OpenSSLのコードが怖すぎる(≒ヤバい)ので、そうではない方向を目指すという意味である。

由来

2014(平成26)年4月、世界はOpenSSLの「Heartbeat拡張」がもたらしたセキュリティホールCVE-2014-0160(心臓出血)で震撼した。

OpenBSDプロジェクトでもOpenSSLを用いていたため、OpenSSLのソースを調査、結果として(バグだらけであまりにも酷いので)OpenBSDプロジェクト指揮下での全面的な刷新が必要と判断、OpenSSL本流よりフォークされLibreSSLと命名され、改善が開始された。

OpenBSDプロジェクトによる調査で、フォークまでする決断にいたった理由として、Bob Beck氏によるスライドが公開されている

ここに「The code was too horrible. Nobody wanted to work with it.」「(意訳: このコードはヤベェ、誰もこんなのに関わりたくねェ)、「RUN AWAY!!!」(意訳: 逃げろ!!!)などとあるようにコードが汚すぎて外部の参加者がみな逃げ出すような代物だったこと、およびバグ管理システムに記録されたバグを修正することなく放置していることを理由としている。

スライドではHeartbeat拡張のバグの件にも振れ、最後に「eek!」(意訳: キャーッ!)とあるような悪手の結論であることを述べているが、いずれにせよHeartbeat拡張のバグは、LibreSSLフォークの理由ではなく、単なる切っ掛けの一つでしかない。

改善の傾向

OpenSSLは歴史あるソフトウェアなので、既に不要なコードが大量に存在する。

LibreSSLでは、古くて既に使われていない処理や、古くてもうあまり使われない処理などを一気に削除した。

ちなみに、LibreSSL開発開始のきっかけとなったCVE-2014-0160(心臓出血)への抜本的な対応としてOpenBSDプロジェクトの取った選択は、「Heartbeat拡張の削除」だった。

加えて、OpenSSLには報告されていながら長年放置されたままのバグも多くあるが、これらはLibreSSLにて積極的に修正されている。

また、以前よりNSAによるバックドアとして知られていた疑似乱数生成アルゴリズム「Dual_EC_DRBG」も、LibreSSLで除去された。再びNSAからの横槍が入らない限りは、LibreSSLはOpenSSLとは比較にならない安全性を持つと言える。

安全の考え方

OpenSSLからLibreSSLに変更したからといって、必ずしも絶対安全とは限らない。世の中に絶対はない。

OpenSSLにあるセキュリティホールが未修正のまま残っていることもあり、また修正の手違い等で、OpenSSLにはないセキュリティホールを新たに埋め込んでしまう可能性もある。

OpenBSDプロジェクトでは、バグも脆弱性もないコードを作ることなどできない、という前提で開発が進められており、しかし何よりもセキュリティを重視している。この折り合いを付けるため、セキュリティホールになりにくいCの関数を作ったりして、少しでもセキュリティが向上するようにするという開発方針を取っている。

その上で、「脆弱性のあるコードをリリースしてしまった(失敗)」→「指摘する人がいる」→「それをすぐ修正する人がいる」→「すぐに修正されたコードがリリースされる」という動きがオープンソースの良さであり、OpenBSDプロジェクトではこれが達成されている。上にも書かれたように、OpenSSLではこれがなく、脆弱性が長く放置されていたのが欠点だったのである。

状況

LibreSSLの開発第一段階はまずOpenBSDでの動作が優先されていた。これは、元々は「OpenBSD用のまともなOpenSSL」として開発に着手されたためであるが、後に様々なプラットフォームに対応するようになった。

LibreSSLの開発第二段階となると、他のプラットフォームへの移植性なども考慮し始め、「LibreSSL Portable」としてリリースされた。元々OpenBSDの主張では、LinuxではセキュアなRNG(乱数生成器)は無理だ、との主張であったので、これは大きな譲歩であるとも言える。これは2.0.0が初版である。Linux、Solaris、Mac OS X、FreeBSDでテスト済みとされた。また2.1.4以降はWindowsにも対応した。

コードの削除

古いコードを中心に、躊躇なく削除されている。

フォークの切っ掛けとなったバグ「Heartbeat拡張」という、そもそも要らない機能の丸ごと削除をはじめとして、古い環境に対応させるために追加されたコード、古い暗号やハッシュアルゴリズム(MD2、SSL 2.0、ケルベロス認証など)の削除、そして、バックドアでありセキュリティホールそのものである「Dual_EC_DRBG」も無事に削除された。

また、SSL 3.0も遂に陥落したことから、いずれSSL 3.0も削除されるものと思われる。

ヴァルハラ送り

具体的には、次のようなレガシー環境の処理が削除されている

  • EBCDIC対応
  • MS-DOS対応
  • 古いMac OS対応 (OS Xより前のもの)
  • Win16など
  • あなたが聞いたことがないようなもの
  • VMS対応
  • などなどなどなどなど

北欧神話やクトゥルー神話などを持ち出して、EBCDICやVMSは神話の時代の代物であることを強調している。

メモリー

OpenSSLではメモリー制御に独自処理が目立つが、LibreSSLでは標準Cライブラリにある関数のうちセキュアなもの(OpenBSDが提唱したstrlcpyなど)に置き換えが進められている。

標準関数で一元化することで、ASLRNXビット、カナリアといった手法で、バッファーオーバーフローの検出が容易に可能になる。

疑似乱数生成アルゴリズム

疑似乱数生成アルゴリズムも、「Dual_EC_DRBG」の削除をはじめとして改良されている。

乱数のシード生成処理の改良の他、新しい暗号アルゴリズムも追加された。

各バージョンごとに分離し、かつ新しいものを上として記述する。

  • LibreSSL 2.6
    • LibreSSL 2.6.0 (2017(平成29)年7月12日)
  • LibreSSL 2.5
    • LibreSSL 2.5.5 (2017(平成29)年7月12日)
    • LibreSSL 2.5.4 (2017(平成29)年5月1日)
    • LibreSSL 2.5.3 (2017(平成29)年4月11日)
    • LibreSSL 2.5.2 (2017(平成29)年3月26日)
    • LibreSSL 2.5.1 (2017(平成29)年2月1日)
    • LibreSSL 2.5.0 (2016(平成28)年9月27日)
  • LibreSSL 2.4
    • LibreSSL 2.4.5 (2017(平成29)年2月1日)
    • LibreSSL 2.4.4 (2016(平成28)年11月6日)
    • LibreSSL 2.4.3 (2016(平成28)年9月27日)
    • LibreSSL 2.4.2 (2016(平成28)年8月1日)
    • LibreSSL 2.4.1 (2016(平成28)年6月9日)
    • LibreSSL 2.4.0 (2016(平成28)年5月31日)
  • LibreSSL 2.3
    • LibreSSL 2.3.10 (2017(平成29)年2月1日)
    • LibreSSL 2.3.9 (2016(平成28)年11月6日)
    • LibreSSL 2.3.8 (2016(平成28)年9月27日)
    • LibreSSL 2.3.7 (2016(平成28)年8月1日)
    • LibreSSL 2.3.6 (2016(平成28)年6月9日)
    • LibreSSL 2.3.5 (2016(平成28)年5月31日)
    • LibreSSL 2.3.4 (2016(平成28)年5月3日)
    • LibreSSL 2.3.3 (2016(平成28)年3月22日) ‐ OpenBSD 5.9-release
    • LibreSSL 2.3.2 (2016(平成28)年1月28日)
    • LibreSSL 2.3.1 (2015(平成27)年11月2日)
    • LibreSSL 2.3.0 (2015(平成27)年9月23日)
  • LibreSSL 2.2
    • LibreSSL 2.2.9 (2016(平成28)年6月9日)
    • LibreSSL 2.2.8 (2016(平成28)年5月31日)
    • LibreSSL 2.2.7 (2016(平成28)年5月3日)
    • LibreSSL 2.2.6 (2016(平成28)年1月28日)
    • LibreSSL 2.2.5 (2015(平成27)年12月7日)
    • LibreSSL 2.2.4 (2015(平成27)年10月15日)
    • LibreSSL 2.2.3 (2015(平成27)年8月29日)
    • LibreSSL 2.2.2 (2015(平成27)年8月5日) ‐ OpenBSD 5.8-release
    • LibreSSL 2.2.1 (2015(平成27)年7月8日)
    • LibreSSL 2.2.0 (2015(平成27)年6月11日)
  • LibreSSL 2.1
    • LibreSSL 2.1.10 (2016(平成28)年1月28日)
    • LibreSSL 2.1.9 (2015(平成27)年12月7日)
    • LibreSSL 2.1.8 (2015(平成27)年10月15日)
    • LibreSSL 2.1.7 (2015(平成27)年6月11日)
    • LibreSSL 2.1.6 (2015(平成27)年3月19日)
    • LibreSSL 2.1.5 (2015(平成27)年3月16日) ‐ OpenBSD 5.7-release
    • LibreSSL 2.1.4 (2015(平成27)年3月3日)
    • LibreSSL 2.1.3 (2015(平成27)年1月21日)
    • LibreSSL 2.1.2 (2014(平成26)年12月8日)
    • LibreSSL 2.1.1 (2014(平成26)年10月16日)
    • LibreSSL 2.1.0 (2014(平成26)年10月12日)
  • LibreSSL 2.0
    • LibreSSL 2.0.6 (2015(平成27)年10月15日)
    • LibreSSL 2.0.5 (2014(平成26)年8月8日) ‐ OpenBSD 5.6-release
    • LibreSSL 2.0.4 (2014(平成26)年8月3日)
    • LibreSSL 2.0.3 (2014(平成26)年7月21日)
    • LibreSSL 2.0.2 (2014(平成26)年7月15日)
    • LibreSSL 2.0.1 (2014(平成26)年7月13日)
    • LibreSSL 2.0.0 (2014(平成26)年7月11日) ‐ 初版
関連するリンク
http://www.libressl.org/
用語の所属
TLS
関連する用語
BoringSSL
OpenSSL

コメントなどを投稿するフォームは、日本語対応時のみ表示されます


KisoDic通信用語の基礎知識検索システム WDIC Explorer Version 7.04a (27-May-2022)
Search System : Copyright © Mirai corporation
Dictionary : Copyright © WDIC Creators club