Punycode est une méthode d’encodage stan­dar­di­sée qui permet de mapper les ca­rac­tères Unicode à l’aide d’un jeu de ca­rac­tères ASCII limité. Les noms de domaine in­ter­na­tio­na­li­sés (IDN pour In­ter­na­tio­nal Domain Name) peuvent ainsi aussi contenir des ca­rac­tères Non-ASCII-, comme les accents, les trémas, etc.

Dé­ve­lop­pe­ment de la méthode de codage

Punycode a été normalisé en 2003 par l’Internet En­gi­nee­ring Task Force (IETF) en tant que syntaxe pour le codage des noms de domaine in­ter­na­tio­na­li­sés dans les ap­pli­ca­tions (IDNA). L’IETF utilise le terme IDN pour décrire les noms de domaine qui, en plus des lettres de l’alphabet latin, con­tien­nent des ca­rac­tères spéciaux tels que des trémas, des signes dia­cri­tiques ou des ca­rac­tères d’autres alphabets et ne peuvent donc pas être traités par des pro­to­coles 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’in­tro­duc­tion des IDN, il ne peut être traité – par exemple dans le cadre de la ré­so­lu­tion de noms – qu’en codant les ca­rac­tères qui ne sont pas des ca­rac­tè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 pro­to­coles sous-jacents à Internet sont basés sur la langue écrite anglaise et ne prennent donc en charge que le jeu de ca­rac­tères limité ASCII.

Afin d’assurer la com­pa­ti­bi­lité entre les IDN et les normes Internet plus anciennes, l’IETF a prescrit le codage des noms de domaine in­ter­na­tio­na­li­sés avec les ca­rac­tères pré­cé­dem­ment autorisés et a normalisé une procédure cor­res­pon­dante avec Punycode.

Note

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

Comment fonc­tionne 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 ap­pli­ca­tion possible d’un al­go­rithme de codage général appelé « boots­tring » (chaîne de démarrage). L’al­go­rithme de boots­tring permet aux chaînes de ca­rac­tères ar­bi­traires 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 ca­rac­tères de base, et se composent de lettres mi­nus­cules, de chiffres et du tiret (-). Le dé­ve­lop­pe­ment de la méthode de codage repose sur six principes :

  • Com­plé­tude : chaque chaîne de ca­rac­tères peut être liée à une chaîne sim­pli­fiée à l’aide de boots­tring.
  • Unicité : l’at­tri­bu­tion de la chaîne de ca­rac­tères au codage bootstrip cor­res­pon­dant est unique ; il est possible d’attribuer exac­te­ment à chaque Punycode une équi­va­lence ASCII et in­ver­se­ment.
  • Ré­ver­si­bi­lité : le codage par boots­tring peut être inversé à tout moment sans perte d’in­for­ma­tion.
  • Ef­fi­ca­cité : la chaîne encodée n’est, le cas échéant, que très peu plus longue que la chaîne initiale.
  • Sim­pli­cité : boots­tring utilise des al­go­rithmes de codage et de décodage simples.
  • Li­si­bi­lité : sont codés uni­que­ment les ca­rac­tères qui ne peuvent pas être re­pré­sen­tés dans le jeu de ca­rac­tères cible ; tous les autres ca­rac­tères restent inchangés.

Punycode spécifie le boots­tring selon les exigences des noms de domaine in­ter­na­tio­na­li­sés. Cela devrait permettre de re­pré­sen­ter les ca­rac­tères Unicode par rapport aux ca­rac­tères de base pré­cé­dem­ment autorisés.

Exemple

Nous il­lus­trons 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 ca­rac­tères du nom de domaine pré­cé­dem­ment autorisé et doivent donc être encodés en utilisant un code Punycode pour pouvoir assurer la com­pa­ti­bi­lité.

Étape 1 : nor­ma­li­sa­tion

