Punycode è un sistema di codifica standard pro­get­ta­to per rap­pre­sen­ta­re i caratteri Unicode con un set di caratteri ASCII limitato. Pertanto, i nomi di dominio in­ter­na­zio­na­liz­za­ti (IDN) possono contenere anche caratteri non ASCII, come i caratteri speciali.

Sviluppo del sistema di codifica

Nel 2003 Punycode è stato stan­dar­diz­za­to dalla Internet En­gi­nee­ring Task Force (IETF) come sintassi per la codifica dei nomi di dominio in­ter­na­zio­na­liz­za­ti nelle ap­pli­ca­zio­ni (IDNA). Come IDN, la IETF indica i nomi di dominio che com­pren­do­no, a partire dalle lettere dell’alfabeto latino, caratteri speciali come me­ta­fo­ne­si, segni dia­cri­ti­ci o caratteri di altri alfabeti e che perciò non possono essere elaborati da pro­to­col­li di base come quello del Domain Name System (DNS).

Facciamo un esempio: un nome di dominio come müller-büromöbel è ora ammesso a partire dall’in­tro­du­zio­ne degli IDN per il dominio di primo livello nazionale tedesco .de. Tuttavia, un’ela­bo­ra­zio­ne (ad esempio per quanto riguarda la ri­so­lu­zio­ne dei nomi) è possibile solo tramite codifica dei caratteri non di base. I numerosi pro­to­col­li alla base di internet si orientano alla scrittura inglese e sup­por­ta­no perciò solo caratteri ASCII limitati.

Per garantire la com­pa­ti­bi­li­tà tra gli IDN e gli standard internet più antiquati, la task force IETF ha pre­scrit­to la codifica dei nomi di dominio in­ter­na­zio­na­liz­za­ti con i caratteri finora ammessi e ha stan­dar­diz­za­to con Punycode un sistema adeguato.

N.B.

Per gli indirizzi e-mail la codifica Punycode è uti­liz­za­ta solo per i domini in­ter­na­zio­na­liz­za­ti uti­liz­za­ti per le e-mail. La parte locale (prima del carattere @) viene invece co­di­fi­ca­ta tramite UTF-8, a con­di­zio­ne che non comprenda caratteri non ASCII.

Come funziona la codifica tramite Punycode?

Una pre­sen­ta­zio­ne del sistema Punycode

Punycode è stato definito dall’IETF nel RFC 3492 come pos­si­bi­li­tà di utilizzo di un algoritmo generale di codifica indicato come boo­tstring. L’algoritmo boo­tstring consente sequenze di set di caratteri qualsiasi con una selezione limitata di elementi univoci. Nella codifica Punycode, questi elementi sono chiamati caratteri base, che includono lettere minuscole, cifre e trattino (-). Alla base dello sviluppo di questo sistema di codifica si trovano sei principi:

  • Com­ple­tez­za: ogni catena di caratteri di partenza si può rap­pre­sen­ta­re tramite boo­tstring su una catena di caratteri sem­pli­fi­ca­ta.
  • Univocità: l’as­se­gna­zio­ne della catena di caratteri di partenza alla ri­spet­ti­va codifica boo­tstring è univoca. A ogni Punycode può essere assegnato esat­ta­men­te un cor­ri­spon­den­te ASCII e viceversa.
  • Re­ver­si­bi­li­tà: la codifica tramite boo­tstring si può annullare in qualsiasi momento senza perdita di in­for­ma­zio­ni.
  • Ef­fi­cien­za: la catena di caratteri co­di­fi­ca­ta è, se presente, solo leg­ger­men­te più lunga rispetto alla catena di caratteri di partenza.
  • Sem­pli­ci­tà: boo­tstring ricorre ad algoritmi semplici di codifica e di de­co­di­fi­ca.
  • Leg­gi­bi­li­tà: vengono co­di­fi­ca­ti solo caratteri che non si possono pre­sen­ta­re nei set di caratteri di de­sti­na­zio­ne. Tutti gli altri caratteri restano invariati.

