draft: Use of Bit 0x20 in DNS Labels to Improve Transaction Identity
こんにちは、まれいんです。
この記事は ひとりRFCの旅 Advent Calender 10日目の記事です。
今回もまたRFCではありませんが、12年前の2008年に出されたセキュリティ向上に0x20 bitを用いるというアイデアのdraft、Use of Bit 0x20 in DNS Labels to Improve Transaction Identityを読んでいこうと思います。
draft-vixie-dnsext-dns0x20-00 - Use of Bit 0x20 in DNS Labels to Improve Transaction Identity
今回は内容も短いので記事も短めです。
概要
ASCII - Wikipedia などを見るとわかるように、ASCIIで、アルファベットの大文字(A-Z)を小文字(a-z)はバイナリを見ると0x20のbitが立っているかどうかの差しかありません。
トランザクションはUDP PortとDNS HeaderのIDで区別されていましたが、これに加えてクエリ名の大文字小文字を区別の対象に含めようという提案です。
ドメイン名
RFC1035を見ると2.3.1にドメイン名は大文字小文字を区別せず、同じように処理されることになっています。
ドメイン名では大文字も小文字も許容されるが、大文字・小文字の種別に意味は ないことに注意せよ。つまり、同じつづりだが大文字・小文字の種別が異なる 二つの名前は、同じ物であるように処理されるということである。
というわけで、alpha.example.com
を解決するとき、クエリ名に AlPhA.ExAmPlE.CoM
と書いても、 ALPHA.example.COM
と書いても同じものとして扱われます。
一方で0x20 bitを取り出せば、バイナリ列が得られます。
AlPhA.ExAmPlE.CoM
--> 01010 0101010 010ALPHA.example.COM
--> 00000 1111111 000
このバイナリ列もトランザクションを区別するものとして取り入れます。
このdraftが作られた当時は、応答側は文字列を大文字小文字の区別込みで完全にコピーするように定められてはいませんでしたが、多くの実装では大文字小文字込みでコピーされているので問題なく導入できるよ、という散々だったようです。
ちなみに当然ながら、長いドメイン名の方が多くの0x20 bitを利用できるので、よりよいものとなってしまいます。 draftでも触れられていますが、こればかりはどうしようもなさそうです。
(QNAME minimizationとは相性が悪そうだなと思いました)