OpenSSL

曖昧さ回避 OpenSSH」とは異なります。
OpenSSL
開発元 The OpenSSL Project
最新版 3.2.1 - 2024年1月30日 (2か月前) (2024-01-30)[1] [±]
最新評価版 なし [±]
リポジトリ
  • git.openssl.org/openssl.git
ウィキデータを編集
プログラミング
言語
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 000000001998-12-23-00001998年12月23日 N/A
  • OpenSSLプロジェクトとしての最初のバージョン
0.9.1c (000000001998-12-23-00001998年12月23日)
サポート終了:0.9.2 000000001999-03-22-00001999年3月22日 N/A
  • 0.9.1cの後継バージョン
0.9.2b (000000001999-04-06-00001999年4月6日)
サポート終了:0.9.3 000000001999-05-25-00001999年5月25日 N/A
  • 0.9.2bの後継バージョン
0.9.3a (000000001999-05-27-00001999年5月27日)
サポート終了:0.9.4 000000001999-08-09-00001999年8月9日 N/A
  • 0.9.3aの後継バージョン
0.9.4 (000000001999-08-09-00001999年8月9日)
サポート終了:0.9.5 000000002000-02-28-00002000年2月28日 N/A
  • 0.9.4の後継バージョン
0.9.5a (000000002000-04-01-00002000年4月1日)
サポート終了:0.9.6 000000002000-09-24-00002000年9月24日 N/A
  • 0.9.5aの後継バージョン
0.9.6m (000000002004-03-17-00002004年3月17日)
サポート終了:0.9.7 000000002002-12-31-00002002年12月31日 N/A
  • 0.9.6mの後継バージョン
0.9.7m (000000002007-02-23-00002007年2月23日)
サポート終了:0.9.8 000000002005-07-05-00002005年7月5日 000000002015-12-31-00002015年12月31日[7]
  • 0.9.7mの後継バージョン
0.9.8zh (000000002015-12-03-00002015年12月3日)
サポート終了:1.0.0 000000002010-03-29-00002010年3月29日 000000002015-12-31-00002015年12月31日[7]
  • 0.9.8nの後継バージョン
1.0.0t (000000002015-12-03-00002015年12月3日)
サポート終了:1.0.1[8] 000000002012-03-14-00002012年3月14日 000000002016-12-31-00002016年12月31日
  • 1.0.0の後継バージョン
  • RFC 6520 TLS/DTLS ハートビート拡張のサポート
  • SCTPのサポート
  • RFC 5705
  • RFC 5764
  • Next Protocol Negotiation (NPN)
  • 証明書、署名要求及び証明書失効リストでのPSS署名
  • CMSでのパスワードベースの受信者情報のサポート
  • TLS 1.1及びTLS 1.2のサポート
  • 未検証の2.0 FIPSモジュールのための予備的FIPS機能
  • Secure Remote Password protocol(英語版) (SRP) のサポート
1.0.1u (000000002016-09-22-00002016年9月22日)
サポート終了:1.0.2[9] 000000002015-01-22-00002015年1月22日 000000002019-12-31-00002019年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-00002019年12月20日)
サポート終了:1.1.0[10] 000000002016-08-25-00002016年8月25日 000000002019-09-11-00002019年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 (000000002019-09-10-00002019年9月10日)
サポート終了:1.1.1[11] 000000002018-09-11-00002018年9月11日 000000002023-09-11-00002023年9月11日
  • 長期サポート版 (Long Term Support)[6]
  • TLS 1.3のサポート[11][12]
  • SHA-3のサポート
  • X448及びEd448 (RFC 7748) のサポート
  • SipHash(英語版)のサポート
  • ARIAのサポート
  • multi-prime RSA (RFC 8017) のサポート
  • SM2、SM3(英語版)及びSM4(英語版)のサポート
  • ハートビート拡張のサポートの削除
  • QNXのサポートの削除
1.1.1w (000000002023-09-11-00002023年9月11日)
サポート中:3.0 000000002021-09-07-00002021年9月7日 000000002026-09-07-00002026年9月7日
3.0.13 (000000002024-01-30-00002024年1月30日)
サポート中:3.1[14] 000000002023-03-14-00002023年3月14日 000000002025-03-14-00002025年3月14日 3.1.5 (000000002024-01-30-00002024年1月30日)
現行バージョン:3.2[15] 000000002023-11-23-00002023年11月23日 000000002025-11-23-00002025年11月23日 3.2.1 (000000002024-01-30-00002024年1月30日)
凡例
サポート終了
サポート中
現行バージョン
最新プレビュー版
将来のリリース

使用ライブラリ( libssl, libcrypto )を ver. 1.0 から 1.1 に変更する場合には、使用元のプログラムを少なからず変更する必要がある。本変更に関するノウハウや解説が[16]においてまとめられている。

暗号化アルゴリズム

