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

Матеріал з Вікі ЦДУ
Версія від 02:51, 19 грудня 2017; 2654507 (обговореннявнесок)

(різн.) ← Попередня версія • Поточна версія (різн.) • Новіша версія → (різн.)
Перейти до: навігація, пошук

==Ініціалізація bluetooth-з'єднання==[8][9]

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

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

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

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

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

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

  • BD_ADDR — унікальний MAC-адресу BT-пристрої. Довжина 48 біт (аналог IP-адреси, але встановлюється виробником і унікальний для кожного мережевого пристрою)
  • 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