Dans la première étape, la procédure de codage prévoit une nor­ma­li­sa­tion de la chaîne de ca­rac­tères de sortie. Toutes les lettres ma­jus­cules sont rem­pla­cées par des lettres mi­nus­cules.

Étape 2 : éli­mi­na­tion de tous les ca­rac­tères non basiques

Dans la deuxième étape, tous les ca­rac­tè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é­via­tion pour ASCII Com­pa­tible Encoding) :

Préfixe ACE : xn–

Le préfixe ACE garantit que les noms de domaine contenant des tirets ne sont pas in­ter­pré­tés à tort comme des noms de domaine in­ter­na­tio­naux.

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

ACE : xn–chteau-luc-44a6g

L’al­go­rithme qui se cache sous la méthode Punycode est re­mar­quable. Il garantit que, malgré la con­ver­sion, aucune des éti­quettes de domaine ne dépasse la longueur maximale de 63 ca­rac­tères.

Dans le processus de codage, les ca­rac­tères Unicode ne sont pas trans­fé­rés un à un en ca­rac­tères ASCII. Au lieu de cela, l’al­go­rithme détermine une chaîne qui résulte de la distance entre les ca­rac­tères éliminés et de la position des ca­rac­tè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 ca­rac­tères Unicode « â » et « é » aux troisième et douzième places.

Image: 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 par­ti­cu­liers

Des écarts par rapport à ce schéma se pro­dui­sent si le nom de domaine ne contient pas ou alors uni­que­ment des ca­rac­tères de base.

Un nom de domaine qui ne contient que des ca­rac­tè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) cor­res­pond 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 ca­rac­tè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 pro­to­coles 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é­pa­ré­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 dif­fé­rentes variantes de la procédure Punycode.

IDN Punycode ACE
Ca­rac­tères de base et non basiques Château-Lucé.fr chteau-luc-44a6g.fr xn--chteau-luc-44a6g.fr
Uni­que­ment non basiques Παράδειγμα.gr hxajbheg2az3al.gr xn--hxajbheg2az3al.gr
Uni­que­ment de base example.org example.org Pas d’uti­li­sa­tion
Note

L’al­go­rithme 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 in­ter­na­tio­na­li­sés, les uti­li­sa­teurs utilisent gé­né­ra­le­ment des con­ver­tis­seurs Punycode dis­po­nibles gra­tui­te­ment.

Punycode pour les noms de domaine en emojis

Non seulement les noms de domaine in­ter­na­tio­na­li­sé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’uti­li­sa­tion d’émojis et que l’émoticône souhaitée ait été en­re­gis­trée dans le standard Unicode.

Conseil

Ac­tuel­le­ment, les TLD suivants : ws, .tk, .to, .ml, .ga, .cf, .gq et .fm per­met­tent l’en­re­gis­tre­ment des noms de domaine en emojis.

Les noms de domaine en emojis sont tech­ni­que­ment traités comme du Punycode, mais en théorie ils devraient être présentés à l’uti­li­sa­teur comme une com­bi­nai­son de texte et d’émo­ti­cônes.

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

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

Pra­ti­que­ment aucun na­vi­ga­teur standard ne l’im­plé­mente à l’heure actuelle. Si vous entrez un domaine emoji dans Firefox, Chrome, Safari, Edge ou Opera, la barre d’adresse affiche uni­que­ment la chaîne ACE.

Con­ver­tis­seurs Punycode gratuits

Des con­ver­tis­seurs Punycode gratuits pour trans­fé­rer les IDN dans une re­pré­sen­ta­tion com­pa­tible ACII peuvent être trouvés sur dif­fé­rents sites Web.

Pour l’espace de nommage avec un domaine de premier niveau .fr, nous re­com­man­dons l’outil Intername de la société BPtech.pl – uslugi in­for­ma­tyczne.

Image: Le convertisseur Punycode Intername
Le con­ver­tis­seur Punycode Intername est d’une uti­li­sa­tion simple et gratuite.

