Punycode

Bei Punycode handelt es sich um ein standardisiertes Kodierungsverfahren, das Unicode-Zeichen mit einem begrenzten ASCII-Zeichensatz kodiert. Somit können internationalisierte Domain-Namen (IDN) auch Nicht-ASCII-Zeichen enthalten, beispielsweise Umlaute.

Entwicklung des Kodierungsverfahrens

Punycode wurde im Jahr 2003 von der Internet Engineering Task Force (IETF) als Syntax zur Kodierung internationalisierter Domain-Namen in Anwendungen (IDNA) standardisiert. Als IDN bezeichnet die IETF Domain-Namen, die über die Buchstaben des lateinischen Alphabets hinaus Sonderzeichen wie Umlaute oder Schriftzeichen anderer Alphabete beinhalten. Diese können von grundlegenden Protokollen wie dem Domain Name System (DNS) nicht verarbeitet werden können. Im deutschen Sprachraum spricht man auch von Umlautdomains.

Ein Domain-Name wie müller-büromöbel ist unter der Top-Level-Domain .de seit der Einführung von IDNs zulässig. Jedoch ist für die Verarbeitung – beispielsweise im Rahmen der Namensauflösung – eine Kodierung notwendig. Zahlreiche Protokolle, die dem Internet zugrunde liegen, orientieren sich an der englischen Schriftsprache und unterstützen daher nur den limitierten ASCII-Zeichensatz.

Um die Kompatibilität zwischen IDNs und älteren Internetstandards zu gewährleisten, hat die IETF die Kodierung internationalisierter Domain-Namen mit den bisher zulässigen Zeichen vorgeschrieben. Für die Kodierung haben sie mit Punycode ein entsprechendes Verfahren standardisiert.

Hinweis

Bei E-Mail-Adressen kommt die Punycode-Kodierung lediglich bei internationalisierten 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 funktioniert die Kodierung via Punycode?

Das Punycode-Verfahren im Überblick

Punycode wird von der IETF in RFC 3492 als Anwendungsmöglichkeit eines als Bootstring bezeichneten allgemeinen Kodierungsalgorithmus definiert. Der Bootstring-Algorithmus erlaubt es, Zeichenfolgen beliebiger Zeichensätze mit einer limitierten Auswahl an Elementen eindeutig abzubilden. Bei der Punycode-Kodierung werden diese Elemente als Basiszeichen bezeichnet, die aus Kleinbuchstaben, Ziffern und den Bindestrich (-) bestehen. Der Entwicklung des Kodierungsverfahrens liegen sechs Prinzipien zugrunde:

  • Vollständigkeit: Jede Ausgangszeichenkette lässt sich per Bootstring auf eine vereinfachte Zeichenkette abbilden.
  • Eindeutigkeit: Die Zuordnung der Ausgangszeichenkette zur jeweiligen Bootstring-Kodierung ist eindeutig. Jedem Punycode kann genau ein ASCII-Pendant zugewiesen werden und umgekehrt.
  • Reversibilität: Die Kodierung per Bootstring lässt sich jederzeit ohne Informationsverlust rückgängig machen.
  • Effizienz: Die kodierte Zeichenkette ist – wenn überhaupt – nur minimal länger als die Ausgangszeichenkette.
  • Einfachheit: Bootstring greift auf einfache Kodierungs- und Dekodierungsalgorithmen zurück.
  • Lesbarkeit: Es werden nur die Zeichen codiert, die sich im Zielzeichensatz nicht darstellen lassen. Alle anderen Zeichen bleiben unverändert.

Punycode spezifiziert Bootstring gemäß der Ansprüche an internationalisierte Domain-Namen. Das soll die Abbildung von Unicode-Zeichen über die bislang zulässigen Basiszeichen ermöglichen.

Beispiel

Wir veranschaulichen die Kodierung an folgendem Beispiel.

IDN: müller-büromöbel

Der IDN müller-büromöbel beinhalten mit ü und ö zwei Zeichen, die im bislang zulässigen Zeichensatz für Domain-Namen nicht enthalten sind. Daher muss er zur Wahrung der Kompatibilität über Punycode kodiert werden.

Schritt 1: Normalisierung

