OpenSSL (オープン・エスエスエル)は、TLSプロトコル・SSLプロトコル の、オープンソース で開発・提供されるソフトウェアである。中心となっているライブラリ (C言語 で書かれている)は基本的な暗号 化関数と様々なユーティリティ関数を実装している。様々なコンピュータ言語でOpenSSLライブラリを利用できるようにするラッパーもある。OpenSSLはEric A. YoungとTim HudsonによるSSLeay (1998年 12月に開発者がRSA Security に異動したため開発は終了されている)を基にしている。
OpenSSLが利用可能なプラットフォームは、ほぼ全てのUnix系 (Solaris やLinux 、macOS 、BSD を含む)、OpenVMS 、そしてWindows である。IBM によってSystem i (iSeries/AS400) に移植されたバージョンもある。
バージョン履歴
バージョン
リリース日[ 5]
サポート期限[ 6]
概要
最新版
サポート終了: 0.9.1
000000001998-12-23-0000 1998年12月23日
N/A
OpenSSLプロジェクトとしての最初のバージョン
0.9.1c (000000001998-12-23-0000 1998年12月23日 )
サポート終了: 0.9.2
000000001999-03-22-0000 1999年3月22日
N/A
0.9.2b (000000001999-04-06-0000 1999年4月6日 )
サポート終了: 0.9.3
000000001999-05-25-0000 1999年5月25日
N/A
0.9.3a (000000001999-05-27-0000 1999年5月27日 )
サポート終了: 0.9.4
000000001999-08-09-0000 1999年8月9日
N/A
0.9.4 (000000001999-08-09-0000 1999年8月9日 )
サポート終了: 0.9.5
000000002000-02-28-0000 2000年2月28日
N/A
0.9.5a (000000002000-04-01-0000 2000年4月1日 )
サポート終了: 0.9.6
000000002000-09-24-0000 2000年9月24日
N/A
0.9.6m (000000002004-03-17-0000 2004年3月17日 )
サポート終了: 0.9.7
000000002002-12-31-0000 2002年12月31日
N/A
0.9.7m (000000002007-02-23-0000 2007年2月23日 )
サポート終了: 0.9.8
000000002005-07-05-0000 2005年7月5日
000000002015-12-31-0000 2015年12月31日 [ 7]
0.9.8zh (000000002015-12-03-0000 2015年12月3日 )
サポート終了: 1.0.0
000000002010-03-29-0000 2010年3月29日
000000002015-12-31-0000 2015年12月31日 [ 7]
1.0.0t (000000002015-12-03-0000 2015年12月3日 )
サポート終了: 1.0.1[ 8]
000000002012-03-14-0000 2012年3月14日
000000002016-12-31-0000 2016年12月31日
1.0.1u (000000002016-09-22-0000 2016年9月22日 )
サポート終了: 1.0.2[ 9]
000000002015-01-22-0000 2015年1月22日
000000002019-12-31-0000 2019年12月31日
1.0.1の後継バージョン
長期サポート版 (Long Term Support)[ 6]
TLS 1.2及びDTLS 1.2向けのスイートBのサポート
DTLS 1.2のサポート
TLSでの楕円曲線暗号 の自動的選択
TLSがサポートする署名アルゴリズム及び楕円曲線暗号のためのAPI
SSL_CONF設定のAPI
TLS Brainpoolのサポート
ALPN のサポート
CMSのためのRSA-PSS (英語版 ) 、RSA-OAEP 、楕円曲線ディフィー・ヘルマン鍵共有 (ECDH) 及びX9.42ディフィー・ヘルマン鍵共有のサポート
1.0.2u (000000002019-12-20-0000 2019年12月20日 )
サポート終了: 1.1.0[ 10]
000000002016-08-25-0000 2016年8月25日
000000002019-09-11-0000 2019年9月11日
1.1.0l (000000002019-09-10-0000 2019年9月10日 )
サポート終了: 1.1.1[ 11]
000000002018-09-11-0000 2018年9月11日
000000002023-09-11-0000 2023年9月11日
1.1.1w (000000002023-09-11-0000 2023年9月11日 )
サポート中: 3.0
000000002021-09-07-0000 2021年9月7日
000000002026-09-07-0000 2026年9月7日
3.0.15 (000000002024-09-03-0000 2024年9月3日 )
サポート中: 3.1[ 14]
000000002023-03-14-0000 2023年3月14日
000000002025-03-14-0000 2025年3月14日
3.1.7 (000000002024-09-03-0000 2024年9月3日 )
サポート中: 3.2[ 15]
000000002023-11-23-0000 2023年11月23日
000000002025-11-23-0000 2025年11月23日
3.2.3 (000000002024-09-03-0000 2024年9月3日 )
サポート中: 3.3[ 16]
000000002024-04-09-0000 2024年4月9日
000000002026-04-09-0000 2026年4月9日
3.3.2 (000000002024-09-03-0000 2024年9月3日 )
現行バージョン: 3.4 [ 17]
000000002024-10-22-0000 2024年10月22日
000000002026-10-22-0000 2026年10月22日
3.4.0 (000000002024-10-22-0000 2024年10月22日 )
凡例
サポート終了
サポート中
現行バージョン
最新プレビュー版
将来のリリース
使用ライブラリ( libssl, libcrypto )を ver. 1.0 から 1.1 に変更する場合には、使用元のプログラムを少なからず変更する必要がある。本変更に関するノウハウや解説が[ 18] においてまとめられている。
暗号化アルゴリズム
OpenSSLは以下の暗号化アルゴリズムをサポートする。
プロトコル
SSL 3.0、TLS (1.0、1.1、1.2、1.3)、DTLS (1.0、1.2)
共通鍵暗号 方式
AES 、Blowfish 、Camellia 、ChaCha20 、Poly1305 、SEED 、CAST-128 、DES 、IDEA 、RC2 、RC4 、RC5 、トリプルDES 、GOST 28147-89 (英語版 ) [ 19] 、SM4 (英語版 )
ハッシュ関数 方式
MD5 、MD4 、MD2 、SHA-1 、SHA-2 、SHA-3 、RIPEMD-160 、MDC-2 (英語版 ) 、GOST R 34.11-94 (英語版 ) [ 19] 、BLAKE2 、Whirlpool [ 20] 、SM3 (英語版 )
公開鍵暗号 方式
RSA 、DSA 、ディフィー・ヘルマン鍵共有 、楕円曲線暗号 、X25519 、Ed25519 、X448 、Ed448 、GOST R 34.10-2001[ 19] 、SM2
FIPS 140-2の承認
OpenSSLは、NIST(アメリカ国立標準技術研究所 )のCryptographic Module Validation Program (英語版 ) によるコンピュータセキュリティ標準であるFIPS 140-2 において承認された[ 21] 初めてのオープンソース プログラムである。ただしOpenSSL自体が検証されたのではなく、OpenSSL FIPS Object Moduleという標準対応用のソースコードを組み込んだものが検証されている。このモジュールはOpenSSL 1.0.1/1.0.2で使用可能。[ 22]
最初の承認は2006年 1月に行われた。同年7月には「承認されたモジュールによる外部のプログラムとの相互作用に関し疑問が提示された」[ 23] ため、いったんは撤回されたものの、翌2007年 に再び承認が行われた[ 24] [ 25] 。
ライセンス
OpenSSL v3.0.0未満はOpenSSL License とSSLeay License の両方のライセンス下で公開されている[ 26] 。OpenSSL v3.0.0以降ではApache License Version 2.0のみとなる[ 2] [ 3] [ 4] 。OpenSSL License はApache License , Version 1.0であり、SSLeay License は宣伝条項付きの四条項BSDライセンス である。一般にデュアルライセンス ではユーザーは2つのライセンスのうち片方を選択できるが、OpenSSLの説明書きによると、両方のライセンスが適用されることを意味している。
OpenSSL v3.0.0未満のOpenSSL Licenseは、Apache License Version 2.0ではなくApache License Version 1.0である(前述の通りOpenSSL v3.0.0以降ではApache License Version 2.0のみ[ 2] [ 3] [ 4] )ため、「この製品はOpenSSLツールキットを利用するためにOpenSSLプロジェクトによって開発されたソフトウェアを含む。(This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit[ 27] )」という一文を再頒布の際に含めなければならないという規定が含まれ、GNU General Public License (GPL) と非互換である[ 28] 。ただしThe OpenSSL Projectの見解では、多くのLinux やBSD ディストリビューションにおいて、OpenSSLはオペレーティングシステム の一部をなしているためGPLの制限は適用されないとしている[ 29] 。中には、"OpenSSL exception"を追加してシステムで動かせるようにしているプロジェクトもある。GNU Wget とclimm (英語版 ) プロジェクトがそのような例である[ 30] [ 31] 。
バグによる脆弱性
Debianの弱い鍵
Valgrind をOpenSSLに対しても適用可能とするために、Debian ディストリビューションに含まれるOpenSSLにパッチ を適用したが、この際に誤って擬似乱数生成器 が正しく動作しなくなり、生成される暗号鍵が予測可能なものとなってしまった[ 32] 。
このバグは2006年 9月17日にリリースされたDebian (OpenSSL 0.9.8c-1) から含まれており、バグが判明してDebianから発表されたのは2008年5月13日であった[ 33] 。Debian系以外のシステムを含め、問題となったDebian上で生成した鍵を使用している場合は、脆弱性のないOpenSSLで鍵を再生成する必要がある[ 32] 。
このバグは、Debian 4.0 (etch) ではOpenSSLの0.9.8c-4etch3以降で、Debian 5.0 (lenny) では0.9.8g-9で修正されている[ 33] 。
Heartbleed
Heartbleedバグのロゴ
2014年 4月7日に、OpenSSLの1.0.2-betaや1.0.1系列で、TLS のheartbeat拡張[ 34] について、メモリの扱いにバグ があると発表された[ 35] 。このバグを利用することで、ハートビート1回ごとに64キロバイト のメモリを読み取ることが可能となる[ 35] 。この問題のCVE番号 はCVE-2014-0160である[ 36] 。
この脆弱性は2011年 12月31日から存在し、OpenSSL 1.0.1がリリースされた2012年 3月14日以降、脆弱性のあるOpenSSLが広く使われている[ 37] [ 38] 。サーバ側のメモリを読むことで、機密情報にアクセスが可能となり、場合によっては秘密鍵 を盗まれて[ 37] 暗号化が無力となり、中間者攻撃 を仕掛けることが可能となる。
ユーザーに関する非公開の情報、たとえばセッションクッキー やパスワードも漏れうるため、他者になりすます ことも可能となってしまう[ 39] 。脆弱性が判明した段階で、認証局 から証明を受けたHTTPSサーバ のうち、ざっと17%から半分程度が影響するものと見られている[ 40] 。
基本的な対策はハートビートを使用しない(-DOPENSSL_NO_HEARTBEATS オプションを付けて再コンパイルする)か、脆弱性を修正したバージョン(1.0.1g以降)への更新となる[ 35] 。
CCS Injection Vulnerability
2014年 6月6日に、過去10年以上に渡るすべてのOpenSSLのバージョンについて、ChangeCipherSpecメッセージの処理の不正な順序による挿入によって攻撃者の意図する弱い暗号へ強制変更させた通信として開始されるという攻撃方法が発見され、CCS Injection脆弱性 (CCS Injection Vulnerability, CVE-2014-0224) として公開された[ 41] 。
この脆弱性は過去のOpenSSLのほとんどのバージョンに存在し、通信開始手順の途中で不正な信号を送ると、該当する通信で使われる一時的な暗号鍵が、第三者でも予想できてしまうというものである。
また、脆弱性発見の経緯が、発見者により公開されている[ 42] 。
DROWN攻撃
Decrypting RSA with Obsolete and Weakened eNcryptionと名付けられた攻撃手法の略称[ 43] 。
脆弱性の概要は、SSLv2を使用可能にしていると攻撃者は、同じ秘密鍵を共有するSSLv2が有効なサーバにプローブを送信することで、新しいプロトコルであるTLSを使ったクライアントとサーバ間の接続を復号することができる[ 44] 。
想定される影響は、遠隔の攻撃者に、SSLv2 をサポートしているサーバの暗号通信を解読されるおそれがある。SSLv2 をサポートしており、TLS 通信で SSLv2 と同一の証明書を使用している場合、TLS の暗号通信であっても、同様の影響を受けるおそれがある[ 45] 。
この攻撃に対処したパッチは、1.0.1sまたは1.0.2.g[ 46] である。
SSLv2自体は、2011年から非推奨[ 47] となっている。
フォーク
LibreSSL
OpenBSD プロジェクトでは、前述のハートブリード 問題をうけて、OpenSSL 1.0.1gをベースとしてフォーク したLibreSSL を2014年4月に立ち上げた[ 48] 。これは、OpenBSDで利用されているOpenSSLライブラリを置き換えることを目的としており、OpenSSLのコードの見直しを行いよりセキュアな実装とすることを目指している。
既に、OpenBSDにおいて不要なコードや、古いシステムのサポートのためのコードの削除を行い、90000行以上のソースコードの削減を行っている[ 49] 。
2014年7月11日に、LibreSSL 2.0.0がリリースされた[ 50] [ 51] 。
BoringSSL
Google も、OpenSSLをフォークしたBoringSSL の立ち上げを2014年6月に発表した[ 52] [ 53] 。Googleでは、OpenSSL、LibreSSL双方の開発者と協力していくとしている。
脚注
^ “OpenSSL: Newslog ”. 2024年10月24日 閲覧。
^ a b c Matt Caswell (28 November 2018). “The Holy Hand Grenade of Antioch ”. OpenSSL Foundation, Inc. 3 January 2019 閲覧。
^ a b c Richard Levitte (6 December 2018). “Change license to the Apache License v2.0 openssl/LICENSE at master · openssl/openssl · GitHub ”. OpenSSL Foundation, Inc. 3 January 2019 閲覧。
^ a b c 樽井 秀人 (30 November 2018). “「OpenSSL」のバージョンの付け方が変更 ~ライセンスは“Apache License 2.0”へ 現行バージョンはそのまま、v3.0.0から実施 ”. Impress Corporation. 3 January 2019 閲覧。
^ “Changelog ”. OpenSSL Software Foundation. 2019年10月7日 閲覧。
^ a b c “Release Strategy ”. OpenSSL Software Foundation. 2023年3月18日 閲覧。
^ a b Mark J Cox (2016年1月25日). “(openssl-announce) Forthcoming OpenSSL releases ” (英語 ). The OpenSSL Project Team. 2016年12月7日 閲覧。 “support for 1.0.0 and 0.9.8 releases ended on 31st December 2015 and are no longer receiving security updates”
^ “OpenSSL 1.0.1 Series Release Notes ”. 2015年1月20日時点のオリジナル よりアーカイブ。2017年2月20日 閲覧。
^ “OpenSSL 1.0.2 Series Release Notes ”. 2017年2月20日 閲覧。
^ “OpenSSL 1.1.0 Series Release Notes ”. 2017年2月20日 閲覧。
^ a b Caswell, Matt (2018年9月11日). “OpenSSL 1.1.1 Is Released ” (英語). www.openssl.org . OpenSSL Foundation. 2019年10月7日 閲覧。
^ Caswell, Matt (2018年2月8日). “Using TLS1.3 With OpenSSL - OpenSSL Blog ” (英語). www.openssl.org . OpenSSL Foundation. 2019年10月7日 閲覧。
^ Caswell, Matt (2018年11月28日). “The Holy Hand Grenade of Antioch ”. OpenSSL Blog. 2019年10月7日 閲覧。
^ “OpenSSL 3.1 Final Release ” (英語). OpenSSL Foundation. 2024年10月10日 閲覧。
^ “OpenSSL announces final release of OpenSSL 3.2.0 ” (英語). OpenSSL Foundation. 2024年10月10日 閲覧。
^ “OpenSSL 3.3 Final Release Live ” (英語). OpenSSL Foundation. 2024年10月10日 閲覧。
^ “OpenSSL 3.4 Final Release Live ” (英語). OpenSSL Foundation. 2024年10月24日 閲覧。
^ “OpenSSL (libssl libcrypto) の version を 1.1未満(1.0.2以前) から 1.1 以降に変更する方法や注意点など ”. openssl-migration . 2021年5月21日 閲覧。
^ a b c “GOST engine OpenSSL 1.0.0 README ”. cvs.openssl.org. 2013年4月15日時点のオリジナル よりアーカイブ。2019年10月7日 閲覧。
^ “OpenSSL source code, directory crypto/whrlpool ”. 2017年8月29日 閲覧。
^ “FIPS-140 - OpenSSL.org ” (2017年3月14日). 2015年8月23日時点のオリジナル よりアーカイブ。2019年11月12日 閲覧。
^ “OpenSSL User Guide for the OpenSSL FIPS Object Module v2.0 ” (2017年3月14日). 2019年11月12日 閲覧。
^ NIST recertifies open source encryption module
^ “Validated FIPS 140-1 and FIPS 140-2 Cryptographic Modules 2007 ”. アメリカ国立標準技術研究所 (2007年). 2013年6月24日 閲覧。
^ “FIPS 140-2 Validation Certificate ” (PDF). アメリカ国立標準技術研究所 (2007年). 2013年6月24日 閲覧。
^ OpenSSL: Source, License
^ http://www.openssl.org
^ Licenses - Free Software Foundation
^ OpenSSL: Frequently Asked Questions
^ WGET 1.10.2 for Windows (win32)
^ climm - Download!
^ a b DebianのOpenSSLに脆弱性、「弱い鍵」が破られる恐れ @IT 、2008年5月20日(2014年4月12日閲覧)。
^ a b “DSA-1571-1 openssl – predictable random number generator ”. Debian (May 13, 2008). 2012年12月3日 閲覧。
^ Seggelmann, R. et al. (February 2012). “Transport Layer Security (TLS) and Datagram Transport Layer Security (DTLS) Heartbeat Extension ”. RFC 6520 . Internet Engineering Task Force (IETF). 8 April 2014 閲覧。
^ a b c OpenSSL.org (07 April 2014). “OpenSSL Security Advisory [07 Apr 2014 ]”. 9 April 2014 閲覧。
^ [1]
^ a b Codenomicon Ltd (2014年4月8日). “Heartbleed Bug ”. 2014年4月8日 閲覧。
^ Goodin, Dan (2014年4月8日). “Critical crypto bug in OpenSSL opens two-thirds of the Web to eavesdropping ”. Ars Technica . 2014年4月8日 閲覧。
^ “Why Heartbleed is dangerous? Exploiting CVE-2014-0160 ”. IPSec.pl (2014年). 2014年4月8日 閲覧。
^ Mutton, Paul (8 April 2014). “Half a million widely trusted websites vulnerable to Heartbleed bug ”. Netcraft Ltd.. 8 April 2014 閲覧。
^ “CCS Injection Vulnerability ”. lepidum.co.jp (2014年6月6日). 2014年6月6日 閲覧。
^ CCS Injection脆弱性(CVE-2014-0224)発見の経緯についての紹介 - CCS Injection
^ https://drownattack.com/drown-attack-paper.pdf DROWN: Breaking TLS using SSLv2
^ https://japan.cnet.com/article/35078777/ HTTPSサイトの3割に影響する「DROWN」脆弱性見つかる--OpenSSLはパッチ公開
^ “JVNVU#90617353:SSLv2 の暗号通信を解読可能な脆弱性 (DROWN 攻撃) ”. Japan Vulnerability Notes (2016年3月2日). 2018年6月15日 閲覧。
^ https://www.openssl.org/news/vulnerabilities.html#2016-0800 CVE-2016-0800 (OpenSSL advisory) [High severity] 1st March 2016
^ https://datatracker.ietf.org/doc/html/rfc6176
^ “OpenBSD has started a massive strip-down and cleanup of OpenSSL ”. OpenBSD journal (2014年4月15日). 2014年6月22日 閲覧。
^ “OpenBSD forks, prunes, fixes OpenSSL ”. ZDNet (2014年4月21日). 2014年6月22日 閲覧。
^ “Index of /pub/OpenBSD/LibreSSL ” (11 July 2014). 11 July 2014 閲覧。
^ Beck, Bob (11 July 2014). “First release of LibreSSL portable is available ”. Marc.info. 11 July 2014 閲覧。
^ “Google unveils independent “fork” of OpenSSL called “BoringSSL” ”. Ars Technica (2014年6月21日). 2014年6月21日 閲覧。
^ “BoringSSL ”. Adam Langley's Weblog (2014年6月20日). 2015年9月22日 閲覧。
関連項目
外部リンク