Punycode: conversion des domaines internationalisés

Punycode est une méthode d’encodage standardisée qui permet de mapper les caractères Unicode à l’aide d’un jeu de caractères ASCII limité. Les noms de domaine internationalisés (IDN pour International Domain Name) peuvent ainsi aussi contenir des caractères Non-ASCII-, comme les accents, les trémas, etc.

Développement de la méthode de codage

Punycode a été normalisé en 2003 par l’Internet Engineering Task Force (IETF) en tant que syntaxe pour le codage des noms de domaine internationalisés dans les applications (IDNA). L’IETF utilise le terme IDN pour décrire les noms de domaine qui, en plus des lettres de l’alphabet latin, contiennent des caractères spéciaux tels que des trémas, des signes diacritiques ou des caractères d’autres alphabets et ne peuvent donc pas être traités par des protocoles de base tels que le Domain Name System (DNS).

Bien qu’un nom de domaine comme « Hôtel Château-Lucé » soit autorisé sous le domaine de premier niveau .fr depuis l’introduction des IDN, il ne peut être traité – par exemple dans le cadre de la résolution de noms – qu’en codant les caractères qui ne sont pas des caractères de base. Il en va de même en allemand avec le Umlaut comme dans le nom de magasin de meuble « müller-büromöbel ». De nombreux protocoles sous-jacents à Internet sont basés sur la langue écrite anglaise et ne prennent donc en charge que le jeu de caractères limité ASCII.

Afin d’assurer la compatibilité entre les IDN et les normes Internet plus anciennes, l’IETF a prescrit le codage des noms de domaine internationalisés avec les caractères précédemment autorisés et a normalisé une procédure correspondante avec Punycode.

Note

Pour les adresses email, le Punycode n’est utilisé que pour les domaines email internationalisés. La partie locale (avant le caractère @) est encodée via UTF-8 si elle contient des caractères non-ASCII.

Comment fonctionne le codage avec Punycode ?

Vue d’ensemble de la méthode Punycode

Punycode est défini par l’IETF dans la RFC 3492 comme une application possible d’un algorithme de codage général appelé « bootstring » (chaîne de démarrage). L’algorithme de bootstring permet aux chaînes de caractères arbitraires d’être mappées de façon unique avec une sélection limitée d’éléments. Dans le codage Punycode, ces éléments sont appelés caractères de base, et se composent de lettres minuscules, de chiffres et du tiret (-). Le développement de la méthode de codage repose sur six principes :

  • Complétude : chaque chaîne de caractères peut être liée à une chaîne simplifiée à l’aide de bootstring.
  • Unicité : l’attribution de la chaîne de caractères au codage bootstrip correspondant est unique ; il est possible d’attribuer exactement à chaque Punycode une équivalence ASCII et inversement.
  • Réversibilité : le codage par bootstring peut être inversé à tout moment sans perte d’information.
  • Efficacité : la chaîne encodée n’est, le cas échéant, que très peu plus longue que la chaîne initiale.
  • Simplicité : bootstring utilise des algorithmes de codage et de décodage simples.
  • Lisibilité : sont codés uniquement les caractères qui ne peuvent pas être représentés dans le jeu de caractères cible ; tous les autres caractères restent inchangés.

Punycode spécifie le bootstring selon les exigences des noms de domaine internationalisés. Cela devrait permettre de représenter les caractères Unicode par rapport aux caractères de base précédemment autorisés.

Exemple

Nous illustrons le codage avec l’exemple suivant :

IDN : Château-Lucé

L’IDN Château-Lucé contient un caractère « â » et un « é », qui ne sont pas inclus dans le jeu de caractères du nom de domaine précédemment autorisé et doivent donc être encodés en utilisant un code Punycode pour pouvoir assurer la compatibilité.

Étape 1 : normalisation

Dans la première étape, la procédure de codage prévoit une normalisation de la chaîne de caractères de sortie. Toutes les lettres majuscules sont remplacées par des lettres minuscules.

