Tera Termの個人的な作業用リポジトリ
リビジョン | 2f4eebabc66001209c7eff144138b572b4db6e9f (tree) |
---|---|
日時 | 2018-01-25 21:22:05 |
作者 | IWAMOTO Kouichi <sue@iwmt...> |
コミッター | IWAMOTO Kouichi |
SSH_MSG_KEY_DH_GEX_REQUEST での min のデフォルトを 2048 に引き上げた
RFC 8270対応。
SSH_MSG_KEY_DH_GEX_REQUEST での min の値は GexMinimalGroupSize で
設定可能であり、デフォルトでは 0 となっている。
GexMinimalGroupSize が 0 の時は、Minimum Limit の 1024 として扱って
いたが、RFC 8270 での推奨値に従い 2048 として扱うように変更した。
互換性で 2048 未満に設定したい場合にそなえて、Minimum Limit は
1024 のままとする。
RFC 8270 では、
| This minimum DH group size may need to be increased to 3072 for forward-looking users.
とあるので、3072 に上げてもいいのかも
git-svn-id: svn+ssh://svn.osdn.net/svnroot/ttssh2/trunk@7028 f5f01b69-1e22-0410-acbf-894ab4bd6246
@@ -2970,6 +2970,15 @@ SYNOPSIS: | ||
2970 | 2970 | |
2971 | 2971 | <h3><a name="ttssh_2.84">2018.02.28 (Ver 2.84) not released</a></h3> |
2972 | 2972 | <ul class="history"> |
2973 | + <li>Changes | |
2974 | + <ul> | |
2975 | + <li>The minimum group size of the Diffie-Hellman group exchange key exchange method is increased to 2048. (RFC 8270) | |
2976 | + <ul> | |
2977 | + <li>To change to the previous behavior, set the GexMinimalGroupSize entry in teraterm.ini file to 1024.</li></li> | |
2978 | + </ul></li> | |
2979 | + </ul> | |
2980 | + </li> | |
2981 | + | |
2973 | 2982 | <li>Bug fixes |
2974 | 2983 | <ul> |
2975 | 2984 | <!--li>バージョン情報ダイアログのサーバホスト鍵の指紋に、同一サーバで接続に使用されていない方式の鍵が表示されることがある問題を修正した。</li--> |
@@ -2976,6 +2976,15 @@ | ||
2976 | 2976 | |
2977 | 2977 | <h3><a name="ttssh_2.84">2018.02.28 (Ver 2.84) not released</a></h3> |
2978 | 2978 | <ul class="history"> |
2979 | + <li>変更 | |
2980 | + <ul> | |
2981 | + <li>Diffie-Hellman group exchane 鍵交換方式での最小グループサイズを 2048 に変更した。(RFC 8270) | |
2982 | + <ul> | |
2983 | + <li>以前の動作に戻すには、teraterm.ini の GexMinimalGroupSize エントリを 1024 にする。</li> | |
2984 | + </ul></li> | |
2985 | + </ul> | |
2986 | + </li> | |
2987 | + | |
2979 | 2988 | <li>バグ修正 |
2980 | 2989 | <ul> |
2981 | 2990 | <li>バージョン情報ダイアログのサーバホスト鍵の指紋に、同一サーバで接続に使用されていない方式の鍵が表示されることがある問題を修正した。</li> |
@@ -31,6 +31,10 @@ | ||
31 | 31 | // SSH_MSG_KEY_DH_GEX_REQUEST での min, n, max がとり得る範囲の上限/下限 (RFC 4419) |
32 | 32 | #define GEX_GRP_LIMIT_MIN 1024 |
33 | 33 | #define GEX_GRP_LIMIT_MAX 8192 |
34 | +// GexMinimalGroupSize が 0 (デフォルト(未設定)) だった時に min に使う値 | |
35 | +// RFC 8270 で min の最低値が 2048 に引き上げられたが、互換性の為に GEX_GRP_LIMIT_MIN | |
36 | +// を引き上げるのではなくて、デフォルトの値を変更する | |
37 | +#define GEX_GRP_DEFAULT_MIN 2048 | |
34 | 38 | |
35 | 39 | DH *dh_new_group1(void); |
36 | 40 | DH *dh_new_group14(void); |
@@ -5375,9 +5375,15 @@ error:; | ||
5375 | 5375 | |
5376 | 5376 | |
5377 | 5377 | |
5378 | -// | |
5379 | -// DH-GEX (RFC 4419) | |
5380 | -// | |
5378 | +/* | |
5379 | + * DH-GEX (RFC 4419) | |
5380 | + * | |
5381 | + * SSH_MSG_KEY_DH_GEX_REQUEST: | |
5382 | + * byte SSH_MSG_KEY_DH_GEX_REQUEST (34) | |
5383 | + * uint32 min, minimal size in bits of an acceptable group | |
5384 | + * uint32 n, preferred size in bits of the group the server will send | |
5385 | + * uint32 max, maximal size in bits of an acceptable group | |
5386 | + */ | |
5381 | 5387 | |
5382 | 5388 | static void SSH2_dh_gex_kex_init(PTInstVar pvar) |
5383 | 5389 | { |
@@ -5391,17 +5397,31 @@ static void SSH2_dh_gex_kex_init(PTInstVar pvar) | ||
5391 | 5397 | goto error; |
5392 | 5398 | } |
5393 | 5399 | |
5394 | - // サーバが保証すべき最低限のビット数を求める(we_needはバイト)。 | |
5395 | - if (pvar->settings.GexMinimalGroupSize < GEX_GRP_LIMIT_MIN) { | |
5400 | + // サーバに要求する group size の min, n(preferred), max を決定する。 | |
5401 | + if (pvar->settings.GexMinimalGroupSize == 0) { | |
5402 | + // 0 (未設定) だった時は最新の推奨値を使う | |
5403 | + min = GEX_GRP_DEFAULT_MIN; | |
5404 | + } | |
5405 | + else if (pvar->settings.GexMinimalGroupSize < GEX_GRP_LIMIT_MIN) { | |
5396 | 5406 | min = GEX_GRP_LIMIT_MIN; |
5407 | + logprintf(LOG_LEVEL_NOTICE, | |
5408 | + __FUNCTION__ ": small GexMinimalGroupSize is too small (%d), use minimum limit (%sd)", | |
5409 | + pvar->settings.GexMinimalGroupSize, GEX_GRP_LIMIT_MIN); | |
5397 | 5410 | } |
5398 | 5411 | else if (pvar->settings.GexMinimalGroupSize > GEX_GRP_LIMIT_MAX) { |
5399 | 5412 | min = GEX_GRP_LIMIT_MAX; |
5413 | + logprintf(LOG_LEVEL_NOTICE, | |
5414 | + __FUNCTION__ ": small GexMinimalGroupSize is too larse (%d), use maximum limit (%sd)", | |
5415 | + pvar->settings.GexMinimalGroupSize, GEX_GRP_LIMIT_MAX); | |
5400 | 5416 | } |
5401 | 5417 | else { |
5402 | 5418 | min = pvar->settings.GexMinimalGroupSize; |
5403 | 5419 | } |
5420 | + | |
5421 | + // max は常に上限いっぱい | |
5404 | 5422 | max = GEX_GRP_LIMIT_MAX; |
5423 | + | |
5424 | + // preferred は使用する各暗号要素の鍵長/ブロック長のうち、最大のものを使う | |
5405 | 5425 | bits = dh_estimate(pvar->we_need * 8); |
5406 | 5426 | if (bits < min) { |
5407 | 5427 | bits = min; |