Punycode specifica boo­tstring in con­for­mi­tà ai requisiti dei nomi di dominio in­ter­na­zio­na­liz­za­ti. Ciò dovrebbe con­sen­ti­re i caratteri Unicode at­tra­ver­so i caratteri di base ammessi finora.

Un esempio

Ti spie­ghia­mo la codifica con l’esempio seguente.

IDN: müller-büromöbel

L’IDN müller-büromöbel comprende due caratteri con ü e ö, che non sono contenuti nel set di caratteri ammessi finora per i nomi di dominio e perciò devono essere co­di­fi­ca­ti per il rispetto della com­pa­ti­bi­li­tà tramite Punycode.

Primo passaggio: nor­ma­liz­za­zio­ne

Il pro­ce­di­men­to di codifica prevede nel primo passaggio una nor­ma­liz­za­zio­ne della catena dei caratteri di partenza. Tutte le lettere maiuscole vengono so­sti­tui­te con le cor­ri­spon­den­ti lettere minuscole. Altri caratteri come la “ß” vengono con­ver­ti­ti in caratteri singoli (ss).

Secondo passaggio: can­cel­la­zio­ne di tutti i caratteri non di base

Nel secondo passaggio, tutti i caratteri non di base vengono eliminati e aggiunti poi al nome di dominio in forma co­di­fi­ca­ta e separati da un trattino.

Se il sistema Punycode viene uti­liz­za­to per la codifica degli indirizzi internet, ogni stringa di risultato presenta un co­sid­det­to prefisso ACE (ab­bre­via­to in ASCII Com­pa­ti­ble Encoding = codifica com­pa­ti­bi­le ASCII):

Prefisso ACE: xn–

Il prefisso ACE ga­ran­ti­sce che i nomi di dominio che con­ten­go­no trattini non vengano er­ro­nea­men­te in­ter­pre­ta­ti come nomi di dominio in­ter­na­zio­na­liz­za­ti.

Per l’IDN müller-büromöbel risulta la seguente codifica:

ACE: xn–mller-brombel-rmb4fg

L’algoritmo alla base della procedura Punycode è notevole. Questo ga­ran­ti­sce che, no­no­stan­te la con­ver­sio­ne, nessuna delle etichette del dominio superi la lunghezza massima di 63 caratteri.

Durante il processo di codifica, i caratteri Unicode non vengono con­ver­ti­ti sin­go­lar­men­te in caratteri ASCII. Al contrario, l’algoritmo determina una stringa che risulta dalla distanza tra i caratteri can­cel­la­ti e la posizione dei caratteri nella stringa di partenza.

Con ri­fe­ri­men­to all’esempio sopra riportato, la stringa rmb4fg indica che mller-brombel deve essere integrato con i caratteri Unicode ü e ö in seconda e settima posizione.

Immagine: Panoramica delle parti della stringa ACE
La stringa ACE è composta da un prefisso ACE e da una stringa co­di­fi­ca­ta Puny.

Casi speciali

Si dif­fe­ri­sce da questo schema, se il nome di dominio contiene solo caratteri non di base o non ne contiene affatto.

Un nome di dominio che presenta esclu­si­va­men­te caratteri non di base mostra dopo la codifica solo le sequenze di caratteri co­di­fi­ca­te così come il prefisso ACE.

Un nome di dominio come παράδειγμα (esempio in greco) cor­ri­spon­de quindi alla seguente codifica:

IDN: παράδειγμα

ACE: xn–hxajbheg2az3al

Se un nome di dominio comprende solo caratteri di base, il sistema Punycode non viene uti­liz­za­to. Di con­se­guen­za, non viene aggiunto alcun prefisso ACE. In questo caso, la codifica non è ne­ces­sa­ria perché il nome di dominio è già compreso dai pro­to­col­li internet di base.

