search
LoginSignup
17

posted at

updated at

TLSとDiffie-Hellmanグループパラメータ

前提

まず第一に、TLSのDiffie-Hellman鍵交換にはEphemeralとStaticとAnonymousがありますが、後二者はひとまず忘れてください。本稿で扱うのはEphemeral Diffie-Hellman (DHE) です。

第二に、楕円関数 (Elliptic Curve, EC) Diffie-Hellman ではない方の、普通のDiffie-Hellman法のことを冪剰余(べきじょうよ、Modular Exponentiation, MODP)Diffie-Hellmanと呼びます。RFC7919 (Google翻訳) では有限体 (Finite Field, FF) Diffie-Hellmanという用語が出てきますが、FF Diffie-HellmanとMODP Diffie-Hellmanは同じもの、という解釈で良いようです。

というわけで本稿の対象はTLSにおけるFinite Field Ephemeral Diffie-Hellman (FFDHE) のグループパラメータというニッチな話題です。

Diffie-Hellman鍵交換と二つの流派

Diffie-Hellman鍵交換は、TLSの場合、不肖拙稿SSL/TLS(SSL3.0~TLS1.2)のハンドシェイクを復習するで述べたとおり、こんな感じで行われます。

クライアント サーバ
共通値(g, p)の作成
サーバ秘密鍵と公開鍵の作成
共通値(g, p)、サーバ公開鍵の送信
共通値(g, p)を基にクライアント秘密鍵、公開鍵の作成
クライアント公開鍵の送信
共有秘密値の算出 共有秘密値の算出

最初に算出する共通値 (g, p) はグループパラメータと呼ばれます。秘密である必要はなく、無暗号でそのまま送ります。

このグループパラメータ、従来のTLSではサーバ側でランダムに生成するものとされてきました。これが第一の流派です。

第二の流派は、 (g, p) の一覧表をあらかじめ仕様書に書いておき、使うときはその中から選んで使うというものです。この流派の代表的な存在はIPSecです。例えばIKEv1の場合、IANAの番号表に載っているうち、1, 2, 5, 14, 15, 16, 17, 18, 22, 23, 24の11種類がMODP DHのグループパラメータです。

sshの場合、IANAの番号表に載っているうち、MODP DH対応なのはdiffie-hellman-group-exchange-sha1, diffie-hellman-group-exchange-sha256, diffie-hellman-group1-sha1, diffie-hellman-group14-sha1, diffie-hellman-group14-sha256, diffie-hellman-group15-sha512, diffie-hellman-group16-sha512, diffie-hellman-group17-sha512, diffie-hellman-group18-sha512の9種類です。前2者はサーバがグループパラメータをランダムに選ぶ方式(第一の流派)、後7者は固定値の割り当て(第二の流派)です。

そしてついにRFC7919 (Google翻訳) で、グループパラメータをRFCに書く流儀がTLSにも導入されました。IANAの番号表に載っているうち、FFDHE対応なのは256, 257, 258, 259, 260の5種類です。

TLSプロトコルの仕様はRFC7919でどう変わったのか?

従来elliptic_curves拡張 (RFC4492, Google翻訳) と呼ばれていたTLSの拡張が、RFC7919でsupported_groups拡張と名前が変わり、そこにDiffie-Hellmanグループパラメータを書き込むことになりました。

ちょっとムリヤリな気がしますが、後付けなのでここは仕方ないところです。

どのパラメータが安全なのか?

2015年のLogjam (Google翻訳) の指摘によると、研究機関なら768bit、国家機関なら1024bitでも破れる可能性があるとのことです。それから2年経っているので、今はもう少し多めに見積もる必要があるかもしれませんが、RFC8270 (Google翻訳) は1024bitを危険、2048bitを安全としており、2022年1月に出たRFC9142 (Google翻訳) は2048bit未満を危険としているので、本稿もそれに倣って1024bit、1536bitは危険(×)、2048bit以上は安全(〇)と見ることにします。

TLS

TLSは、5種類全部安全です。

番号 名称 RFC 安全性
256 ffdhe2048 RFC7919 Appendix A.1
257 ffdhe3072 RFC7919 Appendix A.2
258 ffdhe4096 RFC7919 Appendix A.3
259 ffdhe6144 RFC7919 Appendix A.4
260 ffdhe8192 RFC7919 Appendix A.5

IPSec

IPSecで安全なのは11種類中7種類です。

番号 名称 RFC 安全性
1 default 768-bit MODP group RFC2409 Section 6.1 ×
2 alternate 1024-bit MODP group RFC2409 Section 6.2 ×
5 1536-bit MODP group RFC3526 Section 2 ×
14 2048-bit MODP group RFC3526 Section 3
15 3072-bit MODP group RFC3526 Section 4
16 4096-bit MODP group RFC3526 Section 5
17 6144-bit MODP group RFC3526 Section 6
18 8192-bit MODP group RFC3526 Section 7
22 1024-bit MODP Group with 160-bit Prime Order Subgroup RFC5114 Section 2.1 ×
23 2048-bit MODP Group with 224-bit Prime Order Subgroup RFC5114 Section 2.2
24 2048-bit MODP Group with 256-bit Prime Order Subgroup RFC5114 Section 2.3

