A Punycode egy szabványosított kódolási módszer, amely lehetővé teszi az Unicode karakterek korlátozott ASCII karakterkészlet segítségével történő leképezését, ami azt jelenti, hogy a nemzetköziesített domainnevek (IDN) nem ASCII karaktereket is tartalmazhatnak, például umlautokat.

Hogyan fejlesztették ki a kódolási módszert?

2003-ban a Punycode-ot az Internet Engineering Task Force (IETF) szabványosította az alkalmazásokban használt nemzetköziesített domainnevek (IDNA) kódolásának szintaxisként. Az IETF akkor definiál egy domain nevet IDN-ként, ha az olyan speciális karaktereket tartalmaz, mint diakritikus jelek, betűk vagy karakterek, amelyek nem találhatók meg a latin ábécében (pl. umlautok a német nyelvben). Az ilyen karaktereket az alapvető protokollok, mint például a Domain Name System (DNS), nem tudják feldolgozni. Ebben a példában egy német nyelvű domain nevet fogunk használni. Bár az IDN-ek bevezetése óta a müller-büromöbel (Müller irodabútorok) megengedett a .de felső szintű domain alatt, csak a nem alapszimbólumok kódolásával lehet feldolgozni, például a névfeloldás során. Számos internetes protokoll angol nyelven alapul, ezért csak a korlátozott ASCII karakterkészletet támogatja.

Az IDN-ek és a régebbi internetes szabványok közötti kompatibilitás biztosítása érdekében az IETF előírta a nemzetköziesített domainnevek kódolásának módszerét a már engedélyezett karakterek felhasználásával. Ez a szabványosított kódolási eljárás Punycode néven ismert.

Megjegyzés

Az e-mail címek esetében a Punycode csak a nemzetköziesített e-mail domaineknél használatos. Ha a helyi rész (az @ karakter előtt) nem ASCII karaktereket tartalmaz, akkor UTF-8 kódolással kerül kódolásra.

Hogyan működik a Punycode kódolás?

A Punycode folyamat áttekintése

A Punycode-ot az IETF az RFC 3492-ben a Bootstring néven ismert általános kódolási algoritmus lehetséges alkalmazásaként határozza meg. A Bootstring algoritmus lehetővé teszi a tetszőleges karakterkészleteket tartalmazó karakterláncok leképezését korlátozott elemválasztékkal. A kódolási eljárás kidolgozása hat alapelvre épül. A Punycode kódolásban ezeket az elemeket alapkaraktereknek nevezik, amelyek kisbetűkből, számokból és kötőjelből (- ) állnak. A kódolási módszer kidolgozása hat alapelvre épül.

  • Teljesség: Minden kimeneti karakterlánc egy egyszerűsített karakterlánchoz rendelhető egy boot string segítségével.
  • Egyediség: A kimeneti karakterlánc hozzárendelése a megfelelő Bootstring kódoláshoz egyedülálló. Minden Punycode-hoz pontosan egy ASCII-megfelelő rendelhető, és fordítva.
  • Visszafordíthatóság: A Bootstring kódolás bármikor visszafordítható információvesztés nélkül.
  • Hatékonyság: A kódolt karakterlánc – ha egyáltalán – csak minimálisan hosszabb, mint a kimeneti karakterlánc.
  • Egyszerűség: A Bootstring egyszerű kódolási és dekódolási algoritmusokat használ.
  • Olvashatóság: Csak azok a karakterek kerülnek kódolásra, amelyek nem ábrázolhatók a cél karakterkészletben. Az összes többi karakter változatlan marad.

A Punycode a Bootstringet a nemzetköziesített domainnevekre vonatkozó követelményeknek megfelelően határozza meg. Ez lehetővé teszi az Unicode karakterek leképezését a korábban engedélyezett alapkarakterek segítségével.

Punycode példa

Az alábbi példa bemutatja, hogyan működik a kódolás:

IDN: müller-büromöbel