Se si prende in con­si­de­ra­zio­ne com­ples­si­va­men­te il Fully Qualified Domain Name (FQDN), ogni etichetta viene co­di­fi­ca­ta se­pa­ra­ta­men­te (dominio di primo livello, dominio di secondo livello, dominio di terzo livello, ecc.).

Un dominio come пример.бг (bulgaro per esempio.bg) si può quindi co­di­fi­ca­re nel modo seguente:

IDN: пример.бг

ACE: xn–e1afmkfd.xn–90ae

La seguente tabella dà una visione d’insieme sulle diverse varianti del sistema Punycode.

IDN Punycode ACE
Caratteri di base e non di base müller-büromöbel.de mller-brombel-rmb4fg.de xn--mller-brombel-rmb4fg.de
Solo caratteri non di base Παράδειγμα.gr hxajbheg2az3al.gr xn--hxajbheg2az3al.gr
Solo caratteri di base example.org example.org Non uti­liz­za­to
N.B.

L’algoritmo Punycode sot­to­stan­te è descritto nel dettaglio in RFC 3492. Il documento fornisce anche un’im­ple­men­ta­zio­ne del sistema di codifica nel lin­guag­gio di pro­gram­ma­zio­ne C.

So­li­ta­men­te, gli utenti ricorrono a con­ver­ti­to­ri Punycode gratuiti per la codifica dei nomi in­ter­na­zio­na­liz­za­ti.

Codifica Puny nei domini con emoji

Con Punycode si possono rea­liz­za­re anche domini con emoji e non solo nomi di dominio in­ter­na­zio­na­liz­za­ti. Il pre­re­qui­si­to è che il ri­spet­ti­vo dominio di primo livello consenta l’utilizzo di emoji e l’emoticon de­si­de­ra­ta sia presente nello standard Unicode.

Consiglio

Al momento i seguenti TLD con­sen­to­no la re­gi­stra­zio­ne di domini con emoji: .ws, .tk, .to, .ml, .ga, .cf, .gq e .fm.

I domini con emoji vengono elaborati tec­ni­ca­men­te come Punycode e do­vreb­be­ro essere teo­ri­ca­men­te pre­sen­ta­ti agli utenti come com­bi­na­zio­ne di testo ed emoticon.

Dominio con emoji: https://i❤.ws/

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

Pra­ti­ca­men­te però nessun browser standard supporta al momento domini di questo tipo. Se si inserisce un dominio con emoji su Firefox, Chrome, Safari, Edge o Opera, nella barra degli indirizzi viene mostrata solo la stringa ACE.

Con­ver­ti­to­ri Punycode gratuiti

Su diversi siti gli utenti trovano con­ver­ti­to­ri Punycode gratuiti per la tra­spo­si­zio­ne di IDN in una rap­pre­sen­ta­zio­ne com­pa­ti­bi­le ASCII.

Per i domini di primo livello .de con­si­glia­mo di uti­liz­za­re il con­ver­ti­to­re web di IDN della DENIC eG, che converte i nomi di dominio in­ter­na­zio­na­li secondo gli attuali standard IDNA (da RFC 5890 fino al 5894) e supporta Unicode 5.2, oltre a Unicode Technical Standard 46, che minimizza le in­com­pa­ti­bi­li­tà tra IDNA2003 e IDNA2008.

Immagine: Il convertitore Punycode della DENIC
Il con­ver­ti­to­re Punycode della DENIC eG presenta tutti i caratteri Unicode, con­sen­ti­ti per il TLD .de.

Per gli IDN degli altri TLD il con­ver­ti­to­re Punycode di Mathias Bynens basato su punycode.js è quello che fa al caso tuo.

