Кратко

  • RFC 3722 предписал отображение символов Unicode, нормализацию NFKC и проверку запрещённых символов, чтобы реализации iSCSI сравнивали уже подготовленные байты UTF-8.
  • Это решение упростило ручную передачу имён и реализацию на простых устройствах, но не устранило визуальную подмену: похожие символы остаются разными, а профиль основан на Unicode 3.2.

В консоли хранения два имени могут выглядеть одинаково, хотя целевой узел видит разные строки. Разница проявляется, когда администратор копирует имя с наклейки или из инструкции, а компактный инициатор должен решить, совпадают ли полученные байты с настроенным целевым узлом. Опубликованный в апреле 2004 года RFC 3722 описывает именно эту границу для имён Internet Small Computer Systems Interface (iSCSI).

Здесь сталкивались две потребности. Человеку, который переписывает интернационализированное имя, нужна предсказуемая обработка регистра и вариантов записи. Простому или встроенному устройству полезно точное правило: подготовить строку, закодировать её в UTF-8 и сравнить октеты. Если каждая реализация сама выбирает, что считать эквивалентным, одинаково выглядящие вводы могут превратиться в разные протокольные значения. Если же потребовать гибкого сравнения с учётом языка, реализация усложнится, а результат станет менее предсказуемым.

RFC 3722 выбрал ограниченный профиль, а не произвольную очистку текста. Он зафиксировал набор символов Unicode 3.2, применил отображения Stringprep из таблиц B.1 и B.2, затем нормализацию NFKC. После этого проверяются запрещённые выходные значения из таблиц C.1.1–C.9 и условия для текста с двунаправленным письмом. Фиксированная последовательность не позволяет реализации придумывать удобное ей отношение эквивалентности уже после получения имени.

Одни различия исчезают, другие сохраняются. Заглавные символы ASCII, введённые через пользовательский интерфейс, ДОЛЖНЫ переводиться в нижний регистр. Разрешённый набор ASCII включает строчные буквы, цифры, дефис, точку и двоеточие; пробельные символы запрещены. Например, RFC 3722 запрещает U+3002 — идеографическую точку, даже если некоторые системы ввода доменных имён считают её эквивалентом ASCII-точки U+002E. Поэтому профиль не наследует автоматически подстановки других приложений.

Это не означает, что «Unicode очищен». Получается конкретное представление согласно явно указанному набору и таблицам. Для кодирования UTF-8 есть отдельная спецификация; грамматика имён iSCSI и правила полномочий на присвоение имён также требуют отдельной проверки. RFC 3721 задаёт более широкий контекст именования и обнаружения, а RFC 3722 описывает подготовку строки. Успешная подготовка не подтверждает право доступа, актуальный контроль имени какой-либо организацией или доступность цели по конкретному адресу.

Ограничение, которое легко упустить: RFC 3722 не объединяет визуально похожие символы. Латинская буква и похожая на неё греческая или кириллическая буква, как и два знака, похожие в конкретном шрифте, не становятся равными из-за ошибки читателя. В разделе безопасности отмечено, что разные интерпретации могут привести инициатор к неверной цели или не дать ему подключиться к нужной. Это анализ возможного отказа, а не свидетельство уже произошедшей атаки.

Профиль может свести определённые варианты к одному представлению, отвергнуть запрещённые символы и проверить двунаправленный текст. Но он не устанавливает, кто контролирует пространство имён, можно ли доверять подписи на экране и должен ли человек принять вводящую в заблуждение строку. Эти вопросы требуют мер вне профиля подготовки.

Nameprep из RFC 3491 связан с темой: это другой профиль Stringprep для интернационализированных доменных имён, но не для iSCSI. RFC 3454 задаёт основу, а RFC 3722 выбирает правила для собственной задачи. Более позднее объединение материалов iSCSI в RFC 7143 не превращает исходную опору на Unicode 3.2 в актуальную рекомендацию для всех новых систем идентификаторов.

Исторический выбор поставил воспроизводимость выше свободы толкования. Разработчики получили точную последовательность, операторы — способ понять, почему два ввода совпадают или один отклоняется. Но воспроизводимое сравнение зависит от реально полученной строки и не предотвращает визуальную подмену. Урок не в том, что Unicode сделал имена хранения безопасными, а в том, что протокол должен прямо указать, какие различия он стирает, какие запрещает, а какие оставляет людям и внешним мерам контроля.

Источники