Punycode je stan­dar­di­zi­ra­na metoda kodiranja, ki omogoča pretvorbo znakov Unicode v omejen nabor znakov ASCII, kar pomeni, da lahko med­na­ro­dna 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 En­gi­ne­e­ring Task Force (IETF) stan­dar­di­zi­ral Punycode kot sintakso za kodiranje in­ter­na­ci­o­na­li­zi­ra­nih domenskih imen v apli­ka­ci­jah (IDNA). IETF opre­de­lju­je domensko ime kot IDN, če vsebuje posebne znake, kot so di­a­kri­tič­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ül­ler­je­vo pi­sar­ni­ško pohištvo) dovoljeno v vrhnji domeni .de, ga je mogoče obdelati le s ko­di­ra­njem ne­o­snov­nih znakov, na primer v okviru raz­re­še­va­nja imen. Številni in­ter­ne­tni protokoli temeljijo na an­gle­šči­ni in zato podpirajo le omejen nabor znakov ASCII.

Da bi za­go­to­vi­li zdru­žlji­vost med IDN-ji in sta­rej­ši­mi in­ter­ne­tni­mi standardi, je IETF določila metodo za kodiranje in­ter­na­ci­o­na­li­zi­ra­nih domenskih imen z uporabo znakov, ki so bili že dovoljeni. Ta stan­dar­di­zi­ra­ni postopek kodiranja je znan pod imenom Punycode.

Note

Pri e-poštnih naslovih se Punycode uporablja le za med­na­ro­dne 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 opre­de­lju­je Punycode kot eno od možnih uporab splošnega kodirnega algoritma, znanega kot Bo­ot­string. Algoritem Bo­ot­string omogoča pre­sli­ka­vo 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 se­sta­vlja­jo male črke, številke in vezaj (-). Razvoj metode kodiranja temelji na šestih načelih.

  • Popolnost: Vsak izhodni niz je mogoče s pomočjo bo­ot­strin­ga pre­sli­ka­ti v po­e­no­sta­vljen niz.
  • Edin­stve­nost: Dodelitev izhodnega niza ustre­zne­mu kodiranju z zagonskim nizom je edin­stve­na. Vsakemu Pu­nyco­de­ju je mogoče dodeliti natanko en ASCII-ek­vi­va­lent in obratno.
  • Obratnost: Kodiranje z zagonskim nizom se lahko kadar koli obrne brez izgube in­for­ma­cij.
  • Učin­ko­vi­tost: Kodirani niz je – če sploh – le minimalno daljši od izhodnega niza.
  • Eno­stav­nost: Bo­ot­string uporablja preproste algoritme kodiranja in de­ko­di­ra­nja.
  • Ber­lji­vost: Kodirani so le znaki, ki jih ni mogoče pred­sta­vi­ti v ciljnem naboru znakov. Vsi drugi znaki ostanejo ne­spre­me­nje­ni.

Punycode opre­de­lju­je Bo­ot­string v skladu z zahtevami za in­ter­na­ci­o­na­li­zi­ra­na domenska imena. To naj bi omogočilo pre­sli­ka­vo znakov Unicode prek prej do­vo­lje­nih 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­žlji­vost.

1. korak: Nor­ma­li­za­ci­ja

V prvem koraku postopek kodiranja omogoča nor­ma­li­za­ci­jo izhodnega niza znakov. Vse velike črke se na­do­me­sti­jo z ustre­zni­mi malimi črkami.

Korak 2: Od­stra­ni­tev vseh ne­o­snov­nih znakov

V drugem koraku se od­stra­ni­jo vsi znaki, ki niso osnovni. Ti se nato v kodirani obliki dodajo imenu domene in ločijo s po­mi­šlja­jem.

Če se za kodiranje spletnih naslovov uporablja sintaksa Punycode, je vsak izhodni niz opremljen s predpono ACE (kratica za ASCII-zdru­žlji­vo kodiranje):

Predpona ACE: xn–

Predpona ACE za­go­ta­vlja, da se domenska imena, ki vsebujejo vezaj, ne razlagajo napačno kot med­na­ro­dna 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. Za­go­ta­vlja namreč, da kljub pretvorbi domenska imena ne presežejo največje dovoljene dolžine 63 znakov.

Med ko­di­ra­njem se Unicode-znaki ne pre­tvar­ja­jo ena proti ena v ASCII-znake. Namesto tega algoritem določi niz na podlagi razdalje med iz­bri­sa­ni­mi 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 ö.

Image: Overview of sections of the ACE string
The ACE string consists of the ACE prefix and a puny-coded string.

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 in­ter­ne­tni protokoli domensko ime že razumejo.

