Kuidas teisendada rahvusvahelisi domeeninimesid Punycode’i abil
Punycode on standarditud kodeerimismeetod, mis võimaldab Unicode-märkide esituseks kasutada piiratud ASCII-märgistikku, mis tähendab, et rahvusvahelised domeeninimed (IDN) võivad sisaldada ka mitte-ASCII-märke, näiteks ülakriipse.
Kuidas töötati välja see kodeerimismeetod?
2003. aastal standardiseeris Internet Engineering Task Force (IETF) Punycode’i kui süntaksi rahvusvaheliste domeeninimede kodeerimiseks rakendustes (IDNA). IETF määratleb domeeninime IDN-ina, kui see sisaldab erimärke, nagu diakriitilised märgid, tähed või märgid, mida ladina tähestikus ei leidu (nt saksa keele ülakriipsud). Selliseid märke ei saa töödelda põhiprotokollidega, nagu domeeninimede süsteem (DNS). Selles näites kasutame saksa keeles domeeninime. Kuigi IDN-ide kasutuselevõtu järel on müller-büromöbel (Mülleri kontori mööbel) lubatud tippdomeeni .de all, saab seda töödelda ainult mitte-baasmärkide kodeerimise abil, näiteks nime lahendamise kontekstis. Paljud internetiprotokollid põhinevad inglise keelel ja toetavad seetõttu ainult piiratud ASCII-märgistikku.
Selleks et tagada IDN-ide ja vanemate internetistandardite ühilduvus, on IETF kehtestanud meetodi rahvusvaheliste domeeninimede kodeerimiseks, kasutades selleks juba lubatud märke. Seda standardiseeritud kodeerimisprotseduuri tuntakse nimetusega Punycode.
E-posti aadresside puhul kasutatakse Punycode’i ainult rahvusvaheliste e-posti domeenide korral. Kui kohalik osa (märgi @ ees) sisaldab mitte-ASCII-märki, kodeeritakse see UTF-8-i abil.
Kuidas toimib Punycode’i kodeerimine?
Ülevaade Punycode’i protsessist
IETF on RFC 3492-s määratlenud Punycode’i kui üldise koodimisalgoritmi, mida tuntakse nimetusega Bootstring, ühe võimaliku rakenduse. Bootstring-algoritm võimaldab kaardistada märgijadasid, mis koosnevad suvalistest märgistikutest, kasutades piiratud hulka elemente. Koodimisprotseduuri väljatöötamine põhineb kuuel põhimõttel. Punycode’i kodeerimisel nimetatakse neid elemente baasmärkideks, mis koosnevad väiketähtedest, numbritest ja sidekriipsust (-). Kodeerimismeetodi väljatöötamine põhineb kuuel põhimõttel.
- Täielikkus: Iga väljundstringi saab boot-stringi abil seostada lihtsustatud stringiga.
- Unikaalsus: Väljundstringi seostamine vastava bootstringi kodeeringuga on unikaalne. Iga Punycode’ile saab määrata täpselt ühe ASCII-vastet ja vastupidi.
- Pöörduvus: Bootstring-kodeeringut saab igal ajal pöörata ilma teabe kaotuseta.
- Tõhusus: kodeeritud string on – kui üldse – väljundstringist vaid minimaalselt pikem.
- Lihtsus: Bootstring kasutab lihtsaid kodeerimis- ja dekodeerimisalgoritme.
- Loetavus: Kodeeritakse ainult need tähemärgid, mida sihtmärgistikus ei ole võimalik esitada. Kõik ülejäänud tähemärgid jäävad muutumatuks.
Punycode määratleb Bootstringi vastavalt rahvusvaheliste domeeninimede nõuetele. See peaks võimaldama Unicode-märkide kaardistamist varem lubatud baasmärkide kaudu.
Punycode’i näide
Järgmine näide näitab, kuidas kodeerimine toimib:
IDN: Müller-Büromöbel
IDN-domeenis „müller-büromöbel“ esinevad tähemärgid „ü“ ja „ö“, mida varem domeeninimede jaoks lubatud tähemärkide hulka ei kuulunud. Seetõttu tuleb need ühilduvuse tagamiseks kodeerida Punycode’i abil.
1. samm: Normaliseerimine
Esimeses etapis võimaldab kodeerimisprotseduur väljundmärgijada normaliseerida. Kõik suurtähed asendatakse vastavate väiketähtedega.
2. samm: Kõigi mitte-põhitähtede eemaldamine
Teises etapis eemaldatakse kõik mitte-põhitähed. Need lisatakse seejärel domeeninimele kodeeritud kujul ja eraldatakse sidekriipsuga.
Kui internetiaadresside kodeerimiseks kasutatakse Punycode’i süntaksit, lisatakse igale tulemusstringile eesliide ACE (lühend sõnadest ASCII-compatible encoding):
ACE-eesliide: xn–
Eesliide „ACE“ tagab, et sidekriipsudega domeeninimesid ei tõlgendataks ekslikult rahvusvaheliste domeeninimedena.
Selle tulemusena on IDN-i „müller-büromöbel“ kood järgmine:
ACE: xn–mller-brombel-rmb4fg
Punycode’i protseduuri aluseks olev algoritm on tähelepanuväärne. See tagab, et hoolimata teisendamisest ei ületa domeeninimed maksimaalset pikkust, mis on 63 tähemärki.
Kodeerimise käigus ei teisendata Unicode-märke üks ühele ASCII-märkideks. Selle asemel määrab algoritm märgijada kindlaks, lähtudes kustutatud märkide vahekaugusest ja märkide asukohast väljundjadas.
Eespool toodud näite puhul tähendab string rmb4fg, et mller-brombel tuleb täiendada Unicode-märkidega ü ja ö teisel ja seitsmendal kohal.

