OpenSSL

ウィキペディアから無料の百科事典

OpenSSL
開発元 The OpenSSL Project
最新版 3.4.0 - 2024年10月22日 (12日前) (2024-10-22)[1] [±]
最新評価版 なし [±]
リポジトリ ウィキデータを編集
プログラミング
言語
C言語アセンブリ言語
対応OS マルチプラットフォーム
種別 セキュリティライブラリ
ライセンス
公式サイト www.openssl.org
テンプレートを表示

OpenSSL(オープン・エスエスエル)は、TLSプロトコル・SSLプロトコルの、オープンソースで開発・提供されるソフトウェアである。中心となっているライブラリC言語で書かれている)は基本的な暗号化関数と様々なユーティリティ関数を実装している。様々なコンピュータ言語でOpenSSLライブラリを利用できるようにするラッパーもある。OpenSSLはEric A. YoungとTim HudsonによるSSLeay1998年12月に開発者がRSA Securityに異動したため開発は終了されている)を基にしている。

OpenSSLが利用可能なプラットフォームは、ほぼ全てのUnix系SolarisLinuxmacOSBSDを含む)、OpenVMS、そしてWindowsである。IBMによってSystem i (iSeries/AS400) に移植されたバージョンもある。

バージョン履歴

[編集]
バージョン リリース日[5] サポート期限[6] 概要 最新版
サポート終了:0.9.1 1998年12月23日
  • OpenSSLプロジェクトとしての最初のバージョン
0.9.1c (1998年12月23日)
サポート終了:0.9.2 1999年3月22日
  • 0.9.1cの後継バージョン
0.9.2b (1999年4月6日)
サポート終了:0.9.3 1999年5月25日
  • 0.9.2bの後継バージョン
0.9.3a (1999年5月27日)
サポート終了:0.9.4 1999年8月9日
  • 0.9.3aの後継バージョン
0.9.4 (1999年8月9日)
サポート終了:0.9.5 2000年2月28日
  • 0.9.4の後継バージョン
0.9.5a (2000年4月1日)
サポート終了:0.9.6 2000年9月24日
  • 0.9.5aの後継バージョン
0.9.6m (2004年3月17日)
サポート終了:0.9.7 2002年12月31日
  • 0.9.6mの後継バージョン
0.9.7m (2007年2月23日)
サポート終了:0.9.8 2005年7月5日 2015年12月31日[7]
  • 0.9.7mの後継バージョン
0.9.8zh (2015年12月3日)
サポート終了:1.0.0 2010年3月29日 2015年12月31日[7]
  • 0.9.8nの後継バージョン
1.0.0t (2015年12月3日)
サポート終了:1.0.1[8] 2012年3月14日 2016年12月31日
1.0.1u (2016年9月22日)
サポート終了:1.0.2[9] 2015年1月22日 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 (2019年12月20日)
サポート終了:1.1.0[10] 2016年8月25日 2019年9月11日
  • 1.0.2hの後継バージョン
  • BLAKE2 (RFC 7693) のサポート
  • ChaCha20-Poly1305 (RFC 7539) のサポート
  • X25519 (RFC 7748) のサポート
  • DANE及びCertificate Transparencyのサポート
  • CCM暗号利用モードのサポート
  • Extended Master Secretのサポート
  • SSL 2.0のサポートの削除
  • ケルベロス認証のサポートの削除
  • libsslのデフォルト暗号スイートからのRC4及びトリプルDESの削除
  • DSS、SEED、IDEA、Camellia及びAES-CCMをデフォルトの暗号リストから削除
  • 40ビット及び56ビット暗号のサポートをlibsslから削除
