Kaip konvertuoti internacionalizuotus domenų vardus naudojant „Punycode“
„Punycode“ – tai standartizuotas kodavimo metodas, leidžiantis Unicode simbolius atvaizduoti naudojant ribotą ASCII simbolių rinkinį, o tai reiškia, kad tarptautiniai domenų vardai (IDN) taip pat gali turėti ne ASCII simbolių, pavyzdžiui, umlautų.
Kaip buvo sukurtas kodavimo metodas?
2003 m. Interneto inžinerijos darbo grupė (IETF) standartizavo „Punycode“ kaip sintaksę, skirtą tarptautinių domenų vardų kodavimui programose (IDNA). IETF apibrėžia domeno vardą kaip IDN, jei jame yra specialių simbolių, pvz., diakritinių ženklų, raidžių ar simbolių, kurių nėra lotynų abėcėlėje (pvz., vokiečių kalbos umlautai). Tokių simbolių negalima apdoroti naudojant pagrindinius protokolus, pvz., Domenų vardų sistemą (DNS). Šiame pavyzdyje naudosime domeno vardą vokiečių kalba. Nors įvedus IDN, „müller-büromöbel“ (Müllerio biuro baldai) yra leidžiamas aukščiausio lygio domeno .de kontekste, jį galima apdoroti tik užkoduojant ne bazinius simbolius, pvz., vardų iššifravimo kontekste. Daugelis interneto protokolų yra pagrįsti anglų kalba ir todėl palaiko tik ribotą ASCII simbolių rinkinį.
Siekiant užtikrinti IDN ir senesnių interneto standartų suderinamumą, IETF nustatė tarptautinių domenų vardų kodavimo metodą, naudojant jau anksčiau leidžiamus simbolius. Ši standartizuota kodavimo procedūra vadinama „Punycode“.
Elektroninio pašto adresų atveju „Punycode“ naudojamas tik tarptautiniams elektroninio pašto domenams. Jei vietinėje dalyje (prieš simbolį „@“) yra ne ASCII simbolių, ji koduojama naudojant UTF-8.
Kaip veikia „Punycode“ kodavimas?
„Punycode“ proceso apžvalga
IETF dokumente RFC 3492 „Punycode“ apibrėžiamas kaip vienas iš galimų bendrojo kodavimo algoritmo, žinomo kaip „Bootstring“, taikymo būdų. „Bootstring“ algoritmas leidžia atvaizduoti simbolių sekas, sudarytas iš bet kokių simbolių rinkinių, naudojant ribotą elementų pasirinkimą. Kodavimo procedūros kūrimas grindžiamas šešiais principais. Punycode kodavime šie elementai vadinami baziniais simboliais, kuriuos sudaro mažosios raidės, skaitmenys ir brūkšnys (-). Kodavimo metodo kūrimas grindžiamas šešiais principais.
- Išsamumas: Kiekvieną išvesties eilutę galima susieti su supaprastinta eilute naudojant „boot string“.
- Unikalumas: Išvesties eilutės priskyrimas atitinkamam „Bootstring“ kodavimui yra unikalus. Kiekvienam „Punycode“ galima priskirti tik vieną ASCII atitikmenį ir atvirkščiai.
- Atstatomumas: „Bootstring“ kodavimą galima bet kada atstatyti be jokio informacijos praradimo.
- Efektyvumas: užkoduota eilutė, jei iš viso, yra tik minimaliai ilgesnė už išvesties eilutę.
- Paprastumas: „Bootstring“ naudoja paprastus kodavimo ir dekodavimo algoritmus.
- Skaitymo paprastumas: Koduojami tik tie simboliai, kurių negalima atvaizduoti tikslinėje simbolių rinkinyje. Visi kiti simboliai lieka nepakitę.
Punycode apibrėžia „Bootstring“ pagal tarptautinių domenų vardų reikalavimus. Tai turėtų leisti Unicode simbolius susieti su anksčiau leidžiamais baziniais simboliais.
„Punycode“ pavyzdys
Šis pavyzdys iliustruoja, kaip veikia kodavimas:
IDN: müller-büromöbel
IDN „müller-büromöbel“ sudėtyje yra simboliai „ü“ ir „ö“, kurie nebuvo įtraukti į anksčiau domeno vardams leidžiamą simbolių rinkinį. Dėl to, siekiant užtikrinti suderinamumą, jie turi būti užkoduoti naudojant „Punycode“.
1 etapas: Normalizavimas
Pirmuoju etapu kodavimo procedūra leidžia normalizuoti išvesties simbolių eilutę. Visos didžiosios raidės pakeičiamos atitinkamomis mažosiomis raidėmis.
2 etapas: visų ne pagrindinių simbolių pašalinimas
Antrajame žingsnyje pašalinami visi ne pagrindiniai simboliai. Vėliau jie įtraukiami į domeno vardą užkoduota forma ir atskiriami brūkšneliu.
Jei interneto adresams koduoti naudojama „Punycode“ sintaksė, kiekvienai gautai eilutei pridedamas priešdėlis „ACE“ (trumpinys nuo „ASCII-compatible encoding“):
ACE priešdėlis: xn–
Priešdėlis „ACE“ užtikrina, kad domeno vardai, kuriuose yra brūkšnelių, nebūtų klaidingai traktuojami kaip tarptautiniai domeno vardai.
Dėl to IDN „müller-büromöbel“ užkoduojamas taip:
ACE: xn–mller-brombel-rmb4fg
Punycode procedūros pagrindą sudarantis algoritmas yra išskirtinis. Jis užtikrina, kad, nepaisant konversijos, domeno vardai neviršytų maksimalaus 63 simbolių ilgio.
Kodavimo proceso metu „Unicode“ simboliai nėra konvertuojami į ASCII simbolius santykiu „vienas prie vieno“. Vietoj to, algoritmas nustato eilutę remdamasis atstumu tarp ištrintų simbolių ir simbolių padėtimi išvestinėje eilutėje.
Atsižvelgiant į aukščiau pateiktą pavyzdį, eilutė „rmb4fg“ reiškia, kad žodis „mller-brombel“ turi būti papildytas Unicode simboliais „ü“ ir „ö“ antroje ir septintoje pozicijose.

