Введение
Тип доменного имени Интернета
Интернационализированное доменное имя (IDN) — это доменное имя Интернета, которое содержит как минимум одну метку, отображаемую в программных приложениях, полностью или частично, в нелатинском шрифте или алфавите, либо в символах на основе латинского алфавита с диакритическими знаками или лигатурами. Эти системы письма кодируются компьютерами в многобайтовом Unicode. Интернационализированные доменные имена хранятся в системе доменных имен (DNS) в виде строк ASCII с использованием транскрипции Punycode. DNS, выполняющая службу преобразования имен, удобных для пользователя, в сетевые адреса для определения местоположения интернет-ресурсов, на практике ограничена использованием символов ASCII, что является практическим ограничением, изначально определившим стандарт для допустимых доменных имен. Интернационализация доменных имен — это техническое решение для преобразования имен, написанных на языковых шрифтах, в текстовое представление ASCII, совместимое с DNS. Интернационализированные доменные имена могут использоваться только с приложениями, специально разработанными для этой цели; они не требуют изменений в инфраструктуре Интернета. IDN была впервые предложена в декабре 1987 года Мартином Дюрстом и реализована в 1990 году Таном Джуай Квангом и Леонгом Кок Йонгом под руководством Тана Тин Вэ. После долгих обсуждений и множества конкурирующих предложений система под названием Интернационализация доменных имен в приложениях (IDNA) была принята в качестве стандарта и реализована в нескольких доменах верхнего уровня. В IDNA термин «интернационализированное доменное имя» конкретно означает любое доменное имя, состоящее только из меток, к которым алгоритм IDNA ToASCII (см. ниже) может быть успешно применен. В марте 2008 года IETF сформировала новую рабочую группу IDN для обновления текущего протокола IDNA. В апреле 2008 года UN ESCWA совместно с Регистром общественных интересов (PIR) и Afilias запустили рабочую группу по арабскому шрифту в IDNs (ASIWG), в которую вошли эксперты в области DNS, операторы ccTLD, представители бизнеса и академической среды, а также члены региональных и международных организаций. ASIWG, управляемая Рамом Моханом из Afilias, стремится разработать единую таблицу IDN для арабского шрифта и является примером сотрудничества сообщества, которое помогает местным и региональным экспертам участвовать в разработке глобальной политики и технической стандартизации. В октябре 2009 года Корпорация по присвоению имен и номеров в Интернете (ICANN) одобрила создание интернационализированных доменов верхнего уровня с кодом страны (IDN ccTLD) в Интернете, использующих стандарт IDNA для языковых шрифтов. В мае 2010 года первые IDN ccTLD были установлены в корневой зоне DNS.
Интернационализация доменных имен в приложениях
Интернационализация доменных имен в приложениях (IDNA) — это механизм, определённый в 2003 году для обработки интернационализированных доменных имён, содержащих символы, отличные от ASCII. Хотя система доменных имён поддерживает символы, отличные от ASCII, приложения, такие как электронная почта и веб-браузеры, ограничивают символы, которые могут использоваться в доменных именах, например, в имени хоста. Строго говоря, ограничения на используемые в доменных именах символы накладывают сетевые протоколы, применяемые этими приложениями, а не сами приложения или DNS. Для обеспечения обратной совместимости с существующей инфраструктурой рабочая группа IETF IDNA решила, что интернационализированные доменные имена должны преобразовываться в подходящую форму на основе ASCII, которую могут обрабатывать веб-браузеры и другие пользовательские приложения. IDNA определяет, как выполняется это преобразование между именами, записанными символами, отличными от ASCII, и их представлением на основе ASCII. Приложение с поддержкой IDNA может преобразовывать интернационализированные и ASCII представления доменного имени. Оно использует форму ASCII для поиска в DNS, но может отображать интернационализированную форму пользователям, которые, вероятно, предпочитают читать и записывать доменные имена на языках, отличных от английского, таких как арабский или хирагана. Приложения, не поддерживающие IDNA, не смогут обрабатывать доменные имена, содержащие символы, отличные от ASCII, но всё равно смогут получить доступ к таким доменам, если им будет предоставлен (обычно довольно сложный для понимания) эквивалент в ASCII. ICANN опубликовала рекомендации по использованию IDNA в июне 2003 года, и уже в июле 2003 года стало возможным зарегистрировать домены .jp с использованием этой системы, а в марте 2004 года — домены .info. В 2004 и 2005 годах несколько других реестров доменов верхнего уровня начали принимать регистрации. Руководство по IDN было впервые разработано в июне 2003 года и обновлено в ноябре 2005 года в связи с опасениями по поводу фишинга. В ноябре 2007 года была сформирована рабочая группа ICANN, занимающаяся доменными именами с кодом страны верхнего уровня, и продвигаемая совместно организацией, поддерживающей коды стран, и Правительственным консультативным комитетом. Кроме того, ICANN поддерживает Руководящую группу по универсальному принятию, созданную при участии сообщества, которая стремится обеспечить возможность использования IDN и других новых gTLD во всех приложениях, устройствах и системах. Mozilla 1.4, Netscape 7.1 и Opera 7.11 были одними из первых приложений, поддерживающих IDNA. Для Internet Explorer 6 доступен плагин для браузера, обеспечивающий поддержку IDN. Internet Explorer 7.0 и URL API Windows Vista обеспечивают встроенную поддержку IDN.
ToASCII и ToUnicode
Преобразования между ASCII и не-ASCII формами доменного имени выполняются парой алгоритмов, называемых ToASCII и ToUnicode. Эти алгоритмы применяются не к доменному имени в целом, а к отдельным меткам. Например, если доменное имя www.example.com, то метками являются www, example и com. К каждой из этих трех меток отдельно применяется ToASCII или ToUnicode. Детали этих двух алгоритмов сложны и описаны в RFC 3490. Ниже приводится обзор их работы. ToASCII оставляет метки ASCII без изменений. Алгоритм завершается неудачей, если метка не подходит для системы доменных имен. Для меток, содержащих хотя бы один не-ASCII символ, ToASCII применяет алгоритм Nameprep, который преобразует метку в нижний регистр и выполняет другую нормализацию. Затем ToASCII преобразует результат в ASCII, используя Punycode, и добавляет в начало четырехсимвольную строку "xn". Эта четырехсимвольная строка называется префиксом ASCII Compatible Encoding (ACE) и используется для различения меток, закодированных в Punycode, и обычных ASCII-меток. Алгоритм ToASCII может завершиться неудачей несколькими способами, например, если итоговая строка превышает 63-символьный лимит метки DNS. Метка, для которой ToASCII завершился неудачей, не может быть использована в интернационализированном доменном имени. Функция ToUnicode выполняет обратное действие ToASCII, удаляя префикс ACE и применяя алгоритм декодирования Punycode. Обработка Nameprep не восстанавливается, поскольку это лишь нормализация, необратимая по своей природе. В отличие от ToASCII, ToUnicode всегда выполняется успешно, так как в случае сбоя декодирования просто возвращает исходную строку. В частности, это означает, что ToUnicode не влияет на строку, которая не начинается с префикса ACE.
Пример кодирования IDNA
Кодировка IDNA может быть проиллюстрирована на примере домена Bücher.example (Bücher.). Это доменное имя состоит из двух меток: Bücher и example. Вторая метка является чистой ASCII и остаётся без изменений. Первая метка обрабатывается Nameprep для получения bücher, а затем преобразуется в Punycode, в результате чего получается bcher kva. К ней добавляется префикс xn, формируя xn--bcher-kva. Таким образом, результирующее имя, пригодное для использования в DNS-записях и запросах, будет xn--bcher-kva.example.
Рабочая группа по разработке ИДН с арабским шрифтом (ASIWG)
Хотя арабский регион составляет 5 процентов населения мира, на его долю приходится лишь 2,6 процента мирового использования Интернета. Более того, доля пользователей Интернета среди населения арабского мира составляет всего 11 процентов, по сравнению с мировым показателем в 21,9 процента. Однако использование Интернета в регионе выросло на 1426 процентов в период с 2000 по 2008 год, что является значительным увеличением, особенно в сравнении со средним мировым темпом роста в 305,5 процента за тот же период. Следовательно, можно предположить, что рост использования мог быть еще более существенным, если бы DNS поддерживал арабские символы. Внедрение IDN открывает множество новых возможностей и преимуществ для арабских пользователей Интернета, позволяя им регистрировать домены на родных языках и с использованием родных алфавитов, а также создавать широкий спектр услуг и локализованных приложений на основе этих доменов.
Внедрение домена верхнего уровня
В 2009 году ICANN приняла решение о внедрении нового класса доменов верхнего уровня, которые могут быть присвоены странам и независимым территориям, по аналогии с правилами для доменов верхнего уровня с кодами стран. Однако доменные имена могут представлять собой любую желаемую последовательность символов, знаков или глифов на языке, использующем нелатинский алфавит или письменность заявителя, при соблюдении определенных требований для обеспечения достаточной визуальной различимости. Процесс внедрения доменов с кодами стран в интернационализированном формате (IDN) начался с длительного периода тестирования на наборе поддоменов в тестовом домене верхнего уровня. Одиннадцать доменов использовали родные для языка письменности или алфавиты, например, "δοκιμή", что означает "тест" на греческом языке. Эти усилия завершились созданием первых интернационализированных доменов верхнего уровня с кодами стран (IDN ccTLD) для использования в рабочей среде в 2010 году. В системе доменных имен эти домены используют ASCII-представление, состоящее из префикса "xn", за которым следует преобразование Punycode Unicode-представления символов конкретного языка или письменности. Например, кириллическое название российского IDN ccTLD – "рф". В представлении Punycode это выглядит как "p1ai", а его DNS-имя – "xn p1ai".
Регистры, не принадлежащие IDNA или ICANN, поддерживающие доменные имена, не принадлежащие ASCII
Другие реестры поддерживают доменные имена, не использующие ASCII. Компания ThaiURL.com в Таиланде поддерживает регистрацию доменов ".com" посредством собственной кодировки IDN, ThaiURL. Однако, поскольку большинство современных браузеров распознают только IDNA/Punycode IDN, домены, закодированные ThaiURL, необходимо вводить или использовать в ссылках в закодированном виде, и они будут отображаться именно так в адресной строке. Это ограничивает их удобство использования, однако они остаются действительными и общедоступными доменами. Некоторые реестры поддерживают символы Punycode в качестве доменов эмодзи.
Проблемы с подделкой ASCII
Использование Unicode в доменных именах потенциально облегчает спуфинг веб-сайтов, поскольку визуальное представление строки IDN в веб-браузере может сделать поддельный сайт неотличимым от легитимного сайта, который подвергается спуфингу, в зависимости от используемого шрифта. Например, символ Unicode U+0430 (кириллическая маленькая буква "а") может выглядеть идентично символу Unicode U+0061 (латинская маленькая буква "a"), используемому в английском языке. В качестве конкретного примера, используя кириллические буквы а, е, і, р (а; затем "е" U+0435, выглядящая практически идентично латинской букве "e"; затем "і" U+0456, практически идентичная латинской букве "i"; и "р" U+0440, практически идентичная латинской букве "p"), формируется URL wіkіреdіа.org, который практически неотличим от визуального представления легитимного wikipedia.org (возможно, в зависимости от используемых шрифтов).
Домены верхнего уровня, принимающие регистрацию IDN
Многие домены верхнего уровня начали принимать регистрации интернационализированных доменных имен на втором и более низких уровнях. Afilias (.INFO) предложила первые регистрации IDN второго уровня для gTLD в 2004 году на немецком языке. DotAsia, регистратор домена верхнего уровня Asia, провела 70-дневный период приоритетной регистрации, начавшийся 11 мая 2011 года, для регистрации доменов второго уровня на китайской, японской и корейской письменности.