Bei Punycode handelt es sich um ein stan­dar­di­sier­tes Ko­die­rungs­ver­fah­ren, das Unicode-Zeichen mit einem be­grenz­ten ASCII-Zei­chen­satz kodiert. Somit können in­ter­na­tio­na­li­sier­te Domain-Namen (IDN) auch Nicht-ASCII-Zeichen enthalten, bei­spiels­wei­se Umlaute.

Ent­wick­lung des Ko­die­rungs­ver­fah­rens

Punycode wurde im Jahr 2003 von der Internet En­gi­nee­ring Task Force (IETF) als Syntax zur Kodierung in­ter­na­tio­na­li­sier­ter Domain-Namen in An­wen­dun­gen (IDNA) stan­dar­di­siert. Als IDN be­zeich­net die IETF Domain-Namen, die über die Buch­sta­ben des la­tei­ni­schen Alphabets hinaus Son­der­zei­chen wie Umlaute oder Schrift­zei­chen anderer Alphabete be­inhal­ten. Diese können von grund­le­gen­den Pro­to­kol­len wie dem Domain Name System (DNS) nicht ver­ar­bei­tet werden können. Im deutschen Sprach­raum spricht man auch von Um­laut­do­mains.

Ein Domain-Name wie müller-büromöbel ist unter der Top-Level-Domain .de seit der Ein­füh­rung von IDNs zulässig. Jedoch ist für die Ver­ar­bei­tung – bei­spiels­wei­se im Rahmen der Na­mens­auf­lö­sung – eine Kodierung notwendig. Zahl­rei­che Pro­to­kol­le, die dem Internet zugrunde liegen, ori­en­tie­ren sich an der eng­li­schen Schrift­spra­che und un­ter­stüt­zen daher nur den li­mi­tier­ten ASCII-Zei­chen­satz.

Um die Kom­pa­ti­bi­li­tät zwischen IDNs und älteren In­ter­net­stan­dards zu ge­währ­leis­ten, hat die IETF die Kodierung in­ter­na­tio­na­li­sier­ter Domain-Namen mit den bisher zu­läs­si­gen Zeichen vor­ge­schrie­ben. Für die Kodierung haben sie mit Punycode ein ent­spre­chen­des Verfahren stan­dar­di­siert.

Hinweis

Bei E-Mail-Adressen kommt die Punycode-Kodierung lediglich bei in­ter­na­tio­na­li­sier­ten E-Mail-Domains zum Einsatz. Der lokale Teil (vor dem @-Zeichen) hingegen wird via UTF-8 kodiert, sofern dieser Nicht-ASCII-Zeichen enthält.

Wie funk­tio­niert die Kodierung via Punycode?

Das Punycode-Verfahren im Überblick

Punycode wird von der IETF in RFC 3492 als An­wen­dungs­mög­lich­keit eines als Bootstring be­zeich­ne­ten all­ge­mei­nen Ko­die­rungs­al­go­rith­mus definiert. Der Bootstring-Al­go­rith­mus erlaubt es, Zei­chen­fol­gen be­lie­bi­ger Zei­chen­sät­ze mit einer li­mi­tier­ten Auswahl an Elementen eindeutig ab­zu­bil­den. Bei der Punycode-Kodierung werden diese Elemente als Ba­sis­zei­chen be­zeich­net, die aus Klein­buch­sta­ben, Ziffern und den Bin­de­strich (-) bestehen. Der Ent­wick­lung des Ko­die­rungs­ver­fah­rens liegen sechs Prin­zi­pi­en zugrunde:

  • Voll­stän­dig­keit: Jede Aus­gangs­zei­chen­ket­te lässt sich per Bootstring auf eine ver­ein­fach­te Zei­chen­ket­te abbilden.
  • Ein­deu­tig­keit: Die Zuordnung der Aus­gangs­zei­chen­ket­te zur je­wei­li­gen Bootstring-Kodierung ist eindeutig. Jedem Punycode kann genau ein ASCII-Pendant zu­ge­wie­sen werden und umgekehrt.
  • Re­ver­si­bi­li­tät: Die Kodierung per Bootstring lässt sich jederzeit ohne In­for­ma­ti­ons­ver­lust rück­gän­gig machen.
  • Effizienz: Die kodierte Zei­chen­ket­te ist – wenn überhaupt – nur minimal länger als die Aus­gangs­zei­chen­ket­te.
  • Ein­fach­heit: Bootstring greift auf einfache Ko­die­rungs- und De­ko­die­rungs­al­go­rith­men zurück.
  • Les­bar­keit: Es werden nur die Zeichen codiert, die sich im Ziel­zei­chen­satz nicht dar­stel­len lassen. Alle anderen Zeichen bleiben un­ver­än­dert.

