DNSプロトコルの拡張性を担保するGreasingの提案

DNSプロトコルの拡張性を担保するために、『Greasing Protocol Extension Points in the DNS』という提案がIETFに提出されている。

これにより、オペコードやリソースレコードタイプなどにランダムな値が設定される可能性がある。

背景、Greasingについて

プロトコルの将来の拡張性を担保するために、Greasingという仕組みが導入される事があります。

実インターネットでは様々なミドルウェア実装や中継機器などが存在します。プロトコルを拡張した際、既存実装にそれらの拡張が無視される事が期待されます。ただし、実装や中継機器の予期せぬ動作を引き起こし、結果として新しいプロトコルの利用が阻害される事が知られています(ossification問題と呼ばれる)。

これは、TLS1.3策定時に、実際にインターネットでの疎通問題として注目されました。そこで、プロトコルの未知の拡張を無視するという挙動を実装に意識させるために、無視するための拡張を定義して送信するのがGreasingです。

例えば、TLSではRFC 8701でGreasing用の値が定義されており、例えばcipher suitesおよびALPN識別子に次の値を付与して良いことになっています。

  • {0x0A,0x0A}
  • {0x1A,0x1A}
  • {0x2A,0x2A}
  • {0x3A,0x3A}
  • ...

これにより、サポートしてない拡張値を無視する要件が守られていることを保つようにしています。

Greasing Protocol Extension Points in the DNS

Greasing Protocol Extension Points in the DNS』では、次の値をGreasing対象として検討している。

Greasingにランダムな値を使うか、Greasingようの値を予約するかは現在検討中になっているようです。ランダムな値を使ってしまうと、将来利用される番号と衝突してしまう場合の影響が未知数となってしまいます。一方で予約値を使うと、実装がそれを特別扱いできてしまいます。

(個人的には、TLSと同様予約値を与えるので十分なんじゃないかなとは思います)