Le con­ver­tis­seur Punycode de Mathias Bynens basé sur punycode.js convient bien pour convertir des IDN d’autres TLD.

Image: Le convertisseur Punycode de Mathias Bynens basé sur punycode.js
Avec Punycode domain name converter, Mathias Bynens propose un outil open source pour la con­ver­sion de domaines in­ter­na­tio­na­li­sés.
Nom de domaine
Votre domaine en un clic
  • 1 cer­ti­fi­cat SSL Wildcard par contrat
  • Fonction incluse Domain Connect pour une con­fi­gu­ra­tion DNS sim­pli­fiée

Punycode comme risque de sécurité ?

Le Punycode devient un risque pour la sécurité dans le cadre des attaques d’ha­me­çon­nage (phishing) ho­mo­gra­phique. Ce sont des cy­be­rat­taques où les hackers utilisent l’apparence similaire de dif­fé­rents ca­rac­tères pour attirer leurs victimes peu méfiantes vers de faux sites Web. Le Blogger Xudong Zheng a montré à quoi une telle attaque d’ha­me­çon­nage peut res­sem­bler en utilisant le domaine punycode suivant : https://www.xn--80ak6aa92e.com/. Ceci conduit l’in­ter­naute vers un site Web avec l’IDN suivant : https://www.аррӏе.com/.

L’URL fournie n’est pas le site Web officiel de la firme ca­li­for­nienne Apple Inc. mais un site Web de phishing créé à des fins de dé­mons­tra­tion.

Au lieu du caractère ASCII a avec Unicode U+0061, on utilise le caractère cy­ril­lique а (U+0430) - ces deux ca­rac­tères peuvent dif­fi­ci­le­ment être dis­tin­gués à l’œil nu, mais sont in­ter­pré­tés comme dif­fé­rents ca­rac­tères par les na­vi­ga­teurs Web. Ce qui est par­ti­cu­liè­re­ment dé­fa­vo­rable pour les in­ter­nautes est le fait que même les cer­ti­fi­cats n’offrent pas de sécurité. En effet, les criminels en­re­gistrent des cer­ti­fi­cats SSL valides pour les campagnes de phishing modernes, qui sont censés donner à ces sites l’apparence d’une lé­gi­ti­mité.

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 in­ter­na­tio­na­lisé sur les IDN qui mélangent des ca­rac­tères de dif­fé­rents jeux de ca­rac­tères. Internet Explorer et Microsoft Edge empêchent com­plè­te­ment l’appel des domaines cor­res­pon­dants. Seul Firefox n’offre aucune pro­tec­tion contre le phishing Punycode.

Image: Exemple d’attaque homographique
Exemple d’un domaine ho­mo­gra­phique : l’URL est vi­suel­le­ment identique à celle du site Web officiel d’Apple. En fait, le caractère Unicode U+0430 est une lettre cy­ril­lique utilisée, qui ressemble éton­nam­ment au caractère ASCII a.

C’est ainsi que les uti­li­sa­teurs de Firefox peuvent se protéger : afin de réduire le risque de phishing des sites Web, les uti­li­sa­teurs de Firefox n’ont ac­tuel­le­ment que la pos­si­bi­lité d’empêcher la tra­duc­tion du Punycode en IDN en général. Deux étapes seulement sont né­ces­saires pour cette solution tem­po­raire :

  1. Appeler l’éditeur de con­fi­gu­ra­tion : entrez about:config dans la barre d’adresse du na­vi­ga­teur Web pour ouvrir l’éditeur de con­fi­gu­ra­tion Firefox.
  2. Forcer Punycode : localisez le paramètre network.IDN_show_punycode et changez la valeur false en true.

Après con­fi­gu­ra­tion, Firefox affichera les domaines in­ter­na­tio­na­li­sés dans la barre d’adresse sous forme de chaînes ACE.

Domain-Checker
Aller au menu principal