• R/O
  • SSH
  • HTTPS

ttssh2: Commit


Commit MetaInfo

Revision7028 (tree)
Time2018-01-25 21:22:05
Authordoda

Log Message

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 に上げてもいいのかも

Change Summary

Incremental Difference

--- trunk/doc/ja/html/about/history.html (revision 7027)
+++ trunk/doc/ja/html/about/history.html (revision 7028)
@@ -2976,6 +2976,15 @@
29762976
29772977 <h3><a name="ttssh_2.84">2018.02.28 (Ver 2.84) not released</a></h3>
29782978 <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+
29792988 <li>バグ修正
29802989 <ul>
29812990 <li>バージョン情報ダイアログのサーバホスト鍵の指紋に、同一サーバで接続に使用されていない方式の鍵が表示されることがある問題を修正した。</li>
--- trunk/doc/en/html/about/history.html (revision 7027)
+++ trunk/doc/en/html/about/history.html (revision 7028)
@@ -2970,6 +2970,15 @@
29702970
29712971 <h3><a name="ttssh_2.84">2018.02.28 (Ver 2.84) not released</a></h3>
29722972 <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+
29732982 <li>Bug fixes
29742983 <ul>
29752984 <!--li>バージョン情報ダイアログのサーバホスト鍵の指紋に、同一サーバで接続に使用されていない方式の鍵が表示されることがある問題を修正した。</li-->
--- trunk/ttssh2/ttxssh/kex.h (revision 7027)
+++ trunk/ttssh2/ttxssh/kex.h (revision 7028)
@@ -31,6 +31,10 @@
3131 // SSH_MSG_KEY_DH_GEX_REQUEST での min, n, max がとり得る範囲の上限/下限 (RFC 4419)
3232 #define GEX_GRP_LIMIT_MIN 1024
3333 #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
3438
3539 DH *dh_new_group1(void);
3640 DH *dh_new_group14(void);
--- trunk/ttssh2/ttxssh/ssh.c (revision 7027)
+++ trunk/ttssh2/ttxssh/ssh.c (revision 7028)
@@ -5375,9 +5375,15 @@
53755375
53765376
53775377
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+ */
53815387
53825388 static void SSH2_dh_gex_kex_init(PTInstVar pvar)
53835389 {
@@ -5391,17 +5397,31 @@
53915397 goto error;
53925398 }
53935399
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) {
53965406 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);
53975410 }
53985411 else if (pvar->settings.GexMinimalGroupSize > GEX_GRP_LIMIT_MAX) {
53995412 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);
54005416 }
54015417 else {
54025418 min = pvar->settings.GexMinimalGroupSize;
54035419 }
5420+
5421+ // max は常に上限いっぱい
54045422 max = GEX_GRP_LIMIT_MAX;
5423+
5424+ // preferred は使用する各暗号要素の鍵長/ブロック長のうち、最大のものを使う
54055425 bits = dh_estimate(pvar->we_need * 8);
54065426 if (bits < min) {
54075427 bits = min;
Show on old repository browser