Punycode: sistema di codifica internazionale
Punycode è un sistema di codifica standard progettato per rappresentare i caratteri Unicode con un set di caratteri ASCII limitato. Pertanto, i nomi di dominio internazionalizzati (IDN) possono contenere anche caratteri non ASCII, come i caratteri speciali.
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 dominio di primo livello nazionale tedesco .de. 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.
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?
Una presentazione del sistema 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 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:
- 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.
Un esempio
Ti 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.
Primo passaggio: normalizzazione
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).
Secondo passaggio: cancellazione 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 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 internazionalizzati.
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 garantisce che, nonostante la conversione, nessuna delle etichette del dominio superi la lunghezza massima di 63 caratteri.
Durante il processo di codifica, i caratteri Unicode non vengono convertiti singolarmente in caratteri ASCII. Al contrario, l’algoritmo determina una stringa che risulta dalla distanza tra i caratteri cancellati e la posizione dei caratteri nella stringa di partenza.
Con riferimento all’esempio sopra riportato, la stringa rmb4fg indica che mller-brombel deve essere integrato con i caratteri Unicode ü e ö in seconda e settima posizione.
Casi speciali
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, il sistema Punycode non viene utilizzato. Di conseguenza, non viene aggiunto alcun prefisso ACE. In questo caso, la codifica non è necessaria perché il nome di dominio è già compreso dai protocolli internet di base.
Se si prende in considerazione complessivamente il Fully Qualified Domain Name (FQDN), ogni etichetta viene codificata separatamente (dominio di primo livello, dominio di secondo livello, dominio di terzo livello, 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 |
L’algoritmo Punycode sottostante è descritto nel dettaglio in RFC 3492. Il documento fornisce anche un’implementazione del sistema di codifica nel linguaggio di programmazione C.
Solitamente, gli utenti ricorrono a convertitori Punycode gratuiti per la codifica dei nomi internazionalizzati.
Codifica Puny nei domini con emoji
Con Punycode si possono realizzare anche domini con emoji e non solo 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.
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: https://i❤.ws/
ACE: https://xn--i-7iq.ws/
Praticamente 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.
Convertitori Punycode gratuiti
Su diversi siti gli utenti trovano convertitori Punycode gratuiti 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 a Unicode Technical Standard 46, che minimizza le incompatibilità tra IDNA2003 e IDNA2008.
Per gli IDN degli altri TLD il convertitore Punycode di Mathias Bynens basato su punycode.js è quello che fa al caso tuo.
- Certificato SSL Wildcard incluso
- Registrazione di dominio sicura
- Indirizzo e-mail professionale da 2 GB
Punycode rappresenta un rischio per la sicurezza?
La codifica Punycode è considerata un rischio per la sicurezza, in particolare in relazione al phishing omografico, ovvero attacchi cyber in cui i criminali sfruttano a loro vantaggio i diversi caratteri per attirare le vittime inconsapevoli 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 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 criminali informatici 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 la stringa ACE invece del dominio internazionalizzato per tali IDN. 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 di Firefox possono proteggersi in questo modo: per ridurre il rischio di siti di phishing, agli utenti di questo browser rimane per ora solo la possibilità di impedire in generale la conversione Punycode in IDN. Per questa soluzione temporanea sono necessari solo due passaggi:
- Visualizzare l’editor di configurazione: inserisci about:config nella barra degli indirizzi del browser per richiamare l’editor di configurazione di Firefox.
- Forzare l’uso di Punycode: cerca l’impostazione network.IDN_show_punycode e definisci il rispettivo valore da false a true.
Dopo la configurazione Firefox presenterà i domini internazionalizzati nella barra degli indirizzi come stringa ACE.