要約
- RTPの例示受信アルゴリズムは、初見のSSRCを試用状態に置いた。一つのもっともらしいパケットでは足りず、短い連番が連続性の弱い証拠になった。
- 異常に大きな番号の飛躍は一度拒否し、その次に来るはずの番号を記憶した。本当に次の番号が来た時だけ新しい時期へ同期し直すため、損失計算は守られたが送信者が認証されたわけではない。
ヘッダーが通っても、送信源はまだ通らない
受信側がSSRC 0x4A17とシーケンス番号41,900を初めて見る。RTPバージョンは2、ペイロード型はセッションで理解でき、長さとパディングも矛盾しない。それでも、正しい会議のパケットとは限らない。誤配送、誤った復号コンテキスト、偶然の一致、あるいは本物の新規送信源の始まりという複数の説明が残る。
1996年のRFC 1889は、この証拠不足をRTPの設計に取り込んだ。2003年のRFC 3550も考え方を継承した。未知の送信源に対して確認できるのは、バージョン、既知の型、パディング、拡張、長さなどの弱い妥当性だけである。構文はあり得ない解釈を減らせるが、一包に過去を与えることはできない。
そこで時間が検査項目になる。新しいSSRCはprobationに入り、付録A.1の例ではMIN_SEQUENTIAL個の連番を受けるまで有効とされない。典型値が2なら、41,900は候補のままであり、41,901が届いて初めてパケット間の関係が生じる。
二つの連番は人物や機器の身元を証明しない。復号や再生の成功も保証しない。ただし「同じ系列を維持する送信源らしい」という運用上の仮説には、最初の一包より根拠が増える。
慎重さの代金は冒頭の遅れだった
試用中のパケットは捨ててもよく、許容できる遅延なら保持して合格後に渡してもよい。必要な連番を長くすれば偶然の通過は減るが、冒頭の音声や映像をより多く失う。損失率が高い経路では、正当な送信源が永遠に合格できないこともある。
このため、付録の値は例示パラメータであって全実装への命令ではない。有効なRTCPパケットを先に受けていれば文脈は強くなる。一定の規則でタイムスタンプが増えるペイロードなら追加検査もできる。対話型通話と保存ストリームが、同じ起動遅延を選ぶ理由はない。
probationという語は重要である。これは不確実な観測を長期状態へ昇格させる受信側の方針であって、送信側が提示したauthenticationではない。
16ビットの番号は円を描く
合格後も番号は普通の整数ではない。16ビットなので65,535の次は0になる。受信側は最大番号と周回数を組み合わせ、RTCPの損失計算に使える拡張シーケンス番号を作る。
経路は並べ替えも起こす。最大値より少し小さい番号は遅着か重複かもしれない。適度に大きい番号は途中の欠落を示すかもしれない。RFC 3550の例はMAX_MISORDERを100、MAX_DROPOUTを3,000として、現在地の周囲に受容範囲を設ける。
ただし数字だけをコピーしてはいけない。例は毎秒50パケット、最大2秒の並べ替え、最大1分の途絶を想定する。パケット率が変われば同じ100や3,000が表す時間も変わる。定数に見えるものの実体は時間方針である。
大きすぎる飛躍には次の一包を待った
12,000まで進んだ送信源から、突然50,000が来たとする。差をただちに損失へ入れれば、観測していない大量損失を精密に報告することになる。すぐ再起動と決めても、一つの異常に履歴を書かせることになる。
例示アルゴリズムはまず50,000を拒否し、その値に1を足した50,001をbad_seqとして記憶する。次に本当に50,001が届いた場合、二つが連続する新しい始まりと推定し、シーケンス状態を初期化し直す。
最初の異常値は旧履歴を停止させるが、単独では新履歴を始めない。その後継が「長い途絶または未通知の再起動」という説明を実行可能にする。
初回試用と似た連続性を使っても、問いは違う。初回は未知のSSRCへ長期状態を割り当てるかを決める。後者は既知SSRCの古い番号史が現在を説明し続けるかを決める。明示的な再起動通知を前提にできないからこそ、観測の連なりを使う。
カウンターのリセットは無知の表明だった
新しい時期へ同期すると損失統計をリセットする。証拠を消すように見えるが、古い基準を延長する方が証拠を捏造する。途絶中に16ビット空間を何周したか、再起動時にどの乱数から始めたかは、橋渡しするパケットがなければ分からない。
そもそもRFC 3550の累積損失は、期待数から受信数を引く。遅着と重複も受信数に入るため、重複が多ければ負にもなり得る。RFC 3611は後に損失と重複のイベント列を追加し、解釈より観測事実を優先するよう促した。
時期の境界は分母の意味を決める。見ていない再生をまたいで一つの損失率を維持することは、連続性ではなく見せかけの精度である。
RFC 3550は思想ではなく例の傷を直した
RFC 3550の変更記録は、RFC 1889の細部を修正した。base_seqは受信番号そのものから始め、1を引かない。保存するのは悪い番号そのものではなく「悪い番号+1」である。初期化の各手順も分離され、旧文書の刊行処理で失われた語が戻された。
一つのoff-by-oneは期待数を変え、bad_seqの曖昧さはどの包が新時期を確定するかを変える。付録の疑似コードは、その限界を語る本文より広く実装され得る。
長く残った発明は2、100、3,000という値ではない。候補、妥当な系列、許容される遅着、疑わしい断裂、確認済みの新開始という状態を明示したことである。
連続性は暗号学的な権限ではない
連番を作れる偽装者はこの検査を通れる。真正な送信源も損失で落ちる。RFC 3711は後にSRTPを定義し、適切な鍵管理の下で機密性、メッセージ認証、リプレイ防止を与えた。これは別の証拠層である。
SRTPでさえ人が聞いたことや内容を理解したことまでは証明しない。RTP試用はもっと狭い。最初の番号は提案であり、次の番号が連続性を作る。大きな飛躍は旧勘定を保留し、その後継が新しい勘定を開き得る。番号を証拠にするのは、番号を読む状態なのである。
出典
会員向け解説
プロフィールの詳細
適切な会員レベルでログインすると、解説全文と出典メモをご覧いただけます。
Strategic Circle 限定
Strategic Circle
すべての読者に公開されています。参加してログインすると プロフィール解説 を閲覧できます。
Strategic Circle に参加Leadership Alliance 会員限定
Leadership Alliance
対象となる IP 資産の所有者・管理者向けです。ログインすると Leadership Alliance の解説を閲覧できます。
Leadership Alliance に参加