Erandid reeglist
Kõrvalekalded tekivad juhul, kui domeeninimi ei sisalda ühtegi põhitähte või kui see sisaldab ainult põhitähte.
Domeeninimi, mis sisaldab ainult mitte-baasmärke, kuvab pärast kodeerimist ainult kodeeritud stringi ja ACE-eelneva. Domeeninimi nagu παράδειγμα (kreeka keeles „näide”) vastab järgmisele kodeeringule:
IDN: näide
ACE: xn–hxajbheg2az3al
Kui domeeninimi sisaldab ainult põhitähte, siis Punycode’i ei kasutata. Seega ei lisata ka ACE-eelnevat. Sellisel juhul ei ole kodeerimine vajalik, kuna põhilised internetiprotokollid suudavad domeeninime juba mõista.
Kui vaadelda täielikku domeeninime (FQDN) tervikuna, kodeeritakse iga osa (tippdomeen, teise taseme domeen, kolmanda taseme domeen jne) eraldi. Domeennagu пример.бг (bulgaaria keeles „example.bg“) võiks olla kodeeritud järgmiselt
IDN: näide.bg
ACE: xn–e1afmkfd.xn–90ae
Järgmine tabel annab ülevaate Punycode’i süntaksi erinevatest variantidest.
| IDN | Punycode | ACE | |
|---|---|---|---|
| Põhi- ja mittepõhitähed | müller-büromöbel.de
|
mller-brombel-rmb4fg.de
|
xn--mller-brombel-rmb4fg.de
|
| Ainult mitte-baasmärgid | Παράδειγμα.gr
|
hxajbheg2az3al.gr
|
xn--hxajbheg2az3al.gr
|
| Ainult baasmärgid | example.org
|
example.org
|
Ei kasuta |
Punycode’i algoritmi kirjeldatakse üksikasjalikult dokumendis RFC 3492. Lisaks sisaldab dokument koodimisprotseduuri rakendust programmeerimiskeeles C.
Kasutajad kasutavad rahvusvaheliste domeeninimede kodeerimiseks tavaliselt tasuta kättesaadavaid Punycode-konvertereid.
Puny-kodeering koos emojidomeenidega
Punycode’i abil on võimalik luua mitte ainult rahvusvahelisi domeeninimesid, vaid ka emojidomeene. Selleks peab aga tippdomeen lubama emojide kasutamist ning soovitud emotikon peab olema Unicode’i standardis.
Praegu on emojidomeenide registreerimine lubatud järgmistes tippdomeenides: .ws, .tk, .to, .ml, .ga, .cf, .gq ja .fm.
Emoji-domeene töödeldakse tehniliselt Punycode’ina, kuid teoreetiliselt peaksid need kasutajale kuvatama teksti ja emotikonide kombinatsioonina.
Emoji-domeen: https://i❤.ws/
ACE: https://xn--i-7iq.ws/
Praegu ei toeta seda praktiliselt ükski tavaline veebibrauser. Kui sisestad emojidomeeni Firefoxis, Chromes, Safaris, Edges või Operas, kuvatakse aadressiribale ainult ACE-string.
Kas on olemas tasuta Punycode’i teisendajaid?
Mitmetel veebisaitidel on saadaval tasuta Punycode-generaatorid, mis teisendavad IDN-d ASCII-ga ühilduvasse vormi. Üks näide on Punycoder.

