# 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)](https://www.ionos.com/et-ee/digitalguide/domeenid/domeeni-haldamine/mis-on-rahvusvaheline-domeeninimi-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**.

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

[![Image: Overview of sections of the ACE string](https://www.ionos.com/et-ee/digitalguide/fileadmin/_processed_/f/9/csm_using-punycode-with-domain_095d9fdcf3.webp "Overview of sections of the ACE string")](https://www.ionos.com/et-ee/digitalguide/fileadmin/DigitalGuide/Schaubilder/using-punycode-with-domain.jpg) The ACE string consists of the ACE prefix and a puny-coded string. ### 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. Domeen*nagu пример.бг* (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.

<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>Põhi- ja mittepõhitähed</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>Ainult mitte-baasmärgid</strong></td>
      <td>`Παράδειγμα.gr`</td>
      <td>`hxajbheg2az3al.gr`</td>
      <td>`xn--hxajbheg2az3al.gr`</td>
    </tr>
    <tr>
      <td><strong>Ainult baasmärgid</strong></td>
      <td>`example.org`</td>
      <td>`example.org`</td>
      <td>Ei kasuta</td>
    </tr>
  </tbody>
</table>

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

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

[![Image: Punycoder, the Punycode converter](https://www.ionos.com/et-ee/digitalguide/fileadmin/_processed_/6/1/csm_punycode-converter-example_5f10d63381.webp "Punycoder, the Punycode converter")](https://www.ionos.com/et-ee/digitalguide/fileadmin/DigitalGuide/Screenshots_2023/punycode-converter-example.png) Punycoder converts Punycode to Text/Unicode and vice-versa. Muude tippdomeenide IDN-ide puhul on hea valik [**Mathias Bynensi**](https://mothereff.in/punycode "Punycode converter by Mathias Bynens at mothereff.in/punycode") [punycode.js](https://github.com/mathiasbynens/punycode.js "punycode.js on github") -il põhinev [**Punycode-konverter**](https://mothereff.in/punycode "Punycode converter by Mathias Bynens at mothereff.in/punycode").

[![Image: The Punycode converter made by Mathias Bynens based on punycode.js](https://www.ionos.com/et-ee/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/et-ee/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. ## 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](https://www.xudongz.com/blog/2017/idn-phishing/ "Xudong Zheng’s blog") 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.

[![Image: Example of a homographic attack](https://www.ionos.com/et-ee/digitalguide/fileadmin/_processed_/d/f/csm_example-homographic-attack_2d01e6cb3b.webp "Example of a homographic attack")](https://www.ionos.com/et-ee/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. **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:

1. **Avage seadete redaktor**: sisestage veebibrauseri aadressiribale *about:config*, et avada Firefoxi seadete redaktor.
2. **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.


This is a markdown version of: [https://www.ionos.com/et-ee/digitalguide/domeenid/domeeni-haldamine/punycode/](https://www.ionos.com/et-ee/digitalguide/domeenid/domeeni-haldamine/punycode/) for AI/LLM consumption.