TLS における Diffie-Hellman 鍵交換の脆弱性

## 脆弱性の内容

通称 “Logjam” 攻撃。

かつて騒がれた FREAK 脆弱性と同じく， TLS 経路上に「中間者」がいる場合， Diffie-Hellman（DH）鍵交換で使われる鍵を輸出用の脆弱なものにダウングレードさせられる。 FEAK のときとは異なり，特定の実装の脆弱性ではなく TLS プロトコルの欠陥。

ちなみに DH 鍵交換アルゴリズムは公開鍵暗号の一種で，お互いに（もちろん第3者にも）秘密情報（秘密鍵）を知られることなく安全にセッション鍵を生成することができる。ベースとなるロジックは「離散対数問題」と呼ばれるもので ElGamal や DSA と同系統のロジック。なので，鍵長の管理も ElGamal や DSA と同等のものが要求される。

暗号強度と各暗号方式の鍵長の関係は以下のとおり（単位はすべて bit）

| Bits of security | Symmetric key algorithms | FFC (DSA, DH)  | IFC (RSA) | ECC (ECDH, ECDSA) |
|-----------------:|:-------------------------|:---------------|:----------|:------------------|
|               80 | 2TDEA                    | L=1024,  N=160 | k=1024    | 160 <= f < 224    |
|              112 | 3TDEA                    | L=2048,  N=224 | k=2048    | 224 <= f < 256    |
|              128 | AES-128                  | L=3072,  N=256 | k=3072    | 256 <= f < 384    |
|              192 | AES-192                  | L=7680,  N=384 | k=7680    | 384 <= f < 512    |
|              256 | AES-256                  | L=15360, N=512 | k=15360   | 512 <= f          |

2030年以降も安全に使える暗号強度は 128bits 以上だと言われている。 Logjam 攻撃では L=512bits にダウングレードさせられるが全くお話にならない強度だということが分かるだろう。

