Как зашифровать данные с помощью BLE-соединения с помощью Bluez5.50 - PullRequest
0 голосов
/ 25 января 2019

Я работаю над проектом C ++, который занимается передачей данных. Моя система состоит из двух разных устройств, которые должны обмениваться конфиденциальными данными в надежном режиме. Для этого я скачал и настроил последнюю библиотеку bluez (v5.50) на своем Raspberry Pi.

  1. Есть ли возможность включить шифрование данных с помощью API bluez?

Поглядывая вокруг возможности использования механизма шифрования BLE, я нашел противоречивые мнения. Кто-то предлагает использовать его, в то время как другие не одобряют его в пользу использования шифрования на уровне приложений, например, библиотеки Cripto ++.

  1. Какое решение самое лучшее?

Спасибо

1 Ответ

0 голосов
/ 26 января 2019

Я рекомендую всегда иметь зашифрованное соединение.См. этот ответ , в котором объясняются преимущества и важность зашифрованных соединений по сравнению с открытыми соединениями.

Что касается зашифрованных соединений, вы можете легко сделать это путем сопряжения с устройством.В BLE спаривание позволяет шифровать пакеты подключения.Используя BlueZ, вы можете легко сделать это из командной строки с помощью команды bluetoothctl следующим образом: -

bluetoothctl
[bluetoothctl] connect 00:11:22:33:44:55
[bluetoothctl] pair 00:11:22:33:44:55

Заранее убедитесь, что ваше устройство BlueZ может выполнять / принимать соединения и сопряжение следующим образом: -

btmgmt connectable on
btmgmt bondable on
btmgmt io-cap 
btmgmt 3

Последняя команда устанавливает для вашей возможности ввода-вывода значение NoInputNoOutput, но вы можете изменить это значение на одно из следующих значений: -

0       DisplayOnly
1       DisplayYesNo
2       KeyboardOnly
3       NoInputNoOutput
4       KeyboardDisplay

Однако, если вы это сделаете, вам потребуетсяпередайте эквивалентный параметр командной строки при запуске bluetoothctl следующим образом: -

bluetoothctl --agent KeyboardOnly
bluetoothctl --agent KeyboardDisplay
bluetoothctl --agent NoInputNoOutput
bluetoothctl --agent DisplayOnly 

Если вы хотите просмотреть базовый API для этого, взгляните на исходный код BlueZ ивы можете начать с client / main.c для команд подключения и сопряжения.

Наконец, как указал Соломон Слоу, если вы обещаете защитить конфиденциальные данные, то вам определенно следует пойти намногоуровневое шифрование.Другими словами, ссылка должна быть зашифрована, а также данные перед отправкой в ​​программном обеспечении, и если ваше устройство поддерживает шифрование на аппаратном уровне, то также сделайте это.

Для дальнейшего чтения по BLE EncryptionПожалуйста, посетите Спецификация Bluetooth Версия 5.0, Том 2, Часть H, Раздел 1: Обзор безопасности.

Надеюсь, это поможет.

...