9. Key Re-Exchange (鍵の再交換)
9. Key Re-Exchange (鍵の再交換)
鍵の再交換は, 鍵交換をまだ行っていないときに SSH_MSG_KEXINIT パケットを送信することによって開始されます (セクション 7.1 で説明されています)。このメッセージを受信した場合, 受信した SSH_MSG_KEXINIT がすでに返信であった場合を除き, 当事者は自身の SSH_MSG_KEXINIT メッセージで応答しなければなりません。どちらの当事者も再交換を開始してもかまいませんが, 役割を変更してはなりません (つまり, サーバーはサーバーのまま, クライアントはクライアントのままです)。
鍵の再交換は, 交換が開始されたときに有効だった暗号化を使用して実行されます。暗号化, 圧縮, および MAC メソッドは, 鍵交換後に新しい SSH_MSG_NEWKEYS が送信されるまで変更されません (初期鍵交換と同様)。再交換は, セッション識別子が変更されないままである点を除き, 初期鍵交換と同じように処理されます。再交換中に一部またはすべてのアルゴリズムを変更することは許可されています。ホスト鍵も変更できます。すべての鍵と初期化ベクトルは交換後に再計算されます。圧縮および暗号化コンテキストはリセットされます。
送信データの各ギガバイト後, または接続時間の各時間後のいずれか早い方で鍵を変更することが推奨されます。ただし, 再交換は公開鍵操作であるため, かなりの処理能力を必要とし, 頻繁に実行すべきではありません。
SSH_MSG_NEWKEYS パケットが送信された後, より多くのアプリケーションデータが送信される場合があります。鍵交換は SSH トランスポート層の上にあるプロトコルに影響を与えません。