Hur man konverterar internationaliserade domännamn med Punycode
Punycode är en standardiserad kodningsmetod som gör det möjligt att mappa Unicode-tecken med hjälp av en begränsad ASCII-teckensats, vilket innebär att internationaliserade domännamn (IDN) också kan innehålla icke-ASCII-tecken, till exempel omljud.
Hur utvecklades kodningsmetoden?
2003 standardiserades Punycode av Internet Engineering Task Force (IETF) som syntax för kodning av internationaliserade domännamn i applikationer (IDNA). IETF definierar ett domännamn som ett IDN om det innehåller specialtecken såsom diakritiska tecken, bokstäver eller tecken som inte finns i det latinska alfabetet (t.ex. omljud i tyska). Sådana tecken kan inte bearbetas av grundläggande protokoll såsom Domain Name System (DNS). I det här exemplet använder vi ett domännamn på tyska. Även om müller-büromöbel (Müllers kontorsmöbler) är tillåtet under toppdomänen .de efter införandet av IDN, kan det endast bearbetas genom att koda de icke-bastecknen, till exempel i samband med namnupplösning. Många internetprotokoll är baserade på engelska och stöder därför endast den begränsade ASCII-teckensatsen.
För att säkerställa kompatibilitet mellan IDN och äldre internetstandarder har IETF föreskrivit en metod för kodning av internationaliserade domännamn med hjälp av de tecken som redan var tillåtna. Denna standardiserade kodningsprocedur kallas Punycode.
För e-postadresser används Punycode endast för internationaliserade e-postdomäner. Om den lokala delen (före @-tecknet) innehåller icke-ASCII-tecken kodas den med UTF-8.
Hur fungerar Punycode-kodning?
En översikt över Punycode-processen
Punycode definieras av IETF i RFC 3492 som en möjlig tillämpning av den allmänna kodningsalgoritmen Bootstring. Bootstring-algoritmen möjliggör mappning av teckensträngar som består av godtyckliga teckenuppsättningar med ett begränsat urval av element. Utvecklingen av kodningsproceduren baseras på sex principer. I Punycode-kodningen kallas dessa element bastecken, som består av små bokstäver, siffror och bindestreck (-). Utvecklingen av kodningsmetoden baseras på sex principer.
- Fullständighet: Varje utdatasträng kan mappas till en förenklad sträng med hjälp av en bootstring.
- Unikhet: Tilldelningen av utdatasträngen till respektive bootstring-kodning är unik. Varje Punycode kan tilldelas exakt en ASCII-motsvarighet och vice versa.
- Reversibilitet: En bootstring-kodning kan när som helst reverseras utan att någon information går förlorad.
- Effektivitet: Den kodade strängen är – om ens alls – bara minimalt längre än utdatasträngen.
- Enkelhet: Bootstring använder enkla kodnings- och avkodningsalgoritmer.
- Läsbarhet: Endast tecken som inte kan representeras i målteckensatsen kodas. Alla andra tecken förblir oförändrade.
Punycode specificerar Bootstring enligt kraven för internationaliserade domännamn. Detta bör göra det möjligt att mappa Unicode-tecken via de tidigare tillåtna bastecknen.
Exempel på punycode
Följande exempel visar hur kodningen fungerar:
IDN: müller-büromöbel
IDN müller-büromöbel innehåller tecknen ü och ö, som inte ingår i den tidigare tillåtna teckenuppsättningen för domännamn. Därför måste de kodas med Punycode för att säkerställa kompatibilitet.
Steg 1: Normalisering
I det första steget möjliggör kodningsproceduren normalisering av den utgående teckensträngen. Alla versaler ersätts med motsvarande gemener.
Steg 2: Utrotning av alla icke-grundläggande tecken
I det andra steget raderas alla tecken som inte är grundtecken. Dessa läggs sedan till domännamnet i kodad form och separeras med ett bindestreck.
Om Punycode-syntaxen används för att koda internetadresser, förses varje resultatsträng med ett ACE-prefix (förkortning för ASCII-kompatibel kodning):
ACE-prefix: xn–
Prefixet ACE säkerställer att domännamn som innehåller bindestreck inte misstolkas som internationella domännamn.
Detta resulterar i följande kodning för IDN müller-büromöbel:
ACE: xn–mller-brombel-rmb4fg
Algoritmen som ligger till grund för Punycode-proceduren är anmärkningsvärd. Den säkerställer att domännamnen, trots konverteringen, inte överskrider den maximala längden på 63 tecken.
Under kodningsprocessen konverteras Unicode-tecken inte en-till-en till ASCII-tecken. Istället bestämmer algoritmen en sträng baserat på avståndet mellan de raderade tecknen och tecknens position i utdatasträngen.
I relation till exemplet ovan indikerar strängen rmb4fg att mller-brombel måste kompletteras med Unicode-tecknen ü och ö i andra och sjunde position.

