要約

  • draft-tiloca-lake-private-use-ranges-01 は、EDHOCの三つのレジストリに、CBORで合計5バイトとなる私用値の範囲を追加する案である。
  • 4294967295 と -4294967296 はワイヤ上で表現できるが、符号付き32ビット整数には収まらない。デコード後の変換、範囲判定、絶対値処理まで検証が必要だ。
  • Private Use は局所的な調整領域であり、世界共通の意味ではない。メッセージ認証だけでは、相手の意味付けやアプリケーション結果を証明できない。

障害解析で「受信した値は -1 だった」と記録されていたとする。しかし送信側のバイト列は 4294967295 だった。CBORデコーダは正しく復号し、その後の古い32ビットAPIが値を縮めた。ログは現象を説明するどころか、原因を消してしまった。

2026年9月30日付の個人Internet-Draft Additional Private Use Ranges in the IANA Registries of the Lightweight Authenticated Key Exchange Protocol は、この境界を数値で示す。Method TypesとError Codesには正負の大きな私用範囲、External Authorization Dataには絶対値の正範囲を提案する。既存の短い公開値を残すため、新しい値は4バイト引数のCBOR整数になる。

CBORの引数幅とアプリケーション型は別物

RFC 8949 のmajor type 0は N、major type 1は -1-N を表す。4バイト引数の最大値は 4294967295 なので、正側は同じ数、負側は -4294967296 まで届く。初期バイトを含めた符号化は5バイトでも、数学的な範囲は符号付き32ビットを越える。

したがって完全な範囲を実装するなら、64ビット符号付き整数や符号と無符号引数の分離表現が必要になる。さらに、デコーダだけを直しても足りない。enum、switch、マップのキー、永続化、JSON変換、メトリクスが後で再び狭める可能性がある。

EADでは符号が制御情報になる

RFC 9528 は ead_label の絶対値をIANAレジストリに置き、負のラベルをcritical、非負をnon-criticalとして扱う。65536 と -65536 は同じ私用項目を指すが、未知の受信者が続行できるかどうかは同じではない。

しかも符号化長は対称ではない。正の 65536 は4バイト引数で合計5バイト、負の -65536 は引数 65535 なので合計3バイトである。絶対値を先に取り符号を捨てる実装はcritical情報を失う。最小負端点を狭い型へ入れてから絶対値を取る実装は、値そのものを保持できない。

監査記録には、受信した符号付きラベル、レジストリ検索に用いた絶対値、critical判定の三つを残す必要がある。

私用番号には所属先が必要だ

RFC 8126 のPrivate Useは一般的な相互運用を目的とせず、複数主体が同じ番号を別の意味で使うことを防がない。局所的な実験には有効だが、二つの局所世界が接続されると衝突する。

番号だけでは不十分である。製品系列、運用領域、プロファイル版、互換集合を一緒に示すべきだ。買収や共通ゲートウェイによって、昨日まで隔離されていた二つの 70000 が出会うことがある。双方が自社内で正しくても、意味が同じとは限らない。

三つのレジストリは異なる失敗を生む

Method Typeは認証方式を選ぶ。Error Codeは失敗の解釈を選ぶ。EAD labelはEDHOCにとって不透明な外部データを選び、符号でcritical性を伝える。同じ数値の切り詰めでも、誤った方式、誤った復旧、誤った続行判断という別の結果になる。

これはEDHOCの脆弱性を主張するものではない。草案はRFC 9528のセキュリティ考慮事項が引き続き適用されるとしており、特定製品の事故も報告していない。責任の所在は、ワイヤの正しさと実装内部の正しさを分離して検証することにある。

境界値を中心にした適合試験

65535/65536、4294967295、-65536/-65537、-4294967296、各範囲の直外を試す。同じEADを正負の両方で送り、さらに二つの私用プロファイルが同じ番号に異なる意味を付けるケースを用意する。検証対象は元バイト、数学値、変換、範囲分類、ハンドラ、critical性、ログ、互換性拒否である。

現在の IANA EDHOCレジストリ はRFC 9528の基準状態を示す。Datatracker 上のrevision 01は個人草案であり、IANA処理、IETF合意、実装、配備の証拠ではない。RFC 9668 に別の私用範囲があることも、今回のコード経路を保証しない。

値を失わない受領記録

対象レジストリ、元CBORバイト、major type、引数幅、縮小前の数学値、各checked conversion、EADの符号・絶対値・critical性、私用調整領域と版、双方の互換集合、選択ハンドラ、認証済みtranscript参照、下流結果を保存する。専有意味はプロファイルdigestで指してもよい。

この記録は私用番号を世界共通にはしない。だが、不一致が起きたときに「何が届き、どの局所規則が解釈し、何が実行されたか」を再構成できる。

情報源