Вопрос или проблема
Вопрос о PEAP-MSCHAPV2 на RADIUS.
После успешного выполнения MSCHAPV2 ключи извлекаются из TLS-контекста. Затем они отправляются на AP.
Клиент не смог подключиться к WiFi (или eapol и др.) с моим самодельным RADIUS Access-Accept.
Можете объяснить полную схему согласования ключей?
Исходный код RADIUS реализован на основе автоматов состояний, поэтому код сложно понять.
Я нашел пропущенный шаг. После Success-Response (от клиента) на phase2 мне нужно отправить пустое сообщение. То есть, пакет TLS-ASK необходим перед фазой 1 Success (от сервера).
Теперь это работает с Linux, Android (wpa_supplicant). Не работает с iOS…
Ответ или решение
Полное описание процесса переговоров ключей в WPA-EAP
При использовании протокола WPA-EAP (Wi-Fi Protected Access – Extensible Authentication Protocol) ключи шифрования играют ключевую роль в установлении безопасного соединения между клиентским устройством и точкой доступа. В этом ответе мы рассмотрим процесс переговоров ключей в контексте PEAP (Protected Extensible Authentication Protocol) с использованием MSCHAPv2 (Microsoft Challenge Handshake Authentication Protocol Version 2).
Этапы переговоров ключей
-
Инициация соединения:
Клиент начинает процесс подключения к сети Wi-Fi, посылая EAPOL (EAP over LAN) Start сообщение. Точка доступа (AP) отвечает EAP Request/Identity, запрашивая идентификационную информацию клиента. -
Передача учетных данных:
Клиент отправляет свои аутентификационные данные, которые в случае использования PEAP могут включать вложенный EAP (в этом случае EAP-MSCHAPv2). После получения запроса от RADIUS-сервера, клиент выполняет аутентификацию, отправляя EAP Response/Identity и затем, в последующем шаге, EAP Response с данными для аутентификации MSCHAPv2. -
Аутентификация на уровне TLS:
После получения ответных данных от клиента RADIUS-сервер инициирует создание безопасного канала TLS. В этом процессе устанавливается защищенное соединение между клиентом и сервером с помощью криптографических операций. После успешного выполнения всех шагов тайм-аут-сессии и подтверждения клиент отправляет EAP Response с кодом, подтверждающим успешность аутентификации. -
Извлечение ключей:
После успешного завершения процесса аутентификации, ключи шифрования извлекаются из TLS-контекста. Эти ключи представляют собой KCK (Key Confirmation Key) и KEK (Key Encryption Key), которые впоследствии будут использоваться для создания ключей сеанса для шифрования трафика. -
Отправка ключей на точку доступа:
Ключи, извлеченные из TLS-контекста, отправляются на точку доступа в ответе EAP, который помечен как Access-Accept. Это место критически важно, и проблемы в этом шаге могут привести к неудаче подключения клиента.
Ошибки и проблемы
В вашем вопросе был упомянут случай, когда подключение не происходило из-за отсутствия промежуточного шага — отправки пустого сообщения (TLS-ASK) от RADIUS-сервера перед успешной аутентификацией в первом фазе. Это может указывать на наличие состояния в конечном автомате, которое требует дополнительного сообщения для завершения процесса установления TLS, особенно в зависимости от конкретных реализаций RADIUS.
- Проблемы с iOS:
Необходимость отправки этого пустого сообщения может объяснять, почему ваше решение работает для Linux и Android с wpa_supplicant, но не функционирует на iOS. Apple устройства могут иметь другие ожидания относительно таймингов и сообщений в процессе аутентификации, и отсутствие этого промежуточного шага может привести к функциональным ошибкам.
Заключение
Правильное понимание и реализация процесса переговоров ключей в WPA-EAP являются основой для создания надежных и безопасных соединений. Ключи, извлеченные из TLS, играют критическую роль в шифровании пользовательского трафика, что обеспечивает защиту данных в беспроводных сетях. Отправка дополнительных сообщений, таких как TLS-ASK, может оказать значительное влияние на успех аутентификации и подключение некоторых клиентских устройств. При необходимости следует провести дальнейший анализ и отладку реализации RADIUS для обеспечения совместимости с различными операционными системами.