Az IDN müller-büromöbel tartalmazza az ü és ö karaktereket, amelyek nem szerepelnek a domainnevekhez korábban engedélyezett karakterkészletben. Ezért kompatibilitásuk biztosítása érdekében Punycode segítségével kell kódolni őket.

1. lépés: Normalizálás

Az első lépésben a kódolási eljárás lehetővé teszi a kimeneti karakterlánc normalizálását. Az összes nagybetű helyébe a megfelelő kisbetű kerül.

2. lépés: Az összes nem alapvető karakter eltávolítása

A második lépésben minden nem alapvető karaktert eltávolítunk. Ezeket aztán kódolt formában hozzáadjuk a domain névhez, és kötőjellel elválasztjuk egymástól.

Ha a Punycode szintaxist használják az internetcímek kódolására, akkor minden eredmény karakterlánc ACE előtaggal ( ASCII-kompatibilis kódolás rövidítése) rendelkezik:

ACE előtag: xn–

Az ACE előtag biztosítja, hogy a kötőjelet tartalmazó domainnevek ne legyenek tévesen értelmezve nemzetközi domainnevekként.

Ez az IDN müller-büromöbel következő kódolását eredményezi:

ACE: xn–mller-brombel-rmb4fg

A Punycode eljárás alapjául szolgáló algoritmus figyelemre méltó. Biztosítja, hogy a konverzió ellenére a domainnevek ne haladják meg a 63 karakteres maximális hosszúságot.

A kódolási folyamat során az Unicode karakterek nem kerülnek egy az egyben ASCII karakterekké konvertálásra. Ehelyett az algoritmus a törölt karakterek közötti távolság és a kimeneti karakterláncban elfoglalt pozíciójuk alapján határozza meg a karakterláncot.

A fenti példához kapcsolódóan az rmb4fg karakterlánc azt jelzi, hogy az mller-brombel szót a második és a hetedik pozícióban az ü és ö Unicode karakterekkel kell kiegészíteni.

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

A szabály alóli kivételek

Eltérés akkor fordul elő, ha a domainnév nem tartalmaz nem alap karaktereket, vagy csak nem alap karaktereket tartalmaz.

A kizárólag nem alap karaktereket tartalmazó domain név kódolás után csak a kódolt karakterláncot és az ACE előtagot jeleníti meg. Az olyan domain név, mint például το παράδειγμα (görögül „példa”), a következő kódolásnak felel meg:

IDN: példa

ACE: xn–hxajbheg2az3al

Ha egy domainnév csak alapkaraktereket tartalmaz, akkor a Punycode nem kerül alkalmazásra. Ennek megfelelően nem kerül hozzá ACE előtag. Ebben az esetben nincs szükség kódolásra, mert az alapvető internetes protokollok már képesek értelmezni a domainnevet.

Ha a teljes domainnevet (FQDN) egészében tekintjük, akkor minden címke (felső szintű domain, másodszintű domain, harmadszintű domain stb.) külön kódolásra kerül. Egyolyan domain*, mint például пример.бг* (bolgárul „example.bg”), a következőképpen kódolható

IDN: пример.бг

ACE: xn–e1afmkfd.xn–90ae

Az alábbi táblázat áttekintést ad a Punycode szintaxis különböző változatáról.

IDN Punycode ACE
Alap- és nem alap karakterek müller-büromöbel.de mller-brombel-rmb4fg.de xn--mller-brombel-rmb4fg.de
Csak nem alap karakterek Παράδειγμα.gr hxajbheg2az3al.gr xn--hxajbheg2az3al.gr
Csak alap karakterek example.org example.org Nincs használata
Megjegyzés

A Punycode algoritmus részletes leírása az RFC 3492 dokumentumban található. Ezenkívül a dokumentum tartalmazza a kódolási eljárás C programozási nyelven történő megvalósítását is.

A felhasználók általában szabadon elérhető Punycode-konverterekhez folyamodnak a nemzetköziesített domainnevek kódolásához.

Puny kódolás emoji domainnel

