Посиневший пин Александр Любимов aka Sashiks Хакер, номер #085, стр. 085-068-2 1. BD_ADDR - уникальный адрес BT-устройства длиной 48 бит (то же самое, что и MAC-адрес у обычной сетевухи) 2. PIN и его длина 3. Случайное 128-битное число IN_RAND На выходе, после работы E22 алгоритма, получаем 128- битное слово, которое гордо именуется Kinit. Стоит подчеркнуть, что число IN_RAND отсылается устройством A в чистом виде, то есть ни о каком шифровании речи еще не идет. Если PIN-код устройства неизменяем, то при формировании ключа инициализации (Kinit) используется BD_ADDR второго устройства. Когда у обоих девайсов пины разные, будет использован BD_ADDR(B). Первый шаг паринга пройден, а за ним следует создание link key Kab. Как только он будет сформирован, ключ Kinit отбрасывается и больше не используется. Плавно переходим к созданию ключа связи (link key), который в простонародье называют Kab. Для этого нехитрого дела железки пересылают друг другу 128-битные слова LK_RAND(A) и LK_RAND(B), которые генерируются случайным образом и обмениваются ими после побитового XOR'a ключом инициализации Kinit. Вся процедура достаточно подробно описана на схеме. После того как девайсы уже обменялись поксоренными словами, начинается вычисление ключа по методу E21. Вот что необходимо для Kab-ключа: 1. BD_ADDR (это мы уже проходили) 2. 128-битный LK_RAND (каждое устройство хранит свое и полученное от другого девайса значение) // На это месте pairing ЗАКАНЧИВАЕТСЯ После длительных потуг link key все-таки создается, и это значит, что сам паринг успешно завершен, и начинается последний этап инициализации bluetooth - совместная аутентификация, или Mutual authentication. Процесс основан на довольно любопытной схеме «запрос-ответ». Но одна из железок становится верификатором (то есть «проверяющим»), генерирует случайное слово AU_RAND(A) и в plain text засылает его соседнему устройству, кратко называемому предъявителем (claimant - в оригинальной документации). Как только устройство-предъявитель получает это «слово», начинается вычисление величины SRES с применением алгоритма E1, и она отправляется верификатору. Соседний девайс производит аналогичные вычисления и проверяет ответ предъявителя. Если SRES'ы совпали, то, значит, все ОК, и теперь девайсы меняются ролями, так что процесс повторяется заново. Сам же SRES вычисляется по E1-алгоритму, который оперирует такими величинами: 1. Случайно созданное AU_RAND 2. link key Kab 3. Свой собственный BD_ADDR Представить в голове такой процесс довольно муторно, но туман рассеется, как только ты взглянешь на схему. Все, с инициализацией разобрались, идем дальше. [the basic attack] Как происходит аутентификация мы уже разобрали. Самое время проанализировать данные, которыми обменивались устройства на протяжении всего процесса сопряжения: |