1.1.0l (2019年9月10日)
サポート終了:1.1.1[11] 2018年9月11日 2023年9月11日
1.1.1w (2023年9月11日)
サポート中:3.0 2021年9月7日 2026年9月7日
3.0.15 (2024年9月3日)
サポート中:3.1[14] 2023年3月14日 2025年3月14日 3.1.7 (2024年9月3日)
サポート中:3.2[15] 2023年11月23日 2025年11月23日 3.2.3 (2024年9月3日)
サポート中:3.3[16] 2024年4月9日 2026年4月9日 3.3.2 (2024年9月3日)
現行バージョン:3.4[17] 2024年10月22日 2026年10月22日 3.4.0 (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)
共通鍵暗号方式
AESBlowfishCamelliaChaCha20Poly1305SEEDCAST-128DESIDEARC2RC4RC5トリプルDESGOST 28147-89英語版[19]SM4英語版
ハッシュ関数方式
MD5MD4MD2SHA-1SHA-2SHA-3RIPEMD-160MDC-2英語版GOST R 34.11-94英語版[19]BLAKE2Whirlpool[20]SM3英語版
公開鍵暗号方式
RSADSAディフィー・ヘルマン鍵共有楕円曲線暗号X25519Ed25519X448Ed448、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 LicenseSSLeay Licenseの両方のライセンス下で公開されている[26]。OpenSSL v3.0.0以降ではApache License Version 2.0のみとなる[2][3][4]OpenSSL LicenseApache 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の見解では、多くのLinuxBSDディストリビューションにおいて、OpenSSLはオペレーティングシステムの一部をなしているためGPLの制限は適用されないとしている[29]。中には、"OpenSSL exception"を追加してシステムで動かせるようにしているプロジェクトもある。GNU Wgetclimm英語版プロジェクトがそのような例である[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双方の開発者と協力していくとしている。

脚注

[編集]
  1. ^ OpenSSL: Newslog”. 2024年10月24日閲覧。
  2. ^ a b c Matt Caswell (28 November 2018). “The Holy Hand Grenade of Antioch”. OpenSSL Foundation, Inc. 3 January 2019閲覧。
  3. ^ 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閲覧。
  4. ^ a b c 樽井 秀人 (30 November 2018). “「OpenSSL」のバージョンの付け方が変更 ~ライセンスは“Apache License 2.0”へ 現行バージョンはそのまま、v3.0.0から実施”. Impress Corporation. 3 January 2019閲覧。
  5. ^ Changelog”. OpenSSL Software Foundation. 2019年10月7日閲覧。
  6. ^ a b c Release Strategy”. OpenSSL Software Foundation. 2023年3月18日閲覧。
  7. ^ 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”
  8. ^ OpenSSL 1.0.1 Series Release Notes”. 2015年1月20日時点のオリジナルよりアーカイブ。2017年2月20日閲覧。
  9. ^ OpenSSL 1.0.2 Series Release Notes”. 2017年2月20日閲覧。
  10. ^ OpenSSL 1.1.0 Series Release Notes”. 2017年2月20日閲覧。
  11. ^ a b Caswell, Matt (2018年9月11日). “OpenSSL 1.1.1 Is Released” (英語). www.openssl.org. OpenSSL Foundation. 2019年10月7日閲覧。
  12. ^ Caswell, Matt (2018年2月8日). “Using TLS1.3 With OpenSSL - OpenSSL Blog” (英語). www.openssl.org. OpenSSL Foundation. 2019年10月7日閲覧。
  13. ^ Caswell, Matt (2018年11月28日). “The Holy Hand Grenade of Antioch”. OpenSSL Blog. 2019年10月7日閲覧。
  14. ^ OpenSSL 3.1 Final Release” (英語). OpenSSL Foundation. 2024年10月10日閲覧。
  15. ^ OpenSSL announces final release of OpenSSL 3.2.0” (英語). OpenSSL Foundation. 2024年10月10日閲覧。
  16. ^ OpenSSL 3.3 Final Release Live” (英語). OpenSSL Foundation. 2024年10月10日閲覧。
  17. ^ OpenSSL 3.4 Final Release Live” (英語). OpenSSL Foundation. 2024年10月24日閲覧。
  18. ^ OpenSSL (libssl libcrypto) の version を 1.1未満(1.0.2以前) から 1.1 以降に変更する方法や注意点など”. openssl-migration. 2021年5月21日閲覧。
  19. ^ a b c GOST engine OpenSSL 1.0.0 README”. cvs.openssl.org. 2013年4月15日時点のオリジナルよりアーカイブ。2019年10月7日閲覧。
  20. ^ OpenSSL source code, directory crypto/whrlpool”. 2017年8月29日閲覧。
  21. ^ FIPS-140 - OpenSSL.org” (2017年3月14日). 2015年8月23日時点のオリジナルよりアーカイブ。2019年11月12日閲覧。
  22. ^ OpenSSL User Guide for the OpenSSL FIPS Object Module v2.0” (2017年3月14日). 2019年11月12日閲覧。
  23. ^ NIST recertifies open source encryption module
  24. ^ Validated FIPS 140-1 and FIPS 140-2 Cryptographic Modules 2007”. アメリカ国立標準技術研究所 (2007年). 2013年6月24日閲覧。
  25. ^ FIPS 140-2 Validation Certificate” (PDF). アメリカ国立標準技術研究所 (2007年). 2013年6月24日閲覧。
  26. ^ OpenSSL: Source, License
  27. ^ http://www.openssl.org
  28. ^ Licenses - Free Software Foundation
  29. ^ OpenSSL: Frequently Asked Questions
  30. ^ WGET 1.10.2 for Windows (win32)
  31. ^ climm - Download!
  32. ^ a b DebianのOpenSSLに脆弱性、「弱い鍵」が破られる恐れ @IT、2008年5月20日(2014年4月12日閲覧)。
  33. ^ a b DSA-1571-1 openssl – predictable random number generator”. Debian (May 13, 2008). 2012年12月3日閲覧。
  34. ^ 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閲覧。
  35. ^ a b c OpenSSL.org (07 April 2014). “OpenSSL Security Advisory [07 Apr 2014]”. 9 April 2014閲覧。
  36. ^ [1]
  37. ^ a b Codenomicon Ltd (2014年4月8日). “Heartbleed Bug”. 2014年4月8日閲覧。
  38. ^ Goodin, Dan (2014年4月8日). “Critical crypto bug in OpenSSL opens two-thirds of the Web to eavesdropping”. Ars Technica. 2014年4月8日閲覧。
  39. ^ Why Heartbleed is dangerous? Exploiting CVE-2014-0160”. IPSec.pl (2014年). 2014年4月8日閲覧。
  40. ^ Mutton, Paul (8 April 2014). “Half a million widely trusted websites vulnerable to Heartbleed bug”. Netcraft Ltd.. 8 April 2014閲覧。
  41. ^ CCS Injection Vulnerability”. lepidum.co.jp (2014年6月6日). 2014年6月6日閲覧。
  42. ^ CCS Injection脆弱性(CVE-2014-0224)発見の経緯についての紹介 - CCS Injection
  43. ^ https://drownattack.com/drown-attack-paper.pdf DROWN: Breaking TLS using SSLv2
  44. ^ https://japan.cnet.com/article/35078777/ HTTPSサイトの3割に影響する「DROWN」脆弱性見つかる--OpenSSLはパッチ公開
  45. ^ JVNVU#90617353:SSLv2 の暗号通信を解読可能な脆弱性 (DROWN 攻撃)”. Japan Vulnerability Notes (2016年3月2日). 2018年6月15日閲覧。
  46. ^ https://www.openssl.org/news/vulnerabilities.html#2016-0800 CVE-2016-0800 (OpenSSL advisory) [High severity] 1st March 2016
  47. ^ https://datatracker.ietf.org/doc/html/rfc6176
  48. ^ OpenBSD has started a massive strip-down and cleanup of OpenSSL”. OpenBSD journal (2014年4月15日). 2014年6月22日閲覧。
  49. ^ OpenBSD forks, prunes, fixes OpenSSL”. ZDNet (2014年4月21日). 2014年6月22日閲覧。
  50. ^ Index of /pub/OpenBSD/LibreSSL” (11 July 2014). 11 July 2014閲覧。
  51. ^ Beck, Bob (11 July 2014). “First release of LibreSSL portable is available”. Marc.info. 11 July 2014閲覧。
  52. ^ Google unveils independent “fork” of OpenSSL called “BoringSSL””. Ars Technica (2014年6月21日). 2014年6月21日閲覧。
  53. ^ BoringSSL”. Adam Langley's Weblog (2014年6月20日). 2015年9月22日閲覧。

関連項目

[編集]

外部リンク

[編集]