A Punycode segítségével nemcsak nemzetköziesített domainnevek, hanem emoji domainnevek is létrehozhatók. Ahhoz azonban, hogy ez működjön, a legfelső szintű domainnek engedélyeznie kell az emojik használatát, és a kívánt hangulatjelnek az Unicode szabványban kell szerepelnie.

Tipp

Jelenleg a következő TLD-k engedélyezik az emoji domainnevek regisztrációját: .ws, .tk, .to, .ml, .ga, .cf, .gq és .fm.

Az emoji domainnevek technikailag Punycode formátumban kerülnek feldolgozásra, de elvileg a felhasználó számára szöveg és hangulatjelek kombinációjaként kell megjelenniük.

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

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

Jelenleg gyakorlatilag egyetlen szabványos böngésző sem implementálja ezt. Ha emoji domaint ír be a Firefox, Chrome, Safari, Edge vagy Opera böngészőbe, a címsor csak az ACE karakterláncot jeleníti meg.

Vannak ingyenes Punycode-konverterek?

Az IDN-eket ASCII-kompatibilis formátumba átalakító ingyenes Punycode generátorok számos weboldalon megtalálhatók. Egy példa erre a Punycoder.

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

Más TLD-k IDN-jei esetében Mathias Bynens punycode.js alapú Punycode konverterje jó választás.

Kép: 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 converting internationalised domains.

A Punycode biztonsági kockázatot jelent?

A Punycode biztonsági kockázatot jelent a homográf phishing esetében – olyan kibertámadásoknál, ahol a bűnözők különböző karakterek hasonló megjelenését használják fel arra, hogy gyanútlan áldozatokat csaljanak hamis weboldalakra. A blogger Xudong Zheng a következő Punycode domain https://www.xn--80ak6aa92e.com/ példáján mutatja be, hogyan néz ki egy phishing támadás. Ez az internethasználókat a következő IDN-nel rendelkező weboldalra vezeti: https://www.аррӏе.com/

A megadott URL nem a kaliforniai technológiai vállalat, az Apple Inc. hivatalos weboldala, hanem bemutató célokra létrehozott adathalász weboldal.

Az ASCII karakter a helyett a Unicode U+0061 karaktert, a cirill а (U+0430) karaktert használják – ezeket a két karaktert szabad szemmel alig lehet megkülönböztetni, de a böngészők különböző karakterként értelmezik őket. Még a tanúsítványok sem tudnak biztonságot nyújtani az internethasználók védelmére. A modern adathalász kampányok során a bűnözők érvényes SSL-tanúsítványokat hoznak létre azzal a céllal, hogy webhelyeik hitelesnek tűnjenek.

A Chrome és az Opera jelenlegi verziói megakadályozzák az ilyen típusú adathalász támadásokat azzal, hogy az IDN-eken, amelyek különböző karakterkészletekből származó karaktereket kevernek, az ACE karakterláncot jelenítik meg a nemzetköziesített domain helyett. Az Internet Explorer és a Microsoft Edge megakadályozza az ilyen domainok elérését. A Firefox azonban nem nyújt védelmet a Punycode adathalászat ellen.

Kép: Example of a homographic attack
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.

Így védhetik meg magukat a Firefox felhasználók. A phishing webhelyek jelentette kockázat csökkentése érdekében a Firefox felhasználók jelenleg csak azt a lehetőséget választhatják, hogy általában megakadályozzák a Punycode IDN-ekké történő átalakítását. Ehhez az ideiglenes megoldáshoz csak két lépés szükséges:

  1. Nyissa meg a konfigurációs szerkesztőt: Írja be az about:config parancsot a böngésző címsorába, hogy megnyissa a Firefox konfigurációs szerkesztőjét.
  2. Punycode kényszerítése: Keresse meg a network.IDN_show_punycode beállítást, és változtassa meg az értékét false-ról true-ra.

A konfigurálás után a Firefox a nemzetközi domainnevek ACE-karaktersorozatként jelennek meg a címsorban.

Ugrás a főmenübe