Punycode spe­zi­fi­ziert Bootstring gemäß der Ansprüche an in­ter­na­tio­na­li­sier­te Domain-Namen. Das soll die Abbildung von Unicode-Zeichen über die bislang zu­läs­si­gen Ba­sis­zei­chen er­mög­li­chen.

Beispiel

Wir ver­an­schau­li­chen die Kodierung an folgendem Beispiel.

IDN: müller-büromöbel

Der IDN müller-büromöbel be­inhal­ten mit ü und ö zwei Zeichen, die im bislang zu­läs­si­gen Zei­chen­satz für Domain-Namen nicht enthalten sind. Daher muss er zur Wahrung der Kom­pa­ti­bi­li­tät über Punycode kodiert werden.

Schritt 1: Nor­ma­li­sie­rung

Das Ko­die­rungs­ver­fah­ren sieht im ersten Schritt eine Nor­ma­li­sie­rung der Aus­gangs­zei­chen­ket­te vor. Alle Groß­buch­sta­ben werden durch ent­spre­chen­de Klein­buch­sta­ben ersetzt. Ligaturen wie das ß werden in einzelne Zeichen aufgelöst (ss).

Schritt 2: Tilgung aller Nicht-Ba­sis­zei­chen

Im zweiten Schritt findet eine Tilgung aller Nicht-Ba­sis­zei­chen statt. Diese werden an­schlie­ßend in kodierter Form und durch einen Bin­de­strich ab­ge­trennt an den Domain-Namen angefügt.

Kommt das Punycode-Verfahren zur Kodierung von In­ter­net­adres­sen zum Einsatz, wird jeder Er­geb­nis­string mit einem so­ge­nann­ten ACE-Präfix versehen (kurz für ASCII Com­pa­ti­ble Encoding = ASCII-kom­pa­ti­ble Kodierung):

ACE-Präfix: xn–

Das ACE-Präfix stellt sicher, dass Domain-Namen, die Bin­de­stri­che enthalten, nicht fälsch­li­cher­wei­se als in­ter­na­tio­na­le Domain-Namen in­ter­pre­tiert werden.

Für den IDN müller-büromöbel ergibt sich somit folgende Kodierung:

ACE: xn–mller-brombel-rmb4fg

Be­mer­kens­wert ist der dem Punycode-Verfahren zu­grun­de­lie­gen­de Al­go­rith­mus. Dieser stellt sicher, dass trotz der Kon­ver­tie­rung keines der Domain-Label die Ma­xi­mal­län­ge von 63 Zeichen über­schrei­tet.

Im Rahmen der Kodierung werden Unicode-Zeichen nicht eins zu eins in ASCII-Zeichen über­tra­gen. Statt­des­sen ermittelt der Al­go­rith­mus einen String, der sich aus dem Abstand der getilgten Zeichen zu­ein­an­der sowie aus der Position der Zeichen im Aus­gangstring ergibt.

Bezogen auf das oben dar­ge­stell­te Beispiel gibt die Zei­chen­ket­te rmb4fg an, dass mller-brombel an zweiter und siebter Stelle um die Unicode-Zeichen ü und ö ergänzt werden muss.

Bild: Die Teilabschnitte des ACE-Strings in der Übersicht
Der ACE-String besteht aus dem ACE-Präfix und einem Puny-kodierten String.

Son­der­fäl­le

Zu Ab­wei­chun­gen von diesem Schema kommt es, wenn der Domain-Name entweder gar keine oder nur Nicht-Ba­sis­zei­chen enthält.

Ein Domain-Name, der aus­schließ­lich Nicht-Ba­sis­zei­chen aufweist, zeigt nach der Kodierung lediglich die kodierte Zei­chen­fol­ge sowie das ACE-Präfix. Ein Domain-Name wie παράδειγμα (grie­chisch für beispiel) ent­spricht somit folgender Kodierung:

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