Immagine: Il convertitore Punycode di Mathias Bynens basato su Punycode.js
Mathias Bynens mette a di­spo­si­zio­ne con il *punycode domain name converter* uno strumento open source per la con­ver­sio­ne dei domini in­ter­na­zio­na­liz­za­ti.
Acquista e registra il tuo dominio con il provider n°1 in Europa
  • Domain Connect gratuito per una con­fi­gu­ra­zio­ne facile del DNS
  • Cer­ti­fi­ca­to SSL Wildcard gratuito
  • Pro­te­zio­ne privacy inclusa

Punycode rap­pre­sen­ta un rischio per la sicurezza?

La codifica Punycode è con­si­de­ra­ta un rischio per la sicurezza, in par­ti­co­la­re in relazione al phishing omo­gra­fi­co, ovvero attacchi cyber in cui i criminali sfruttano a loro vantaggio i diversi caratteri per attirare le vittime in­con­sa­pe­vo­li su siti falsi. Come si presenta un simile attacco di phishing, è mostrato dal blogger Xudong Zheng prendendo ad esempio il seguente dominio con Punycode:

https://www.xn--80ak6aa92e.com/

Ciò indirizza gli utenti a un sito con il seguente IDN:

https://www.аррӏе.com/

L’URL indicato non è il sito ufficiale dell’azienda di tec­no­lo­gia ca­li­for­nia­na Apple Inc., ma una pagina web di phishing creata per fini di­mo­stra­ti­vi.

Al posto del carattere ASCII a con Unicode U+0061, viene uti­liz­za­to il carattere cirillico а (U+0430): questi due caratteri sono dif­fi­cil­men­te di­stin­gui­bi­li a occhio nudo, ma vengono in­ter­pre­ta­ti come caratteri diversi dai browser.

Un punto par­ti­co­lar­men­te sfa­vo­re­vo­le per gli utenti di internet è che anche i cer­ti­fi­ca­ti non ga­ran­ti­sco­no la sicurezza. Questo perché i criminali in­for­ma­ti­ci re­gi­stra­no cer­ti­fi­ca­ti SSL validi per le moderne campagne di phishing, che do­vreb­be­ro dare a questi siti web l’apparenza di le­git­ti­mi­tà.

Le versioni attuali di Chrome e Opera pre­ven­go­no attacchi di phishing di questo tipo vi­sua­liz­zan­do la stringa ACE invece del dominio in­ter­na­zio­na­liz­za­to per tali IDN. Internet Explorer e Microsoft Edge im­pe­di­sco­no com­ple­ta­men­te di ri­chia­ma­re i domini cor­ri­spon­den­ti. Solo Firefox non offre alcuna pro­te­zio­ne contro il phishing con Punycode.

Immagine: Esempio di un attacco omografico
Esempio di un dominio omo­gra­fi­co: l’URL cor­ri­spon­de vi­si­va­men­te a quello del sito ufficiale di Apple. In realtà però viene uti­liz­za­ta una lettera cirillica con il carattere Unicode U+0430, che as­so­mi­glia cla­mo­ro­sa­men­te al carattere ASCII a.

Gli utenti di Firefox possono pro­teg­ger­si in questo modo: per ridurre il rischio di siti di phishing, agli utenti di questo browser rimane per ora solo la pos­si­bi­li­tà di impedire in generale la con­ver­sio­ne Punycode in IDN. Per questa soluzione tem­po­ra­nea sono necessari solo due passaggi:

  1. Vi­sua­liz­za­re l’editor di con­fi­gu­ra­zio­ne: inserisci about:config nella barra degli indirizzi del browser per ri­chia­ma­re l’editor di con­fi­gu­ra­zio­ne di Firefox.
  2. Forzare l’uso di Punycode: cerca l’im­po­sta­zio­ne network.IDN_show_punycode e definisci il ri­spet­ti­vo valore da false a true.

Dopo la con­fi­gu­ra­zio­ne Firefox pre­sen­te­rà i domini in­ter­na­zio­na­liz­za­ti nella barra degli indirizzi come stringa ACE.

Controllo Dominio
Vai al menu prin­ci­pa­le