Wann Dir op ASCII limitéiert sidd, wéi kënnt Dir méi komplex Saachen wéi Emojis oder net-laténgesch Charaktere vertrieden? Eng Äntwert ass Punycode, wat e Wee ass fir Unicode Charaktere an ASCII ze representéieren. Wéi och ëmmer, wärend Dir déi raw Bits vun Unicode an Zeeche ka codéieren, wéi Base64, ass et e Problem. Den Domain Name System (DNS) erfuerdert allgemeng datt Hostnamen case-onsensitiv sinn, also egal ob Dir HACKADAY.com, HackADay.com oder just hackaday.com tippt, et geet alles op déiselwecht Plaz.
[A. Costello] op der University of California, Berkley huet d’Iddi vum Punycode am RFC 3492 am Mäerz 2003 proposéiert. Et skizzéiert en einfachen Algorithmus wou all regulär ASCII Charaktere erausgezunn sinn an op enger Säit mat engem Separator tëscht, an dësem Fall eng Bindestrich. Da ginn d’Unicode Charaktere kodéiert an um Enn vun der String festgehalen.
Als éischt ginn den numeresche Codepoint a Positioun an der String zesumme multiplizéiert. Da gëtt d’Zuel als Base-36 (az an 0-9) verännerlech-Längt Ganzt kodéiert. Zum Beispill, eng Begréissung an de griichesche fir Merci, “Hey, merci” gëtt”Moien, -mxahn5algcq2″. Ähnlech, déi schéin Stad vun München gëtt mnchen-3ya.
Wéi Dir vläicht am griichesche Beispill bemierkt, gëtt et näischt fir den Decoder ze hëllefen ze wëssen wéi eng Base-36 Zeechen zu deem ursprénglechen Unicode Symbol gehéieren. Dank de Variabel-Längt Ganzzuelen ass all bedeitend Ziffer erkennbar, well et Schwelle gëtt fir wéi eng Zuelen kodéiert kënne ginn. Eng finite-state Maschinn kënnt zur Rettung. De RFC gëtt e puer exemplaresch Pseudocode deen den Algorithmus skizzéiert. Et ass zimmlech clever, benotzt eng Bias déi rullt wéi d’Dekodéierung weidergeet. Wéi et ëmmer eropgeet, ass et eng monoton Funktioun mat e puer schlau Eegeschaften.
Natierlech, fir ze verhënneren datt regelméisseg URLen als Punycodes interpretéiert ginn, hunn URLen e spezielle klenge Präfix xn-- fir de Browser ze wëssen datt et e Code ass. Dëst beinhalt all Unicode Charaktere, sou datt Emojis och valabel sinn. Also firwat kënnt Dir net goen xn--mnchen-3ya.de? Wann Dir et an Äre Browser tippt oder op de Link klickt, kënnt Dir gesinn datt Äre Browser dës konfus Bréifzopp an eng schéin URL transforméiert (net all Browser maachen dat). De gréisste Problem ass Unicode selwer.
Wärend Unicode onheemlech Ënnerstëtzung ubitt fir déi Honnerte vu Sproochen, déi all Dag um Internet benotzt ginn, méiglech ze maachen an, getraut mir ze soen, och e bëssen einfach, et ginn e puer Warzen. Kyrillesch, Null-Breet Buschtawen an aner Unicode Komeschheeten erlaaben déi mat méi schlëmmen Intentiounen en Domain opzemaachen, deen, wann se gemaach gëtt, als eng bekannte Websäit ugewise gëtt. D’SSL Certificaten si valabel, an alles anescht kontrolléiert. Cyrillesch enthält Charaktere déi visuell identesch mat hire laténgesche Kollegen ausgesinn, awer anescht representéiert sinn. D’Chancen fir Hacker a Phishing Versuche sinn ze grouss, a bis elo sinn Punycodes op de meeschte Domainen net erlaabt.
Zum Beispill, kënnt Dir den Ënnerscheed tëscht dësen zwee Domainen soen?
hackaday.com
hackaday.com
E puer Browser wäerten den Hovertext als Punycode maachen, an e puer halen et als UTF-8 Äquivalent. Den “a” (U+0061) gouf duerch de kyrilleschen “a” (U+0430) ersat, deen déi meescht Computere mat genee deemselwechte Charakter renderen.
Dëst ass en IDN Homograph Attack, wou se op e Benotzer vertrauen fir op e Link ze klicken, deen se den Ënnerscheed net soen. Am Joer 2001 hunn zwee Sécherheetsfuerscher e Pabeier iwwer dëst Thema publizéiert, “microsoft.com” mat kyrillesche Charaktere registréiert als Beweis vum Konzept. Als Äntwert goufen Top-Level Domainen recommandéiert fir nëmmen Unicode Charaktere mat Latäin Zeeche a Charaktere vu Sproochen ze akzeptéieren déi an deem Land benotzt ginn. Als Resultat akzeptéiere vill vun den allgemengen US-baséierten Top-Level Domainen guer net Unicode Domain Nimm. Op d’mannst d’net-displayable Charaktere sinn speziell vun der ICANN banded, déi evitéiert eng grouss Dose vun Wuerm, mee mat visuell identesch, mee bit-weise verschiddene Charaktere dobaussen féiert zu Duercherneen.
Wéi och ëmmer, Reduktiounen op dës Aarte vun Attacke ginn lues a lues ausgerullt. Als éischt Schutzschicht weisen Firefox a Chromium-baséiert Browser nëmmen déi net-Punycode Versioun wann all d’Charaktere vun der selwechter Sprooch sinn. E puer Browser konvertéieren all Unicode URLen op Punycode. Aner Technike benotzen optesch Charaktererkennung (OCR) fir ze bestëmmen ob eng URL anescht interpretéiert ka ginn. Ausserhalb vum Browser, Linken, déi per SMS oder an E-Mail geschéckt ginn, hu vläicht net déiselwecht Smarts, an Dir wësst net bis Dir se an Ärem Browser opgemaach hutt. An dann ass et ze spéit.
Erausfuerderungen ofgesinn, kréien Punycodes hir Zäit an der Sonn? Kritt Hackaday jeemools ☠️?.com? Wien weess. Mä an der Tëschenzäit kënne mir eng schlau Léisung genéissen, déi 2003 proposéiert gouf fir de stäerkste Problem vun der Domain Numm Internationaliséierung, déi mir nach net ganz geléist hunn.