Muude tippdomeenide IDN-ide puhul on hea valik Mathias Bynensi punycode.js -il põhinev Punycode-konverter.

Kas Punycode kujutab endast turvariski?
Punycode kujutab endast turvariski homograafilise phishing’u puhul – see on küberrünnak, mille käigus kurjategijad kasutavad erinevate tähtede sarnast välimust, et meelitada pahaaimamatuid ohvreid võltsitud veebisaitidele. Blogija Xudong Zheng näitab, kuidas selline phishing-rünnak välja näeb, tuues näiteks järgmise Punycode-domeeni: https://www.xn--80ak6aa92e.com/. See suunab internetikasutajad veebisaidile, millel on järgmine IDN: https://www.аррӏе.com/
Esitatud veebiaadress ei ole Kalifornia tehnoloogiaettevõtte Apple Inc. ametlik veebisait, vaid näidiseks loodud pettusveebisait.
ASCII-märgi „a“ (Unicode U+0061) asemel kasutatakse kirillitsa tähte „а“ (U+0430) – neid kahte märki on palja silmaga peaaegu võimatu eristada, kuid veebibrauserid tõlgendavad neid erinevate märkidena. Isegi sertifikaadid ei suuda tagada internetikasutajate turvalisust. Kaasaegsetes pettusekampaaniates loovad kurjategijad kehtivaid SSL-sertifikaate, et muuta oma veebisaidid autentsena näivaks.
Chrome’i ja Opera praegused versioonid hoiavad ära selliseid pettusrünnakuid, kuvades rahvusvaheliste domeeninimede (IDN) puhul, mis sisaldavad erinevatest tähemärgistikutest pärit märke, rahvusvahelise domeeninime asemel ACE-stringi. Internet Explorer ja Microsoft Edge takistavad sellistele domeenidele juurdepääsu. Firefox aga ei paku mingit kaitset Punycode-pettuste vastu.

Nii saavad Firefoxi kasutajad end kaitsta. Et vähendada pettusveebisaitidest tulenevat ohtu, on Firefoxi kasutajatel praegu võimalik vaid üldiselt takistada Punycode’i tõlkimist IDN-idesse. Selle ajutise lahenduse rakendamiseks on vaja vaid kahte sammu:
- Avage seadete redaktor: sisestage veebibrauseri aadressiribale about:config, et avada Firefoxi seadete redaktor.
- Punycode’i kasutamine: otsige seade network.IDN_show_punycode ja muudke selle väärtus false’ist true’iks.
Pärast seadistamist kuvab Firefox rahvusvahelised domeeninimed aadressiribas ACE-stringidena.