Išimtys iš taisyklės
Nuokrypiai atsiranda, jei domeno vardas neapima jokių ne bazinių simbolių arba jei jame yra tik ne baziniai simboliai.
Domeno vardas, sudarytas tik iš ne bazinių simbolių, po kodavimo rodo tik užkoduotą eilutę ir ACE priešdėlį. Tokio domeno vardo kaip „παράδειγμα“ (graikų kalba – „pavyzdys“) kodavimas atrodo taip:
IDN: pavyzdys
ACE: xn–hxajbheg2az3al
Jei domeno vardas susideda tik iš bazinių simbolių, „Punycode“ nenaudojamas. Todėl ACE priešdėlis nepridedamas. Šiuo atveju kodavimas nėra būtinas, nes pagrindiniai interneto protokolai jau gali atpažinti domeno vardą.
Jei visiškai kvalifikuotą domeno vardą (FQDN) vertinsime kaip visumą, kiekviena jo dalis (aukščiausiojo lygio domenas, antrojo lygio domenas, trečiojo lygio domenas ir pan.) koduojama atskirai. Domenas,pavyzdžiui, пример.бг (bulgarų kalba reiškia „example.bg“), galėtų būti koduojamas taip
IDN: pavyzdys.bg
ACE: xn–e1afmkfd.xn–90ae
Toliau pateiktoje lentelėje pateikiama įvairių „Punycode“ sintaksės variantų apžvalga.
| IDN | Punycode | ACE | |
|---|---|---|---|
| Baziniai ir nebaziniai simboliai | müller-büromöbel.de
|
mller-brombel-rmb4fg.de
|
xn--mller-brombel-rmb4fg.de
|
| Tik ne baziniai simboliai | Παράδειγμα.gr
|
hxajbheg2az3al.gr
|
xn--hxajbheg2az3al.gr
|
| Tik baziniai simboliai | example.org
|
example.org
|
Nenaudojama |
Punycode algoritmas išsamiai aprašytas RFC 3492 standarte. Be to, šiame dokumente pateikiamas kodavimo procedūros įgyvendinimas C programavimo kalba.
Vartotojai paprastai naudoja nemokamus „Punycode“ konverterius tarptautiniams domenų vardams koduoti.
Puny kodavimas naudojant emodži domenus
Naudojant „Punycode“ galima kurti ne tik tarptautinius domenų vardus, bet ir emodži domenus. Tačiau tam, kad tai veiktų, aukščiausio lygio domenas turi leisti naudoti emodžius, o norimas emodžis turi atitikti „Unicode“ standartą.
Šiuo metu emodži domenus galima registruoti šiuose aukščiausio lygio domenuose: .ws, .tk, .to, .ml, .ga, .cf, .gq ir .fm.
Emoji domenai techniškai apdorojami kaip „Punycode“, tačiau teoriškai vartotojui jie turėtų būti pateikiami kaip teksto ir šypsenėlių derinys.
Emoji domenas: https://i❤.ws/
ACE: https://xn--i-7iq.ws/
Šiuo metu praktiškai nė viena standartinė naršyklė šios funkcijos nepalaiko. Jei „Firefox“, „Chrome“, „Safari“, „Edge“ ar „Opera“ naršyklėje įvedate emodži domeną, adresų juostoje rodomas tik ACE eilutė.
Ar yra nemokamų „Punycode“ konverterių?
Įvairiose interneto svetainėse galima rasti nemokamų „Punycode“ generatorių, kurie konvertuoja IDN į ASCII suderinamą formą. Vienas iš pavyzdžių – „Punycoder“.

