要約

  • 意図的に誤ったゼロを送れるのは、相手がINITまたはINIT ACKで対応する代替方式を通知し、送信側もその条件を満たしたアソシエーションに限られる。
  • 代替方式はCRC32c以下の見逃し確率を備え、中間装置による経路障害を2 RTOより長引かせてはならない。接続確立や指定された例外では正しいCRC32cが残る。

受信したゼロだけでは判定できない

SCTPの共通ヘッダーには32ビットのCRC32cがある。RFC 9260では、送信側が共通ヘッダーと全チャンクを対象に計算し、受信側は不正な値を持つパケットを破棄する。IPv4やIPv6の擬似ヘッダーは計算に含めない。Michael Tüxenは、この現行の基本仕様にも名を連ねる。

ところが、CRC32cを正しく計算した結果がゼロになることはあり得る。したがって、欄の値だけを見ても、計算結果なのか、計算を省いて意図的に誤ったゼロを置いたのかは分からない。ここでゼロを特殊記号として扱えば、正常な計算結果と許可された省略を取り違える。

RFC 9653は意味をパケット単体ではなく、アソシエーションの確立過程に置いた。エンドポイントはINITまたはINIT ACKにZero Checksum Acceptableパラメーターを高々一つ入れ、受け入れられる誤り検出方式を識別する。送信側はその通知を受け、方式に対応し、必要なら上位層の承認も得た後で初めて、意図的に誤ったゼロを使える。

つまり、途中から採取したトレースでは適法性を確定できない。INITの交換、方式ID、実際のカプセル化、パケット種別を同じ記録に残す必要がある。ゼロの出現回数だけを監視する設計は、肝心の許可証を捨てている。

「検出できる」と「経路を通る」は別の要件

代替方式は、誤りを見逃す確率がCRC32cと同等以下でなければならない。方式ごとに適用できるパケットの条件も設定できる。システムのどこかに暗号機能があるという説明では足りず、ゼロを使う実際のSCTPパケットを保護していることが必要だ。

もう一つは中間装置への耐性である。SCTPを解釈するミドルボックスがCRC32cを検証すれば、意図的に誤ったゼロを破棄する可能性がある。RFC 9653は、そのために生じる経路障害が2回の再送タイムアウトを超えて継続しないことを要求する。すべての経路が新方式を理解するという楽観ではなく、誤った前提から期限内に復帰できることを条件にした。

RFC 8261のSCTP over DTLSは、二つの条件を満たす具体例である。UDP上、またはICE/UDP経由でSCTPを運ぶ際、DTLSが機密性、送信元認証、完全性を提供する。誤り検出を担ううえ、暗号化された内側のSCTPパケットを中間装置が検査できないため、経路条件も満たす。RFC 9653では方式ID 1が割り当てられるが、これは登録番号であり、安全性の順位ではない。

RFC 4895のSCTP-AUTHは境界を明確にする。AUTHが最初のチャンクなら、保護対象について第一の検出要件を満たし得る。しかし共通ヘッダーは見えたままで、中間装置は不正なCRCを理由に破棄できる。配備固有の追加策がなければ、AUTHだけでは第二の経路要件を証明できない。

ゼロが使えないパケット

交渉済みのアソシエーションでも、INITは正しいCRC32cを必要とする。Out-of-the-blueパケットへの応答、COOKIE ECHO、ASCONFも同様である。代替方式の制約から外れるパケットにも元の規則が適用され、相手が方式を通知しなければ全パケットがCRC32cに戻る。

受信側も、自ら方式を通知し、その要件が成立している場合に限って誤ったゼロを受け入れられる。誤った非ゼロ値が有効になるわけではない。正しく計算されたゼロも存在する。実装は接続確立、例外、フォールバック、旧来の相手との相互運用のためにCRC32cを保持しなければならない。

このため、制御面は四バイトの欄より広い。INIT/INIT ACKの通知、方式への対応、上位層の判断、外側の保護、パケット分類、RTO、中間装置の挙動が一体となって初めて例外が成立する。計算だけを飛ばし、これらの状態を持たない実装は、RFC 9653の実装ではない。

Tüxenが残したのは省略の証拠である

Michael TüxenはFH MünsterのNetwork Programming Laboratoryを率いる。IETF Datatrackerでは現在のTCPM共同議長、TSVARTレビュアーとしても記録され、数多くのRFCに関わっている。基礎仕様と例外仕様の双方に携わった経歴が、この設計の連続性を示す。

RFC 3309は、SCTPの誤り検出を改善するためAdler-32をCRC32cへ置き換えた。RFC 9653はその目的を否定しない。別の層が同等以上の仕事を行い、経路上でも破綻しないと示せるときだけ、計算場所を変える。

Tüxenらの重要な判断は、最適化を検証可能な状態にしたことだ。代替担当を番号で示し、双方の合意を残し、対象外を列挙し、障害の期限を置き、共通方式へ戻れるようにする。ゼロは作業の消失ではなく、作業の所在を説明する約束なのである。

情報源