Беспроводные сети и их взлом. Аутентификация и шифрование
Согласно стандарту IEEE 802.11 существует три базовых режима безопасности, выбираемых беспроводным устройством в зависимости от уровня секретности: а) открытый режим (ни шифрование, ни аутентификация не используется); б) защищенный режим без аутентификации, но с шифрованием трафика; с) защищенный режим с аутентификацией и шифрованием трафика;
Шифрование в обоих случаях осуществляется по WEP-протоколу (Wired Equivalent Protocol - Эквивалент Проводного Протокола), опирающегося на потоковый криптоалгоритм RC4. Исходные данные (data) нарезаются на фреймы (fames) с размером 1.518 бит (впрочем, размер задан не жестко и в зависимости от конфигурации оборудования он может существенно отличаться). Для каждого фрейма определяется 32-битная контрольная сумма (ICV), вычисляемая по алгоритму CRC32, и укладывается в пакет. Эффективный ключ шифрования (PRNG - Pseudo-Random Number Generator - Генератор Псевдослучайный Чисел) генерируются на основе двух ключей - 40-битного секретного ключа (secret key или WEP key) и 24-битного вектора инициализации (IV - Initialization Vector). Все вместе это называется 64-битным шифрованием и представят собой классический пример американского маркетинга по одурачиванию доверчивых пользователей. В самом деле, зачем потребителю знать, что для взлома ключа злоумышленнику достаточно подобрать всего лишь 40 бит из 64!
Вектора инициализации назначаются самим WLAN-устройством и передаются в открытом виде. Зачем они нужны? А затем, что используемый криптоалгоритм легко вскрывается атакой по открытому тексту. Если злоумышленнику известен хотя бы один исходный байт в каждом фрейме, ключ шифрования восстанавливается без труда, поскольку различные части ключа многократно применяются к различным частям зашифрованных фреймов. Чтобы этого избежать, никакой ключ шифрования не должен использоваться дважды. Вектора инициализации автоматически изменяются с каждым пакетом, что обеспечивает "прозрачную" смену ключа, без ведома и участия пользователя.

Строго говоря, для шифрования используется не один секретный ключ, а целых четыре ключа, последовательно назначаемые пользователем при конфигурации беспроводного оборудования. Смена ключей происходит произвольным образом (номер ключа передается вместе с зашифрованным пакетом), но на безопасность передачи данных это никак не влияет. Если хакер может сломать один ключ, он сломает и четыре.

Упрощенно, процесс шифрования потока данных выглядит так (расчет контрольной суммы здесь не показан): K = IV.WEPkey -> KSA(K) -> PRNG(K)XOR data stream, где функции KSA(A) и PRNG(К) выражаются следующим псевдокодом:
// инициализация
for (i = 0; i < N; i++) S[i] = i;
j = 0;
// скремблирование
for (i = 0; i < N; i++)
{
j = j + S[i] + K[i % length];
swap(S[i], S[j]);
}
Псевдокод функции KSA(A), инициализирующей массив S, используемый впоследствии для генерации псевдослучайной последовательности.
// инициализация:
static int i = 0;
static int j = 0;
// цикл генерации:
i = i + 1;
j = j + S[i];
swap(S[i], S[j]);
return S[S[i] + S[j]];
Псевдокод функции PRNG(K), генерирующей псевдослучайную последовательность, используемую для шифрования потока данных операцией XOR.

Аутентификация осуществляется по старой доброй схеме запрос/отклик (challenge/response). Клиент (Client или Station), желающий подключится к Точке Доступа (Access Point), посылает запрос на аутентификацию (Authentication Request). Точка доступа генерирует 128-байтовый псевдослучайный "испытательный текст" (Challenge Text) и оправляет его Клиенту. Получив "испытательный текст", клиент шифрует его 64-битным ключом, полученным на основе секретного WEP-ключа и произвольного вектора инициализации. Зашифрованный испытательный текст (Encrypted Challenge Text) вместе с вектором инициализации передается на Точку Доступа, где происходит обратный процесс: используя имеющейся в ее распоряжении секретный WEP-ключ и открытый вектор инициализации, Точка Доступа расшифровывает пакет и сравнивает полученный текст с оригинальным испытательным текстом. Если они совпадают, аутентификация считается успешной и Клиенту отправляется подтверждение доступа (Confirm Success).

Независимо от выбранного режима секретности, Точка Доступа может использовать привязку к MAC-адресам и проверку SSID/ESSID ([Extended] Service Set IDentifiсation - Идентификация [Расширенного] Комплекта Услуг, условно называемая "именем сети"), отсекая всех непрошеных нарушителей еще на стадии подключения (технология Access Control List - Список Управления Доступом). Для самоуспокоения такая мера может быть и сгодится, но вот злоумышленников она остановит навряд ли. И MAC, и SSID передаются по сети открытым текстом, так что их перехват не представляет никакой проблемы. Перепрограммировать MAC-адрес своей карты чуть сложнее, но хакеры с этим легко справляются (даже если карта не позволяет сделать этого явно, атакующий всегда может "перешить" ПЗУ). Что же касается SSID, то он и вовсе прописывается с пользовательского интерфейса, поскольку используется исключительно как "маркер", позволяющий беспроводному устройству отличить одну сеть от другой. Борьба с хакерами в его задачу не входит. Тем не менее, это еще не значит, что SSID можно не заполнять (а большинство пользователей именно так и поступает)!

