Punycode je štandardizovaná metóda kódovania, ktorá umožňuje mapovanie znakov Unicode pomocou obmedzenej sady znakov ASCII, čo znamená, že internacionalizované doménové mená (IDN) môžu obsahovať aj znaky, ktoré nie sú v ASCII, napríklad dĺžne.

Ako bola vyvinutá metóda kódovania?

V roku 2003 bol Punycode štandardizovaný organizáciou Internet Engineering Task Force (IETF) ako syntax pre kódovanie internacionalizovaných doménových mien v aplikáciách (IDNA). IETF definuje doménové meno ako IDN, ak obsahuje špeciálne znaky, ako sú diakritické znamienka, písmená alebo znaky, ktoré sa nenachádzajú v latinskej abecede (napr. dĺžne v nemčine). Takéto znaky nemôžu byť spracované základnými protokolmi, ako je Domain Name System (DNS). V tomto príklade použijeme doménové meno v nemčine. Hoci po zavedení IDN je müller-büromöbel (Müllerov kancelársky nábytok) povolené v doméne najvyššej úrovne .de, môže byť spracované len kódovaním neštandardných znakov, napríklad v kontexte prekladu mien. Mnohé internetové protokoly sú založené na angličtine, a preto podporujú len obmedzenú sadu znakov ASCII.

S cieľom zabezpečiť kompatibilitu medzi IDN a staršími internetovými štandardmi stanovila organizácia IETF metódu kódovania internacionalizovaných doménových mien pomocou znakov, ktoré už boli povolené. Tento štandardizovaný postup kódovania je známy ako Punycode.

Poznámka

V prípade e-mailových adries sa Punycode používa iba pre internacionalizované e-mailové domény. Ak lokálna časť (pred znakom @) obsahuje znaky, ktoré nie sú v kódovaní ASCII, kóduje sa pomocou UTF-8.

Ako funguje kódovanie Punycode?

Prehľad procesu Punycode

Punycode je definovaný organizáciou IETF v RFC 3492 ako možná aplikácia všeobecného kódovacieho algoritmu známeho ako Bootstring. Algoritmus Bootstring umožňuje mapovanie reťazcov znakov, ktoré obsahujú ľubovoľné znakové sady s obmedzeným výberom prvkov. Vývoj kódovacieho postupu je založený na šiestich princípoch. V kódovaní Punycode sa tieto prvky nazývajú základné znaky, ktoré pozostávajú z malých písmen, číslic a spojovníka (-). Vývoj kódovacej metódy je založený na šiestich princípoch.

  • Úplnosť: Každý výstupný reťazec môže byť pomocou boot reťazca priradený k zjednodušenému reťazcu.
  • Jedinečnosť: Priradenie výstupného reťazca k príslušnému kódovaniu Bootstring je jedinečné. Každému Punycode môže byť priradený presne jeden ASCII ekvivalent a naopak.
  • Vratnosť: Kódovanie Bootstringu možno kedykoľvek zvrátiť bez straty informácií.
  • Efektívnosť: Kódovaný reťazec je – ak vôbec – len minimálne dlhší ako výstupný reťazec.
  • Jednoduchosť: Bootstring používa jednoduché algoritmy kódovania a dekódovania.
  • Čitateľnosť: Kódované sú iba znaky, ktoré nemožno reprezentovať v cieľovej znakovej sade. Všetky ostatné znaky zostávajú nezmenené.

Punycode špecifikuje Bootstring podľa požiadaviek na internacionalizované doménové mená. To by malo umožniť mapovanie znakov Unicode prostredníctvom predtým povolených základných znakov.

Príklad Punycode

Nasledujúci príklad ukazuje, ako funguje kódovanie:

IDN: müller-büromöbel

IDN müller-büromöbel obsahuje znaky ü a ö, ktoré nie sú zahrnuté v predtým povolenom súbore znakov pre doménové mená. V dôsledku toho musia byť zakódované prostredníctvom Punycode, aby bola zabezpečená kompatibilita.

Krok 1: Normalizácia

V prvom kroku kódovací postup umožňuje normalizáciu výstupného reťazca znakov. Všetky veľké písmená sa nahradia zodpovedajúcimi malými písmenami.

Krok 2: Odstránenie všetkých ne základných znakov

V druhom kroku sa odstránia všetky neštandardné znaky. Tie sa potom pridajú k názvu domény v kódovanej podobe a oddelia sa pomlčkou.

Ak sa na kódovanie internetových adries používa syntax Punycode, každý výsledný reťazec je vybavený predponou ACE (skratka pre ASCII-kompatibilné kódovanie):

Predpona ACE: xn–

Predpona ACE zabezpečuje, že doménové mená obsahujúce spojovníky nebudú nesprávne interpretované ako medzinárodné doménové mená.

Výsledkom je nasledujúce kódovanie pre IDN müller-büromöbel:

ACE: xn–mller-brombel-rmb4fg

Algoritmus, na ktorom je založený postup Punycode, je pozoruhodný. Zabezpečuje, že napriek konverzii názvy domén neprekročia maximálnu dĺžku 63 znakov.

Počas procesu kódovania sa znaky Unicode neprevádzajú jeden k jednému na znaky ASCII. Namiesto toho algoritmus určí reťazec na základe vzdialenosti medzi vymazanými znakmi a polohou znakov vo výstupnom reťazci.

V súvislosti s uvedeným príkladom reťazec rmb4fg označuje, že mller-brombel musí byť doplnený znakmi Unicode ü a ö na druhom a siedmom mieste.

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

Výnimky z pravidla

Odchýlky nastávajú, ak doménové meno neobsahuje žiadne znaky, ktoré nie sú základnými znakmi, alebo ak obsahuje iba znaky, ktoré nie sú základnými znakmi.

