IDNとは
IDN(Internationalized Domain Name)は、元のDNS仕様で使われた従来のASCII集合以外の文字を含むドメイン名です。中国語(中文.com)、アラビア語(مثال.com)、キリル文字(пример.com)など、母語の文字体系によるドメイン名を可能にします。
IDNが重要な理由
元のDNSは英語話者を前提に設計され、ドメイン名を次に制限していました。
- 英字a-z(大文字と小文字を区別しない)
- 数字0-9
- ハイフン(先頭と末尾には不可)
これはラテン文字を使わない言語の数十億人を排除していました。IDNは次を可能にしてインターネットを民主化します。
- 母語のアドレス: 自分の言語でURLを入力できる
- ブランド保護: 複数の文字体系で自社名を確保できる
- 文化的な利用しやすさ: インターネット参加の障壁を下げる
IDNの仕組み: Punycodeとの関係
DNS基盤はASCIIだけを理解するため、IDNはPunycodeというエンコード方式を使います。IDNを登録またはアクセスすると:
1. 利用者が入力: 中文.com(中国語で「中国語」)
2. ブラウザーがエンコード: xn--fiq228c.com(Punycode表現)
3. DNSが解決: 標準ASCIIとして検索する
4. ブラウザーが表示: 中文.com(元の形式)
「xn--」接頭辞はPunycodeでエンコードされた文字列を示します。この処理は利用者からは見えません。
Punycodeの例
| IDN | Punycode |
|---|---|
| münchen.de | xn--mnchen-3ya.de |
| 中文.com | xn--fiq228c.com |
| правда.рф | xn--80aafi6cg.xn--p1ai |
利用者が見る文字列と、名前解決で送られるASCII文字列はこのように異なります。
TLD間のIDN対応
IDN対応はTLDによって異なります。
完全対応
多くの現代的なgTLDとccTLDがIDNに対応しています。
- .com、.net、.org(Verisign)
- .de(ドイツ語文字)
- .jp(日本語)
- .cn(中国語)
国際化TLD
TLD自体がIDNであるものもあります。
- .рф(ロシア、キリル文字)
- .中国(中国)
- .भारत(インド、デーヴァナーガリー)
- .السعودية(サウジアラビア、アラビア語)
限定対応または非対応
IDNを制限するTLDや、まったく対応しないTLDもあります。対象TLDのIDN対応を必ず確認してください。
セキュリティ上の考慮: ホモグラフ攻撃
IDNでは、異なる文字体系の見た目が似た文字で偽のドメインを作るホモグラフ攻撃のリスクが生じます。
apple.com (legitimate - Latin letters)
аpple.com (attack - Cyrillic 'а' looks like Latin 'a')
ホモグラフ攻撃への対策
ブラウザーの動作: 現代のブラウザーは、不審なIDNをUnicode形式ではなくPunycodeで表示し、攻撃を明らかにします。 レジストリポリシー: 一部のレジストリは、1つのドメインで組み合わせられる文字集合を制限します。 ドメイン監視: DomScanのタイポスクワッティング検出などのツールで、ブランドに似たホモグラフの登録を見つけられます。IDN対応の実装
ドメインツールを開発する場合:
検証
// Check if domain contains non-ASCII
function isIDN(domain) {
return /[^\x00-\x7F]/.test(domain);
}
変換
// Convert to Punycode for DNS queries
const punycode = require('punycode/');
const ascii = punycode.toASCII('中文.com'); // xn--fiq228c.com
const unicode = punycode.toUnicode('xn--fiq228c.com'); // 中文.com
RDAPクエリ
多くのRDAPサーバーは両方の形式に対応します。
# Both work
curl "https://rdap.verisign.com/com/v1/domain/xn--fiq228c.com"
curl "https://rdap.verisign.com/com/v1/domain/中文.com"
ベストプラクティス
IDNを扱うときは:
1. 内部では常にPunycode形式を保存・処理する
2. 利用者にはUnicode形式を表示する
3. セキュリティ機能にホモグラフ検出を実装する
4. 登録前にTLD固有のIDNポリシーを確認する