Aussi disponible en : English · Español · Português · العربية
Convertisseur punycode
Décodez les domaines xn-- pour voir les lettres qu’ils écrivent vraiment, encodez dans l’autre sens, et voyez à quelles écritures un nom fait appel.
Qu’est-ce que le punycode ?
Les noms de domaine, tels qu’ils circulent sur le réseau, ne peuvent contenir que les lettres a à z, des chiffres et des traits d’union. Le punycode, défini par la RFC 3492, est la manière de faire entrer dans cet alphabet un domaine écrit dans n’importe quelle autre écriture : münchen.de devient xn--mnchen-3ya.de, et пример.рф devient xn--e1afmkfd.xn--p1ai. Le préfixe xn-- signale une étiquette encodée de la sorte, et ce qui suit est le punycode proprement dit.
C’est une belle pièce d’ingénierie. Les caractères ASCII sont d’abord recopiés, puis une suite compacte de chiffres en base 36 décrit quels caractères non ASCII insérer et à quelle position. Rien n’est perdu, l’encodage est réversible, et les noms courts restent courts.
On le rencontre surtout dans deux situations : soit le navigateur vous a montré un lien du genre xn--80ak6aa92e.com et vous voulez savoir ce qu’il dit réellement, soit vous avez un domaine dans votre propre écriture et il vous faut la forme ASCII pour un fichier de configuration, un certificat ou un enregistrement DNS. Cet outil fait les deux, entièrement dans votre navigateur.
Comment l’utiliser
- Choisissez le sens qu’il vous faut. Du punycode vers l’Unicode retransforme un domaine xn-- en lettres. De l’Unicode vers le punycode fait l’inverse, quand c’est la forme ASCII que vous voulez.
- Collez le domaine. Les domaines entiers conviennent, pas seulement les étiquettes isolées : chaque partie entre les points est convertie séparément, exactement comme le DNS la traite.
- Lisez le détail par étiquette et la liste des écritures. Chaque étiquette apparaît avec son résultat, si bien que vous voyez laquelle portait l’encodage. Les écritures employées sont listées en dessous, avec une alerte si une étiquette en mêle plusieurs.
Le navigateur fait un sens et refuse l’autre
Cela vaut la peine d’être su, car c’est ce qui explique l’existence d’outils comme celui-ci. Tous les navigateurs embarquent une implémentation complète du punycode, et depuis JavaScript on en atteint une partie : construire une URL à partir de münchen.de renvoie un nom d’hôte xn--mnchen-3ya.de. Le sens de l’encodage est gratuit.
L’inverse n’est pas disponible. Donnez au même analyseur xn--mnchen-3ya.de et il vous le rend inchangé, ce qui est correct puisque c’est déjà un nom d’hôte valide et qu’il n’y a aucune raison d’y toucher, mais cela signifie que la plateforme ne vous dira pas ce qu’écrit un domaine encodé. Or c’est exactement le sens dont a besoin quelqu’un qui examine un lien suspect : il faut donc l’implémenter plutôt que l’emprunter. Cette page implémente intégralement la RFC 3492, vérifiée contre les dix-neuf vecteurs de test que la norme elle-même publie.
Deux noms qui se ressemblent et n’en sont pas un seul
Si le punycode compte au-delà de la curiosité, c’est parce que c’est ainsi qu’on enregistre un domaine sosie. Un a latin et un а cyrillique sont deux caractères distincts que presque toutes les polices dessinent à l’identique. Écrivez apple.com avec le cyrillique et cela s’encode en xn--pple-43d.com : un domaine entièrement différent qui, dans la barre d’adresse, s’affiche quasiment comme le vrai.
La vérification que font les navigateurs porte sur le mélange d’écritures au sein d’une même étiquette, et cet outil vous montre la même chose. Un nom comportant une lettre cyrillique parmi des latines est signalé. Mais cette vérification a un trou qu’il faut comprendre : une étiquette écrite entièrement avec des sosies cyrilliques est un texte cohérent d’une seule écriture, elle passe donc. Plusieurs lettres cyrilliques ressemblent assez aux latines pour écrire des mots entiers. L’alerte de mélange est un signal utile et non une garantie, et cette page le dit plutôt que de laisser croire que l’absence d’alerte vaut sécurité.
L’encodage réserve deux autres surprises. Le ß allemand fait partie d’une poignée de caractères dont le sens a changé entre les deux versions de la norme IDNA : sous les anciennes règles, faß.de était ramené à fass.de et c’était le même domaine, alors que sous les règles actuelles faß.de s’encode en xn--fa-hia.de et ce sont deux enregistrements distincts. Et en grec, passer un domaine en majuscules puis le repasser en minuscules ne rend pas le domaine de départ, car un Σ final devient ς et non σ : ΣΊΣΥΦΟΣ.gr et σίσυφος.gr ne sont donc pas le même nom.
Limites honnêtes
Cet outil convertit du punycode ; il ne vous dit pas si un domaine est dangereux. Un nom peut être parfaitement ordinaire dans son écriture, et un nom peut être en ASCII pur et néanmoins servir à de l’hameçonnage. Ce que l’outil vous donne, ce sont les lettres et les écritures — une information que la barre d’adresse ne montre pas et qui est réellement utile — mais le jugement vous revient.
La détection d’écriture est volontairement grossière. Elle couvre le latin, le grec, le cyrillique, le han, l’arabe et l’hébreu, soit les plages qui comptent pour la confusion dont traite cette page, et tout le reste est étiqueté Autre plutôt que deviné. Chiffres, traits d’union et signes comptent comme Commun et ne suffisent jamais à faire paraître un domaine mélangé.
Il existe par ailleurs une couche au-dessus du punycode que cet outil n’applique pas. IDNA2008 fixe quels caractères peuvent seulement figurer dans un domaine, et les navigateurs y ajoutent leurs propres restrictions ; la plupart des registres ne vous vendraient de toute façon pas un nom mêlant les écritures. Un domaine que cette page convertit sans broncher peut donc être un domaine qu’aucun bureau d’enregistrement n’accepterait. Inversement, un navigateur encode des choses que la norme interdit : un domaine en émoji passe, un trait d’union en tête ou en fin aussi.
Enfin, le décodage se fait étiquette par étiquette. Si un nom ne porte pas le préfixe xn--, il passe tel quel, car rien ne permet de distinguer un punycode non signalé d’un mot ordinaire qui y ressemblerait.
Pourquoi est-ce gratuit ?
Parce que cela ne coûte rien à faire tourner. La conversion se fait dans votre navigateur au fil de la frappe ; rien n’est envoyé, rien n’est journalisé, et aucun serveur ne voit les domaines que vous collez — ce qui compte ici plus qu’ailleurs, puisque la raison même d’ouvrir cette page peut être que vous ne faites pas confiance au lien qu’on vous a envoyé.
Ni compte, ni inscription, ni rien réservé. L’algorithme est la RFC 3492 telle que publiée, vérifiée contre les dix-neuf vecteurs de test de la norme elle-même et contre une implémentation de référence indépendante.