6.4. Data Integrity (データ完全性)
6.4. Data Integrity (データ完全性)
データ完全性は, 共有秘密, パケットシーケンス番号, パケットの内容から計算される MAC を各パケットに含めることによって保護される。
メッセージ認証アルゴリズムと鍵は鍵交換中にネゴシエートされる。最初は, MAC は有効ではなく, その長さはゼロでなければならない (MUST)。鍵交換後, 選択された MAC アルゴリズムの mac は, パケットデータの連結から暗号化前に計算される:
mac = MAC(key, sequence_number || unencrypted_packet)
ここで unencrypted_packet は mac を含まないパケット全体 (長さフィールド, payload, random padding) であり, sequence_number は uint32 として表される暗黙的なパケットシーケンス番号である。sequence_number は最初のパケットではゼロに初期化され, すべてのパケットの後にインクリメントされる (暗号化または MAC が使用されているかどうかに関係なく)。後で鍵/アルゴリズムが再ネゴシエートされてもリセットされない。2^32 パケットごとにゼロに戻る。パケット sequence_number 自体はネットワーク経由で送信されるパケットには含まれない。
各方向の MAC アルゴリズムは独立して実行されなければならず (MUST), 実装は両方向でアルゴリズムを独立して選択できるようにしなければならない (MUST)。ただし実際には, 両方向で同じアルゴリズムを使用することが推奨される (RECOMMENDED)。
MAC アルゴリズムから得られる mac の値は, パケットの最後の部分として暗号化せずに送信されなければならない (MUST)。mac のバイト数は選択されたアルゴリズムによって異なる。
現在定義されている MAC アルゴリズムは次のとおりである:
hmac-sha1 REQUIRED HMAC-SHA1 (ダイジェスト長 = 鍵長 = 20)
hmac-sha1-96 RECOMMENDED HMAC-SHA1 の最初の 96 ビット (ダイジェスト長 = 12, 鍵長 = 20)
hmac-md5 OPTIONAL HMAC-MD5 (ダイジェスト長 = 鍵長 = 16)
hmac-md5-96 OPTIONAL HMAC-MD5 の最初の 96 ビット (ダイジェスト長 = 12, 鍵長 = 16)
none OPTIONAL MAC なし; 非推奨
"hmac-" アルゴリズムは [RFC2104] で説明されている。"-n" MAC は結果の値の最初の n ビットのみを使用する。
SHA-1 は [FIPS-180-2] で説明され, MD5 は [RFC1321] で説明されている。
[SSH-ARCH] と [SSH-NUMBERS] で指定されているように追加の方法を定義してもよい。