„Punycode“ – tai stan­dar­ti­zuo­tas kodavimo metodas, lei­džian­tis Unicode simbolius at­vaiz­duo­ti naudojant ribotą ASCII simbolių rinkinį, o tai reiškia, kad tarp­tau­ti­niai domenų vardai (IDN) taip pat gali turėti ne ASCII simbolių, pa­vyz­džiui, umlautų.

Kaip buvo sukurtas kodavimo metodas?

2003 m. Interneto in­ži­ne­ri­jos darbo grupė (IETF) stan­dar­ti­za­vo „Punycode“ kaip sintaksę, skirtą tarp­tau­ti­nių domenų vardų kodavimui prog­ra­mo­se (IDNA). IETF apibrėžia domeno vardą kaip IDN, jei jame yra specialių simbolių, pvz., dia­kri­ti­nių ženklų, raidžių ar simbolių, kurių nėra lotynų abėcėlėje (pvz., vokiečių kalbos umlautai). Tokių simbolių negalima apdoroti naudojant pag­rin­di­nius pro­to­ko­lus, 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 lei­džia­mas aukš­čiau­sio lygio domeno .de kontekste, jį galima apdoroti tik už­ko­duo­jant ne bazinius simbolius, pvz., vardų iš­šif­ra­vi­mo kontekste. Daugelis interneto protokolų yra pagrįsti anglų kalba ir todėl palaiko tik ribotą ASCII simbolių rinkinį.

Siekiant už­tik­rin­ti IDN ir senesnių interneto standartų su­de­ri­na­mu­mą, IETF nustatė tarp­tau­ti­nių domenų vardų kodavimo metodą, naudojant jau anksčiau lei­džia­mus simbolius. Ši stan­dar­ti­zuo­ta kodavimo procedūra vadinama „Punycode“.

Note

Elekt­ro­ni­nio pašto adresų atveju „Punycode“ nau­do­ja­mas tik tarp­tau­ti­niams elekt­ro­ni­nio 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“ api­brė­žia­mas kaip vienas iš galimų bendrojo kodavimo algoritmo, žinomo kaip „Bo­ot­st­ring“, taikymo būdų. „Bo­ot­st­ring“ al­go­rit­mas leidžia at­vaiz­duo­ti simbolių sekas, sudarytas iš bet kokių simbolių rinkinių, naudojant ribotą elementų pa­si­rin­ki­mą. Kodavimo pro­ce­dū­ros kūrimas grin­džia­mas šešiais prin­ci­pais. Punycode kodavime šie elementai vadinami baziniais sim­bo­liais, kuriuos sudaro mažosios raidės, skait­me­nys ir brūkšnys (-). Kodavimo metodo kūrimas grin­džia­mas šešiais prin­ci­pais.

  • Išsamumas: Kiekvieną išvesties eilutę galima susieti su su­pa­pras­tin­ta eilute naudojant „boot string“.
  • Uni­ka­lu­mas: Išvesties eilutės pri­sky­ri­mas ati­tin­ka­mam „Bo­ot­st­ring“ kodavimui yra unikalus. Kiek­vie­nam „Punycode“ galima priskirti tik vieną ASCII ati­tik­me­nį ir at­virkš­čiai.
  • At­sta­to­mu­mas: „Bo­ot­st­ring“ kodavimą galima bet kada atstatyti be jokio in­for­ma­ci­jos praradimo.
  • Efek­ty­vu­mas: užkoduota eilutė, jei iš viso, yra tik mi­ni­ma­liai ilgesnė už išvesties eilutę.
  • Pa­pras­tu­mas: „Bo­ot­st­ring“ naudoja paprastus kodavimo ir deko­da­vi­mo al­go­rit­mus.
  • Skaitymo pa­pras­tu­mas: Koduojami tik tie simboliai, kurių negalima at­vaiz­duo­ti tiks­li­nė­je simbolių rinkinyje. Visi kiti simboliai lieka nepakitę.

Punycode apibrėžia „Bo­ot­st­ring“ pagal tarp­tau­ti­nių domenų vardų rei­ka­la­vi­mus. Tai turėtų leisti Unicode simbolius susieti su anksčiau lei­džia­mais baziniais sim­bo­liais.

„Punycode“ pavyzdys

Šis pavyzdys iliust­ruo­ja, 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ž­tik­rin­ti su­de­ri­na­mu­mą, jie turi būti užkoduoti naudojant „Punycode“.

1 etapas: Nor­ma­li­za­vi­mas

