Πώς να μετατρέψετε διεθνή ονόματα τομέα με Punycode
Το Punycode είναι μια τυποποιημένη μέθοδος κωδικοποίησης που επιτρέπει την αντιστοίχιση χαρακτήρων Unicode χρησιμοποιώντας ένα περιορισμένο σύνολο χαρακτήρων ASCII, πράγμα που σημαίνει ότι τα διεθνοποιημένα ονόματα τομέα (IDN) μπορούν επίσης να περιέχουν χαρακτήρες εκτός ASCII, όπως για παράδειγμα τα διαλυτικά.
Πώς αναπτύχθηκε η μέθοδος κωδικοποίησης;
Το 2003, το Punycode τυποποιήθηκε από την Ομάδα Εργασίας Μηχανικών Διαδικτύου (IETF) ως σύνταξη για την κωδικοποίηση Διεθνών Ονομάτων Τομέα σε Εφαρμογές (IDNA). Η IETF ορίζει ένα όνομα τομέα ως IDN εάν περιέχει ειδικούς χαρακτήρες, όπως διακριτικά, γράμματα ή χαρακτήρες που δεν υπάρχουν στο λατινικό αλφάβητο (π.χ. διαλυτικά στη γερμανική γλώσσα). Τέτοιοι χαρακτήρες δεν μπορούν να υποβληθούν σε επεξεργασία από βασικά πρωτόκολλα, όπως το Σύστημα Ονομάτων Τομέα (DNS). Για το παράδειγμα αυτό, θα χρησιμοποιήσουμε ένα όνομα τομέα στα γερμανικά. Αν και, μετά την εισαγωγή των IDN, το müller-büromöbel (έπιπλα γραφείου Müller) επιτρέπεται στον τομέα ανώτατου επιπέδου .de, μπορεί να υποβληθεί σε επεξεργασία μόνο με κωδικοποίηση των μη βασικών χαρακτήρων, για παράδειγμα, στο πλαίσιο της ανάλυσης ονομάτων. Πολλά πρωτόκολλα διαδικτύου βασίζονται στα αγγλικά και, ως εκ τούτου, υποστηρίζουν μόνο το περιορισμένο σύνολο χαρακτήρων ASCII.
Προκειμένου να διασφαλιστεί η συμβατότητα μεταξύ των IDN και των παλαιότερων προτύπων του Διαδικτύου, η IETF έχει καθορίσει μια μέθοδο κωδικοποίησης των διεθνοποιημένων ονομάτων χώρου χρησιμοποιώντας τους χαρακτήρες που ήταν ήδη επιτρεπόμενοι. Αυτή η τυποποιημένη διαδικασία κωδικοποίησης είναι γνωστή ως Punycode.
Όσον αφορά τις διευθύνσεις ηλεκτρονικού ταχυδρομείου, το Punycode χρησιμοποιείται μόνο για διεθνείς τομείς ηλεκτρονικού ταχυδρομείου. Εάν το τοπικό τμήμα (πριν από το σύμβολο @) περιέχει χαρακτήρες εκτός ASCII, κωδικοποιείται μέσω UTF-8.
Πώς λειτουργεί η κωδικοποίηση Punycode;
Μια γενική επισκόπηση της διαδικασίας Punycode
Το Punycode ορίζεται από την IETF στο RFC 3492 ως μια πιθανή εφαρμογή του γενικού αλγορίθμου κωδικοποίησης που είναι γνωστός ως Bootstring. Ο αλγόριθμος Bootstring επιτρέπει την αντιστοίχιση συμβολοσειρών που αποτελούνται από αυθαίρετα σύνολα χαρακτήρων με μια περιορισμένη επιλογή στοιχείων. Η ανάπτυξη της διαδικασίας κωδικοποίησης βασίζεται σε έξι αρχές. Στην κωδικοποίηση Punycode, αυτά τα στοιχεία ονομάζονται βασικοί χαρακτήρες, οι οποίοι αποτελούνται από μικρά γράμματα, ψηφία και την παύλα (-). Η ανάπτυξη της μεθόδου κωδικοποίησης βασίζεται σε έξι αρχές.
- Πληρότητα: Κάθε συμβολοσειρά εξόδου μπορεί να αντιστοιχιστεί σε μια απλοποιημένη συμβολοσειρά χρησιμοποιώντας μια συμβολοσειρά εκκίνησης.
- Μοναδικότητα: Η αντιστοίχιση της συμβολοσειράς εξόδου με την αντίστοιχη κωδικοποίηση Bootstring είναι μοναδική. Σε κάθε Punycode μπορεί να αντιστοιχιστεί ακριβώς μία αντίστοιχη συμβολοσειρά ASCII και το αντίστροφο.
- Αντιστρεψιμότητα: Μια κωδικοποίηση Bootstring μπορεί να αντιστραφεί ανά πάσα στιγμή χωρίς καμία απώλεια πληροφοριών.
- Αποδοτικότητα: Η κωδικοποιημένη συμβολοσειρά είναι – αν υπάρχει – ελάχιστα μακρύτερη από τη συμβολοσειρά εξόδου.
- Απλότητα: Το Bootstring χρησιμοποιεί απλούς αλγόριθμους κωδικοποίησης και αποκωδικοποίησης.
- Αναγνωσιμότητα: Κωδικοποιούνται μόνο οι χαρακτήρες που δεν μπορούν να αναπαρασταθούν στο σύνολο χαρακτήρων προορισμού. Όλοι οι άλλοι χαρακτήρες παραμένουν αμετάβλητοι.
Το Punycode ορίζει το Bootstring σύμφωνα με τις απαιτήσεις για τα διεθνοποιημένα ονόματα τομέα. Αυτό θα πρέπει να επιτρέπει την αντιστοίχιση των χαρακτήρων Unicode μέσω των βασικών χαρακτήρων που επιτρέπονταν προηγουμένως.
Παράδειγμα Punycode
Το παρακάτω παράδειγμα δείχνει πώς λειτουργεί η κωδικοποίηση:
IDN: müller-büromöbel
Το όνομα χώρου IDN «müller-büromöbel» περιέχει τους χαρακτήρες «ü» και «ö», οι οποίοι δεν περιλαμβάνονται στο σύνολο χαρακτήρων που επιτρεπόταν προηγουμένως για τα ονόματα χώρου. Ως εκ τούτου, πρέπει να κωδικοποιηθούν μέσω Punycode για να εξασφαλιστεί η συμβατότητα.
Βήμα 1: Κανονικοποίηση
Στο πρώτο βήμα, η διαδικασία κωδικοποίησης επιτρέπει την ομαλοποίηση της συμβολοσειράς χαρακτήρων που παράγεται. Όλα τα κεφαλαία γράμματα αντικαθίστανται από τα αντίστοιχα μικρά γράμματα.
Βήμα 2: Εξάλειψη όλων των μη βασικών χαρακτήρων
Στο δεύτερο βήμα, αφαιρούνται όλοι οι μη βασικοί χαρακτήρες. Στη συνέχεια, αυτοί προστίθενται στο όνομα τομέα σε κωδικοποιημένη μορφή και διαχωρίζονται με παύλα.
Εάν χρησιμοποιείται η σύνταξη Punycode για την κωδικοποίηση διευθύνσεων διαδικτύου, κάθε συμβολοσειρά αποτελέσματος συνοδεύεται από το πρόθεμα ACE (συντομογραφία του «ASCII-compatible encoding»):
Πρόθεμα ACE: xn–
Το πρόθεμα ACE διασφαλίζει ότι τα ονόματα τομέα που περιέχουν παύλες δεν θα εκληφθούν εσφαλμένα ως διεθνή ονόματα τομέα.
Αυτό έχει ως αποτέλεσμα την ακόλουθη κωδικοποίηση για το IDN «müller-büromöbel»:
ACE: xn–mller-brombel-rmb4fg
Ο αλγόριθμος που αποτελεί τη βάση της διαδικασίας Punycode είναι αξιοσημείωτος. Εξασφαλίζει ότι, παρά τη μετατροπή, οι ονομασίες των domain δεν υπερβαίνουν το μέγιστο μήκος των 63 χαρακτήρων.
Κατά τη διαδικασία κωδικοποίησης, οι χαρακτήρες Unicode δεν μετατρέπονται σε χαρακτήρες ASCII σε αναλογία ένα προς ένα. Αντίθετα, ο αλγόριθμος καθορίζει μια συμβολοσειρά με βάση την απόσταση μεταξύ των διαγραμμένων χαρακτήρων και της θέσης των χαρακτήρων στη συμβολοσειρά εξόδου.
Σε σχέση με το παράδειγμα που παρουσιάζεται παραπάνω, η συμβολοσειρά rmb4fg υποδηλώνει ότι η κωδικοποίηση mller-brombel πρέπει να συμπληρωθεί με τους χαρακτήρες Unicode ü και ö στη δεύτερη και στην έβδομη θέση.