Kitų aukščiausio lygio domenų (TLD) IDN adresams puikiai tinka Mathias Bynens sukurtas „Punycode“ konverteris, pagrįstas „punycode.js “.

Ar „Punycode“ kelia grėsmę saugumui?
„Punycode“ tampa saugumo rizika homografinio sukčiavimo atveju – tai kibernetinės atakos, kai nusikaltėliai pasinaudoja skirtingų simbolių išvaizdos panašumu, kad pritrauktų nieko neįtariančias aukas į suklastotas svetaines. Blogeris Xudong Zheng parodo, kaip atrodo tokia sukčiavimo ataka, remdamasis šiuo „Punycode“ domeno pavyzdžiu: https://www.xn--80ak6aa92e.com/. Tai nukreipia interneto vartotojus į svetainę su šiuo IDN: https://www.аррӏе.com/
Pateiktas URL adresas nėra oficiali Kalifornijos technologijų bendrovės „Apple Inc.“ svetainė, o tik pavyzdžiui sukurta sukčiavimo svetainė.
Vietoj ASCII simbolio „a“ (Unicode U+0061) naudojamas kirilicos simbolis „а“ (U+0430) – šių dviejų simbolių plika akimi beveik neįmanoma atskirti, tačiau interneto naršyklės juos traktuoja kaip skirtingus simbolius. Net sertifikatai negali užtikrinti saugumo, kuris apsaugotų interneto vartotojus. Šiuolaikinėse sukčiavimo kampanijose nusikaltėliai kuria galiojančius SSL sertifikatus, siekdami, kad jų svetainės atrodytų autentiškos.
Dabartinės „Chrome“ ir „Opera“ versijos užkerta kelią tokiems sukčiavimo bandymams, IDN domenuose, kuriuose maišomi skirtingų simbolių rinkinių simboliai, vietoj internacionalizuoto domeno pavadinimo rodydamos ACE eilutę. „Internet Explorer“ ir „Microsoft Edge“ neleidžia prisijungti prie tokių domenų. Tačiau „Firefox“ neteikia jokios apsaugos nuo sukčiavimo naudojant „Punycode“.

Štai kaip „Firefox“ naudotojai gali apsisaugoti. Siekdami sumažinti su sukčiavimo svetainėmis susijusią riziką, „Firefox“ naudotojai šiuo metu gali tik užkirsti kelią „Punycode“ kodų konvertavimui į IDN vardus apskritai. Šiam laikinam sprendimui įgyvendinti reikia atlikti tik du veiksmus:
- Atidarykite konfigūracijos redaktorių: įveskite „about:config“ į naršyklės adresų juostą, kad atidarytumėte „Firefox“ konfigūracijos redaktorių.
- Priversti naudoti „Punycode“: suraskite nustatymą „network.IDN_show_punycode “ ir pakeiskite jo vertę iš „false“ į „true“.
Nustačius parametrus, „Firefox“ adresų juostoje tarptautinius domenus rodys kaip ACE eilutes.