OpenSSLは以下の暗号化アルゴリズムをサポートする。

プロトコル
SSL 3.0、TLS (1.0、1.1、1.2、1.3)、DTLS (1.0、1.2)
共通鍵暗号方式
AESBlowfishCamelliaChaCha20Poly1305、SEED、CAST-128DESIDEARC2RC4RC5トリプルDESGOST 28147-89(英語版)[17]SM4(英語版)
ハッシュ関数方式
MD5MD4MD2SHA-1SHA-2SHA-3RIPEMD-160MDC-2(英語版)GOST R 34.11-94(英語版)[17]BLAKE2、Whirlpool[18]SM3(英語版)
公開鍵暗号方式
RSADSAディフィー・ヘルマン鍵共有楕円曲線暗号X25519Ed25519X448Ed448、GOST R 34.10-2001[17]、SM2

FIPS 140-2の承認

OpenSSLは、NIST(アメリカ国立標準技術研究所)のCryptographic Module Validation Program(英語版)によるコンピュータセキュリティ標準であるFIPS 140-2において承認された[19]初めてのオープンソースプログラムである。ただしOpenSSL自体が検証されたのではなく、OpenSSL FIPS Object Moduleという標準対応用のソースコードを組み込んだものが検証されている。このモジュールはOpenSSL 1.0.1/1.0.2で使用可能。[20]

最初の承認は2006年1月に行われた。同年7月には「承認されたモジュールによる外部のプログラムとの相互作用に関し疑問が提示された」[21]ため、いったんは撤回されたものの、翌2007年に再び承認が行われた[22][23]

ライセンス

OpenSSL v3.0.0未満はOpenSSL LicenseとSSLeay Licenseの両方のライセンス下で公開されている[24]。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[25])」という一文を再頒布の際に含めなければならないという規定が含まれ、GNU General Public License (GPL) と非互換である[26]。ただしThe OpenSSL Projectの見解では、多くのLinuxBSDディストリビューションにおいて、OpenSSLはオペレーティングシステムの一部をなしているためGPLの制限は適用されないとしている[27]。中には、"OpenSSL exception"を追加してシステムで動かせるようにしているプロジェクトもある。GNU Wgetclimm(英語版)プロジェクトがそのような例である[28][29]

バグによる脆弱性

Debianの弱い鍵

ValgrindをOpenSSLに対しても適用可能とするために、Debianディストリビューションに含まれるOpenSSLにパッチを適用したが、この際に誤って擬似乱数生成器が正しく動作しなくなり、生成される暗号鍵が予測可能なものとなってしまった[30]

このバグは2006年9月17日にリリースされたDebian (OpenSSL 0.9.8c-1) から含まれており、バグが判明してDebianから発表されたのは2008年5月13日であった[31]。Debian系以外のシステムを含め、問題となったDebian上で生成した鍵を使用している場合は、脆弱性のないOpenSSLで鍵を再生成する必要がある[30]

このバグは、Debian 4.0 (etch) ではOpenSSLの0.9.8c-4etch3以降で、Debian 5.0 (lenny) では0.9.8g-9で修正されている[31]

Heartbleed

詳細は「ハートブリード」を参照
Heartbleedバグのロゴ

2014年4月7日に、OpenSSLの1.0.2-betaや1.0.1系列で、TLSのheartbeat拡張[32]について、メモリの扱いにバグがあると発表された[33] 。このバグを利用することで、ハートビート1回ごとに64キロバイトのメモリを読み取ることが可能となる[33]。この問題のCVE番号はCVE-2014-0160である[34]

この脆弱性は2011年12月31日から存在し、OpenSSL 1.0.1がリリースされた2012年3月14日以降、脆弱性のあるOpenSSLが広く使われている[35][36]。サーバ側のメモリを読むことで、機密情報にアクセスが可能となり、場合によっては秘密鍵を盗まれて[35]暗号化が無力となり、中間者攻撃を仕掛けることが可能となる。

ユーザーに関する非公開の情報、たとえばセッションクッキーやパスワードも漏れうるため、他者になりすますことも可能となってしまう[37]。脆弱性が判明した段階で、認証局から証明を受けたHTTPSサーバのうち、ざっと17%から半分程度が影響するものと見られている[38]

基本的な対策はハートビートを使用しない(-DOPENSSL_NO_HEARTBEATS オプションを付けて再コンパイルする)か、脆弱性を修正したバージョン(1.0.1g以降)への更新となる[33]

CCS Injection Vulnerability

2014年6月6日に、過去10年以上に渡るすべてのOpenSSLのバージョンについて、ChangeCipherSpecメッセージの処理の不正な順序による挿入によって攻撃者の意図する弱い暗号へ強制変更させた通信として開始されるという攻撃方法が発見され、CCS Injection脆弱性 (CCS Injection Vulnerability, CVE-2014-0224) として公開された[39]