ACE: xn–hxajbheg2az3al

Be­inhal­tet ein Domain-Name aus­schließ­lich Basis-Zeichen, kommt das Punycode-Verfahren nicht zur Anwendung. Ent­spre­chend wird auch kein ACE-Präfix angehängt. Eine Kodierung ist in diesem Fall nicht notwendig, da der Domain-Name bereits von grund­le­gen­den In­ter­net­pro­to­kol­len ver­stan­den wird.

Be­trach­tet man den Fully Qualified Domain Name (FQDN) insgesamt, wird jedes Label (Top-Level-Domain, Second-Level-Domain, Third-Level-Domain etc.) separat kodiert. Eine Domain wie пример.бг (bul­ga­risch für beispiel.bg) ließe sich somit fol­gen­der­ma­ßen kodieren:

IDN: пример.бг

ACE: xn–e1afmkfd.xn–90ae

Folgende Tabelle gibt einen Überblick über die ver­schie­de­nen Varianten des Punycode-Ver­fah­rens.

IDN Punycode ACE
Basis- & Nicht-Ba­sis­zei­chen müller-büromöbel.de mller-brombel-rmb4fg.de xn--mller-brombel-rmb4fg.de
Nur Nicht-Ba­sis­zei­chen Παράδειγμα.gr hxajbheg2az3al.gr xn--hxajbheg2az3al.gr
Nur Ba­sis­zei­chen example.org example.org Keine Ver­wen­dung
Hinweis

Der dem Punycode zu­grun­de­lie­gen­de Al­go­rith­mus wird in RFC 3492 de­tail­liert be­schrie­ben. Zudem bietet das Dokument eine Im­ple­men­tie­rung des Ko­die­rungs­ver­fah­rens in der Pro­gram­mier­spra­che C.

An­wen­de­rin­nen und Anwender greifen bei der Kodierung in­ter­na­tio­na­li­sier­ter Domain-Namen in der Regel auf frei ver­füg­ba­re Punycode-Converter zurück.

Puny-Kodierung bei Emoji-Domains

Nicht nur in­ter­na­tio­na­li­sier­te Domain-Namen, sondern auch Emoji-Domains lassen sich via Punycode rea­li­sie­ren. Vor­aus­set­zung dafür ist, dass die jeweilige Top-Level-Domain die Ver­wen­dung von Emojis erlaubt und das ge­wünsch­te Emoticon im Unicode-Standard erfasst wurde.

Tipp

Derzeit er­mög­li­chen folgende TLDs eine Re­gis­trie­rung von Emoji-Domains: .ws, .tk, .to, .ml, .ga, .cf, .gq und .fm.

Emoji-Domains werden technisch als Punycode ver­ar­bei­tet, sollen der Nutzerin oder dem Nutzer in der Theorie jedoch als Kom­bi­na­ti­on aus Text und Emoticons prä­sen­tiert werden.

Emoji-Domain: https://i❤.ws/

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

Praktisch setzt dies derzeit kein Stan­dard­brow­ser um. Gibt man eine Emoji-Domain bei Firefox, Chrome, Safari, Edge oder Opera ein, zeigt die Adress­zei­le lediglich den ACE-String.

Kos­ten­lo­se Punycode-Converter

Kos­ten­lo­se Punycode-Ge­ne­ra­to­ren zur Über­tra­gung von IDNs in eine ASCII-kom­pa­ti­ble Dar­stel­lung finden In­ter­net­nut­ze­rin­nen und -nutzer auf diversen Webseiten.

Für den deutschen Na­mens­raum mit der Top-Level-Domain .de empfehlen wir den IDN-Web-Converter der DENIC eG. Dieser kon­ver­tiert in­ter­na­tio­na­le Domain-Namen gemäß aktueller IDNA-Standards (RFC 5890 bis 5894) und un­ter­stützt Unicode 5.2 sowie den Unicode Technical Standard 46, der In­kom­pa­ti­bi­li­tä­ten zwischen IDNA2003 und IDNA2008 minimiert.

Bild: Der Punycode-Converter der DENIC
Der Punycode-Converter der DENIC eG führt alle Unicode-Zeichen auf, die unter der TLD .de erlaubt sind.

Für IDNs anderer TLDs bietet sich der Punycode-Converter von Mathias Bynens auf Basis von punycode.js an.