Εξαιρέσεις από τον κανόνα
Παραβάσεις προκύπτουν εάν το όνομα τομέα δεν περιέχει καθόλου μη βασικούς χαρακτήρες ή εάν περιέχει μόνο μη βασικούς χαρακτήρες.
Ένα όνομα τομέα που περιέχει μόνο μη βασικούς χαρακτήρες εμφανίζει μόνο την κωδικοποιημένη συμβολοσειρά και το πρόθεμα ACE μετά την κωδικοποίηση. Ένα όνομα τομέα όπως το «παράδειγμα» αντιστοιχεί στην ακόλουθη κωδικοποίηση:
IDN: παράδειγμα
ACE: xn–hxajbheg2az3al
Εάν ένα όνομα τομέα περιέχει μόνο βασικούς χαρακτήρες, δεν χρησιμοποιείται Punycode. Συνεπώς, δεν προστίθεται πρόθεμα ACE. Σε αυτή την περίπτωση, η κωδικοποίηση δεν είναι απαραίτητη, καθώς τα βασικά πρωτόκολλα του Διαδικτύου μπορούν ήδη να αναγνωρίσουν το όνομα τομέα.
Αν εξετάσουμε το Πλήρως Προσδιορισμένο Όνομα Τομέα (FQDN) στο σύνολό του, κάθε ετικέτα (τομέας πρώτου επιπέδου, τομέας δεύτερου επιπέδου, τομέας τρίτου επιπέδου κ.λπ.) κωδικοποιείται ξεχωριστά. Ένας τομέαςόπως пример.бг (στα βουλγαρικά «example.bg») θα μπορούσε να κωδικοποιηθεί ως εξής
IDN: παράδειγμα.bg
ACE: xn–e1afmkfd.xn–90ae
Ο παρακάτω πίνακας παρέχει μια γενική εικόνα των διαφόρων παραλλαγών της σύνταξης Punycode.
| IDN | Punycode | ACE | |
|---|---|---|---|
| Βασικοί & μη βασικοί χαρακτήρες | müller-büromöbel.de
|
mller-brombel-rmb4fg.de
|
xn--mller-brombel-rmb4fg.de
|
| Μόνο μη βασικοί χαρακτήρες | Παράδειγμα.gr
|
hxajbheg2az3al.gr
|
xn--hxajbheg2az3al.gr
|
| Μόνο βασικοί χαρακτήρες | example.org
|
example.org
|
Δεν χρησιμοποιείται |
Ο αλγόριθμος Punycode περιγράφεται λεπτομερώς στο RFC 3492. Επιπλέον, το έγγραφο παρέχει μια υλοποίηση της διαδικασίας κωδικοποίησης στη γλώσσα προγραμματισμού C.
Οι χρήστες συνήθως χρησιμοποιούν δωρεάν μετατροπείς Punycode για την κωδικοποίηση διεθνών ονομάτων χώρου.
Ανεπαρκής κωδικοποίηση με τομείς emoji
Μέσω του Punycode μπορούν να δημιουργηθούν όχι μόνο διεθνικοποιημένα ονόματα τομέα, αλλά και ονόματα τομέα με emoji. Για να είναι αυτό εφικτό, ωστόσο, ο τομέας ανώτατου επιπέδου πρέπει να επιτρέπει τη χρήση emoji, ενώ το επιθυμητό emoji πρέπει να είναι συμβατό με το πρότυπο Unicode.
Προς το παρόν, τα ακόλουθα TLD επιτρέπουν την καταχώριση ονομάτων χώρου με emoji: .ws, .tk, .to, .ml, .ga, .cf, .gq και .fm.
Τα domain με emoji επεξεργάζονται τεχνικά ως Punycode, αλλά θεωρητικά θα έπρεπε να εμφανίζονται στον χρήστη ως συνδυασμός κειμένου και emoticon.
Τομέας emoji: https://i❤.ws/
ACE: https://xn--i-7iq.ws/
Προς το παρόν, σχεδόν κανένας τυπικός περιηγητής δεν υποστηρίζει αυτή τη λειτουργία. Αν πληκτρολογήσετε έναν τομέα emoji στον Firefox, τον Chrome, τον Safari, τον Edge ή τον Opera, η γραμμή διευθύνσεων εμφανίζει μόνο τη συμβολοσειρά ACE.
Υπάρχουν δωρεάν μετατροπείς Punycode;
Σε διάφορους ιστότοπους μπορείτε να βρείτε δωρεάν γεννήτριες Punycode που μετατρέπουν τα IDN σε μορφή συμβατή με ASCII. Ένα παράδειγμα είναι το Punycoder.

