Punycode

Punycode è un sistema di codifica standard che consente di rappresentare i caratteri Unicode grazie a un set di caratteri ASCII limitato, che è composto essenzialmente dai seguenti elementi:

  • Lettere minuscole: dalla a alla z
  • Numeri: da 0 a 9
  • Caratteri speciali: trattino (-)

Gli elementi introdotti vengono indicati come caratteri di base.

Il sistema è utilizzato prima di tutto nell’elaborazione dei nomi di dominio internazionalizzati (IDN), che oltre ai caratteri di base contengono anche caratteri non di base.

Sviluppo del sistema di codifica

Nel 2003 Punycode è stato standardizzato dalla Internet Engineering Task Force (IETF) come sintassi per la codifica dei nomi di dominio internazionalizzati nelle applicazioni (IDNA).

Come IDN la IETF indica i nomi di dominio che comprendono, a partire dalle lettere dell’alfabeto latino, caratteri speciali come metafonesi, segni diacritici o caratteri di altri alfabeti e che perciò non possono essere elaborati da protocolli 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’introduzione degli IDN per il Top Level Domain .de, della Germania. Tuttavia un’elaborazione (ad esempio per quanto riguarda la risoluzione dei nomi) è possibile solo tramite codifica dei caratteri non di base. I numerosi protocolli alla base di Internet si orientano alla scrittura inglese e supportano perciò solo caratteri ASCII limitati.

Per garantire la compatibilità tra gli IDN e gli standard Internet più antiquati, la task force IETF ha prescritto la codifica dei nomi di dominio internazionalizzati con i caratteri finora ammessi e ha standardizzato con Punycode un sistema adeguato.

N.B.

Per gli indirizzi e-mail la codifica Punycode è utilizzata solo per i domini internazionalizzati utilizzati per le e-mail. La parte locale (prima del carattere @) viene invece codificata tramite UTF-8, a condizione che non comprenda caratteri non ASCII.

Come funziona la codifica tramite Punycode?

Punycode è stato definito dall’IETF nel RFC 3492 come possibilità di utilizzo di un algoritmo generale di codifica indicato come bootstring. L’algoritmo bootstring consente sequenze di caratteri di set di caratteri qualsiasi con una selezione limitata di elementi univoci. Alla base dello sviluppo di questo sistema di codifica si trovano sei principi:

  • Completezza: ogni catena di caratteri di partenza si può rappresentare tramite bootstring su una catena di caratteri semplificata.
  • Univocità: l’assegnazione della catena di caratteri di partenza alla rispettiva codifica bootstring è univoca. A ogni Punycode può essere assegnato esattamente un corrispondente ASCII e viceversa.
  • Reversibilità: la codifica tramite bootstring si può annullare in qualsiasi momento senza perdita di informazioni.
  • Efficienza: la catena di caratteri codificata è, se presente, solo leggermente più lunga rispetto alla catena di caratteri di partenza.
  • Semplicità: bootstring ricorre ad algoritmi semplici di codifica e di decodifica.
  • Leggibilità: vengono codificati solo caratteri che non si possono presentare nei set di caratteri di destinazione. Tutti gli altri caratteri restano invariati.

Punycode specifica bootstring in conformità ai requisiti dei nomi di dominio internazionalizzati. Ciò dovrebbe consentire i caratteri Unicode attraverso i caratteri di base ammessi finora.

Vi spieghiamo 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 codificati per il rispetto della compatibilità tramite Punycode.

Il procedimento di codifica prevede nel primo passaggio una normalizzazione della catena dei caratteri di partenza. Tutte le lettere maiuscole vengono sostituite con le corrispondenti lettere minuscole. Altri caratteri come la “ß“ vengono convertiti in caratteri singoli (ss).

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

Se il sistema Punycode viene utilizzato per la codifica degli indirizzi Internet, ogni stringa di risultato presenta un cosiddetto prefisso ACE (abbreviato in ASCII Compatible Encoding = codifica compatibile ASCII):

Prefisso ACE:xn--

Il prefisso ACE garantisce che i nomi di dominio che contengono trattini non vengano erroneamente interpretati come nomi di dominio internazionali.

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

ACE: xn--mller-brombel-rmb4fg

Si differisce 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 esclusivamente caratteri non di base mostra dopo la codifica solo le sequenze di caratteri codificate così come il prefisso ACE.

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

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

ACE: xn--hxajbheg2az3al

Se un nome di dominio comprende solo caratteri di base, nella codifica vengono inseriti solo il prefisso ACE e un trattino conclusivo. Il sistema Punycode non viene usato in questo caso in relazione con il nome di dominio.

Se si prende in considerazione complessivamente il Fully Qualified Domain Name (FQDN), ogni label viene codificata separatamente (Top Level Domain, Second Level Domain, Third Level Domain, ecc.).

Un dominio come пример.бг (bulgaro per esempio.bg) si può quindi codificare 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 utilizzato

