RFC: 2865
Оригинал: Remote Authentication Dial In User Service (RADIUS)
Предыдущие версии: RFC 2058, RFC 2138
Категория: Проект стандарта
Дата публикации:
Авторы: , , ,
Перевод: Николай Малых

3. Формат пакетов

В поле данных пакетов UDP [4] инкапсулируется по одному пакету RADIUS и поле UDP Destination Port для протокола RADIUS должно содержать десятичное значение 1812.

При генерации откликов номера портов отправителя и получателя меняются местами.

В этом документе содержится спецификация протокола RADIUS. Ранние версии RADIUS использовали порт UDP 1645, что приводило к конфликтам со службами datametrics. Официально выделенный для протокола RADIUS порт имеет номер 1812.

Ниже показан формат типового пакета RADIUS. Поля передаются слева направо и сверху вниз.

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     Code      |  Identifier   |            Length             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
|                         Authenticator                         |
|                                                               |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  Attributes ...
+-+-+-+-+-+-+-+-+-+-+-+-+-
  • Code

    Поле Code имеет размер 1 октет и содержит идентификатор типа пакета RADIUS. При получении пакета с некорректным значением поля Code такой пакет отбрасывается без уведомления.

    Десятичные значения кодов для пакетов RADIUS показаны в таблице.

    КодТип пакета
    1Access-Request
    2Access-Accept
    3Access-Reject
    4Accounting-Request
    5Accounting-Response
    11Access-Challenge
    12Status-Server (экспериментальный)
    13Status-Client (экспериментальный)
    255Зарезервирован

    Коды 4 и 5 описаны в документе RADIUS Accounting [5]. Коды 12 и 13 зарезервированы и могут использоваться, но не рассматриваются в данном документе.

  • Identifier

    Поле Identifier размером 1 октет используется для сопоставления запросов с откликами. Сервер RADIUS может детектировать дубликаты запросов по совпадению IP-адреса отправителя, номеру порта отправителя и значению поля Identifier, если такие пакеты получены в течение короткого промежутка времени.

  • Length

    Поле Length имеет размер 2 октета и показывает размер пакета с учетом полей Code, Identifier, Length, Authenticator и Attribute. Октеты за пределами указанного в поле размера значения должны трактоваться как заполнение и оставляться без внимания. Если размер пакета меньше значения поля Length, пакет должен отбрасываться без уведомления. Минимальный размер пакета составляет 20, а максимальный — 4096.

  • Authenticator

    Поле Authenticator имеет размер 16 октетов. Старший октет поля передается первым. Значение поля применяется для идентификации откликов от сервера RADIUS, а также используется алгоритмом сокрытия паролей.

    • Request Authenticator

      В пакетах Access-Request в качестве значения поля Authenticator используется 16-октетное случайное значение Request Authenticator. Следует использовать непредсказуемые значения, уникальные в течение срока жизни ключа (пароля, используемого при обмене информацией между клиентом и сервером RADIUS), поскольку повторное использование значений вкупе с тем же ключом позволит атакующему использовать перехваченные отклики. В предположении что разделяемый секрет может использоваться в географически удаленных серверах, поле Request Authenticator следует делать уникальным в пространственном и временном аспекте.

      В пакетах Access-Request также следует использовать непредсказуемые значения поля Request Authenticator, чтобы атакующий не мог обмануть сервер, предсказав будущий запрос, и использовать полученный от сервера отклик, прикинувшись сервером для будущих запросов Access-Request.

      Хотя такие протоколы, как RADIUS, не обеспечивают защиты сеансов идентификации от перехвата путем прямого прослушивания, использование уникальных и непредсказуемых запросов может обеспечить защиту от множества типов атак на систему идентификации пользователей.

      Серверы NAS и RADIUS используют разделяемый ключ (пароль). Этот ключ вместе с Request Authenticator передаются необратимой функции MD5 для создания 16-октетного значения, которое объединяется с введенным пользователем паролем (логическая операция XOR) и результат помещается в атрибут User-Password пакета Access-Request. Более подробное описание этих операций приведено ниже при рассмотрении атрибута User-Password.

    • Response Authenticator

      Поле Authenticator в пакетах Access-Accept, Access-Reject и Access-Challenge называют Response Authenticator. Это поле содержит необратимое хэш-значение MD5 рассчитанное для потока октетов, состоящего из пакета RADIUS, начиная с поля Code и включая поля Identifier, Length и Request Authenticator из пакета Access-Request, атрибутов отклика и разделяемого ключа. Таким образом,

      ResponseAuth = MD5(Code+ID+Length+RequestAuth+Attributes+Secret)

      где знак + обозначает конкатенацию (объединение) строк.

  • Замечания для администраторов

    Разделяемый ключ (пароль, известный клиенту и серверу RADIUS) следует создавать с соблюдением обычных требований, предъявляемых к хорошим паролям. Предпочтительно использовать ключи размером не менее 16 октетов. Это существенно затруднит атаки путем подбора ключей. Недопустимо использование пустых (нулевой длины) ключей, поскольку в этом случае перехват пакетов становится тривиальной задачей.

    Сервер RADIUS должен использовать IP-адрес отправителя из пакетов RADIUS UDP для выбора разделяемого с клиентом секрета, чтобы можно было передавать запросы RADIUS через серверы-посредники.

    При использовании пересылающего proxy, этот сервер-посредник должен быть способен отличать пакеты, передаваемые в каждом направлении. При пересылке запросов посредник может добавлять атрибут Proxy-State, а при пересылке откликов посредник должен удалить добавленный атрибут Proxy-State. Удаляемый или добавляемый атрибут Proxy-State всегда должен быть последним среди одноименных атрибутов, но делать иные допущения о месте данного атрибута среди прочих атрибутов не следует. Поскольку для откликов Access-Accept и Access-Reject аутентификация осуществляется на уровне всего пакета, удаление атрибута Proxy-State делает сигнатуру некорректной и proxy-сервер должен заново "подписать" пакет.

    Другие детали реализации серверов-посредников RADIUS выходят за пределы данной спецификации.

2007 - 2017 © Русские переводы RFC, IETF, ISOC.