Das Kodierungsverfahren sieht im ersten Schritt eine Normalisierung der Ausgangszeichenkette vor. Alle Großbuchstaben werden durch entsprechende Kleinbuchstaben ersetzt. Ligaturen wie das ß werden in einzelne Zeichen aufgelöst (ss).

Schritt 2: Tilgung aller Nicht-Basiszeichen

Im zweiten Schritt findet eine Tilgung aller Nicht-Basiszeichen statt. Diese werden anschließend in kodierter Form und durch einen Bindestrich abgetrennt an den Domain-Namen angefügt.

Kommt das Punycode-Verfahren zur Kodierung von Internetadressen zum Einsatz, wird jeder Ergebnisstring mit einem sogenannten ACE-Präfix versehen (kurz für ASCII Compatible Encoding = ASCII-kompatible Kodierung):

ACE-Präfix: xn–

Das ACE-Präfix stellt sicher, dass Domain-Namen, die Bindestriche enthalten, nicht fälschlicherweise als internationale Domain-Namen interpretiert werden.

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

ACE: xn–mller-brombel-rmb4fg

Bemerkenswert ist der dem Punycode-Verfahren zugrundeliegende Algorithmus. Dieser stellt sicher, dass trotz der Konvertierung keines der Domain-Label die Maximallänge von 63 Zeichen überschreitet.

Im Rahmen der Kodierung werden Unicode-Zeichen nicht eins zu eins in ASCII-Zeichen übertragen. Stattdessen ermittelt der Algorithmus einen String, der sich aus dem Abstand der getilgten Zeichen zueinander sowie aus der Position der Zeichen im Ausgangstring ergibt.

Bezogen auf das oben dargestellte Beispiel gibt die Zeichenkette rmb4fg an, dass mller-brombel an zweiter und siebter Stelle um die Unicode-Zeichen ü und ö ergänzt werden muss.

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

Sonderfälle

Zu Abweichungen von diesem Schema kommt es, wenn der Domain-Name entweder gar keine oder nur Nicht-Basiszeichen enthält.

Ein Domain-Name, der ausschließlich Nicht-Basiszeichen aufweist, zeigt nach der Kodierung lediglich die kodierte Zeichenfolge sowie das ACE-Präfix. Ein Domain-Name wie παράδειγμα (griechisch für beispiel) entspricht somit folgender Kodierung:

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

ACE: xn–hxajbheg2az3al

Beinhaltet ein Domain-Name ausschließlich Basis-Zeichen, kommt das Punycode-Verfahren nicht zur Anwendung. Entsprechend wird auch kein ACE-Präfix angehängt. Eine Kodierung ist in diesem Fall nicht notwendig, da der Domain-Name bereits von grundlegenden Internetprotokollen verstanden wird.

Betrachtet 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 пример.бг (bulgarisch für beispiel.bg) ließe sich somit folgendermaßen kodieren:

IDN: пример.бг

ACE: xn–e1afmkfd.xn–90ae

Folgende Tabelle gibt einen Überblick über die verschiedenen Varianten des Punycode-Verfahrens.

IDN Punycode ACE
Basis- & Nicht-Basiszeichen müller-büromöbel.de mller-brombel-rmb4fg.de xn--mller-brombel-rmb4fg.de
Nur Nicht-Basiszeichen Παράδειγμα.gr hxajbheg2az3al.gr xn--hxajbheg2az3al.gr
Nur Basiszeichen example.org example.org Keine Verwendung
Hinweis

Der dem Punycode zugrundeliegende Algorithmus wird in RFC 3492 detailliert beschrieben. Zudem bietet das Dokument eine Implementierung des Kodierungsverfahrens in der Programmiersprache C.

Anwenderinnen und Anwender greifen bei der Kodierung internationalisierter Domain-Namen in der Regel auf frei verfügbare Punycode-Converter zurück.

Puny-Kodierung bei Emoji-Domains

Nicht nur internationalisierte Domain-Namen, sondern auch Emoji-Domains lassen sich via Punycode realisieren. Voraussetzung dafür ist, dass die jeweilige Top-Level-Domain die Verwendung von Emojis erlaubt und das gewünschte Emoticon im Unicode-Standard erfasst wurde.

Tipp

Derzeit ermöglichen folgende TLDs eine Registrierung von Emoji-Domains: .ws, .tk, .to, .ml, .ga, .cf, .gq und .fm.

