Intereting Posts
GetString вне контекста или действия Android Studio – эмулятор планшета не показывает правильное разрешение Можно ли использовать API android для перехвата и чтения сообщений оператора (сообщения USSD)? Можно ли выполнить строку кода Java во время выполнения в Android? Проблемы с использованием последних банок из Square – модификация, okhttp, okio и okhttp-urlconnection Установить фокус на любой элемент списка в андроиде Ошибка: в проекте используется неподдерживаемая версия подключаемого модуля Android Gradle (0.12.2) Максимальная длина Android Sqlite String? Ошибка при создании apk – «Несколько файлов dex определяют Lcom / google / ads / Ad» Как вы отображаете 2-значный NumberPicker в android? Android Wear: программный экран пробуждения Android Download Manager Динамическое добавление просмотров в макет конкретного фрагмента Идеи источника QualcommCameraHardware native_get_picture: MSM_CAM_IOCTL_GET_PICTURE Ошибка времени ожидания подключения? В React Native, как вы связываете текстовый файл и читаете его значение во время выполнения?

Bluetooth с низким энергопотреблением и защита данных

Мне нужно отправить некоторые конфиденциальные данные через соединение Bluetooth Low Energy (BLE) между смартфоном (iOS и Android) и встроенным устройством (чип CC2540).

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

Я просматриваю сеть через несколько дней, чтобы узнать, безопасны ли мои данные и при каких условиях. К сожалению, я не смог придумать простой ответ на мои вопросы.

  1. Сохраняются ли мои данные, если я подключу телефон к устройству? – Полагаю, что так, хотя я понимаю, что сам процесс сопряжения является ошибочным, поэтому теоретически возможно, чтобы кто-то из людей в середине (MITM) обнюхал ключи шифрования во время процесса сопряжения и тем самым нарушил соединение.

  2. Мне нужно, чтобы каждое устройство было сопряжено с несколькими телефонами (но только для связи по одному). Каково максимальное количество пар pr. устройство? – К сожалению, мне нужно подключить довольно большое количество телефонов к моим устройствам.

  3. Могу ли я, возможно, получить данные сопряжения (долгосрочные ключи и т. Д.) С устройства и сохранить их в некоторой внешней памяти, чтобы увеличить этот предел.

  4. Могу ли я безопасно подключиться к устройству без сопряжения или, может быть, путем повторного сопряжения, когда мне это нужно? – Насколько безопасна эта процедура в отношении атак MITM?

Кажется, я не могу найти какие-либо документы, которые однозначно отвечают на эти вопросы. Любые идеи или указатели будут наиболее желанными.

Solutions Collecting From Web of "Bluetooth с низким энергопотреблением и защита данных"

