OpenSSL

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) に移植されたバージョンもある。 使用ライブラリ( libssl, libcrypto )を ver. 1.0 から 1.1 に変更する場合には、使用元のプログラムを少なからず変更する必要がある。本変更に関するノウハウや解説がにおいてまとめられている。 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（英語版）、SM4（英語版） ハッシュ関数方式 MD5、MD4、MD2、SHA-1、SHA-2、SHA-3、RIPEMD-160、MDC-2（英語版）、GOST R 34.11-94（英語版）、BLAKE2、Whirlpool、SM3（英語版） 公開鍵暗号方式 RSA、DSA、ディフィー・ヘルマン鍵共有、楕円曲線暗号、X25519、Ed25519、X448、Ed448、GOST R 34.10-2001、SM2 OpenSSLは、NIST（アメリカ国立標準技術研究所）のCryptographic Module Validation Program（英語版）によるコンピュータセキュリティ標準であるFIPS 140-2において承認された初めてのオープンソースプログラムである。ただしOpenSSL自体が検証されたのではなく、OpenSSL FIPS Object Moduleという標準対応用のソースコードを組み込んだものが検証されている。このモジュールはOpenSSL 1.0.1/1.0.2で使用可能。 最初の承認は2006年1月に行われた。同年7月には「承認されたモジュールによる外部のプログラムとの相互作用に関し疑問が提示された」ため、いったんは撤回されたものの、翌2007年に再び承認が行われた。 OpenSSL v3.0.0未満はOpenSSL LicenseとSSLeay Licenseの両方のライセンス下で公開されている。OpenSSL v3.0.0以降ではApache License Version 2.0のみとなる。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のみ)ため、「この製品はOpenSSLツールキットを利用するためにOpenSSLプロジェクトによって開発されたソフトウェアを含む。(This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit)」という一文を再頒布の際に含めなければならないという規定が含まれ、GNU General Public License (GPL) と非互換である。ただしThe OpenSSL Projectの見解では、多くのLinuxやBSDディストリビューションにおいて、OpenSSLはオペレーティングシステムの一部をなしているためGPLの制限は適用されないとしている。中には、"OpenSSL exception"を追加してシステムで動かせるようにしているプロジェクトもある。GNU Wgetとclimm（英語版）プロジェクトがそのような例である。 ValgrindをOpenSSLに対しても適用可能とするために、Debianディストリビューションに含まれるOpenSSLにパッチを適用したが、この際に誤って擬似乱数生成器が正しく動作しなくなり、生成される暗号鍵が予測可能なものとなってしまった。 このバグは2006年9月17日にリリースされたDebian (OpenSSL 0.9.8c-1) から含まれており、バグが判明してDebianから発表されたのは2008年5月13日であった。Debian系以外のシステムを含め、問題となったDebian上で生成した鍵を使用している場合は、脆弱性のないOpenSSLで鍵を再生成する必要がある。 このバグは、Debian 4.0 (etch) ではOpenSSLの0.9.8c-4etch3以降で、Debian 5.0 (lenny) では0.9.8g-9で修正されている。 2014年4月7日に、OpenSSLの1.0.2-betaや1.0.1系列で、TLSのheartbeat拡張について、メモリの扱いにバグがあると発表された 。このバグを利用することで、ハートビート1回ごとに64キロバイトのメモリを読み取ることが可能となる。この問題のCVE番号はCVE-2014-0160である。 この脆弱性は2011年12月31日から存在し、OpenSSL 1.0.1がリリースされた2012年3月14日以降、脆弱性のあるOpenSSLが広く使われている。サーバ側のメモリを読むことで、機密情報にアクセスが可能となり、場合によっては秘密鍵を盗まれて暗号化が無力となり、中間者攻撃を仕掛けることが可能となる。 ユーザーに関する非公開の情報、たとえばセッションクッキーやパスワードも漏れうるため、他者になりすますことも可能となってしまう。脆弱性が判明した段階で、認証局から証明を受けたHTTPSサーバのうち、ざっと17%から半分程度が影響するものと見られている。 基本的な対策はハートビートを使用しない（-DOPENSSL_NO_HEARTBEATS オプションを付けて再コンパイルする）か、脆弱性を修正したバージョン（1.0.1g以降）への更新となる。 2014年6月6日に、過去10年以上に渡るすべてのOpenSSLのバージョンについて、ChangeCipherSpecメッセージの処理の不正な順序による挿入によって攻撃者の意図する弱い暗号へ強制変更させた通信として開始されるという攻撃方法が発見され、CCS Injection脆弱性 (CCS Injection Vulnerability, CVE-2014-0224) として公開された。 この脆弱性は過去のOpenSSLのほとんどのバージョンに存在し、通信開始手順の途中で不正な信号を送ると、該当する通信で使われる一時的な暗号鍵が、第三者でも予想できてしまうというものである。 また、脆弱性発見の経緯が、発見者により公開されている。 Decrypting RSA with Obsolete and Weakened eNcryptionと名付けられた攻撃手法の略称。 脆弱性の概要は、SSLv2を使用可能にしていると攻撃者は、同じ秘密鍵を共有するSSLv2が有効なサーバにプローブを送信することで、新しいプロトコルであるTLSを使ったクライアントとサーバ間の接続を復号することができる。 想定される影響は、遠隔の攻撃者に、SSLv2 をサポートしているサーバの暗号通信を解読されるおそれがある。SSLv2 をサポートしており、TLS 通信で SSLv2 と同一の証明書を使用している場合、TLS の暗号通信であっても、同様の影響を受けるおそれがある。 この攻撃に対処したパッチは、1.0.1sまたは1.0.2.gである。 SSLv2自体は、2011年から非推奨となっている。 OpenBSDプロジェクトでは、前述のハートブリード問題をうけて、OpenSSL 1.0.1gをベースとしてフォークしたLibreSSLを2014年4月に立ち上げた。これは、OpenBSDで利用されているOpenSSLライブラリを置き換えることを目的としており、OpenSSLのコードの見直しを行いよりセキュアな実装とすることを目指している。 既に、OpenBSDにおいて不要なコードや、古いシステムのサポートのためのコードの削除を行い、90000行以上のソースコードの削減を行っている。 2014年7月11日に、LibreSSL 2.0.0がリリースされた。 Googleも、OpenSSLをフォークしたBoringSSLの立ち上げを2014年6月に発表した。Googleでは、OpenSSL、LibreSSL双方の開発者と協力していくとしている。 boringssl - Git at Google [脚注の使い方] ^ “OpenSSL: Newslog”. 2024年10月10日閲覧。 ^ “OpenSSL: Newslog”. 2024年10月10日閲覧。 ^ 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 (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日). 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日閲覧。 ポータル FLOSS Transport Layer Security TLS実装の比較 公式ウェブサイト （英語） The OpenSSL License and the GPL、Mark McLoughlinによる。 Win32 OpenSSL （英語） 表示 編集