Ініціалізація bluetooth-з’єднання

Матеріал з Вікі ЦДУ
Перейти до: навігація, пошук

Ініціалізацією, дотично bluetooth, прийнято називати процес установки зв'язку. Її можна розділити на три етапи:

• Генерація ключа Kinit;

• Генерація ключа зв'язку (він носить назву link key і позначається, як Kab);

• Аутентифікація.

Перші два пункти входять в так звану процедуру паринга.

Паринг (PAIRING) або сполучення. Процес зв'язку двох (або більш) пристроїв з метою створення єдиної секретної величини Kinit, яку вони надалі використовуватимуть при спілкуванні. У деяких перекладах офіційних документів по bluetooth можна також зустріти термін «підгонка пари».

Перед початком процедури сполучення на обох сторонах необхідно ввести PIN-код. Зви-чайна ситуація: дві люди хочуть зв'язати свої телефони і заздалегідь домовляються про PIN-код.

Для простоти розглядатимемо ситуацію з двома пристроями. Принципово це не вплине на механізми встановлення зв'язку і подальші атаки. Пристрої, що далі з'єднуються, позначатимуться A і B, більш того, один з пристроїв при сполученні стає головним (Master), а друге веденим (Slave). Вважатимемо пристрій A головним, а B веденим. Створення клю-ча Kinit починається відразу після того, як були введені PIN-коди.

Kinit формується по алгоритму E22, який оперує наступними величинами:

• BD_ADDR унікальна адреса BT-устройства. Довжина 48 битий (аналог MAC-адреса мережевої карти РС)

• PIN-код і його довжина

• IN_RAND. Випадкова 128-бітова величина

На виході E22 алгоритму отримуємо 128-бітове слово, іменоване Kinit. Число IN_RAND відсилається пристроєм A в чистому вигляді. У випадку, якщо PIN незмінний для цього пристрою, то при формуванні Kinit використовується BD_ADDR, отримане від іншого пристрою. У випадку якщо у обох пристроїв змінні PIN-коди, буде використаний BD_ADDR(B) адреса slave-пристрою. Перший крок сполучення пройдений. За ним слідує створення Kab. Після його формування Kinit виключається з використання.

Для створення ключа зв'язку Kab пристрою обмінюються 128-бітовими словами LK_RAND(A) і LK_RAND(B), що генеруються випадковим чином. Далі слідує побітовий XOR з ключем ініціалізації Kinit. І знову обмін набутого значення. Потім слідує обчис-лення ключа по алгоритму E21.

Для цього необхідні величини:

• BD_ADDR

• 128-бітовий LK_RAND (кожен пристрій зберігає своє і набутого від іншого при-строю значення значення)

На даному етапі pairing закінчується і починається останній етап ініціалізації bluetooth Mutual authentication або взаємна аутентифікація. Заснована вона на схемі «запит-відповідь». Один з пристроїв стає верификатором, генерує випадкову величину AU_RAND(A) і засилає його сусідньому пристрою (у plain text), званому пред'явником (claimant в оригінальній документації). Як тільки пред'явник отримує це «слово», почина-ється обчислення величини SRES по алгоритму E1, і вона відправляється верификатору. Сусідній пристрій проводить аналогічні обчислення і перевіряє відповідь пред'явника. Якщо SRES співпали, то, значить, все добре, і тепер пристрої міняються ролями, таким чином процес повторюється спочатку.

E1-алгоритм оперує такими величинами:

• Випадково створене AU_RAND

• link key Kab

• Свій власний BD_ADDR