Кратко
- 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 сделал имена хранения безопасными, а в том, что протокол должен прямо указать, какие различия он стирает, какие запрещает, а какие оставляет людям и внешним мерам контроля.
Источники
- RFC 3722 — профиль строк имён iSCSI
- RFC Editor — сведения о RFC 3722
- Список исправлений RFC 3722
- RFC 3721 — именование и обнаружение iSCSI
- RFC 3720 — протокол iSCSI
- RFC 3454 — основа Stringprep
- RFC 3491 — профиль Nameprep
- RFC 3629 — UTF-8
- RFC 7143 — объединённая спецификация iSCSI
- RFC 2396 — общая синтаксическая форма URI
- RFC 2732 — буквальные IPv6-адреса в URL
Обзор для участников
Подробный контекст профиля
Войдите с подходящим уровнем подписки, чтобы открыть полный обзор и примечания к источникам.
Только для Стратегического сообщества
Стратегическое сообщество
Открыто всем читателям. Вступите и войдите, чтобы открыть обзоры профилей.
Вступить в Стратегическое сообществоТолько для Альянса лидеров
Альянс лидеров
Для проверенных владельцев IP-активов и руководителей. Войдите, чтобы открыть обзоры Альянса.
Вступить в Альянс лидеров