Doménové meno, ktoré obsahuje iba neštandardné znaky, po zakódovaní zobrazuje iba zakódovaný reťazec a predponu ACE. Doménové meno ako παράδειγμα (grécky výraz pre „príklad“) zodpovedá nasledujúcemu kódovaniu:

IDN: príklad

ACE: xn–hxajbheg2az3al

Ak doménové meno obsahuje iba základné znaky, Punycode sa nepoužíva. V takom prípade sa nepridáva žiadna predpona ACE. V tomto prípade nie je kódovanie potrebné, pretože základné internetové protokoly už doménové meno rozumejú.

Ak vezmeme do úvahy úplný názov domény (FQDN) ako celok, každá časť (doména najvyššej úrovne, doména druhej úrovne, doména tretej úrovne atď.) je kódovaná samostatne. Doménaako пример.бг (v bulharčine „example.bg“) by mohla byť kódovaná takto

IDN: пример.бг

ACE: xn–e1afmkfd.xn–90ae

Nasledujúca tabuľka poskytuje prehľad rôznych variantov syntaxe Punycode.

IDN Punycode ACE
Základné a nezákladné znaky müller-büromöbel.de mller-brombel-rmb4fg.de xn--mller-brombel-rmb4fg.de
Iba neštandardné znaky Παράδειγμα.gr hxajbheg2az3al.gr xn--hxajbheg2az3al.gr
Iba základné znaky example.org example.org Nepoužívať
Poznámka

Algoritmus Punycode je podrobne opísaný v RFC 3492. Okrem toho dokument poskytuje implementáciu kódovacieho postupu v programovacom jazyku C.

Používatelia zvyčajne využívajú voľne dostupné konvertory Punycode na kódovanie internacionalizovaných doménových mien.

Puny kódovanie s emoji doménami

Prostredníctvom Punycode je možné realizovať nielen internacionalizované doménové mená, ale aj domény emoji. Aby to však fungovalo, doména najvyššej úrovne musí povoliť používanie emojis a požadovaný emotikon musí byť v štandarde Unicode.

Tip

V súčasnosti umožňujú registráciu domén s emodži nasledujúce TLD: .ws, .tk, .to, .ml, .ga, .cf, .gq a .fm.

Domény Emoji sú technicky spracované ako Punycode, ale v teoretickej rovine by mali byť používateľovi prezentované ako kombinácia textu a emotikonov.

Doména Emoji: https://i❤.ws/

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

V súčasnosti to prakticky žiadny štandardný prehliadač neimplementuje. Ak zadáte doménu emoji v prehliadačoch Firefox, Chrome, Safari, Edge alebo Opera, v adresnom riadku sa zobrazí len reťazec ACE.

Existujú bezplatné konvertory Punycode?

Bezplatné generátory Punycode, ktoré prevádzajú IDN do formátu kompatibilného s ASCII, nájdete na rôznych webových stránkach. Jedným z príkladov je Punycoder.

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

Pre IDN iných TLD je dobrým výberom konvertor Punycode od Mathiasa Bynensa založený na punycode.js.

Obrázok: 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.

Predstavuje Punycode bezpečnostné riziko?

Punycode sa stáva bezpečnostným rizikom v prípade homografického phishingu – kybernetických útokov, pri ktorých zločinci využívajú podobný vzhľad rôznych znakov, aby nalákali nič netušiace obete na falošné webové stránky. Blogger Xudong Zheng ukazuje, ako vyzerá phishingový útok, na príklade nasledujúcej domény Punycode https://www.xn--80ak6aa92e.com/. Táto doména vedie používateľov internetu na webovú stránku s nasledujúcim IDN: https://www.аррӏе.com/

Uvedená URL adresa nie je oficiálnou webovou stránkou kalifornskej technologickej spoločnosti Apple Inc., ale phishingovou webovou stránkou vytvorenou na demonštračné účely.

Namiesto znaku ASCII a s Unicode U+0061 sa používa cyrilika а (U+0430) – tieto dva znaky sa voľným okom takmer nedajú rozlíšiť, ale webové prehliadače ich interpretujú ako odlišné znaky. Ani certifikáty nedokážu zabezpečiť ochranu používateľov internetu. V rámci moderných phishingových kampaní vytvárajú zločinci platné certifikáty SSL s cieľom, aby ich webové stránky vyzerali autenticky.

Aktuálne verzie prehliadačov Chrome a Opera zabraňujú phishingovým útokom tohto typu tým, že namiesto internacionalizovanej domény zobrazujú reťazec ACE v prípade IDN, ktoré kombinujú znaky z rôznych znakových sád. Prehliadače Internet Explorer a Microsoft Edge zabraňujú prístupu k takýmto doménam. Prehliadač Firefox však neposkytuje žiadnu ochranu proti phishingu pomocou Punycode.

Obrázok: 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.

Takto sa môžu používatelia prehliadača Firefox chrániť. S cieľom znížiť riziko, ktoré predstavujú phishingové webové stránky, majú používatelia prehliadača Firefox v súčasnosti iba možnosť zabrániť prekladu Punycode do IDN všeobecne. Na toto dočasné riešenie sú potrebné iba dva kroky:

  1. Otvorte editor konfigurácie: Do adresného riadka webového prehliadača zadajte about:config, aby sa otvoril editor konfigurácie Firefoxu.
  2. Vynútiť Punycode: Nájdite nastavenie network.IDN_show_punycode a zmeňte jeho hodnotu z false na true.

Po konfigurácii bude Firefox zobrazovať internacionalizované domény v adresnom riadku ako reťazce ACE.

Prejsť na hlavné menu