# Kuinka muuntaa kansainvälistetyt verkkotunnukset Punycode-muotoon

Punycode on standardoitu **koodausmenetelmä**, jonka avulla Unicode-merkit voidaan esittää rajoitetulla ASCII-merkistöllä. Tämä tarkoittaa, että [kansainvälistetyt verkkotunnukset (IDN)](https://www.ionos.com/fi-fi/digitalguide/verkkotunnukset/verkkotunnuksen-hallinta/mikae-on-kansainvaelistetty-verkkotunnus-idn/) voivat sisältää myös muita kuin ASCII-merkkejä, kuten esimerkiksi umlauteja.

## Miten koodausmenetelmä kehitettiin?

Vuonna 2003 Internet Engineering Task Force (IETF) standardoi Punycoden syntaksin **kansainvälistettyjen verkkotunnusten** koodaamiseen **sovelluksissa (IDNA)**. IETF määrittelee verkkotunnuksen IDN:ksi, jos se sisältää erikoismerkkejä, kuten diakriittisiä merkkejä, kirjaimia tai merkkejä, joita ei löydy latinalaisesta aakkosesta (esim. saksan kielen umlautit). Tällaisia merkkejä ei voida käsitellä perusprotokollilla, kuten Domain Name System (DNS). Tässä esimerkissä käytämme saksankielistä verkkotunnusta. Vaikka IDN-tunnusten käyttöönoton jälkeen *müller-büromöbel* (Müllerin toimistokalusteet) on sallittu *.de*-tason verkkotunnuksessa, sitä voidaan käsitellä vain koodaamalla muut kuin perusmerkit, esimerkiksi nimien selvittämisen yhteydessä. Lukuisat internet-protokollat perustuvat englantiin ja tukevat siksi vain rajoitettua ASCII-merkistöä.

IDN-nimien ja vanhempien internetstandardien yhteensopivuuden varmistamiseksi IETF on määrittänyt menetelmän, jolla kansainvälistetyt verkkotunnukset koodataan käyttämällä jo aiemmin sallittuja merkkejä. Tätä standardoitua koodausmenettelyä kutsutaan nimellä **Punycode**.

Huomio Sähköpostiosoitteiden osalta Punycodea käytetään vain kansainvälistetyissä sähköpostitunnuksissa. Jos paikallinen osa (merkkiä @ edeltävä osa) sisältää muita kuin ASCII-merkkejä, se koodataan UTF-8-merkistöön.

## Miten Punycode-koodaus toimii?

### Yleiskatsaus Punycode-prosessiin

IETF on määritellyt Punycoden [RFC 3492](https://tools.ietf.org/html/rfc3492 "RFC 3492 on tools.ietf.org") -standardissa yhtenä mahdollisena sovelluksena yleiselle koodausalgoritmille, joka tunnetaan nimellä Bootstring. **Bootstring-algoritmi** mahdollistaa sellaisten merkkijonojen koodaamisen, jotka koostuvat mielivaltaisista merkistöistä, käyttäen rajoitettua valikoimaa elementtejä. Koodausmenettelyn kehittäminen perustuu kuuteen periaatteeseen. Punycode-koodauksessa näitä elementtejä kutsutaan **perusmerkeiksi**, jotka koostuvat pienistä kirjaimista, numeroista ja väliviivasta (-). Koodausmenetelmän kehittäminen perustuu kuuteen periaatteeseen.

- **Täydellisyys**: Jokainen tulostusmerkkijono voidaan liittää yksinkertaistettuun merkkijonoon boot-merkkijonon avulla.
- **Ainutlaatuisuus**: Tulostusmerkkijonon liittäminen vastaavaan käynnistysmerkkijonokoodaukseen on ainutlaatuista. Jokaiselle Punycode-merkille voidaan liittää täsmälleen yksi ASCII-vastaava ja päinvastoin.
- **Käännettävyys**: Bootstring-koodaus voidaan kääntää milloin tahansa ilman tietojen menetystä.
- **Tehokkuus**: Koodattu merkkijono on – jos ollenkaan – vain minimaalisesti pidempi kuin tulostusmerkkijono.
- **Yksinkertaisuus**: Bootstring käyttää yksinkertaisia koodaus- ja dekoodausalgoritmeja.
- **Luettavuus**: Vain merkit, joita ei voida esittää kohdemerkistössä, koodataan. Kaikki muut merkit pysyvät muuttumattomina.

Punycode määrittelee Bootstringin kansainvälistettyjä verkkotunnuksia koskevien vaatimusten mukaisesti. Tämän pitäisi mahdollistaa Unicode-merkkien muuntaminen aiemmin sallittujen perusmerkkien avulla.

### Punycode-esimerkki

Seuraava esimerkki havainnollistaa, miten koodaus toimii:

**IDN:** *müller-büromöbel*

IDN-verkkotunnus *„müller-büromöbel“* sisältää merkit ü ja ö, joita ei ole aiemmin sallitussa verkkotunnusten merkistössä. Tästä syystä ne on koodattava Punycode-muotoon yhteensopivuuden varmistamiseksi.

**Vaihe 1: Normalisointi**

Ensimmäisessä vaiheessa koodausprosessi mahdollistaa tulostettavan merkkijonon normalisoinnin. Kaikki isot kirjaimet korvataan vastaavilla pienillä kirjaimilla.

**Vaihe 2: Kaikkien muiden kuin perusmerkkien poistaminen**

Toisessa vaiheessa kaikki muut kuin perusmerkit poistetaan. Nämä lisätään sitten verkkotunnukseen koodatussa muodossa ja erotetaan toisistaan väliviivalla.

Jos Internet-osoitteiden koodaamiseen käytetään Punycode-syntaksia, jokaiselle tulosmerkkijonolle annetaan **ACE-etuliite** (lyhenne sanoista *ASCII-compatible encoding*):

**ACE-etuliite:** *xn–*

ACE-etuliite varmistaa, ettei väliviivoja sisältäviä verkkotunnuksia tulkita virheellisesti kansainvälisiksi verkkotunnuksiksi.

Tämän seurauksena IDN-tunnus “ *müller-büromöbel*“ koodataan seuraavasti:

**ACE:** *xn–mller-brombel-rmb4fg*

Punycode-menettelyn taustalla oleva algoritmi on vaikuttava. Se varmistaa, että muunnoksesta huolimatta verkkotunnusten **pituus** ei ylitä **63 merkin enimmäispituutta**.

Koodausprosessin aikana Unicode-merkkejä ei muunneta yksi yhteen ASCII-merkeiksi. Sen sijaan algoritmi määrittää merkkijonon perustuen poistettujen merkkien väliseen etäisyyteen ja merkkien sijaintiin tulostusmerkkijonossa.

Edellä esitetyn esimerkin tapaan merkkijono *rmb4fg* tarkoittaa, että merkkijonoon *mller-brombel* on lisättävä Unicode-merkit *ü* ja *ö* toiseen ja seitsemänteen kohtaan.

[![Kuva: Overview of sections of the ACE string](https://www.ionos.com/fi-fi/digitalguide/fileadmin/_processed_/f/9/csm_using-punycode-with-domain_095d9fdcf3.webp "Overview of sections of the ACE string")](https://www.ionos.com/fi-fi/digitalguide/fileadmin/DigitalGuide/Schaubilder/using-punycode-with-domain.jpg) The ACE string consists of the ACE prefix and a puny-coded string. ### Säännön poikkeukset

Poikkeamia esiintyy, jos verkkotunnuksessa ei ole lainkaan muita kuin perusmerkkejä tai jos se sisältää pelkästään muita kuin perusmerkkejä.

Vain muita kuin perusmerkkejä sisältävässä verkkotunnuksessa näkyy koodauksen jälkeen vain koodattu merkkijono ja ACE-etuliite. Verkkotunnus, kuten *παράδειγμα* (kreikaksi ”esimerkki”), vastaa seuraavaa koodausta:

**IDN:** *esimerkki*

**ACE:** *xn–hxajbheg2az3al*

Jos verkkotunnus sisältää vain perusmerkkejä, Punycode-koodausta ei käytetä. Näin ollen ACE-etuliitettä ei lisätä. Koodausta ei tässä tapauksessa tarvita, koska Internetin perusprotokollat pystyvät jo tulkitsemaan verkkotunnuksen.

Kun tarkastellaan täydellistä verkkotunnusta (FQDN) kokonaisuutena, jokainen osa (ylätason verkkotunnus, toisen tason verkkotunnus, kolmannen tason verkkotunnus jne.) koodataan erikseen. Verkkotunnus*kuten пример.bg* (bulgariaksi ”example.bg”) voitaisiin koodata seuraavasti

**IDN:** *esimerkki.bg*

**ACE:** *xn–e1afmkfd.xn–90ae*

Seuraavassa taulukossa on yhteenveto Punycode-syntaksin eri muunnoksista.

<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>Perus- ja muut merkit</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>Vain ei-perusmerkit</strong></td>
      <td>`Παράδειγμα.gr`</td>
      <td>`hxajbheg2az3al.gr`</td>
      <td>`xn--hxajbheg2az3al.gr`</td>
    </tr>
    <tr>
      <td><strong>Vain perusmerkit</strong></td>
      <td>`example.org`</td>
      <td>`example.org`</td>
      <td>Ei käyttöä</td>
    </tr>
  </tbody>
</table>

Huomio Punycode-algoritmi kuvataan yksityiskohtaisesti RFC 3492 -standardissa. Lisäksi asiakirjassa esitetään koodausmenettelyn toteutus C-ohjelmointikielellä.

Käyttäjät turvautuvat yleensä ilmaiseksi saatavilla oleviin **Punycode-muuntimiin** kansainvälistettyjen verkkotunnusten koodaamiseksi.

### Puny-koodaus emoji-verkkotunnuksissa

Punycoden avulla voidaan toteuttaa paitsi kansainvälistettyjä verkkotunnuksia myös emojiverkkotunnuksia. Jotta tämä toimisi, ylätason verkkotunnuksen on kuitenkin sallittava emojien käyttö, ja halutun emojin on kuuluttava Unicode-standardiin.

Vinkki Tällä hetkellä emoji-verkkotunnuksia voi rekisteröidä seuraavilla aliverkkotunnuksilla: .ws, .tk, .to, .ml, .ga, .cf, .gq ja .fm.

Emoji-verkkotunnukset käsitellään teknisesti Punycode-muodossa, mutta teoriassa ne tulisi esittää käyttäjälle tekstin ja hymiöiden yhdistelmänä.

**Emoji-verkkotunnus:** `https://i❤.ws/`

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

Tällä hetkellä käytännössä mikään tavallinen selain ei tue tätä ominaisuutta. Jos kirjoitat emoji-verkkotunnuksen Firefoxiin, Chromeen, Safarille, Edgeen tai Operaan, osoiterivillä näkyy vain ACE-merkkijono.

## Onko olemassa ilmaisia Punycode-muuntimia?

Verkosta löytyy useita ilmaisia Punycode-muuntimia, jotka muuntavat IDN-osoitteet ASCII-yhteensopivaan muotoon. Yksi esimerkki on [Punycoder](https://www.punycoder.com/ "Convert Punycode using Punycoder").

[![Kuva: Punycoder, the Punycode converter](https://www.ionos.com/fi-fi/digitalguide/fileadmin/_processed_/6/1/csm_punycode-converter-example_5f10d63381.webp "Punycoder, the Punycode converter")](https://www.ionos.com/fi-fi/digitalguide/fileadmin/DigitalGuide/Screenshots_2023/punycode-converter-example.png) Punycoder converts Punycode to Text/Unicode and vice-versa. Muiden ylätason verkkotunnusten (TLD) IDN-osoitteiden muuntamiseen sopii hyvin [**Mathias Bynensin**](https://mothereff.in/punycode "Punycode converter by Mathias Bynens at mothereff.in/punycode") [punycode.js-kirjas](https://github.com/mathiasbynens/punycode.js "punycode.js on github") toon perustuva [**Punycode-muunnin**](https://mothereff.in/punycode "Punycode converter by Mathias Bynens at mothereff.in/punycode").

[![Kuva: The Punycode converter made by Mathias Bynens based on punycode.js](https://www.ionos.com/fi-fi/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/fi-fi/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. ## Aiheuttaako Punycode turvallisuusriskin?

Punycode muodostuu turvallisuusriskiksi homografisen phishingin yhteydessä – kyseessä ovat kyberhyökkäykset, joissa rikolliset hyödyntävät eri merkkien samankaltaista ulkonäköä houkutellakseen hyväuskoisia uhreja väärennetyille verkkosivustoille. [Bloggaaja Xudong Zheng](https://www.xudongz.com/blog/2017/idn-phishing/ "Xudong Zheng’s blog") havainnollistaa, miltä phishing-hyökkäys näyttää, käyttäen esimerkkinä seuraavaa Punycode-verkkotunnusta: `https://www.xn--80ak6aa92e.com/`. Tämä ohjaa internetin käyttäjät verkkosivustolle, jolla on seuraava IDN: `https://www.аррӏе.com/`

Annettu URL-osoite ei ole kalifornialaisen teknologiayrityksen Apple Inc:n virallinen verkkosivusto, vaan esittelytarkoituksessa luotu tietojenkalastelusivusto.

ASCII-merkin a (Unicode U+0061) sijaan käytetään kyrillistä а-merkkiä (U+0430) – näitä kahta merkkiä on vaikea erottaa toisistaan paljaalla silmällä, mutta verkkoselaimet tulkitsevat ne eri merkeiksi. **Edes varmenteet eivät pysty takaamaan** internetin käyttäjien **turvallisuutta**. Nykyaikaisissa tietojenkalastelukampanjoissa rikolliset luovat kelvollisia SSL-varmenteita, jotta heidän verkkosivustonsa näyttäisivät aidoilta.

Chromen ja Operan nykyiset versiot estävät tällaiset tietojenkalasteluhyökkäykset näyttämällä ACE-merkkijonon kansainvälistetyn verkkotunnuksen sijaan, kun verkkotunnuksessa (IDN) on sekoitettu eri merkistöjen merkkejä. Internet Explorer ja Microsoft Edge estävät pääsyn tällaisiin verkkotunnuksiin. Firefox ei sen sijaan tarjoa minkäänlaista suojaa Punycode-tietojenkalastelua vastaan.

[![Kuva: Example of a homographic attack](https://www.ionos.com/fi-fi/digitalguide/fileadmin/_processed_/d/f/csm_example-homographic-attack_2d01e6cb3b.webp "Example of a homographic attack")](https://www.ionos.com/fi-fi/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. **Näin Firefox-käyttäjät voivat suojautua**. Phishing-sivustojen aiheuttaman riskin vähentämiseksi Firefox-käyttäjillä on tällä hetkellä käytettävissään vain vaihtoehto, jolla estetään Punycoden muuntaminen IDN-osoitteiksi yleisesti. Tämä väliaikainen ratkaisu vaatii vain kaksi vaihetta:

1. **Avaa asetusten muokkausohjelma**: Kirjoita selaimen osoiteriville *about:config* avataksesi Firefoxin asetusten muokkausohjelman.
2. **Pakota Punycode**: Etsi asetus *network.IDN\_show\_punycode* ja muuta sen arvo false:sta true:ksi.

Asetusten määrittämisen jälkeen Firefox näyttää kansainvälistetyt verkkotunnukset osoiterivillä ACE-merkkijonoina.


This is a markdown version of: [https://www.ionos.com/fi-fi/digitalguide/verkkotunnukset/verkkotunnuksen-hallinta/punycode/](https://www.ionos.com/fi-fi/digitalguide/verkkotunnukset/verkkotunnuksen-hallinta/punycode/) for AI/LLM consumption.