Sådan konverteres internationaliserede domænenavne med Punycode
Punycode er en standardiseret kodningsmetode, der gør det muligt at omdanne Unicode-tegn ved hjælp af et begrænset ASCII-tegnsæt, hvilket betyder, at internationaliserede domænenavne (IDN) også kan indeholde ikke-ASCII-tegn, såsom umlauter.
Hvordan blev kodningsmetoden udviklet?
I 2003 blev Punycode standardiseret af Internet Engineering Task Force (IETF) som syntaks til kodning af internationaliserede domænenavne i applikationer (IDNA). IETF definerer et domænenavn som et IDN, hvis det indeholder specialtegn såsom diakritiske tegn, bogstaver eller tegn, der ikke findes i det latinske alfabet (f.eks. umlauter på tysk). Sådanne tegn kan ikke behandles af grundlæggende protokoller såsom Domain Name System (DNS). I dette eksempel bruger vi et domænenavn på tysk. Selvom müller-büromöbel (Müllers kontormøbler) efter indførelsen af IDN’er er tilladt under topdomænet .de, kan det kun behandles ved at kode de ikke-basale tegn, f.eks. i forbindelse med navneopløsning. Talrige internetprotokoller er baseret på engelsk og understøtter derfor kun det begrænsede ASCII-tegnsæt.
For at sikre kompatibilitet mellem IDN’er og ældre internetstandarder har IETF fastlagt en metode til kodning af internationaliserede domænenavne ved hjælp af de tegn, der allerede var tilladt. Denne standardiserede kodningsprocedure kaldes Punycode.
For e-mailadresser anvendes Punycode kun til internationaliserede e-maildomæner. Hvis den lokale del (før @-tegnet) indeholder ikke-ASCII-tegn, kodes den ved hjælp af UTF-8.
Hvordan fungerer Punycode-kodning?
En oversigt over Punycode-processen
Punycode er defineret af IETF i RFC 3492 som en mulig anvendelse af den generelle kodningsalgoritme kendt som Bootstring. Bootstring-algoritmen gør det muligt at kortlægge tegnstrenge, der består af vilkårlige tegnsæt, ved hjælp af et begrænset udvalg af elementer. Udviklingen af kodningsmetoden bygger på seks principper. I Punycode-kodning kaldes disse elementer basistegn, som består af små bogstaver, tal og bindestregen (-). Udviklingen af kodningsmetoden er baseret på seks principper.
- Fuldstændighed: Hver udgangsstreng kan knyttes til en forenklet streng ved hjælp af en boot-streng.
- Unikhed: Tildelingen af udgangsstrengen til den respektive Bootstring-kodning er unik. Hver Punycode kan tildeles nøjagtigt én ASCII-modstykke og omvendt.
- Reversibilitet: En Bootstring-kodning kan til enhver tid vendes uden tab af information.
- Effektivitet: Den kodede streng er – hvis overhovedet – kun minimalt længere end udgangsstrengen.
- Enkelhed: Bootstring bruger enkle kodnings- og afkodningsalgoritmer.
- Læsbarhed: Kun tegn, der ikke kan repræsenteres i måltegnssættet, kodes. Alle andre tegn forbliver uændrede.
Punycode definerer Bootstring i overensstemmelse med kravene til internationaliserede domænenavne. Dette bør gøre det muligt at omdanne Unicode-tegn ved hjælp af de tidligere tilladte basistegn.
Eksempel på Punycode
Følgende eksempel viser, hvordan kodningen fungerer:
IDN: müller-kontormøbler
IDN-domænet „müller-büromöbel“ indeholder tegnene „ü“ og „ö“, som ikke indgår i det tidligere tilladte tegnsæt for domænenavne. Derfor skal de kodes via Punycode for at sikre kompatibilitet.
Trin 1: Normalisering
I det første trin muliggør kodningsproceduren en normalisering af den udgående tegnstreng. Alle store bogstaver erstattes med de tilsvarende små bogstaver.
Trin 2: Fjernelse af alle ikke-basale tegn
I det næste trin fjernes alle tegn, der ikke er grundtegn. Disse tilføjes derefter til domænenavnet i kodet form og adskilles med en bindestreg.
Hvis Punycode-syntaksen bruges til at kode internetadresser, forsynes hver resultatstreng med et ACE-præfiks (forkortelse for ASCII-kompatibel kodning):
ACE-præfiks: xn–
Præfikset ACE sikrer, at domænenavne, der indeholder bindestreger, ikke fejlagtigt tolkes som internationale domænenavne.
Dette resulterer i følgende kodning for IDN’et müller-büromöbel:
ACE: xn–mller-brombel-rmb4fg
Den algoritme, der ligger til grund for Punycode-proceduren, er bemærkelsesværdig. Den sikrer, at domænenavne trods konverteringen ikke overskrider den maksimale længde på 63 tegn.
Under kodningsprocessen konverteres Unicode-tegn ikke én-til-én til ASCII-tegn. I stedet fastlægger algoritmen en streng ud fra afstanden mellem de slettede tegn og tegnets placering i den udgående streng.
I forbindelse med eksemplet ovenfor angiver strengen rmb4fg, at mller-brombel skal suppleres med Unicode-tegnene ü og ö på henholdsvis anden og syvende plads.