Undantag från regeln
Avvikelser uppstår om domännamnet inte innehåller några icke-bastecken eller om det endast innehåller icke-bastecken.
Ett domännamn som endast innehåller icke-bastecken visar endast den kodade strängen och ACE-prefixet efter kodningen. Ett domännamn som παράδειγμα (grekiska för ”exempel”) motsvarar följande kodning:
IDN: exempel
ACE: xn–hxajbheg2az3al
Om ett domännamn endast innehåller bastecken används inte Punycode. Följaktligen läggs inget ACE-prefix till. Kodning är inte nödvändig i detta fall eftersom grundläggande internetprotokoll redan kan förstå domännamnet.
Om man betraktar det fullständiga domännamnet (FQDN) som en helhet, kodas varje etikett (toppdomän, andra nivåns domän, tredje nivåns domän osv.) separat. En domänsom пример.бг (bulgariska för ”example.bg”) kan kodas på följande sätt
IDN: пример.бг
ACE: xn–e1afmkfd.xn–90ae
Följande tabell ger en översikt över de olika varianterna av Punycode-syntaxen.
| IDN | Punycode | ACE | |
|---|---|---|---|
| Bas- och icke-bastecken | müller-büromöbel.de
|
mller-brombel-rmb4fg.de
|
xn--mller-brombel-rmb4fg.de
|
| Endast icke-bastecken | Παράδειγμα.gr
|
hxajbheg2az3al.gr
|
xn--hxajbheg2az3al.gr
|
| Endast bastecken | example.org
|
example.org
|
Ingen användning |
Punycode-algoritmen beskrivs i detalj i RFC 3492. Dessutom innehåller dokumentet en implementering av kodningsproceduren i programmeringsspråket C.
Användare använder vanligtvis fritt tillgängliga Punycode-konverterare för att koda internationaliserade domännamn.
Puny-kodning med emoji-domäner
Inte bara internationaliserade domännamn utan även emojidomäner kan realiseras via Punycode. För att detta ska fungera måste dock toppdomänen tillåta användning av emojis, och den önskade emoticonen måste finnas i Unicode-standarden.
För närvarande tillåter följande TLD:er registrering av emojidomäner: .ws, .tk, .to, .ml, .ga, .cf, .gq och .fm.
Emoji-domäner behandlas tekniskt sett som Punycode, men i teorin bör de presenteras för användaren som en kombination av text och emoticons.
Emoji-domän: https://i❤.ws/
ACE: https://xn--i-7iq.ws/
Praktiskt taget ingen standardwebbläsare implementerar detta för närvarande. Om du anger en emojidomän i Firefox, Chrome, Safari, Edge eller Opera visar adressfältet endast ACE-strängen.
Finns det gratis Punycode-konverterare?
Gratis Punycode-generatorer som omvandlar IDN till ASCII-kompatibel form finns på olika webbplatser. Ett exempel är Punycoder.

För IDN:er från andra toppdomäner är Punycode-konverteraren från Mathias Bynens, baserad på punycode.js, ett bra val.

Utgör Punycode en säkerhetsrisk?
Punycode blir en säkerhetsrisk vid homografisk nätfiske – cyberattacker där brottslingar utnyttjar liknande utseende hos olika tecken för att lura intet ont anande offer till falska webbplatser. Bloggaren Xudong Zheng visar hur en nätfiskeattack ser ut med hjälp av följande Punycode-domän https://www.xn--80ak6aa92e.com/ som exempel. Detta leder internetanvändare till en webbplats med följande IDN: https://www.аррӏе.com/
Den angivna webbadressen är inte den officiella webbplatsen för det kaliforniska teknikföretaget Apple Inc., utan en phishing-webbplats som skapats i demonstrationssyfte.
Istället för ASCII-tecknet a med Unicode U+0061 används det kyrilliska а (U+0430) – dessa två tecken är nästan omöjliga att skilja åt med blotta ögat, men tolkas som olika tecken av webbläsare. Inte ens certifikat kan garantera säkerheten för internetanvändare. I moderna phishing-kampanjer skapar brottslingar giltiga SSL-certifikat i syfte att få sina webbplatser att se autentiska ut.
Aktuella versioner av Chrome och Opera förhindrar phishing-attacker som dessa genom att visa ACE-strängen istället för den internationaliserade domänen på IDN:er som blandar tecken från olika teckenuppsättningar. Internet Explorer och Microsoft Edge förhindrar åtkomst till domäner som dessa. Firefox erbjuder dock inget skydd mot Punycode-phishing.

Så här kan Firefox-användare skydda sig. För att minska risken med phishingwebbplatser har Firefox-användare för närvarande endast möjlighet att förhindra att Punycode översätts till IDN i allmänhet. Det krävs endast två steg för denna tillfälliga lösning:
- Öppna konfigurationsredigeraren: Skriv about:config i adressfältet i din webbläsare för att öppna Firefox konfigurationsredigerare.
- Tvinga Punycode: Leta reda på inställningen network.IDN_show_punycode och ändra dess värde från false till true.
Efter konfigurationen kommer Firefox att visa internationaliserade domäner i adressfältet som ACE-strängar.