Pirmuoju etapu kodavimo procedūra leidžia nor­ma­li­zuo­ti išvesties simbolių eilutę. Visos di­džio­sios raidės pa­kei­čia­mos ati­tin­ka­mo­mis ma­žo­sio­mis raidėmis.

2 etapas: visų ne pag­rin­di­nių simbolių pa­ša­li­ni­mas

Antrajame žingsnyje pa­ša­li­na­mi visi ne pag­rin­di­niai simboliai. Vėliau jie įtrau­kia­mi į domeno vardą užkoduota forma ir at­ski­ria­mi brūkšne­liu.

Jei interneto adresams koduoti naudojama „Punycode“ sintaksė, kiek­vie­nai gautai eilutei pri­de­da­mas prieš­dė­lis „ACE“ (trumpinys nuo „ASCII-com­pa­ti­b­le encoding“):

ACE prieš­dė­lis: xn–

Prieš­dė­lis „ACE“ užtikrina, kad domeno vardai, kuriuose yra brūkšne­lių, nebūtų klai­din­gai trak­tuo­ja­mi kaip tarp­tau­ti­niai domeno vardai.

Dėl to IDN „müller-büromöbel“ už­ko­duo­ja­mas taip:

ACE: xn–mller-brombel-rmb4fg

Punycode pro­ce­dū­ros pagrindą su­da­ran­tis al­go­rit­mas yra iš­skir­ti­nis. Jis užtikrina, kad, nepaisant kon­ver­si­jos, domeno vardai neviršytų mak­si­ma­laus 63 simbolių ilgio.

Kodavimo proceso metu „Unicode“ simboliai nėra kon­ver­tuo­ja­mi į ASCII simbolius santykiu „vienas prie vieno“. Vietoj to, al­go­rit­mas nustato eilutę rem­da­ma­sis atstumu tarp ištrintų simbolių ir simbolių padėtimi iš­ves­ti­nė­je eilutėje.

At­si­žvel­giant į aukščiau pateiktą pavyzdį, eilutė „rmb4fg“ reiškia, kad žodis „mller-brombel“ turi būti pa­pil­dy­tas Unicode sim­bo­liais „ü“ ir „ö“ antroje ir sep­tin­to­je po­zi­ci­jo­se.

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

Išimtys iš taisyklės

Nuo­kry­piai 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“ ne­nau­do­ja­mas. Todėl ACE prieš­dė­lis ne­pri­de­da­mas. Šiuo atveju kodavimas nėra būtinas, nes pag­rin­di­niai interneto pro­to­ko­lai jau gali atpažinti domeno vardą.

Jei visiškai kva­li­fi­kuo­tą domeno vardą (FQDN) ver­tin­si­me kaip visumą, kiekviena jo dalis (aukš­čiau­sio­jo lygio domenas, antrojo lygio domenas, trečiojo lygio domenas ir pan.) koduojama atskirai. Domenas,pa­vyz­džiui, пример.бг (bulgarų kalba reiškia „example.bg“), galėtų būti ko­duo­ja­mas taip

IDN: pavyzdys.bg

ACE: xn–e1afmkfd.xn–90ae

Toliau pa­teik­to­je lentelėje pa­tei­kia­ma įvairių „Punycode“ sintaksės variantų apžvalga.

IDN Punycode ACE
Baziniai ir ne­ba­zi­niai 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 Ne­nau­do­ja­ma
Note

Punycode al­go­rit­mas išsamiai aprašytas RFC 3492 standarte. Be to, šiame dokumente pa­tei­kia­mas kodavimo pro­ce­dū­ros įgy­ven­di­ni­mas C prog­ra­ma­vi­mo kalba.

Var­to­to­jai paprastai naudoja nemokamus „Punycode“ kon­ver­te­rius tarp­tau­ti­niams domenų vardams koduoti.

Puny kodavimas naudojant emodži domenus

Naudojant „Punycode“ galima kurti ne tik tarp­tau­ti­nius domenų vardus, bet ir emodži domenus. Tačiau tam, kad tai veiktų, aukš­čiau­sio lygio domenas turi leisti naudoti emodžius, o norimas emodžis turi atitikti „Unicode“ standartą.

Tip

Šiuo metu emodži domenus galima re­gist­ruo­ti šiuose aukš­čiau­sio lygio domenuose: .ws, .tk, .to, .ml, .ga, .cf, .gq ir .fm.

Emoji domenai tech­niš­kai ap­do­ro­ja­mi kaip „Punycode“, tačiau teoriškai var­to­to­jui jie turėtų būti pa­tei­kia­mi kaip teksto ir šyp­se­nė­lių derinys.

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

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

