# 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)](https://www.ionos.com/lt-lt/digitalguide/domenai/domeno-administravimas/kas-yra-tarptautinis-domeno-vardas-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**“.

Note 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](https://tools.ietf.org/html/rfc3492 "RFC 3492 on tools.ietf.org") „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.

[![Image: Overview of sections of the ACE string](https://www.ionos.com/lt-lt/digitalguide/fileadmin/_processed_/f/9/csm_using-punycode-with-domain_095d9fdcf3.webp "Overview of sections of the ACE string")](https://www.ionos.com/lt-lt/digitalguide/fileadmin/DigitalGuide/Schaubilder/using-punycode-with-domain.jpg) The ACE string consists of the ACE prefix and a puny-coded string. ### 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.

<table>
  <thead>
    <tr>
      <th></th>
      <th><strong>IDN</strong></th>
      <th><strong>Punycode</strong></th>
      <th><strong>ACE</strong></th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td><strong>Baziniai ir nebaziniai simboliai</strong></td>
      <td>`müller-büromöbel.de`</td>
      <td>`mller-brombel-rmb4fg.de`</td>
      <td>`xn--mller-brombel-rmb4fg.de`</td>
    </tr>
    <tr>
      <td><strong>Tik ne baziniai simboliai</strong></td>
      <td>`Παράδειγμα.gr`</td>
      <td>`hxajbheg2az3al.gr`</td>
      <td>`xn--hxajbheg2az3al.gr`</td>
    </tr>
    <tr>
      <td><strong>Tik baziniai simboliai</strong></td>
      <td>`example.org`</td>
      <td>`example.org`</td>
      <td>Nenaudojama</td>
    </tr>
  </tbody>
</table>

Note 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ą.

Tip Š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](https://www.punycoder.com/ "Convert Punycode using Punycoder")“.

[![Image: Punycoder, the Punycode converter](https://www.ionos.com/lt-lt/digitalguide/fileadmin/_processed_/6/1/csm_punycode-converter-example_5f10d63381.webp "Punycoder, the Punycode converter")](https://www.ionos.com/lt-lt/digitalguide/fileadmin/DigitalGuide/Screenshots_2023/punycode-converter-example.png) Punycoder converts Punycode to Text/Unicode and vice-versa. Kitų aukščiausio lygio domenų (TLD) IDN adresams puikiai tinka [**Mathias Bynens sukurtas „Punycode“ konverteris**](https://mothereff.in/punycode "Punycode converter by Mathias Bynens at mothereff.in/punycode"), pagrįstas [„punycode.js](https://github.com/mathiasbynens/punycode.js "punycode.js on github") “.

[![Image: The Punycode converter made by Mathias Bynens based on punycode.js](https://www.ionos.com/lt-lt/digitalguide/fileadmin/_processed_/c/f/csm_punycode-converter-based-on-js-with-example_88bdd792db.webp "The Punycode converter made by Mathias Bynens based on punycode.js")](https://www.ionos.com/lt-lt/digitalguide/fileadmin/DigitalGuide/Screenshots_2023/punycode-converter-based-on-js-with-example.png) With his \*Punycode domain name converter,\*Mathias Bynens offers an open-source tool for converting internationalised domains. ## 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](https://www.xudongz.com/blog/2017/idn-phishing/ "Xudong Zheng’s blog") 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“.

[![Image: Example of a homographic attack](https://www.ionos.com/lt-lt/digitalguide/fileadmin/_processed_/d/f/csm_example-homographic-attack_2d01e6cb3b.webp "Example of a homographic attack")](https://www.ionos.com/lt-lt/digitalguide/fileadmin/DigitalGuide/Screenshots_2023/example-homographic-attack.png) Example of a homographic domain: The URL looks the same as Apple’s official website, however, the Unicode character U+0430 is actually a Cyrillic letter that is astonishingly similar to the ASCII character a. **Š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:

1. **Atidarykite konfigūracijos redaktorių**: įveskite *„about:config“* į naršyklės adresų juostą, kad atidarytumėte „Firefox“ konfigūracijos redaktorių.
2. **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.


This is a markdown version of: [https://www.ionos.com/lt-lt/digitalguide/domenai/domeno-administravimas/punycode/](https://www.ionos.com/lt-lt/digitalguide/domenai/domeno-administravimas/punycode/) for AI/LLM consumption.