Que sont les IDN et le Punycode ?

Un IDN (nom de domaine internationalisé) contient des caractères hors ASCII, comme é, ç ou 中. Le Punycode est l'encodage qui transforme un tel nom en sa forme ASCII, commençant par xn--, celle que le DNS stocke réellement.

Le DNS a été conçu pour les lettres de a à z, les chiffres et le tiret. Pour prendre en charge d'autres écritures sans changer les logiciels DNS, IDNA définit une conversion : chaque étiquette comportant des caractères non ASCII est normalisée et encodée en Punycode, puis le préfixe xn-- lui est ajouté. La forme Unicode (le U-label) est celle que lisent les gens ; la forme xn-- (le A-label) est celle qui est enregistrée, interrogée et inscrite dans les certificats.

Les caractères autorisés sont définis TLD par TLD : chaque registre publie des tables IDN qui listent les points de code permis, et beaucoup regroupent ou bloquent les variantes susceptibles d'être confondues. Un nom avec des lettres accentuées françaises peut ainsi être enregistrable en .fr et en .com, mais pas sous un TLD dont les tables n'incluent pas ces lettres.

Comme des écritures différentes contiennent des lettres qui se ressemblent, les IDN peuvent être détournés pour des attaques par homographe, où un nom ressemble à une marque connue mais utilise un caractère différent. Les navigateurs affichent donc la forme xn-- lorsqu'une étiquette mélange les écritures de façon suspecte. L'e-mail avec des domaines non ASCII est pris en charge de façon moins homogène que le web ; mieux vaut tester avant de compter sur un IDN pour la messagerie.

Exemple

bücher.example   →  xn--bcher-kva.example
çiçek.example    →  xn--iek-1lab.example

Vérifier

Voyez ce que cela donne sur un vrai domaine (IDN et Punycode) :

Rapport de domaine