OpenSSL
| 開発元 | The OpenSSL Project |
|---|---|
| 最新版 |
1.0.2a - 2015年3月19日[1] |
| 最新評価版 | [±] |
| プログラミング言語 | C言語、アセンブリ言語 |
| 対応OS | マルチプラットフォーム |
| 種別 | セキュリティライブラリ |
| ライセンス | Apache License 1.0形式 四条項BSDライセンス形式 |
| 公式サイト | www.openssl.org |
OpenSSLは、SSLプロトコル・TLSプロトコルの、オープンソースで開発・提供されるソフトウェアである。中心となっているライブラリ(C言語で書かれている)は基本的な暗号化関数と様々なユーティリティ関数を実装している。様々なコンピュータ言語でOpenSSLライブラリを利用できるようにするラッパーもある。OpenSSLはEric A. YoungとTim HudsonによるSSLeay(1998年12月に開発者がRSA Securityに異動したため開発は終了されている)を基にしている。
OpenSSLが利用可能なプラットフォームは、ほぼ全てのUnix系(SolarisやLinux、Mac OS X、BSDを含む)、OpenVMS、そしてWindowsである。IBMによってSystem i (iSeries/AS400) に移植されたバージョンもある。
目次
メジャーバージョンアップ履歴[編集]
- OpenSSL 0.9.3 : 1999年3月25日
- OpenSSL 0.9.4 : 1999年8月9日
- OpenSSL 0.9.5 : 2000年2月28日
- OpenSSL 0.9.6 : 2000年9月25日
- OpenSSL 0.9.7 : 2002年12月31日
- OpenSSL 0.9.8 : 2005年7月5日
- OpenSSL 1.0.0 : 2010年3月29日
- OpenSSL 1.0.1 : 2012年3月14日
- OpenSSL 1.0.2 : 2015年1月22日
暗号化アルゴリズム[編集]
OpenSSLは以下の暗号化アルゴリズムをサポートする。
- プロトコル
- SSL 2.0、3.0、TLS 1.0、1.1、1.2、DTLS 1.0、1.2
- 暗号方式
- Blowfish、Camellia、DES、RC2、RC4、RC5、SEED、IDEA、AES
- ハッシュ関数方式
- MD5、MD2、SHA-1、SHA-2、MDC-2
- 公開鍵暗号方式
- RSA暗号、DSA、Diffie-Hellman鍵共有
FIPS 140-2の承認[編集]
OpenSSLは、アメリカ国立標準技術研究所のCryptographic Module Validation Programによるコンピュータセキュリティ標準であるFIPS 140-2において承認された初めてのオープンソースプログラムである。最初の承認は2006年1月に行われた。同年7月には「承認されたモジュールによる外部のプログラムとの相互作用に関し疑問が提示された」[2]ため、いったんは撤回されたものの、翌2007年に再び承認が行われた[3][4]。
ライセンス[編集]
OpenSSLは"OpenSSL License"と"SSLeay License"のデュアルライセンス下で公開されている[5]。OpenSSL LicenseはApache License, Version 1.0であり、SSLeay Licenseは宣伝条項付きの四条項BSDライセンスである。一般にデュアルライセンスではユーザーは2つのライセンスのうち片方を選択できるが、OpenSSLの説明書きによると、両方のライセンスが適用されることを意味している。
OpenSSL Licenseは、Apache License Version 2.0ではなくApache License Version 1.0であるため、「この製品はOpenSSLツールキットを利用するためにOpenSSLプロジェクトによって開発されたソフトウェアを含む。(This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit[6])」という一文を再頒布の際に含めなければならないという規定が含まれ、GNU General Public License (GPL) と非互換である[7]。ただしThe OpenSSL Projectの見解では、多くのLinuxやBSDディストリビューションにおいて、OpenSSLはオペレーティングシステムの一部をなしているためGPLの制限は適用されないとしている[8]。中には、"OpenSSL exception"を追加してシステムで動かせるようにしているプロジェクトもある。GNU Wgetとclimmプロジェクトがそのような例である[9][10]。
バグによる脆弱性[編集]
Debianの弱い鍵[編集]
ValgrindをOpenSSLに対しても適用可能とするために、Debianディストリビューションに含まれるOpenSSLにパッチを適用したが、この際に誤って擬似乱数生成器が正しく動作しなくなり、生成される暗号鍵が予測可能なものとなってしまった[11]。
このバグは2006年9月17日にリリースされたDebian (OpenSSL 0.9.8c-1) から含まれており、バグが判明してDebianから発表されたのは2008年5月13日であった[12]。Debian系以外のシステムを含め、問題となったDebian上で生成した鍵を使用している場合は、脆弱性のないOpenSSLで鍵を再生成する必要がある[11]。
このバグは、Debian 4.0 (etch) ではOpenSSLの0.9.8c-4etch3以降で、Debian 5.0 (lenny) では0.9.8g-9で修正されている[12]。
Heartbleed[編集]
2014年4月7日に、OpenSSLの1.0.2-betaや1.0.1系列で、TLSのheartbeat拡張[13]について、メモリの扱いにバグがあると発表された[14] 。このバグを利用することで、ハートビート1回ごとに64キロバイトのメモリを読み取ることが可能となる[14]。この問題のCVE番号はCVE-2014-0160である[15]。
この脆弱性は2011年12月31日から存在し、OpenSSL 1.0.1がリリースされた2012年3月14日以降、脆弱性のあるOpenSSLが広く使われている[16][17]。サーバ側のメモリを読むことで、機密情報にアクセスが可能となり、場合によっては秘密鍵を盗まれて[16]暗号化が無力となり、中間者攻撃を仕掛けることが可能となる。
ユーザーに関する非公開の情報、たとえばセッションクッキーやパスワードも漏れうるため、他者になりすますことも可能となってしまう[18]。脆弱性が判明した段階で、認証局から証明を受けたHTTPSサーバのうち、ざっと17%から半分程度が影響するものと見られている[19]。
基本的な対策はハートビートを使用しない(-DOPENSSL_NO_HEARTBEATS オプションを付けて再コンパイルする)か、脆弱性を修正したバージョン(1.0.1g以降)への更新となる[14]。
CCS Injection Vulnerability[編集]
2014年6月6日に、過去10年以上に渡るすべてのOpenSSLのバーションについて、ChangeCipherSpecメッセージの処理の不正な順序による挿入によって攻撃者の意図する弱い暗号へ強制変更させた通信として開始されるという攻撃方法が株式会社レピダムの菊池正史により発見され、CCS Injection脆弱性 (CCS Injection Vulnerability, CVE-2014-0224) として公開された[20]。
この脆弱性は過去のOpenSSLのほとんどのバージョンに存在し、通信開始手順の途中で不正な信号を送ると、該当する通信で使われる一時的な暗号鍵が、第三者でも予想できてしまうというものである。
また、脆弱性発見の経緯が、発見者の菊池正史により公開されている[21]。
フォーク[編集]
LibreSSL[編集]
OpenBSDプロジェクトでは、前述のハートブリード問題をうけて、OpenSSL 1.0.1gをベースとしてフォークしたLibreSSL(英語版 en:LibreSSL)を2014年4月に立ち上げた[22]。これは、OpenBSDで利用されているOpenSSLライブラリを置き換えることを目的としており、OpenSSLのコードの見直しを行いよりセキュアな実装とすることを目指している。
既に、OpenBSDにおいて不要なコードや、古いシステムのサポートのためのコードの削除を行い、90000行以上のソースコードの削減を行っている[23]。
2014年7月11日に、LibreSSL 2.0.0がリリースされた[24][25]。
BoringSSL[編集]
Googleも、OpenSSLをフォークしたBoringSSLの立ち上げを2014年6月に発表した[26]。Googleでは、OpenSSL、LibreSSL双方の開発者と協力していくとしている。
脚注[編集]
- ^ a b c d “OpenSSL: News, Project Newsflash”. 2015年3月19日閲覧。
- ^ 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: Support, 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 (2008年5月13日). 2012年12月3日閲覧。
- ^ 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日閲覧。
- ^ a b c OpenSSL.org (2014年4月7日). “OpenSSL Security Advisory [07 Apr 2014]”. 2014年4月9日閲覧。
- ^ [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 (2014年4月8日). “Half a million widely trusted websites vulnerable to Heartbleed bug”. Netcraft Ltd.. 2014年4月8日閲覧。
- ^ “CCS Injection Vulnerability”. lepidum.co.jp (2014年6月6日). 2014年6月6日閲覧。
- ^ CCS Injection脆弱性(CVE-2014-0224)発見の経緯についての紹介 - CCS Injection
- ^ “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” (2014年7月11日). 2014年7月11日閲覧。
- ^ Beck, Bob (2014年7月11日). “First release of LibreSSL portable is available”. Marc.info. 2014年7月11日閲覧。
- ^ “Google unveils independent “fork” of OpenSSL called “BoringSSL””. Ars Technica (2014年6月21日). 2014年6月21日閲覧。
関連項目[編集]
外部リンク[編集]
- OpenSSLホームページ (英語)
- SSLeayドキュメントアーカイブ
- The OpenSSL License and the GPL、Mark McLoughlinによる。
- Use OpenSSL easily with PKCS#11 enabled smartcards
- Win32 OpenSSL (英語)
|
||||||||||||||||||||||||||
|
|||||||||||||||||||||||