Emoji-Domains werden technisch als Punycode verarbeitet, sollen der Nutzerin oder dem Nutzer in der Theorie jedoch als Kombination aus Text und Emoticons präsentiert werden.

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

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

Praktisch setzt dies derzeit kein Standardbrowser um. Gibt man eine Emoji-Domain bei Firefox, Chrome, Safari, Edge oder Opera ein, zeigt die Adresszeile lediglich den ACE-String.

Kostenlose Punycode-Converter

Kostenlose Punycode-Generatoren zur Übertragung von IDNs in eine ASCII-kompatible Darstellung finden Internetnutzerinnen und -nutzer auf diversen Webseiten.

Für den deutschen Namensraum mit der Top-Level-Domain .de empfehlen wir den IDN-Web-Converter der DENIC eG. Dieser konvertiert internationale Domain-Namen gemäß aktueller IDNA-Standards (RFC 5890 bis 5894) und unterstützt Unicode 5.2 sowie den Unicode Technical Standard 46, der Inkompatibilitäten zwischen IDNA2003 und IDNA2008 minimiert.

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.

Der Punycode-Converter von Mathias Bynens auf Basis von punycode.js
Mathias Bynens bietet mit dem *punycode domain name converter* ein quelloffenes Tool zur Konvertierung internationalisierter Domains.

Mehr als nur eine Domain!

Hier finden Sie Ihre perfekte Domain - z.B. .de Domain + persönlicher Berater

E-Mail-Adresse
24/7 Support
SSL-Sicherheit

Punycode als Sicherheitsrisiko?

Zum Sicherheitsrisiko wird Punycode im Zusammenhang mit homografischem Phishing-Cyberangriffen. Bei solchen Angriffen nutzen Kriminelle das ähnliche Aussehen verschiedener Schriftzeichen aus, um ihre ahnungslosen Opfer auf gefälschte 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 Internetnutzer auf eine Website mit folgendem IDN: https://www.аррӏе.com/.

Bei der angegebenen URL handelt es sich nicht um die offizielle Website des kalifornischen Technologieunternehmen Apple Inc., sondern um eine zu Demonstrationszwecken erstellte Phishing-Website.

Statt des ASCII-Zeichens a mit Unicode U+0061 kommt das kyrillische а (U+0430) zum Einsatz. Diese zwei Zeichen sind mit bloßem Auge kaum zu unterscheiden, werden von Webbrowsern jedoch als unterschiedliche Zeichen interpretiert. Besonders ungünstig für Internetnutzer: Auch Zertifikate geben keine Sicherheit. Denn für moderne Phishing-Kampagnen registrieren Kriminelle gültige SSL-Zertifikate, die entsprechenden Websites den Anschein von Rechtmäßigkeit geben sollen.

Aktuelle Versionen von Chrome und Opera unterbinden Phishing-Attacken dieser Art, indem sie bei solchen IDNs statt der internationalisierten Domain den ACE-String anzeigen. Internet-Explorer und Microsoft Edge unterbinden den Aufruf entsprechender Domains komplett. Lediglich Firefox bietet bisher keinen Schutz gegen Punycode-Phishing.

Beispiel eines homografischen Angriffs
Beispiel einer homografischen Domain: Die URL entspricht optisch der der Offiziellen Apple-Website. Tatsächlich aber kommt mit dem Unicode-Zeichen U+0430 ein kyrillischer Buchstabe zum Einsatz, der dem ASCII-Zeichen a jedoch verblüffend ähnlich sieht.

So können sich Firefox-Nutzer schützen: Um die Gefahr durch Phishing-Websites zu reduzieren, bleibt Firefox-Nutzern derzeit nur die Möglichkeit, die Übersetzung von Punycode in IDNs generell zu unterbinden. Für diese temporäre Lösung sind lediglich zwei Schritte notwendig:

  1. Konfigurationseditor aufrufen: Geben Sie about:config in die Adresszeile des Webbrowsers ein, um den Firefox-Konfigurationseditor aufzurufen.
  2. Punycode erzwingen: Suchen Sie die Einstellung network.IDN_show_punycode und stellen Sie deren Wert von false auf true um.

Nach der Konfiguration stellt Firefox internationalisierte Domains in der Adresszeile künftig als ACE-String dar.