[7] [DFN[[[ACE]] [RUBYB[接頭辞][prefix]]]]は、[[国際化ラベル]]を [[ASCIIラベル]]として表現する際に使う[[接頭辞]]です。 [6] [[Punycode]] の[[ACE接頭辞]]は、 [CODE[[[xn--]]]] です [SRC[>>4, >>13]]。 [9] [[ACE接頭辞]]は、[[大文字・小文字不区別]]です [SRC[>>4]]。 * 仕様書 - [3] [[IDNA2003]] [CITE@en[RFC 3490 - Internationalizing Domain Names in Applications (IDNA)]] -- [5] -- [4] '''''' - [12] [[IDNA2008]] -- [16] [CITE@en[RFC 5890 - Internationalized Domain Names for Applications (IDNA): Definitions and Document Framework]] --- [13] '''''' -- [15] [CITE@en[RFC 5894 - Internationalized Domain Names for Applications (IDNA): Background, Explanation, and Rationale]] --- [17] * 定義 [1] > この[[文書]]では、[DFN[ACE [RUBY[接頭辞][settouji]@en[prefix]]]]は、 すべての [[ACEラベル]] / [[Aラベル]]のはじめに現れる [[ASCII]] [[文字列]]として定義されます。 [SRC[[[IDNA2003]] >>5, [[IDNA2008]] >>13]] * ACE 接頭辞の一覧 [2] ,[[ACE接頭辞]],意味 ,[CODE[[[bl--]]]] ,[CODE[[[bq--]]]],[[RACE]] ,[CODE[[[dq--]]]] ,[CODE[[[lq--]]]] ,[CODE[[[mq--]]]] ,[CODE[[[ra--]]]] ,[CODE[[[wq--]]]] ,[CODE[[[xn--]]]],[[Punycode]] ,[CODE[[[zq--]]]] [8] 現在有効な [[ACE接頭辞]]は [[Punycode]] を表す [CODE@en[[[xn--]]]] のみです。 それ以外は歴史的なものであり、既に使われていません。 * 用法 [10] [[ACE接頭辞]]である [CODE@en[[[xn--]]]] の後に [[Punycode]] [[符号化]]した文字列を続けると、[[ACEラベル]] / [[Aラベル]]となります。 [11] [[ACE接頭辞]]からはじまる[[ラベル]]のすべてが[[ACEラベル]]ではありません。 しかし、混乱を招くため、 [[DNS]] [[ゾーン]]では [[ACE接頭辞]]を [[ACEラベル]]以外に使う[['''べきではありません''']]。 [SRC[>>4]] * 接頭辞の変更 ** 接頭辞の変更条件 [18] [[IDNA2008]] での改訂に当たって[[ACE接頭辞]]を変更するべきかどうか、変更するべき条件は何かが検討され、 [[RFC 5894]] にまとめられています。 [19] [[ACE接頭辞]]は、与えられた[[文字]]を [[lookup]] したり、その他解釈したりの結果が[[プロトコル]]や表の版によって変わってしまうとき、必要となります。 具体的には、次の4条件のいずれかが成立するとき、その時に限って、[[ACE接頭辞]]を変更する必要が生じます。 [SRC[>>17]] - [20] [[Aラベル]]を[[Uラベル]]に変換する時、[[IDNA2003]] と [[IDNA2008]] で違う結果になる [SRC[>>17]] - [21] [[IDNA2003]] と [[IDNA2008]] でそれぞれ[[妥当]]な[[文字列]]が別々の[[Aラベル]]に変換されることが著しく多い[SRC[>>17]] -- [22] この条件は一部例外を除き、 >>20 と本質的に同じとみられている [SRC[>>17]] -- [23] 一方で[[妥当]]で他方で[[妥当]]でない場合はこの条件には含まない [SRC[>>17]] - [24] [[DNS]] に挿入される[[文字列]]の[[意味]]に根本的な変更が生じる [SRC[>>17]] -- [25] 文字列だけでなく[[言語]]や[[用字系]]の情報も詰め込むなど [SRC[>>17]] - [26] 極めて大量の[[文字]]が [[Unicode]] に追加され、 [[Punycode]] の block offset の仕組みが上の方の[[面]]で機能しなくなる [SRC[>>17]] -- [27] これは長期的に見てもありそうにはないけれど [SRC[>>17]] -- [28] [[Punycode]] の[[算法]]が[[桁溢れ]]するくらい大きな[[符号位置]]に[[文字]]が割り当てられるということ? [29] 逆に、次のような状況では新しい[[ACE接頭辞]]が割り当てられることにはなりません。 [SRC[>>17]] - [30] それまで認められていた[[文字]]の使用が禁止される [SRC[>>17]] -- [31] 以前[[登録]]された名前にアクセスできなくなったとしても [SRC[>>17]] - [32] [[IDNA2003]] において[[非妥当]]な[[文字]]に対する[[表]]などの変更 ([[正規化]]の変更を含む) [SRC[>>17]] - [33] [[IDNA]] の動作に影響しない、定義の方法の変更 [SRC[>>17]] ** 接頭辞の変更コスト [34] もし[[接頭辞]]を変更するとなると、既存の[[登録]]を必要なら変換する必要がありますし、 [[lookup]] は新旧両方に対応した上で片方で [[lookup]] して駄目なら他方で [[lookup]] しなおすような手間が必要になります。1つの[[ドメイン名]]に含まれる[[ラベル]]に新旧混在する場合も考えると[[名前解決]]に非常に時間がかかるようになり、 [[DNS]] [[キャッシュ]]も困難になってしまいます。また、同じ入力が2種類の[[Aラベル]]になり得るとしたら混乱や攻撃に使われかねません。 [SRC[>>17]] * 関連 [14] [[Punycode]] の [[ACE接頭辞]] [CODE[[[xn--]]]] から始まる [[LDHラベル]] を [[XNラベル]]といいます。