Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #77, МАЙ 2005 г.

Анатомия синего зуба

Eto’o (eto-o@mail.ru)

Хакер, номер #077, стр. 077-070-4


Этот 128-битный ключ создается специальной функцией E22(BD_ADDR, PIN, l(PIN), IN_RAND), где l(PIN) – длина пина в октетах, а IN_RAND – случайное число, генерируемое устройством “A” и без всякой защиты передаваемое девайсу “B”. Шифр используется для защиты трафика при передаче параметров, с помощью которых проводятся дальнейшие действия по аутентификации устройств, в частности – вычисление кода, которым будет криптоваться весь пользовательский трафик.

После генерации Kinit’а, он устанавливается ключом канала и весь дальнейший обмен информацией защищается этим шифром. Затем создаются так называемые комбинированные ключи, используемые для шифрования пользовательских данных при передаче между устройствами: следует заметить, что на этот раз ключи разные – для передачи информации от A к B используется Kab и наоборот, информация, передающаяся от B к A защищается шифром Kba. Генерируются эти ключи следующим образом.

Первым делом каждая девайсина создает по случайному числу, мы обозначим их за LK_RANDa и LK_RANDb. Затем, при помощи функции E21(LK_RAND, BD_ADDR), генерятся два числа LK_Ka и LK_Kb, причем в этот момент каждый девайс знает только свою величину, а цель дальнейшей работы устройств – сообщить друг другу эти числа так, чтоб никто чужой их не запалил. Что может быть проще! Заксорив Kinit’ом случайные числа LR_RAND, устройства меняются ими и вычисляют значения LK_K друг для друга. После этого уже очень легко получить ключи Kab=LK_Ka XOR LK_Kb и Kba=LK_Kb XOR LK_Ka.

После проделанных операций выполняется самая последняя и очень важная – конечная аутентификация, при которой устройство, провоцирующее подключение, проходит проверку на желанность со стороны пассивного девайса. Для этого используется схема, которая получила название challenge-response. Я долго думал над тем, как бы это перевести, и в итоге остановился на варианте, который мне предложили на lingvo.yandex.ru – “оклик-отзыв”. Схема работает довольно просто и ты сейчас в этом убедишься.

Устройство “A”, которое запрашивает подключение, генерирует случайное число AU_RAND и посылает его соседнему девайсу “B”. Устройство “B” вычисляет значение S специальной функции E1(AU_RAND, BD_ADDR, Kab), где BD_ADDR – это адрес устройства. Девайс “B” передает полученное значение S назад и теперь уже очередь “A” проделать тоже самое, получив значение S’. Ясен еж, что если оба устройства использовали одинаковый ключ Kab, то значения S’ и S совпадут, а аутентификация будет успешно пройдена.

Если же устройства использовали различные ключи, попытка аутентификации будет неудачной и девайс “B” не будет некоторое время отвечать на запросы “A”. С ростом числа неудачных попыток время ожидания будет расти экспоненциально, пока не упрется в некоторое максимальное значение. По задумке инженеров, это должно было решить проблему тупого перебора PIN-кода. Ну, в самом деле, теперь даже если злоумышленник наколбасит какую-нибудь программу-брутфорсер, которая будет с одного и того же интерфейса в цикле тупо пытаться установить соединение, то ничего из этой затеи не выйдет.

Назад на стр. 077-070-3  Содержание  Вперед на стр. 077-070-5