Undtagelser fra reglen
Der opstår afvigelser, hvis domænenavnet ikke indeholder nogen tegn, der ikke er basistegn, eller hvis det udelukkende indeholder tegn, der ikke er basistegn.
Et domænenavn, der udelukkende består af ikke-basistegn, viser efter kodning kun den kodede streng og ACE-præfikset. Et domænenavn som f.eks. παράδειγμα (græsk for »eksempel«) svarer til følgende kodning:
IDN: eksempel
ACE: xn–hxajbheg2az3al
Hvis et domænenavn udelukkende består af standardtegn, anvendes Punycode ikke. Der tilføjes derfor ikke noget ACE-præfiks. Kodning er i dette tilfælde ikke nødvendig, da de grundlæggende internetprotokoller allerede kan fortolke domænenavnet.
Hvis man betragter det fuldt kvalificerede domænenavn (FQDN) som en helhed, kodes hver enkelt del (topdomæne, andenniveau-domæne, tredjeniveau-domæne osv.) separat. Et domænesom пример.bg (bulgarsk for »example.bg«) kunne kodes som følger
IDN: eksempel.bg
ACE: xn–e1afmkfd.xn–90ae
Nedenstående tabel giver et overblik over de forskellige varianter af Punycode-syntaksen.
| IDN | Punycode | ACE | |
|---|---|---|---|
| Basistegn og ikke-basistegn | müller-büromöbel.de
|
mller-brombel-rmb4fg.de
|
xn--mller-brombel-rmb4fg.de
|
| Kun ikke-basistegn | Παράδειγμα.gr
|
hxajbheg2az3al.gr
|
xn--hxajbheg2az3al.gr
|
| Kun basistegn | example.org
|
example.org
|
Ingen anvendelse |
Punycode-algoritmen er beskrevet i detaljer i RFC 3492. Desuden indeholder dokumentet en implementering af kodningsproceduren i programmeringssproget C.
Brugere benytter sig som regel af gratis Punycode-konvertere til at kode internationaliserede domænenavne.
Enkel kodning med emoji-domæner
Ikke kun internationaliserede domænenavne, men også emoji-domæner kan realiseres via Punycode. For at dette skal fungere, skal topdomænet dog tillade brug af emojier, og det ønskede emoji skal være defineret i Unicode-standarden.
I øjeblikket er det muligt at registrere emoji-domæner under følgende topdomæner: .ws, .tk, .to, .ml, .ga, .cf, .gq og .fm.
Emoji-domæner behandles teknisk set som Punycode, men bør i teorien vises for brugeren som en kombination af tekst og emotikoner.
Emoji-domæne: https://i❤.ws/
ACE: https://xn--i-7iq.ws/
Stort set ingen standardbrowsere understøtter dette på nuværende tidspunkt. Hvis du indtaster et emoji-domæne i Firefox, Chrome, Safari, Edge eller Opera, viser adresselinjen kun ACE-strengen.
Findes der gratis Punycode-konvertere?
Der findes gratis Punycode-generatorer, der konverterer IDN-adresser til et ASCII-kompatibelt format, på forskellige hjemmesider. Et eksempel er Punycoder.

Til IDN’er under andre topdomæner er Punycode-konverteren af Mathias Bynens, der er baseret på punycode.js, et godt valg.

Udgør Punycode en sikkerhedsrisiko?
Punycode udgør en sikkerhedsrisiko i forbindelse med homografisk phishing – cyberangreb, hvor kriminelle udnytter, at forskellige tegn ligner hinanden, for at lokke intetanende ofre til falske hjemmesider. Bloggeren Xudong Zheng viser, hvordan et phishing-angreb ser ud, ved at tage følgende Punycode-domæne https://www.xn--80ak6aa92e.com/ som eksempel. Dette fører internetbrugere til en hjemmeside med følgende IDN: https://www.аррӏе.com/
Den angivne URL er ikke den officielle hjemmeside for det californiske teknologiselskab Apple Inc., men en phishing-hjemmeside, der er oprettet til demonstrationsformål.
I stedet for ASCII-tegnet »a« med Unicode-koden U+0061 anvendes det kyrilliske tegn »а« (U+0430) – disse to tegn kan næsten ikke skelnes med det blotte øje, men tolkes som forskellige tegn af webbrowsere. Selv certifikater kan ikke garantere sikkerhed for internetbrugerne. I forbindelse med moderne phishing-kampagner opretter kriminelle gyldige SSL-certifikater med det formål at få deres hjemmesider til at fremstå som autentiske.
De nyeste versioner af Chrome og Opera forhindrer phishing-angreb som disse ved at vise ACE-strengen i stedet for det internationaliserede domænenavn på IDN’er, der indeholder tegn fra forskellige tegnsæt. Internet Explorer og Microsoft Edge forhindrer adgang til domæner som disse. Firefox tilbyder derimod ingen beskyttelse mod Punycode-phishing.

Sådan kan Firefox-brugere beskytte sig selv. For at mindske risikoen ved phishing-websteder har Firefox-brugere i øjeblikket kun mulighed for generelt at forhindre, at Punycode oversættes til IDN’er. Denne midlertidige løsning kræver kun to trin:
- Åbn konfigurationsredigeringsværktøjet: Skriv about:config i adresselinjen i din webbrowser for at åbne Firefox’ konfigurationsredigeringsværktøj.
- Tving Punycode: Find indstillingen network.IDN_show_punycode og ændr dens værdi fra false til true.
Efter konfigurationen viser Firefox internationaliserede domæner i adresselinjen som ACE-strenge.