Étape 2 : élimination de tous les caractères non basiques

Dans la deuxième étape, tous les caractères qui ne sont pas de base sont remplacés. Ceux-ci sont ensuite ajoutés au nom de domaine sous forme codée et séparés par un trait d’union.

Si la méthode Punycode est utilisée pour encoder les adresses Internet, chaque chaîne de résultat est pourvue d’un préfixe ACE (abréviation pour ASCII Compatible Encoding) :

Préfixe ACE : xn–

Le préfixe ACE garantit que les noms de domaine contenant des tirets ne sont pas interprétés à tort comme des noms de domaine internationaux.

Pour Château-Lucé, il en résulte le codage suivant :

ACE : xn–chteau-luc-44a6g

L’algorithme qui se cache sous la méthode Punycode est remarquable. Il garantit que, malgré la conversion, aucune des étiquettes de domaine ne dépasse la longueur maximale de 63 caractères.

Dans le processus de codage, les caractères Unicode ne sont pas transférés un à un en caractères ASCII. Au lieu de cela, l’algorithme détermine une chaîne qui résulte de la distance entre les caractères éliminés et de la position des caractères dans la chaîne de sortie.

En référence à l’exemple ci-dessus, la chaîne 44a6g indique que chteau-luc doit être complété par les caractères Unicode « â » et « é » aux troisième et douzième places.

Vue d’ensemble des sections de la chaîne ACE
La chaîne ACE se compose du préfixe ACE et d’une chaîne en Punycode.

Cas particuliers

Des écarts par rapport à ce schéma se produisent si le nom de domaine ne contient pas ou alors uniquement des caractères de base.

Un nom de domaine qui ne contient que des caractères spéciaux n’affiche que la chaîne codée et le préfixe ACE après codage. Un domaine comme παράδειγμα (Grec pour exemple) correspond au codage suivant :

IDN : παράδειγμα

ACE : xn–hxajbheg2az3al

La méthode Punycode n’est pas utilisée si un nom de domaine ne contient que des caractères de base. De même, aucun préfixe ACE n’est pas ajouté. Le codage est dans ce cas superflu, puisque le nom de domaine est déjà compris par les protocoles Internet de base.

Si l’on considère le Fully Qualified Domain (FQDN) dans son ensemble, chaque étiquette (domaine de premier niveau, domaine de deuxième niveau, domaine de troisième niveau, etc.) est codée séparément. Un domaine tel que пример.бг (bulgare pour example.bg) pourrait être codé comme suit :

IDN : пример.бг

ACE : xn–e1afmkfd.xn–90ae

Le tableau suivant donne un aperçu des différentes variantes de la procédure Punycode.

IDN Punycode ACE
Caractères de base et non basiques Château-Lucé.fr chteau-luc-44a6g.fr xn--chteau-luc-44a6g.fr
Uniquement non basiques Παράδειγμα.gr hxajbheg2az3al.gr xn--hxajbheg2az3al.gr
Uniquement de base example.org example.org Pas d’utilisation
Note

L’algorithme de Punycode sous-jacent est décrit en détail dans la RFC 3492. Le document fournit également une mise en œuvre de la procédure de codage dans la base de données C.

Lors de l’encodage de noms de domaine internationalisés, les utilisateurs utilisent généralement des convertisseurs Punycode disponibles gratuitement.

Punycode pour les noms de domaine en emojis

Non seulement les noms de domaine internationalisés, mais aussi les noms de domaine en emojis peuvent être réalisés via Punycode. La condition préalable est que le domaine de premier niveau respectif permet l’utilisation d’émojis et que l’émoticône souhaitée ait été enregistrée dans le standard Unicode.

Conseil

Actuellement, les TLD suivants : ws, .tk, .to, .ml, .ga, .cf, .gq et .fm permettent l’enregistrement des noms de domaine en emojis.

Les noms de domaine en emojis sont techniquement traités comme du Punycode, mais en théorie ils devraient être présentés à l’utilisateur comme une combinaison de texte et d’émoticônes.

