メインコンテンツまでスキップ

7.1. Algorithm Negotiation (アルゴリズムネゴシエーション)

7.1. Algorithm Negotiation (アルゴリズムネゴシエーション)

鍵交換は, 両側が次のパケットを送信することから始まる:

byte         SSH_MSG_KEXINIT
byte[16] cookie (ランダムバイト)
name-list kex_algorithms
name-list server_host_key_algorithms
name-list encryption_algorithms_client_to_server
name-list encryption_algorithms_server_to_client
name-list mac_algorithms_client_to_server
name-list mac_algorithms_server_to_client
name-list compression_algorithms_client_to_server
name-list compression_algorithms_server_to_client
name-list languages_client_to_server
name-list languages_server_to_client
boolean first_kex_packet_follows
uint32 0 (将来の拡張のために予約)

各アルゴリズム名リストは, コンマ区切りのアルゴリズム名のリストでなければならない (MUST)。サポートされている (許可されている) 各アルゴリズムは, 最も優先度の高いものから低いものへの順序でリストされなければならない (MUST)。

各名前リストの最初のアルゴリズムは, 優先される (推測される) アルゴリズムでなければならない (MUST)。各名前リストには少なくとも 1 つのアルゴリズム名が含まれていなければならない (MUST)。

アルゴリズムの選択: クライアントのアルゴリズムを 1 つずつ反復処理する。要件を満たし, サーバーでもサポートされている最初のアルゴリズムを選択する。すべての条件を満たすアルゴリズムが見つからない場合, 接続は失敗し, 両側は切断しなければならない (MUST)。

パーティが鍵交換のために SSH_MSG_KEXINIT メッセージを送信した後, SSH_MSG_NEWKEYS メッセージ (セクション 7.3) を送信するまで, 次のメッセージ以外は送信してはならない (MUST NOT):

  • トランスポート層汎用メッセージ (1 から 19) (ただし SSH_MSG_SERVICE_REQUEST と SSH_MSG_SERVICE_ACCEPT は送信してはならない)
  • アルゴリズムネゴシエーションメッセージ (20 から 29) (ただしさらなる SSH_MSG_KEXINIT メッセージは送信してはならない)
  • 特定の鍵交換方法メッセージ (30 から 49)