Šiuo metu prak­tiš­kai nė viena stan­dar­ti­nė naršyklė šios funkcijos nepalaiko. Jei „Firefox“, „Chrome“, „Safari“, „Edge“ ar „Opera“ nar­šyk­lė­je įvedate emodži domeną, adresų juostoje rodomas tik ACE eilutė.

Ar yra nemokamų „Punycode“ kon­ver­te­rių?

Įvairiose interneto sve­tai­nė­se galima rasti nemokamų „Punycode“ ge­ne­ra­to­rių, kurie kon­ver­tuo­ja IDN į ASCII su­de­ri­na­mą formą. Vienas iš pavyzdžių – „Punycoder“.

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

Kitų aukš­čiau­sio lygio domenų (TLD) IDN adresams puikiai tinka Mathias Bynens sukurtas „Punycode“ kon­ver­te­ris, pagrįstas „punycode.js “.

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­tio­na­li­sed domains.

Ar „Punycode“ kelia grėsmę saugumui?

„Punycode“ tampa saugumo rizika ho­mo­gra­fi­nio suk­čia­vi­mo atveju – tai ki­ber­ne­ti­nės atakos, kai nu­si­kal­tė­liai pa­si­nau­do­ja skirtingų simbolių išvaizdos panašumu, kad pri­trauk­tų nieko ne­įta­rian­čias aukas į su­klas­to­tas svetaines. Blogeris Xudong Zheng parodo, kaip atrodo tokia suk­čia­vi­mo ataka, rem­da­ma­sis šiuo „Punycode“ domeno pavyzdžiu: https://www.xn--80ak6aa92e.com/. Tai nukreipia interneto var­to­to­jus į svetainę su šiuo IDN: https://www.аррӏе.com/

Pateiktas URL adresas nėra oficiali Ka­li­for­ni­jos tech­no­lo­gi­jų bendrovės „Apple Inc.“ svetainė, o tik pa­vyz­džiui sukurta suk­čia­vi­mo svetainė.

Vietoj ASCII simbolio „a“ (Unicode U+0061) nau­do­ja­mas kirilicos simbolis „а“ (U+0430) – šių dviejų simbolių plika akimi beveik neįmanoma atskirti, tačiau interneto naršyklės juos traktuoja kaip skir­tin­gus simbolius. Net ser­ti­fi­ka­tai negali už­tik­rin­ti saugumo, kuris apsaugotų interneto var­to­to­jus. Šiuo­lai­ki­nė­se suk­čia­vi­mo kam­pa­ni­jo­se nu­si­kal­tė­liai kuria ga­lio­jan­čius SSL ser­ti­fi­ka­tus, siekdami, kad jų svetainės atrodytų au­ten­tiš­kos.

Da­bar­ti­nės „Chrome“ ir „Opera“ versijos užkerta kelią tokiems suk­čia­vi­mo bandymams, IDN domenuose, kuriuose maišomi skirtingų simbolių rinkinių simboliai, vietoj in­ter­na­cio­na­li­zuo­to domeno pa­va­di­ni­mo rodydamos ACE eilutę. „Internet Explorer“ ir „Microsoft Edge“ neleidžia pri­si­jung­ti prie tokių domenų. Tačiau „Firefox“ neteikia jokios apsaugos nuo suk­čia­vi­mo naudojant „Punycode“.

Image: Example of a homographic attack
Example of a ho­mo­grap­hic domain: The URL looks the same as Apple’s official website, however, the Unicode character U+0430 is actually a Cyrillic letter that is as­to­nis­hing­ly similar to the ASCII character a.

Štai kaip „Firefox“ nau­do­to­jai gali ap­si­sau­go­ti. Siekdami sumažinti su suk­čia­vi­mo sve­tai­nė­mis susijusią riziką, „Firefox“ nau­do­to­jai šiuo metu gali tik užkirsti kelią „Punycode“ kodų kon­ver­ta­vi­mui į IDN vardus apskritai. Šiam laikinam spren­di­mui įgy­ven­din­ti reikia atlikti tik du veiksmus:

  1. Ati­da­ry­ki­te kon­fi­gū­ra­ci­jos re­dak­to­rių: įveskite „about:config“ į naršyklės adresų juostą, kad ati­da­ry­tu­mė­te „Firefox“ kon­fi­gū­ra­ci­jos re­dak­to­rių.
  2. Priversti naudoti „Punycode“: suraskite nustatymą „network.IDN_show_punycode “ ir pa­kei­s­ki­te jo vertę iš „false“ į „true“.

Nustačius pa­ra­met­rus, „Firefox“ adresų juostoje tarp­tau­ti­nius domenus rodys kaip ACE eilutes.

Go to Main Menu