Вот мои два цента:

  1. Процесс AFAIK, BLE / шифрование не является ошибочным. Существуют, однако, три уровня защиты MITM с шифрованием:

    • Нет, это использует известный ключ == 0, поэтому, если подслушиватель ловит все ваши пакеты в процессе сопряжения, он может следить за вашим зашифрованным соединением.
    • Низкая защита MITM, это когда вы используете ключ доступа пользователя для сопряжения с ключом <1.000.000. Здесь подслушивателю нужно было всего лишь попробовать миллион ключей.
    • Высокая защита MITM, используя внеполосный ключ. Это обеспечило бы полную 128-битную силу для вашего шифрования, и подслушивающее устройство должно было бы знать ключ, чтобы следить за разговором, даже если поймать весь процесс сопряжения. Поскольку в BLE нет метода обмена ключами (хотя бы, по крайней мере), самой слабой точкой здесь будет распределение ключей, но это будет та же проблема, что и при наличии дополнительного уровня шифрования на уровне приложения.
  2. Это зависит от реализации. Ваше устройство не должно связываться, т. Е. Устанавливать постоянные отношения с хостом. Если устройства не связаны, то не сообщается о более ранних соединениях (кроме обменных данных, но это домен приложения, а не стек BLE). Если устройства не связаны, они должны будут снова соединить их при следующем подключении к обмену защищенными данными. Если устройства связаны, зашифрованное соединение может быть продолжено без взаимодействия с пользователем / пользователем с тем же уровнем безопасности, что и ранее. Для одноразовых устройств связь не имеет смысла, поэтому вы можете иметь безгосударственную реализацию без ограничений на количество подключенных устройств. Для многократного подключения вы также можете иметь реализацию без состояния, в зависимости от того, как вы распространяете / сохраняете ключ (ы), который затем не зависит от BLE. Доступность различных опций здесь зависит от используемой вами реализации стека устройств / BLE, но спецификация позволяет все это.

  3. Если вы связываете и, таким образом, обмениваете долгосрочные ключи и т. Д., Они могут, в зависимости от реализации BLE, на которой вы строите, быть сохранены, как вам нравится.

  4. Как я сказал ниже 2., вы можете установить безопасное (зашифрованное) соединение без склеивания. Затем устройствам необходимо снова соединить пару в следующий раз, когда они захотят установить безопасное соединение. Если вы не хотите, чтобы / почему-то не могли соединиться, вы можете иметь только текстовое сообщение.

Я возьму на него удар.

1) Мое понимание процесса сопряжения одинаково. Если данные были достаточно чувствительными, я бы добавил независимый уровень собственного шифрования в моем приложении …

2) Для соединений протокол BLE ограничивается одним хостом на устройство одновременно, даже если соединение не связано / сопряжено. Единственный способ для одного устройства установить соединение с несколькими хостами одновременно – это то, что устройство каким-то образом «претендует» на несколько устройств. Независимо от того, можно ли это сделать, зависит от аппаратного обеспечения, и это определенно не является одним из стандартных способов использования устройства. Даже если вы можете обмануть аппаратное обеспечение в этом, вы можете столкнуться с неизбежными проблемами, такими как появление (почти) перекрывающихся интервалов подключения, что может привести к потере данных и, в конечном итоге, даже к установленным соединениям.

Другой способ для устройства взаимодействовать с несколькими узлами – это регулярно отключать и позволять другому узлу устанавливать соединение. AFAIK, для этой техники нет специальной поддержки протокола, поэтому, возможно, не используя направленную рекламу, вы можете не иметь большого контроля над тем, какой хост соединяется рядом и когда он это делает.

См. Также раздел 4.1.2 в томе 1, часть A спецификации Bluetooth «Core_V4.0» (например, здесь https://www.bluetooth.org/docman/handlers/downloaddoc.ashx?doc_id=229737 )

3) Скорее всего, да, детали будут отличаться от поставщика, но с ограничениями, упомянутыми выше.

4) Вы можете установить соединение без склеивания / спаривания. Это соединение позволит общаться, но он будет открытым текстом без какой-либо безопасности. AFAICS, единственный способ сделать это правильно – использовать собственную защиту данных на уровне приложения.

Я предполагаю, что устройство CC2450 использует стек TI. Хорошая документация по поведению стека CC2540 приведена в Руководстве пользователя для разработчиков CC2540 Development Kit . Вероятно, это лучшая документация после спецификаций 4.0 от bluetooth.org

  1. 6-значный штырь, используемый в процессе обработки палитра, против MITM – для ввода PIN-кода есть 30-секундное окно.

  2. Стек TI ограничивает количество парных устройств до 8 или около того. Это связано с тем, что процессор и производительность / ресурсы шифрования необходимы для восстановления соединений.

  3. Перенос ключей шифрования с устройства BT – это риск для безопасности. В целом, управление ключами является ахиллесовой пятой всего шифрования.

  4. У вас не будет зашифрованной характеристики чтения / записи без склеивания. Обратитесь к 4.6.1 руководства пользователя TI – это соответствует спецификациям Bluetooth 4.0.