Kako pretvoriti internacionalizirana domenska imena s Punycode
Punycode je standardizirana metoda kodiranja, ki omogoča pretvorbo znakov Unicode v omejen nabor znakov ASCII, kar pomeni, da lahko mednarodna domenska imena (IDN) vsebujejo tudi znake, ki niso del naborov ASCII, na primer preglase.
Kako je bila razvita ta metoda kodiranja?
Leta 2003 je Internet Engineering Task Force (IETF) standardiziral Punycode kot sintakso za kodiranje internacionaliziranih domenskih imen v aplikacijah (IDNA). IETF opredeljuje domensko ime kot IDN, če vsebuje posebne znake, kot so diakritični znaki, črke ali znaki, ki jih v latinici ni (npr. preglasi v nemščini). Takšnih znakov osnovni protokoli, kot je sistem domenskih imen (DNS), ne morejo obdelati. V tem primeru bomo uporabili domensko ime v nemščini. Čeprav je po uvedbi IDN-jev ime müller-büromöbel (Müllerjevo pisarniško pohištvo) dovoljeno v vrhnji domeni .de, ga je mogoče obdelati le s kodiranjem neosnovnih znakov, na primer v okviru razreševanja imen. Številni internetni protokoli temeljijo na angleščini in zato podpirajo le omejen nabor znakov ASCII.
Da bi zagotovili združljivost med IDN-ji in starejšimi internetnimi standardi, je IETF določila metodo za kodiranje internacionaliziranih domenskih imen z uporabo znakov, ki so bili že dovoljeni. Ta standardizirani postopek kodiranja je znan pod imenom Punycode.
Pri e-poštnih naslovih se Punycode uporablja le za mednarodne e-poštne domene. Če lokalni del (pred znakom @) vsebuje znake, ki niso v kodirni tabeli ASCII, se ta del kodira v formatu UTF-8.
Kako deluje kodiranje Punycode?
Pregled postopka Punycode
IETF v standardu RFC 3492 opredeljuje Punycode kot eno od možnih uporab splošnega kodirnega algoritma, znanega kot Bootstring. Algoritem Bootstring omogoča preslikavo nizov znakov, ki vsebujejo poljubne nize znakov, na omejen nabor elementov. Razvoj kodirnega postopka temelji na šestih načelih. V kodiranju Punycode se ti elementi imenujejo osnovni znaki, ki jih sestavljajo male črke, številke in vezaj (-). Razvoj metode kodiranja temelji na šestih načelih.
- Popolnost: Vsak izhodni niz je mogoče s pomočjo bootstringa preslikati v poenostavljen niz.
- Edinstvenost: Dodelitev izhodnega niza ustreznemu kodiranju z zagonskim nizom je edinstvena. Vsakemu Punycodeju je mogoče dodeliti natanko en ASCII-ekvivalent in obratno.
- Obratnost: Kodiranje z zagonskim nizom se lahko kadar koli obrne brez izgube informacij.
- Učinkovitost: Kodirani niz je – če sploh – le minimalno daljši od izhodnega niza.
- Enostavnost: Bootstring uporablja preproste algoritme kodiranja in dekodiranja.
- Berljivost: Kodirani so le znaki, ki jih ni mogoče predstaviti v ciljnem naboru znakov. Vsi drugi znaki ostanejo nespremenjeni.
Punycode opredeljuje Bootstring v skladu z zahtevami za internacionalizirana domenska imena. To naj bi omogočilo preslikavo znakov Unicode prek prej dovoljenih osnovnih znakov.
Primer Punycode
Naslednji primer prikazuje, kako deluje kodiranje:
IDN: Müller-Büromöbel
IDN-domena »müller-büromöbel« vsebuje črki ü in ö, ki nista vključeni v prej dovoljen nabor znakov za domenska imena. Zato ju je treba kodirati prek Punycode, da se zagotovi združljivost.
1. korak: Normalizacija
V prvem koraku postopek kodiranja omogoča normalizacijo izhodnega niza znakov. Vse velike črke se nadomestijo z ustreznimi malimi črkami.
Korak 2: Odstranitev vseh neosnovnih znakov
V drugem koraku se odstranijo vsi znaki, ki niso osnovni. Ti se nato v kodirani obliki dodajo imenu domene in ločijo s pomišljajem.
Če se za kodiranje spletnih naslovov uporablja sintaksa Punycode, je vsak izhodni niz opremljen s predpono ACE (kratica za ASCII-združljivo kodiranje):
Predpona ACE: xn–
Predpona ACE zagotavlja, da se domenska imena, ki vsebujejo vezaj, ne razlagajo napačno kot mednarodna domenska imena.
To ima za posledico naslednjo kodiranje za IDN »müller-büromöbel«:
ACE: xn–mller-brombel-rmb4fg
Algoritem, na katerem temelji postopek Punycode, je izjemen. Zagotavlja namreč, da kljub pretvorbi domenska imena ne presežejo največje dovoljene dolžine 63 znakov.
Med kodiranjem se Unicode-znaki ne pretvarjajo ena proti ena v ASCII-znake. Namesto tega algoritem določi niz na podlagi razdalje med izbrisanimi znaki in položajem znakov v izhodnem nizu.
V povezavi z zgornjim primerom niz rmb4fg pomeni, da je treba v mller-brombel na drugem in sedmem mestu dodati Unicode-znaka ü in ö.