この脆弱性は過去のOpenSSLのほとんどのバージョンに存在し、通信開始手順の途中で不正な信号を送ると、該当する通信で使われる一時的な暗号鍵が、第三者でも予想できてしまうというものである。

また、脆弱性発見の経緯が、発見者により公開されている[40]

DROWN攻撃

Decrypting RSA with Obsolete and Weakened eNcryptionと名付けられた攻撃手法の略称[41]

脆弱性の概要は、SSLv2を使用可能にしていると攻撃者は、同じ秘密鍵を共有するSSLv2が有効なサーバにプローブを送信することで、新しいプロトコルであるTLSを使ったクライアントとサーバ間の接続を復号することができる[42]。 想定される影響は、遠隔の攻撃者に、SSLv2 をサポートしているサーバの暗号通信を解読されるおそれがある。SSLv2 をサポートしており、TLS 通信で SSLv2 と同一の証明書を使用している場合、TLS の暗号通信であっても、同様の影響を受けるおそれがある[43]。 この攻撃に対処したパッチは、1.0.1sまたは1.0.2.g[44]である。 SSLv2自体は、2011年から非推奨[45]となっている。

フォーク

LibreSSL

詳細は「LibreSSL」を参照

OpenBSDプロジェクトでは、前述のハートブリード問題をうけて、OpenSSL 1.0.1gをベースとしてフォークしたLibreSSLを2014年4月に立ち上げた[46]。これは、OpenBSDで利用されているOpenSSLライブラリを置き換えることを目的としており、OpenSSLのコードの見直しを行いよりセキュアな実装とすることを目指している。

既に、OpenBSDにおいて不要なコードや、古いシステムのサポートのためのコードの削除を行い、90000行以上のソースコードの削減を行っている[47]

2014年7月11日に、LibreSSL 2.0.0がリリースされた[48][49]

BoringSSL

Googleも、OpenSSLをフォークしたBoringSSLの立ち上げを2014年6月に発表した[50][51]。Googleでは、OpenSSL、LibreSSL双方の開発者と協力していくとしている。

  • boringssl - Git at Google

脚注

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

関連項目

ポータル FLOSS

外部リンク

  • 公式ウェブサイト (英語)
  • The OpenSSL License and the GPL、Mark McLoughlinによる。
  • Win32 OpenSSL (英語)
  • 表示
  • 編集
OpenPGPS/MIME
  • メールサーバーの比較(英語版)
  • 電子メールクライアントの比較(英語版)
  • GnuPG (Gpg4winGPGTools)
  • PGP
  • Enigmail
  • Thunderbird
  • Outlook
  • Apple Mail
  • Claws Mail
  • Autocrypt(英語版)
  • Kontact
  • pretty Easy privacy(英語版)
  • Sylpheed
セキュア通信
OTR(英語版)
  • Adium
  • BitlBee(英語版)
  • Centericq(英語版)
  • ChatSecure
  • climm(英語版)
  • Jitsi
  • Kopete
  • MCabber(英語版)
  • Profanity(英語版)
SSH
TLS/SSL
VPN
ZRTP(英語版)
  • CSipSimple(英語版)
  • Jitsi
  • Linphone(英語版)
  • Jami
  • Zfone(英語版)
P2P
D R A(英語版)
  • Matrix
  • OMEMO(英語版)
    • Conversations(英語版)
    • Cryptocat(英語版)
    • ChatSecure(英語版)
  • Proteus
  • Signalプロトコル
    • Signal
    • WhatsApp
    • TextSecure(英語版)
匿名化
  • Cryptomator
  • GNUnet
  • Java Anon Proxy(英語版)
  • I2P
  • Tor
  • Vidalia(英語版)
  • RetroShare(英語版)
  • Ricochet(英語版)
  • Wickr(英語版)
ディスク暗号化(英語版)
  • ディスク暗号化ソフトウェアの比較(英語版)
  • BitLocker
  • FreeOTFE(英語版)
  • TrueCrypt
  • BestCrypt(英語版)
  • CipherShed
  • CrossCrypt(英語版)
  • Cryptoloop(英語版)
  • DiskCryptor(英語版)
  • dm-crypt(英語版)
  • LUKS
  • DriveSentry(英語版)
  • E4M(英語版)
  • eCryptfs(英語版)
  • FileVault
  • GBDE(英語版)
  • geli(英語版)
  • PGPDisk(英語版)
  • Private Disk(英語版)
  • Scramdisk(英語版)
  • Sentry 2020(英語版)
  • VeraCrypt
ファイルシステム
セキュアOS
Service providers
教育
暗号通貨
Related topics
関連人物
  • カテゴリ カテゴリ
  • コモンズ コモンズ
プロトコル
技術
歴史
実装
公証
脆弱性
理論
暗号
  • バル・ミツワー攻撃(英語版)
プロトコル
実装