Посиневший пин Александр Любимов aka Sashiks Хакер, номер #085, стр. 085-068-3 # Откуда Куда Данные Длинна Вид 1 A B IN_RAND 128 bit plaintext 2 A B LK_RAND(A) 128 bit XORed with Kinit 3 B A LK_RAND(B) 128 bit XORed with Kinit 4 A B AU_RAND(A) 128 bit plaintext 5 B A SRES 32 bit plaintext 6 B A AU_RAND(B) 128 bit plaintext 7 A B SRES 32 bit plaintext Обладая этими сведениями, реально продумать и рассчитать теоретический план атаки на bluetooth-соединение, чтобы украсть PIN. Представим, что негодяй хакер прослушал эфир и во время паринга перехватил и сохранил все сообщения. Теперь мы подошли вплотную к главному вопросу. Собственно, сам взлом пина осуществляется подбором. Для начала нужно составить продвинутый алгоритм перебора, чтобы получить хоть какой-то результат. Вот смотри, мы перехватили IN_RAND (он нешифрованный) и BD_ADDR (причем у обоих устройств адреса видны в эфире) и запускаем алгоритм E22; ему передаются вышеперечисленные данные и наш «потенциальный» PIN. Мы находим предполагаемое значение Kinit, это выглядит примерно так: Kinit = E22[IN_RAND, BD_ADDR(B), PIN'] //PIN' - предполагаемый нами пин-код Идем дальше, смотри на таблицу выше: сообщения 2 и 3 поксорены Kinit'ом, который мы только что сгенерировали. Значит, сейчас мы получим LK_RAND(A) и LK_RAND(B) в чистом виде. Собственно говоря, нам никто не мешает высчитать гипотетическое значение Kab. Проделываем следующую операцию: LK_K(A) = E21[BD_ADDR(A), LK_RAND(A)] //LK_K(A|B) - это промежуточные величины LK_K(B) = E21[BD_ADDR(B), LK_RAND(B)] // XOR'им их между собой и получаем ключ связи Kab = LK_K(A) XOR LK_K(B) Теперь самое время проверить наш «потенциальный» пин. Чтобы узнать, действительно ли он настоящий, мы берем свежеиспеченный Kab и перехваченный AU_RAND(A) и вычисляем значение SRES(A). После этого сравниваем полученный результат с SRES(A)', который хранится в сообщении номер 5: SRES(A) = E1[AU_RAND(A), Kab, BD_ADDR(B)] Если SRES(A) == SRES(A)' - мы успешно угадали пин! Если же вышел облом, то начинаем производить всю последовательность действий заново, только теперь берем другой PIN'. Вот такая вот хитрая методика получилась. Все вышеописанное, в принципе, не новость. Первым человеком, который заметил эту брешь, если ее можно так назвать, был англичанин Олли Вайтхауз (Ollie Whitehouse) еще в апреле 2004 года. Именно он догадался перехватить сообщения во время паринга и попытаться вычислить PIN методом перебора с помощью полученной идентификационной информации. Тем не менее метод, представленный Вайтхаузом, имел один достаточно весомый изъян: атаку можно было провести только в том случае, если хакер смог выловить все аутентификационные данные. То есть, если взломщик находился вне эфира во время начала паринга, то он пролетает как фанера над Парижем - первые пакеты с данными уже отправлены и отловить их не представляется возможным. [кто быстрей] Понятно, что конкретные реализации описанного выше процесса могут работать с различной скоростью. Можно оптимизировать эти программы, используя специальные настройки компилятора, можно переписывать по-разному циклы, условия |