Če celotno polno kva­li­fi­ci­ra­no domensko ime (FQDN) obrav­na­va­mo kot celoto, se vsaka oznaka (domena najvišje ravni, domena druge ravni, domena tretje ravni itd.) kodira ločeno. Domena,kot je пример.бг (v bol­gar­šči­ni »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
Note

Algoritem Punycode je podrobno opisan v standardu RFC 3492. Poleg tega dokument vsebuje tudi izvedbo postopka kodiranja v pro­gram­skem jeziku C.

Upo­rab­ni­ki za kodiranje med­na­ro­dnih domenskih imen običajno upo­ra­blja­jo brez­plač­ne pre­tvor­ni­ke Punycode.

Kodiranje Puny z domenami za emojije

Prek Punycode je mogoče ustvariti ne le in­ter­na­ci­o­na­li­zi­ra­na 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.

Tip

Trenutno je re­gi­stra­ci­ja domen z emojiji mogoča v na­sle­dnjih vrhnjih domenskih končnicah: .ws, .tk, .to, .ml, .ga, .cf, .gq in .fm.

Domene z emojiji se tehnično ob­de­lu­je­jo kot Punycode, vendar bi se v teoriji morale upo­rab­ni­ku prikazati kot kom­bi­na­ci­ja besedila in čustvenih simbolov.

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

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

Trenutno tega praktično noben stan­dar­dni brskalnik ne podpira. Če v br­skal­ni­kih Firefox, Chrome, Safari, Edge ali Opera vnesete domeno z emojiji, se v naslovni vrstici prikaže le niz ACE.

Ali obstajajo brez­plač­ni pre­tvor­ni­ki Punycode?

Na različnih spletnih straneh so na voljo brez­plač­ni ge­ne­ra­tor­ji Punycode, ki IDN-je pre­tvo­ri­jo v obliko, zdru­žlji­vo z ASCII. Eden takih primerov je Punycoder.

Image: Punycoder, the Punycode converter
Punycoder converts Punycode to Text/Unicode and vice-versa.

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

Image: The Punycode converter made by Mathias Bynens based on punycode.js
With his *Punycode domain name converter,*Mathias Bynens offers an open-source tool for con­ver­ting in­ter­na­ti­o­na­li­sed domains.

Ali Punycode pred­sta­vlja varnostno tveganje?

Punycode pred­sta­vlja varnostno tveganje v primeru ho­mo­graf­ske­ga phishinga – ki­ber­net­skih napadov, pri katerih storilci iz­ko­ri­šča­jo 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 in­ter­ne­tne upo­rab­ni­ke pripelje na spletno stran z na­sle­dnjim IDN: https://www.аррӏе.com/

Navedeni URL ni uradna spletna stran ka­li­for­nij­ske­ga teh­no­lo­ške­ga podjetja Apple Inc., temveč spletna stran za lažno pri­do­bi­va­nje podatkov, ki je bila ustvar­je­na za pred­sta­vi­tve­ne 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 raz­li­ko­va­ti, spletni br­skal­ni­ki pa ju obrav­na­va­jo kot različna znaka. Niti cer­ti­fi­ka­ti ne morejo za­go­to­vi­ti varnosti za zaščito in­ter­ne­tnih upo­rab­ni­kov. Pri sodobnih kampanjah lažnega ri­bar­je­nja (phishing) kri­mi­nal­ci ustvar­ja­jo veljavne SSL-cer­ti­fi­ka­te, da bi njihove spletne strani izgledale ve­ro­do­stoj­no.

Naj­no­vej­še različice br­skal­ni­kov Chrome in Opera pre­pre­ču­je­jo tovrstne napade lažnega pred­sta­vlja­nja tako, da pri IDN-jih, ki zdru­žu­je­jo znake iz različnih znakovnih naborov, namesto in­ter­na­ci­o­na­li­zi­ra­ne domene prikažejo niz ACE. Internet Explorer in Microsoft Edge pre­pre­či­ta dostop do takšnih domen. Firefox pa ne ponuja nobene zaščite pred lažnim pred­sta­vlja­njem s Punycode.

Image: Example of a homographic attack
Example of a ho­mo­graphic domain: The URL looks the same as Apple’s official website, however, the Unicode character U+0430 is actually a Cyrillic letter that is asto­ni­shin­gly similar to the ASCII character a.

Tako se lahko upo­rab­ni­ki Firefoxa zaščitijo. Da bi zmanjšali tveganje, ki ga pred­sta­vlja­jo lažne spletne strani, imajo upo­rab­ni­ki Firefoxa trenutno na voljo le možnost, da na splošno pre­pre­či­jo pretvorbo Punycode v IDN. Za to začasno rešitev sta potrebna le dva koraka:

  1. Odprite ure­je­val­nik na­sta­vi­tev: V naslovno vrstico spletnega br­skal­ni­ka vnesite about:config, da odprete ure­je­val­nik na­sta­vi­tev Firefoxa.
  2. Prisilite Punycode: Poiščite na­sta­vi­tev network.IDN_show_punycode in spre­me­ni­te njeno vrednost iz false v true.

Po kon­fi­gu­ra­ci­ji bo Firefox v naslovni vrstici pri­ka­zo­val in­ter­na­ci­o­na­li­zi­ra­na domenska imena kot nize ACE.

Go to Main Menu