# 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)](https://www.ionos.com/da-dk/digitalguide/domaener/domaeneadministration/hvad-er-et-internationaliseret-domaenenavn-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**.

Note 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](https://tools.ietf.org/html/rfc3492 "RFC 3492 on tools.ietf.org") 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.

[![Billede: Overview of sections of the ACE string](https://www.ionos.com/da-dk/digitalguide/fileadmin/_processed_/f/9/csm_using-punycode-with-domain_095d9fdcf3.webp "Overview of sections of the ACE string")](https://www.ionos.com/da-dk/digitalguide/fileadmin/DigitalGuide/Schaubilder/using-punycode-with-domain.jpg) The ACE string consists of the ACE prefix and a puny-coded string. ### 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æne*som пример.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.

<table>
  <thead>
    <tr>
      <th></th>
      <th><strong>IDN</strong></th>
      <th><strong>Punycode</strong></th>
      <th><strong>ACE</strong></th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td><strong>Basistegn og ikke-basistegn</strong></td>
      <td>`müller-büromöbel.de`</td>
      <td>`mller-brombel-rmb4fg.de`</td>
      <td>`xn--mller-brombel-rmb4fg.de`</td>
    </tr>
    <tr>
      <td><strong>Kun ikke-basistegn</strong></td>
      <td>`Παράδειγμα.gr`</td>
      <td>`hxajbheg2az3al.gr`</td>
      <td>`xn--hxajbheg2az3al.gr`</td>
    </tr>
    <tr>
      <td><strong>Kun basistegn</strong></td>
      <td>`example.org`</td>
      <td>`example.org`</td>
      <td>Ingen anvendelse</td>
    </tr>
  </tbody>
</table>

Note 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.

Tip 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](https://www.punycoder.com/ "Convert Punycode using Punycoder").

[![Billede: Punycoder, the Punycode converter](https://www.ionos.com/da-dk/digitalguide/fileadmin/_processed_/6/1/csm_punycode-converter-example_5f10d63381.webp "Punycoder, the Punycode converter")](https://www.ionos.com/da-dk/digitalguide/fileadmin/DigitalGuide/Screenshots_2023/punycode-converter-example.png) Punycoder converts Punycode to Text/Unicode and vice-versa. Til IDN’er under andre topdomæner er [**Punycode-konverteren af Mathias Bynens**](https://mothereff.in/punycode "Punycode converter by Mathias Bynens at mothereff.in/punycode"), der er baseret på [punycode.js](https://github.com/mathiasbynens/punycode.js "punycode.js on github"), et godt valg.

[![Billede: The Punycode converter made by Mathias Bynens based on punycode.js](https://www.ionos.com/da-dk/digitalguide/fileadmin/_processed_/c/f/csm_punycode-converter-based-on-js-with-example_88bdd792db.webp "The Punycode converter made by Mathias Bynens based on punycode.js")](https://www.ionos.com/da-dk/digitalguide/fileadmin/DigitalGuide/Screenshots_2023/punycode-converter-based-on-js-with-example.png) With his \*Punycode domain name converter,\*Mathias Bynens offers an open-source tool for converting internationalised domains. ## 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](https://www.xudongz.com/blog/2017/idn-phishing/ "Xudong Zheng’s blog") 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.

[![Billede: Example of a homographic attack](https://www.ionos.com/da-dk/digitalguide/fileadmin/_processed_/d/f/csm_example-homographic-attack_2d01e6cb3b.webp "Example of a homographic attack")](https://www.ionos.com/da-dk/digitalguide/fileadmin/DigitalGuide/Screenshots_2023/example-homographic-attack.png) Example of a homographic domain: The URL looks the same as Apple’s official website, however, the Unicode character U+0430 is actually a Cyrillic letter that is astonishingly similar to the ASCII character a. **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:

1. **Åbn konfigurationsredigeringsværktøjet**: Skriv *about:config* i adresselinjen i din webbrowser for at åbne Firefox’ konfigurationsredigeringsværktøj.
2. **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.


This is a markdown version of: [https://www.ionos.com/da-dk/digitalguide/domaener/domaeneadministration/punycode/](https://www.ionos.com/da-dk/digitalguide/domaener/domaeneadministration/punycode/) for AI/LLM consumption.