ssh

sshのdiffie-hellman-group1-sha1, diffie-hellman-group14-sha1は、IPSecのOakley Group 2と14と全く同じです。前者 (diffie-hellman-group1-sha1) はビット数が1024でLogjamに弱いので使うのは止めましょう (SHOULD NOT) という話なのですが、後者は微妙です。sha1の4字が気になるじゃないですか。とはいえ、2022年1月のRFC9142 (Google翻訳) 時点では、今すぐ直ちに使うのを止めなさいという話にはなっていません。その代わり、MUSTからMAYに降格されました。将来的には非推奨になるでしょう。

名称 RFC ビット数 安全性
diffie-hellman-group1-sha1 RFC4253 Section 8.1, RFC2409 Section 6.2 1024 ×
diffie-hellman-group14-sha1 RFC4253 Section 8.2, RFC3526 Section 3 2048
diffie-hellman-group14-sha256 RFC8268, RFC3526 Section 3 2048
diffie-hellman-group15-sha512 RFC8268, RFC3526 Section 4 3072
diffie-hellman-group16-sha512 RFC8268, RFC3526 Section 5 4096
diffie-hellman-group17-sha512 RFC8268, RFC3526 Section 6 6144
diffie-hellman-group18-sha512 RFC8268, RFC3526 Section 7 8192

考察

IPSecのグループパラメータとTLSのグループパラメータは、ビット数は同じでも中身が違います。こんなところで独自色を出す意味があるんでしょうか。謎です。まあ実用上は困らないのでしょう。

sshのグループパラメータは、以前は種類が少なかったのですが、2017年12月のRFC8268 (Google翻訳) で5種類が追加され、十分な数となりました。今後ssh対応のクライアント・サーバを使う場合は、RFC8268対応の製品を使うのがお勧めです。

2015年のLogjam (Google翻訳) を受けて、2017年12月にRFC8270 (Google翻訳) というのが出ました。これは何かというと、sshの第一の流派であるdiffie-hellman-group-exchange-sha1, diffie-hellman-group-exchange-sha256のビット数の下限を1024bitから2048bitに増やすというものです。さらに追加措置として、2022年1月のRFC9142 (Google翻訳) ではdiffie-hellman-group-exchange-sha1が非推奨 (SHOULD NOT) になりました。

第二の流派であるdiffie-hellman-group1-sha1 (1024bit) は放っておいていいのかというと、もちろんそんなことはなくて、やはりRFC9142 (Google翻訳) で非推奨 (SHOULD NOT) になりました。将来的には禁止 (MUST NOT) になるでしょう。

いずれにしても、今後時代を経るに従って、古くなったグループパラメータは使わないことを推奨みたいなお達しが順次出て来ると思いますので、開発者、運用者の皆様におかれては、CSIRTその他諸機関が発するニュースを注意してウォッチするようにして下さい。

以上!幸運を祈る。

参考文献

RFC

TLS

Elliptic Curve Cryptography (ECC) Cipher Suites for Transport Layer Security (TLS)
https://tools.ietf.org/html/rfc4492 (Google翻訳)

Negotiated Finite Field Diffie-Hellman Ephemeral Parameters for Transport Layer Security (TLS)
https://tools.ietf.org/html/rfc7919 (Google翻訳)

IPSec

The Internet Key Exchange (IKE)
https://tools.ietf.org/html/rfc2409 (Google翻訳)

More Modular Exponential (MODP) Diffie-Hellman groups for Internet Key Exchange (IKE)
https://tools.ietf.org/html/rfc3526 (Google翻訳)

Additional Diffie-Hellman Groups for Use with IETF Standards
https://tools.ietf.org/html/rfc5114 (Google翻訳)

ssh

The Secure Shell (SSH) Transport Layer Protocol
https://tools.ietf.org/html/rfc4253 (Google翻訳)

Diffie-Hellman Group Exchange for the Secure Shell (SSH) Transport Layer Protocol
https://tools.ietf.org/html/rfc4419 (Google翻訳)

More Modular Exponentiation (MODP) Diffie-Hellman (DH) Key Exchange (KEX) Groups for Secure Shell (SSH)
https://tools.ietf.org/html/rfc8268 (Google翻訳)

Increase the Secure Shell Minimum Recommended Diffie-Hellman Modulus Size to 2048 Bits
https://tools.ietf.org/html/rfc8270 (Google翻訳)

IANA番号表

Transport Layer Security (TLS) Parameters
https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml

Internet Key Exchange (IKE) Attributes
https://www.iana.org/assignments/ipsec-registry/ipsec-registry.xhtml

Internet Key Exchange Version 2 (IKEv2) Parameters
https://www.iana.org/assignments/ikev2-parameters/ikev2-parameters.xhtml

Secure Shell (SSH) Protocol Parameters
https://www.iana.org/assignments/ssh-parameters/ssh-parameters.xhtml

不肖私

SSL/TLS(SSL3.0~TLS1.2)のハンドシェイクを復習する
https://qiita.com/n-i-e/items/41673fd16d7bd1189a29

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
17