Izjeme od pravila
Do odstopanj pride, če domensko ime ne vsebuje nobenih znakov, ki niso osnovni, ali če vsebuje samo znake, ki niso osnovni.
Domensko ime, ki vsebuje samo znake, ki niso osnovni, po kodiranju prikazuje le kodirani niz in predpono ACE. Domensko ime, kot je παράδειγμα (grško za »primer«), ustreza naslednji kodirani obliki:
IDN: primer
ACE: xn–hxajbheg2az3al
Če domensko ime vsebuje samo osnovne znake, se Punycode ne uporablja. Zato se ne doda noben predpona ACE. V tem primeru kodiranje ni potrebno, saj osnovni internetni protokoli domensko ime že razumejo.
Če celotno polno kvalificirano domensko ime (FQDN) obravnavamo kot celoto, se vsaka oznaka (domena najvišje ravni, domena druge ravni, domena tretje ravni itd.) kodira ločeno. Domena,kot je пример.бг (v bolgarščini »example.bg«), bi se lahko kodirala na naslednji način
IDN: primer.bg
ACE: xn–e1afmkfd.xn–90ae
V spodnji tabeli je prikazan pregled različnih variant sintakse Punycode.
| IDN | Punycode | ACE | |
|---|---|---|---|
| Osnovni in neosnovni znaki | müller-büromöbel.de
|
mller-brombel-rmb4fg.de
|
xn--mller-brombel-rmb4fg.de
|
| Samo neosnovni znaki | Παράδειγμα.gr
|
hxajbheg2az3al.gr
|
xn--hxajbheg2az3al.gr
|
| Samo osnovni znaki | example.org
|
example.org
|
Brez uporabe |
Algoritem Punycode je podrobno opisan v standardu RFC 3492. Poleg tega dokument vsebuje tudi izvedbo postopka kodiranja v programskem jeziku C.
Uporabniki za kodiranje mednarodnih domenskih imen običajno uporabljajo brezplačne pretvornike Punycode.
Kodiranje Puny z domenami za emojije
Prek Punycode je mogoče ustvariti ne le internacionalizirana domenska imena, temveč tudi domene z emojiji. Da bi to delovalo, mora domena najvišje ravni omogočati uporabo emojijev, želeni emoji pa mora biti vključen v standard Unicode.
Trenutno je registracija domen z emojiji mogoča v naslednjih vrhnjih domenskih končnicah: .ws, .tk, .to, .ml, .ga, .cf, .gq in .fm.
Domene z emojiji se tehnično obdelujejo kot Punycode, vendar bi se v teoriji morale uporabniku prikazati kot kombinacija besedila in čustvenih simbolov.
Domena Emoji: https://i❤.ws/
ACE: https://xn--i-7iq.ws/
Trenutno tega praktično noben standardni brskalnik ne podpira. Če v brskalnikih Firefox, Chrome, Safari, Edge ali Opera vnesete domeno z emojiji, se v naslovni vrstici prikaže le niz ACE.
Ali obstajajo brezplačni pretvorniki Punycode?
Na različnih spletnih straneh so na voljo brezplačni generatorji Punycode, ki IDN-je pretvorijo v obliko, združljivo z ASCII. Eden takih primerov je Punycoder.

Za IDN-je drugih vrhnjih domenskih končnic je pretvornik Punycode, ki ga je razvil Mathias Bynens na podlagi punycode.js, dobra izbira.

Ali Punycode predstavlja varnostno tveganje?
Punycode predstavlja varnostno tveganje v primeru homografskega phishinga – kibernetskih napadov, pri katerih storilci izkoriščajo podobnost različnih znakov, da bi nič hudega sluteče žrtve zvabili na lažne spletne strani. Bloger Xudong Zheng na primeru naslednje Punycode domene https://www.xn--80ak6aa92e.com/ prikazuje, kako izgleda phishing napad. Ta internetne uporabnike pripelje na spletno stran z naslednjim IDN: https://www.аррӏе.com/
Navedeni URL ni uradna spletna stran kalifornijskega tehnološkega podjetja Apple Inc., temveč spletna stran za lažno pridobivanje podatkov, ki je bila ustvarjena za predstavitvene namene.
Namesto ASCII-znaka »a« z Unicode-kodo U+0061 se uporablja cirilski znak »а« (U+0430) – teh dveh znakov je s prostim očesom skoraj nemogoče razlikovati, spletni brskalniki pa ju obravnavajo kot različna znaka. Niti certifikati ne morejo zagotoviti varnosti za zaščito internetnih uporabnikov. Pri sodobnih kampanjah lažnega ribarjenja (phishing) kriminalci ustvarjajo veljavne SSL-certifikate, da bi njihove spletne strani izgledale verodostojno.
Najnovejše različice brskalnikov Chrome in Opera preprečujejo tovrstne napade lažnega predstavljanja tako, da pri IDN-jih, ki združujejo znake iz različnih znakovnih naborov, namesto internacionalizirane domene prikažejo niz ACE. Internet Explorer in Microsoft Edge preprečita dostop do takšnih domen. Firefox pa ne ponuja nobene zaščite pred lažnim predstavljanjem s Punycode.

Tako se lahko uporabniki Firefoxa zaščitijo. Da bi zmanjšali tveganje, ki ga predstavljajo lažne spletne strani, imajo uporabniki Firefoxa trenutno na voljo le možnost, da na splošno preprečijo pretvorbo Punycode v IDN. Za to začasno rešitev sta potrebna le dva koraka:
- Odprite urejevalnik nastavitev: V naslovno vrstico spletnega brskalnika vnesite about:config, da odprete urejevalnik nastavitev Firefoxa.
- Prisilite Punycode: Poiščite nastavitev network.IDN_show_punycode in spremenite njeno vrednost iz false v true.
Po konfiguraciji bo Firefox v naslovni vrstici prikazoval internacionalizirana domenska imena kot nize ACE.