Установите возможности ввода-вывода для сопряжения BLE на iOS - PullRequest
1 голос
/ 21 апреля 2020

В моем случае периферийное устройство BLE не имеет реальных возможностей ввода-вывода, но требуется защита MITM.

В качестве решения используется метод сопряжения Passkey Entry с 6-ди git выводом обмен через другой канал. Та же философия, что и для спаривания вне диапазона, но iOS не поддерживает OOB, поэтому следующим лучшим вариантом будет использовать Passkey Entry так же, как и OOB - отличие состоит в том, что 6-ди git пароль вместо 128-битного ключ (лучше, чем ничего).

Проблема состоит в том, что для этого случая, чтобы работать как положено, центральным и периферийным устройствам необходимо было бы установить ограничение ввода-вывода на KeyboardOnly, что привело бы к спариванию PasskeyEntry: initiator and responder inputs method.

Возможные комбинации, скопированные из Базовая спецификация BT [Vol 3] Часть H, Раздел 2.3.5.1, Таблица 2.8: Отображение возможностей ввода-вывода в метод генерации ключа :

                    /--------------------------------------------------------------------\  
   /-----------\   /                        Initiator (iOS/Android)                       \ 
  /  Responder  \ |-------------+--------------+---------------------+---------------------|
 /  (Peripheral) \| DisplayOnly | DisplayYesNo |     KeyboardOnly    |   KeyboardDisplay   |
|-----------------|-------------+--------------+---------------------+---------------------+
|   DisplayOnly   |             M1             |                     M3                    |
+-----------------+         Just Works         |               Passkey Entry:              |
|   DisplayYesNo  |                            |    Responder displays, initiator inputs   |
+-----------------+----------------------------+---------------------+---------------------+
|                 |                            |          M4         |                     |
|   KeyboardOnly  |                            |    Passkey Entry:   |                     |
|                 |             M2             |    initiator and    |          M2         |
|                 |       Passkey Entry:       |   responder inputs  |    Passkey Entry:   |
+-----------------+     Initiator displays,    +---------------------+ Initiator displays, |
|                 |      responder inputs      |          M3         |   responder inputs  |
| KeyboardDisplay |                            |    Passkey Entry:   |                     |
|                 |                            | Responder displays, |                     |
|                 |                            |   initiator inputs  |                     |
+-----------------+----------------------------+---------------------+---------------------+

M1 : не подходит, поскольку не предлагает аутентификацию, защиту от прослушивания, защиту MITM.
M2 : невозможно, поскольку пароль который Инициатор отображает - это случайное число, сгенерированное в стеке iOS / Android и не может быть установлено вручную.
M3 : То же, что M2 , но в теории стек BT на периферии В конечном итоге al можно было бы пропатчить, чтобы сгенерировать «конкретное c random number».
M4 : единственный способ ввода пользовательского ключа доступа на обоих устройствах.

Android имеет BluetoothConfigManager :: setLeIoCapability метод для этой цели

import com.google.android.things.bluetooth.BluetoothConfigManager

val manager = BluetoothConfigManager.getInstance()
// Report that this device can accept keyboard user input only
manager.leIoCapability = BluetoothConfigManager.IO_CAPABILITY_IN
// TODO: Adapter needs to be restarted using BluetoothAdapter::disable() and enable()!

Возможно ли это сделать на iOS (Core Bluetooth)?

Спасибо за помощь, любые идеи!

1 Ответ

1 голос
/ 22 апреля 2020

Вы ответили на свой вопрос. Я думаю, что M3 настолько далеко, насколько вы можете зайти (сгенерируйте случайное число на вашем подчиненном устройстве, которое затем передается с помощью OOB пользователю, чтобы он / она мог ввести пароль на устройстве iOS). Кроме этого, вы не можете изменить поведение iOS. К сожалению, Apple не предоставляет никаких API сопряжения / соединения / безопасности на iOS, что плохо, поэтому вы никогда не сможете узнать, является ли операция BLE «безопасной» или нет.

Если вы действительно хотите обеспечить безопасность на iOS / BLE, тогда у вас должен быть свой собственный уровень безопасности поверх BLE (тогда предполагается, что BLE небезопасен).

...