Domaine Emoji : https://i❤.ws/

ACE : https://xn--i-7iq.ws/

Pratiquement aucun navigateur standard ne l’implémente à l’heure actuelle. Si vous entrez un domaine emoji dans Firefox, Chrome, Safari, Edge ou Opera, la barre d’adresse affiche uniquement la chaîne ACE.

Convertisseurs Punycode gratuits

Des convertisseurs Punycode gratuits pour transférer les IDN dans une représentation compatible ACII peuvent être trouvés sur différents sites Web.

Pour l’espace de nommage avec un domaine de premier niveau .fr, nous recommandons l’outil Intername de la société BPtech.pl – uslugi informatyczne.

Le convertisseur Punycode Intername
Le convertisseur Punycode Intername est d’une utilisation simple et gratuite.

Le convertisseur Punycode de Mathias Bynens basé sur punycode.js convient bien pour convertir des IDN d’autres TLD.

Le convertisseur Punycode de Mathias Bynens basé sur punycode.js
Avec Punycode domain name converter, Mathias Bynens propose un outil open source pour la conversion de domaines internationalisés.

Votre propre domaine .fr !

Démarquez-vous avec un nom de domaine unique et une adresse email personnalisée !

Simple
Sécurisé
Assistance 24/7

Punycode comme risque de sécurité ?

Le Punycode devient un risque pour la sécurité dans le cadre des attaques d’hameçonnage (phishing) homographique. Ce sont des cyberattaques où les hackers utilisent l’apparence similaire de différents caractères pour attirer leurs victimes peu méfiantes vers de faux sites Web. Le Blogger Xudong Zheng a montré à quoi une telle attaque d’hameçonnage peut ressembler en utilisant le domaine punycode suivant : https://www.xn--80ak6aa92e.com/. Ceci conduit l’internaute vers un site Web avec l’IDN suivant : https://www.аррӏе.com/.

L’URL fournie n’est pas le site Web officiel de la firme californienne Apple Inc. mais un site Web de phishing créé à des fins de démonstration.

Au lieu du caractère ASCII a avec Unicode U+0061, on utilise le caractère cyrillique а (U+0430) - ces deux caractères peuvent difficilement être distingués à l’œil nu, mais sont interprétés comme différents caractères par les navigateurs Web. Ce qui est particulièrement défavorable pour les internautes est le fait que même les certificats n’offrent pas de sécurité. En effet, les criminels enregistrent des certificats SSL valides pour les campagnes de phishing modernes, qui sont censés donner à ces sites l’apparence d’une légitimité.

Les versions actuelles de Chrome et Opera empêchent ce type d’attaques de phishing en affichant la chaîne ACE au lieu du domaine internationalisé sur les IDN qui mélangent des caractères de différents jeux de caractères. Internet Explorer et Microsoft Edge empêchent complètement l’appel des domaines correspondants. Seul Firefox n’offre aucune protection contre le phishing Punycode.

Exemple d’attaque homographique
Exemple d’un domaine homographique : l’URL est visuellement identique à celle du site Web officiel d’Apple. En fait, le caractère Unicode U+0430 est une lettre cyrillique utilisée, qui ressemble étonnamment au caractère ASCII a.

C’est ainsi que les utilisateurs de Firefox peuvent se protéger : afin de réduire le risque de phishing des sites Web, les utilisateurs de Firefox n’ont actuellement que la possibilité d’empêcher la traduction du Punycode en IDN en général. Deux étapes seulement sont nécessaires pour cette solution temporaire :

  1. Appeler l’éditeur de configuration : entrez about:config dans la barre d’adresse du navigateur Web pour ouvrir l’éditeur de configuration Firefox.
  2. Forcer Punycode : localisez le paramètre network.IDN_show_punycode et changez la valeur false en true.

Après configuration, Firefox affichera les domaines internationalisés dans la barre d’adresse sous forme de chaînes ACE.