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.
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.
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.
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.
Anwenderinnen und Anwender greifen bei der Kodierung internationalisierter Domain-Namen in der Regel auf frei verfügbare Punycode-Converter zurück.
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:
ACE:
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.
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.
Für IDNs anderer TLDs bietet sich der Punycode-Converter von Mathias Bynens auf Basis von punycode.js an.
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.
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:
War dieser Artikel hilfreich?
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.
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.
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.
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-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.
Für IDNs anderer TLDs bietet sich der Punycode-Converter von Mathias Bynens auf Basis von punycode.js an.
Domain kaufen
Registrieren Sie Ihre perfekte Domain - Inklusive Wildcard-SSL-Zertifikat
- Inklusive Domain Lock
- Inklusive 2 GB E-Mail-Postfach
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.
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:
- Konfigurationseditor aufrufen: Geben Sie about:config in die Adresszeile des Webbrowsers ein, um den Firefox-Konfigurationseditor aufzurufen.
- Punycode erzwingen: Suchen Sie die Einstellung network.IDN_show_punycode und stellen Sie deren Wert von false auf true um.