暗号について詳しくは拙文「[わかる！ OpenPGP 暗号](http://www.baldanders.info/spiegel/archive/pgpdump/openpgp.shtml#ref)」の「[暗号に関する雑多な話](http://www.baldanders.info/spiegel/archive/pgpdump/openpgp.shtml#appendix)」あたりをどうぞ。
また [FREAK については Gist にまとめている](https://gist.github.com/spiegel-im-spiegel/47f340122c895ccc8bb8)ので，そちらも参考にどうぞ。

## 影響度

[CVE-2015-1716] より

CVSS 基本値 5.0 (AV:N/AC:L/Au:N/C:P/I:N/A:N)

| 基本評価基準                            | 評価値            |
|----------------------------------------:|:------------------|
| 攻撃元区分（AV）                        | ネットワーク（N） |
| 攻撃条件の複雑さ（AC）                  | 低（L）           |
| 攻撃前の認証要否（Au）                  | 不要（N）         |
| 情報漏えいの可能性（機密性への影響, C） | 部分的（P）       |
| 情報改ざんの可能性（完全性への影響, I） | なし（N）         |
| 業務停止の可能性（可用性への影響, A）   | なし（N）         |

[CVE-2015-4000] より

CVSS 基本値 4.3 (AV:N/AC:M/Au:N/C:N/I:P/A:N)

| 基本評価基準                            | 評価値            |
|----------------------------------------:|:------------------|
| 攻撃元区分（AV）                        | ネットワーク（N） |
| 攻撃条件の複雑さ（AC）                  | 中（M）           |
| 攻撃前の認証要否（Au）                  | 不要（N）         |
| 情報漏えいの可能性（機密性への影響, C） | なし（N）         |
| 情報改ざんの可能性（完全性への影響, I） | 部分的（P）       |
| 業務停止の可能性（可用性への影響, A）   | なし（N）         |

CVSS については[デモページ](http://www.baldanders.info/spiegel/archive/cvss/cvss2.html)を参照のこと。

[CVE-2015-1716]: https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2015-1716
[CVE-2015-4000]: https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2015-4000

## 影響を受ける実装

- Microsoft : 影響あり。 [MS15-055] で修正済み
- OpenSSL 規定で輸出グレード暗号は無効化されているので，実質的には大丈夫？ : [Logjam, FREAK and Upcoming Changes in OpenSSL - OpenSSL Blog](https://www.openssl.org/blog/blog/2015/05/20/logjam-freak-upcoming-changes/)
    - [脆弱性を修正した「OpenSSL」の最新版が公開、“Logjam”脆弱性の修正も - 窓の杜](http://www.forest.impress.co.jp/docs/news/20150615_706966.html)

> また、「OpenSSL」v1.0.2b/v1.0.1nに関しては、TLS通信で暗号強度の弱い輸出グレードの暗号へ意図せずダウングレードされてしまう“Logjam”脆弱性（CVE-2015-4000）も修正されている。 

- Apple Safari : 影響あり。修正版なし
- Android : 影響あり。修正版なし
- Google Chrome : 影響あり。修正版なし。 Chrome 43 でも解消されてないらしい
- Mozilla Firefox : 影響あり。修正版なし
    - [脆弱性 Logjam Attack対策 for Firefox - ふらっと 気の向くままに](http://datyotosanpo.blog.fc2.com/blog-entry-69.html) : Firefox が更新されるまで DH(E) を無効化する
- OpenVPN : 影響はほとんどない？
    - [TLSの脆弱性「Logjam」のOpenVPNへの影響 « yamata::memo](http://yamatamemo.blogspot.jp/2015/05/tlslogjamopenvpn.html)
        - OpenVPNでは、サーバーセットアップ時に openssl dhparam コマンドを使ってOpenVPN専用のDHパラメータを生成しているため、DHパラメータを別個に生成しない使用方法よりは安全といえる。
        - openssl dhparam コマンドの実行時に鍵長を 2048ビット以上にしていれば安全。1024ビットの場合は攻撃される可能性は否定できないが、それでも簡単ではない。
        - TLS-Authが有効になっていればこの種のTLSのダウングレード攻撃は回避できる。
- OpenSSH : 影響あり。 [On OpenSSH and Logjam – Technology & Policy – Jethro Beekman](https://jbeekman.nl/blog/2015/05/ssh-logjam/)

- [Logjam: PFS Deployment Guide](https://weakdh.org/sysadmin.html) : サーバ側での回避例

[MS15-055]: https://technet.microsoft.com/library/security/MS15-055 "マイクロソフト セキュリティ情報 MS15-055 - 重要"

## 影響の有無を確認する方法

ブラウザで “[The Logjam Attack](https://weakdh.org/)” のサイトを訪れると自動的に判定してくれる。

> Warning! Your web browser is vulnerable to Logjam and can be tricked into using weak encryption. You should update your browser.

と表示されると影響を受ける可能性がある。

サーバ側は “[Guide to Deploying Diffie-Hellman for TLS](https://weakdh.org/sysadmin.html)” のページにある “Server Test” で確認できる。

## 参考ページ

- [Logjam TLS Attack](https://weakdh.org/logjam.html)
- [Logjam: How Diffie-Hellman Fails in Practice](https://weakdh.org/)
    - [Imperfect Forward Secrecy: How Diffie-Hellman Fails in Practice](https://weakdh.org/imperfect-forward-secrecy.pdf) (PDF)

- [セキュリティホール memo の記事](http://www.st.ryukoku.ac.jp/~kjm/security/memo/2015/05.html#20150521_Logjam)
- [Logjam Attackについてまとめてみた - piyolog](http://d.hatena.ne.jp/Kango/20150521/1432219012)
- [The Logjam (and Another) Vulnerability against Diffie-Hellman Key Exchange - Schneier on Security](https://www.schneier.com/blog/archives/2015/05/the_logjam_and_.html)
- [OpenSSH環境に対するLogjam脆弱性の対応 | NaviPlus Engineers' Blog](http://tech.naviplus.co.jp/2015/05/25/openssh%E7%92%B0%E5%A2%83%E3%81%AB%E5%AF%BE%E3%81%99%E3%82%8Blogjam%E8%84%86%E5%BC%B1%E6%80%A7%E3%81%AE%E5%AF%BE%E5%BF%9C/) : “[On OpenSSH and Logjam](https://jbeekman.nl/blog/2015/05/ssh-logjam/)” の日本語解説
- [Logjam, Part 1: Why the Internet is Broken Again (an Explainer) | Electronic Frontier Foundation](https://www.eff.org/deeplinks/2015/05/logjam-internet-breaks-again)
- [Logjam, Part 2: Did the NSA Know the Internet Was Broken? | Electronic Frontier Foundation](https://www.eff.org/deeplinks/2015/05/logjam-part-2-did-nsa-know-years-internet-was-broken)