Bild: Der Punycode-Converter von Mathias Bynens auf Basis von punycode.js
Mathias Bynens bietet mit dem *punycode domain name converter* ein quell­of­fe­nes Tool zur Kon­ver­tie­rung in­ter­na­tio­na­li­sier­ter Domains.
Domain kaufen
Re­gis­trie­ren Sie Ihre perfekte Domain
  • Inklusive 1 SSL-Wildcard-Zer­ti­fi­kat pro Vertrag
  • Inklusive Domain Lock
  • Inklusive Domain Connect für einfache DNS-Ein­rich­tung

Punycode als Si­cher­heits­ri­si­ko?

Zum Si­cher­heits­ri­si­ko wird Punycode im Zu­sam­men­hang mit ho­mo­gra­fi­schem Phishing-Cy­ber­an­grif­fen. Bei solchen Angriffen nutzen Kri­mi­nel­le das ähnliche Aussehen ver­schie­de­ner Schrift­zei­chen aus, um ihre ah­nungs­lo­sen Opfer auf ge­fälsch­te Webseiten zu locken. Wie ein solcher Phishing-Angriff aussehen kann, zeigt der Blogger Xudong Zheng am Beispiel folgender Punycode-URL: https://www.xn--80ak6aa92e.com/. Diese führt In­ter­net­nut­zer auf eine Website mit folgendem IDN: https://www.аррӏе.com/.

Bei der an­ge­ge­be­nen URL handelt es sich nicht um die of­fi­zi­el­le Website des ka­li­for­ni­schen Tech­no­lo­gie­un­ter­neh­men Apple Inc., sondern um eine zu De­mons­tra­ti­ons­zwe­cken erstellte Phishing-Website.

Statt des ASCII-Zeichens a mit Unicode U+0061 kommt das ky­ril­li­sche а (U+0430) zum Einsatz. Diese zwei Zeichen sind mit bloßem Auge kaum zu un­ter­schei­den, werden von Web­brow­sern jedoch als un­ter­schied­li­che Zeichen in­ter­pre­tiert. Besonders ungünstig für In­ter­net­nut­zer: Auch Zer­ti­fi­ka­te geben keine Si­cher­heit. Denn für moderne Phishing-Kampagnen re­gis­trie­ren Kri­mi­nel­le gültige SSL-Zer­ti­fi­ka­te, die ent­spre­chen­den Websites den Anschein von Recht­mä­ßig­keit geben sollen.

Aktuelle Versionen von Chrome und Opera un­ter­bin­den Phishing-Attacken dieser Art, indem sie bei solchen IDNs statt der in­ter­na­tio­na­li­sier­ten Domain den ACE-String anzeigen. Internet-Explorer und Microsoft Edge un­ter­bin­den den Aufruf ent­spre­chen­der Domains komplett. Lediglich Firefox bietet bisher keinen Schutz gegen Punycode-Phishing.

Bild: Beispiel eines homografischen Angriffs
Beispiel einer ho­mo­gra­fi­schen Domain: Die URL ent­spricht optisch der der Of­fi­zi­el­len Apple-Website. Tat­säch­lich aber kommt mit dem Unicode-Zeichen U+0430 ein ky­ril­li­scher Buchstabe zum Einsatz, der dem ASCII-Zeichen a jedoch ver­blüf­fend ähnlich sieht.

So können sich Firefox-Nutzer schützen: Um die Gefahr durch Phishing-Websites zu re­du­zie­ren, bleibt Firefox-Nutzern derzeit nur die Mög­lich­keit, die Über­set­zung von Punycode in IDNs generell zu un­ter­bin­den. Für diese temporäre Lösung sind lediglich zwei Schritte notwendig:

  1. Kon­fi­gu­ra­ti­ons­edi­tor aufrufen: Geben Sie about:config in die Adress­zei­le des Web­brow­sers ein, um den Firefox-Kon­fi­gu­ra­ti­ons­edi­tor auf­zu­ru­fen.
  2. Punycode erzwingen: Suchen Sie die Ein­stel­lung network.IDN_show_punycode und stellen Sie deren Wert von false auf true um.

Nach der Kon­fi­gu­ra­ti­on stellt Firefox in­ter­na­tio­na­li­sier­te Domains in der Adress­zei­le künftig als ACE-String dar.

Domain-Check
Zum Hauptmenü