Da notare è l'algoritmo alla base del sistema Punycode, che assicura che nessuna label di un dominio superi la lunghezza massima di 63 caratteri nonostante la conversione.

I caratteri Unicode non vengono trasferiti uno per uno in caratteri ASCII durante la codifica. L'algoritmo determina invece una stringa che risulta dalla distanza tra i caratteri cancellati e dalla posizione dei caratteri nella stringa di partenza.

Nell'esempio precedente, la stringa di caratteri rmb4fg indica che mller-brombel deve essere integrato con i caratteri Unicode ü e ö al secondo e settimo posto.

N.B.

L'algoritmo Punycode sottostante è descritto in dettaglio in RFC 3492. Il documento fornisce anche un'implementazione del sistema di codifica nel linguaggio di programmazione C.

Solitamente gli utenti per la codifica dei nomi internazionalizzati ricorrono a convertitori Punycode gratuiti.

Convertitori Punycode gratuiti

Su diversi siti gli utenti trovano convertitori Punycode per la trasposizione di IDN in una rappresentazione compatibile ASCII.

Per i domini di primo livello .de consigliamo di utilizzare il convertitore web di IDN della DENIC eG, che converte i nomi di dominio internazionali secondo gli attuali standard IDNA (da RFC 5890 fino al 5894) e supporta Unicode 5.2, oltre all’Unicode Technical Standard 46, che minimizza le incompatibilità tra IDNA2003 e IDNA2008.

Per gli IDN degli altri TLD il convertitore Punycode diMathias Bynens basato su punycode.js è quello che fa al caso vostro.

Codifica Puny nei domini con emoji

Con Punycode si possono realizzare anche i domini con emoji e non solo i nomi di dominio internazionalizzati. Il prerequisito è che il rispettivo dominio di primo livello consenta l’utilizzo di emoji e l’emoticon desiderata sia presente nello standard Unicode.

Consiglio

Al momento i seguenti TLD consentono la registrazione di domini con emoji: .ws, .tk, .to, .ml, .ga, .cf, .gq e .fm.

I domini con emoji vengono elaborati tecnicamente come Punycode e dovrebbero essere teoricamente presentati agli utenti come combinazione di testo ed emoticon.

Dominio con emoji: i❤.ws/

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

Praticamente però nessun browser standard implementa al momento domini di questo tipo. Se si inserisce un dominio con emoji su Firefox, Chrome, Safari, Edge o Opera, la barra degli indirizzi mostra solo la stringa ACE.

Punycode rappresenta un rischio per la sicurezza?

La codifica Punycode viene vista come un rischio per la sicurezza in relazione al phishing omografico, ovvero attacchi cyber in cui i cybercriminali sfruttano a loro vantaggio i diversi caratteri per attirare le vittime inconsapevoli su siti falsi.

Come si presenta un simile attacco phishing, è mostrato dal blogger Xudong Zheng prendendo ad esempio il seguente dominio con Punycode:

www.xn--80ak6aa92e.com

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

www.аррӏе.com

L’URL indicato non è il sito ufficiale dell’azienda di tecnologia californiana Apple Inc., ma una pagina web di phishing creata per fini dimostrativi.

Al posto del carattere ASCII a con Unicode U+0061, viene utilizzato il carattere cirillico а (U+0430): questi due caratteri sono difficilmente distinguibili a occhio nudo, ma vengono interpretati come caratteri diversi dai browser.

Un punto particolarmente sfavorevole per gli utenti di Internet è che anche i certificati non garantiscono la sicurezza. Questo perché i pirati registrano certificati SSL validi per le moderne campagne di phishing, che dovrebbero dare a questi siti web l'apparenza di legittimità.

Le versioni attuali di Chrome e Opera prevengono attacchi di phishing di questo tipo visualizzando in caso di IDN che mescolano caratteri di diversi set di caratteri la stringa ACE invece del dominio internazionalizzato. Internet Explorer e Microsoft Edge impediscono completamente di richiamare i domini corrispondenti. Solo Firefox non offre alcuna protezione contro il phishing con Punycode.

Gli utenti Firefox possono proteggersi in questo modo: per ridurre il rischio di siti di phishing, agli utenti Firefox rimane per ora solo la possibilità di impedire in generale la conversione di Punycode in IDN. Per questa soluzione temporanea sono necessari solo due passaggi:

  1. Visualizzare l’editor di configurazione: inserite about:config nella barra degli indirizzi del browser per richiamare l’editor di configurazione di Firefox.
  2. Imporre Punycode: cercate l’impostazione network.IDN_show_punycode e definite il rispettivo valore da false a true.

Dopo la configurazione Firefox presenterà i domini internazionalizzati nella barra degli indirizzi come stringa ACE.


Abbiamo una proposta per te:
Web hosting a partire da 1 €/mese!

Dominio gratis
Certificato SSL Wildcard incluso
Assistenza clienti 24/7
A partire da 1 €/mese IVA escl. per un anno,
poi 8 €/ mese IVA escl.