Για IDN άλλων TLD, ο μετατροπέας Punycode του Mathias Bynens, ο οποίος βασίζεται στο punycode.js, αποτελεί μια καλή επιλογή.

Αποτελεί το Punycode κίνδυνο για την ασφάλεια;
Το Punycode αποτελεί κίνδυνο για την ασφάλεια σε περιπτώσεις ομογραφικού phishing – δηλαδή σε κυβερνοεπιθέσεις όπου οι εγκληματίες εκμεταλλεύονται την ομοιότητα μεταξύ διαφορετικών χαρακτήρων για να παρασύρουν ανυποψίαστα θύματα σε πλαστούς ιστότοπους. Ο blogger Xudong Zheng δείχνει πώς μοιάζει μια επίθεση phishing χρησιμοποιώντας ως παράδειγμα τον ακόλουθο τομέα Punycode: https://www.xn--80ak6aa92e.com/. Αυτό οδηγεί τους χρήστες του διαδικτύου σε έναν ιστότοπο με το ακόλουθο IDN: https://www.аррӏе.com/
Η διεύθυνση URL που παρέχεται δεν είναι ο επίσημος ιστότοπος της εταιρείας τεχνολογίας Apple Inc. της Καλιφόρνιας, αλλά ένας ιστότοπος ηλεκτρονικού ψαρέματος που δημιουργήθηκε για σκοπούς επίδειξης.
Αντί του χαρακτήρα ASCII «a» με κωδικό Unicode U+0061, χρησιμοποιείται το κυριλλικό «а» (U+0430) – οι δύο αυτοί χαρακτήρες είναι σχεδόν αδύνατο να διακριθούν με γυμνό μάτι, αλλά οι φυλλομετρητές τους αναγνωρίζουν ως διαφορετικούς χαρακτήρες. Ακόμη και τα πιστοποιητικά δεν μπορούν να εγγυηθούν την ασφάλεια των χρηστών του διαδικτύου. Στις σύγχρονες εκστρατείες ηλεκτρονικού ψαρέματος, οι εγκληματίες δημιουργούν έγκυρα πιστοποιητικά SSL με στόχο να κάνουν τους ιστότοπούς τους να φαίνονται αυθεντικοί.
Οι τρέχουσες εκδόσεις των προγραμμάτων περιήγησης Chrome και Opera αποτρέπουν τέτοιου είδους επιθέσεις ηλεκτρονικού ψαρέματος (phishing) εμφανίζοντας τη συμβολοσειρά ACE αντί του διεθνοποιημένου ονόματος τομέα σε IDN που συνδυάζουν χαρακτήρες από διαφορετικά σύνολα χαρακτήρων. Ο Internet Explorer και ο Microsoft Edge εμποδίζουν την πρόσβαση σε τέτοιου είδους ονόματα τομέων. Ο Firefox, ωστόσο, δεν προσφέρει καμία προστασία από το ηλεκτρονικό ψάρεμα μέσω Punycode.

Έτσι μπορούν να προστατευθούν οι χρήστες του Firefox. Προκειμένου να μειωθεί ο κίνδυνος που ενέχουν οι ιστότοποι ηλεκτρονικού ψαρέματος, οι χρήστες του Firefox έχουν προς το παρόν μόνο τη δυνατότητα να αποτρέψουν γενικά τη μετατροπή του Punycode σε IDN. Για αυτή την προσωρινή λύση απαιτούνται μόνο δύο βήματα:
- Μεταβείτε στον επεξεργαστή ρυθμίσεων: Πληκτρολογήστε about:config στη γραμμή διευθύνσεων του προγράμματος περιήγησης για να ανοίξετε τον επεξεργαστή ρυθμίσεων του Firefox.
- Επιβολή Punycode: Βρείτε τη ρύθμιση network.IDN_show_punycode και αλλάξτε την τιμή της από false σε true.
Μετά τη ρύθμιση, ο Firefox θα εμφανίζει τους διεθνοποιημένους τομείς στη γραμμή διευθύνσεων ως συμβολοσειρές ACE.