В июле прошлого года был запущен проект Eddystone, открытый и расширяемый стандарт от Google, определяющий формат сообщений для Bluetooth Low Energy (BLE) маячков и нативно поддерживаемый в Android, iOS, и браузером Chrome. Маячки могут отмечать важные и интересные места или объекты понятным для мобильных устройств образом. Чтобы сделать это, маячки, как правило, односторонне транслируют открытые сообщения — такие как iBeacon, Eddystone-UID или Eddystone-URL, что делает их уязвимыми к клонированию, компрометации и слежке. Эти проблемы существовали с 2013 года.
В четверг, 14 марта, компания Google в своём security blog анонсировала новый кадр Eddystone-EID, с поддержкой эфемерного идентификатора (Ephemeral ID), для стандарта Eddystone. Так же были представлены зашифрованная версия кадра телеметрии Eddystone-TLM и новый стандартный интерфейс для конфигурирования маячков — Eddystone GATT service.
В этом посте я чуть более подробно расскажу об этих нововведениях призванных серьезно повысит безопасность маячков и расширить сценарии их использования.
Технические подробности
Для наблюдателя, маячок с поддержкой Eddystone-EID меняет свой 8-байтный AES-encrypted идентификатор псевдо-случайным образом со средним периодом, который задается разработчиком в диапазоне от 1 секунды до 9 часов. Для генерации идентификатора используется ключ(Ephemeral Identity Key или EIK) и таймер на самом маячке. Ключ генерируется во время подготовки и настройки маячка и затем передаётся в службу разрешения, например, Proximity Beacon API, с использованием протокола согласования ключей Дииффи-Хееллмана на эллиптических кривых (Elliptic curve Diffie–Hellman или ECDH). Этот протокол является достаточно надежным и позволяет получить общий секретный ключ, используя незащищённый от прослушивания канал связи, например во время подготовки и настройки маячка. Таким образом, доступ к ключу есть только у маячка и у службы с помощью которой он зарегистрирован.
Что касается регистрации маячка, Google Proximity Beacon API позволяет сделать это двумя способами:
- Путем обмена открытыми ключами с маячком, в полностью безопасной end-to-end манере
- Путем передачи общего EIK ключа напрямую, что является несколько менее безопасным чем первый вариант
В момент регистрации маячка, в дополнении к ключу, сервису разрешения так же нужно сообщить и текущее значение таймера маячка и показатель периода ротации. Т.е. таймер маячка так же синхронизируется с сервисом. Google Proximity Beacon API поддерживает поддерживает период ротации 2X, где 10 <= X <= 15. Реализация устойчива к отключению энергии на несколько дней. При более длительных отключениях энергии на повторную синхронизацию таймера и периода ротации потребуется некоторое время.
Дополнительные меры безопасности
В Eddystone-EID заложены и дополнительные меры безопасности для предотвращения различных атак. Например, период ротации для каждого маячка незначительно отличается от идентификатора к идентификатору, таким образом злоумышленник не сможет использовать период ротации для того что бы идентифицировать конкретный маячок. Eddystone-EID так же поддерживает информирование о приближении, аутентификацию устройств и шифрование данных при передаче пакетов. Возможности кадра Eddystone-TLM так же были расширены с новой версией, теперь данные телеметрии шифруются с помощью общего ключа, т.е. злоумышленник не сможет использовать информацию об уровне заряда батареи для идентификации маячка.
Eddystone GATT service и Beacon Tools
В дополнение к Eddystone-EID и новой зашифрованной версии ранее доступного Eddystone-TLM, был представлен общий протокол конфигрурирования маячков — Eddystone GATT service. Он позволяет настроить любой Eddystone маячок с помощью любых инструментов, поддерживающих этот протокол.
Также было представлено приложение Beacon Tools для Android и iOS. Это дополнительный инструмент для Google beacon platform, который позволяет регистрировать маячки и привязывать к ним данные.
Сценарии использования и преимущества
При правильной реализации и в сочетании с Proximity Beacon API, который поддерживает ряд проверок контроля доступа, Eddystone-EID имеет несколько преимуществ, например:
- Расположение маячка не может быть подделано. Это идеально подходит для случаев, когда разработчик хочет задействовать дополнительные возможности для пользователя в каком то определенном месте.
- Eddystone-EID позволяет тем кто занимается развертыванием сети маячков надежно управлять доступом к ней.
- Маячки с поддержкой Eddystone-EID могут быть встроены в вещи или устройства которые люди носят с собой, не оставляя при этом пользователей уязвимыми к слежке
Что же происходит на клиентском устройстве?
А ничего особенного! Маячки с поддержкой Eddystone-EID могут быть задействованы в проектах где используется Nearby Messages API, компонент Google beacon platform сканирующий маячки и получающий от них сообщения, без каких либо изменений в коде. Когда клиентское устройство обнаруживает маячок транслирующий кадр Eddystone-EID и подписывается на него, текущий EID отправляется в Google Proximity Beacon API вместе с API-ключом приложения. Google Proximity Beacon API проверяет есть ли у представленного API-ключа полномочия получить вложение которое было привязано к маячку. Если такие полномочия есть, то приложение получает вложение обычным образом, как объект Nearby message. В противном случае, если полномочий нет, Google Proximity Beacon API возвращает пустое значение, как если бы маячок не был вовсе зарегистрирован.
Поддержка Eddystone-UID у производителей маячков
Google очень активно сотрудничает с игроками отрасли, так, например, за прошлый год количество производителей маячков поддерживающих формат Eddystone, выросло с 5 до более чем 25. А 15 следующих производителей уже поддерживают формат Eddystone-EID:
- Accent Systems
- Bluvision
- Reco/Perples
- Beacon Inside
- Estimote
- Sensoro
- Blesh
- Gimbal
- Signal360
- BlueBite
- Nordic
- Swirl
- Bluecats
- Radius Networks
- Zebra
Помимо производителей маячков, Google активно сотрудничает и с целым рядом инновационных компаний, чтобы продемонстрировать преимущества Eddystone-UID в самых различных сценариях. Так, например:
- Samsonite совместно Accent Systems разработали чемодан транслирующий Eddystone-EID, для того что бы пользователи могли безопасно следить за их личным багажом.
- K11 — музей в Гонконге и в розничная сеть использования маячки Sensoro с поддержкой Eddystone-UID для экскурсии посетителей и поощрения клиентов.
- Monumental Sports Entertainment в Вашингтоне, округ Колумбия, использует маячки с поддержкой Eddystone-EID от Radius Networks для доставки призов клиентам во время спортивных событий Washington Wizards и Capitals.
- Sparta Digital выпустила приложение под названием Buzzin, которое использует маячки транслирующие Eddystone-EID, развернутые в городе Манчестере, Великобритания.
Заключение
Это большой шаг в сторону безопасности позволивший решить проблемы существовавшие уже несколько лет. Всё это позволяет не только задействовать маячки в новых сценариях, где важно чтобы пользователи могли надежно и конфиденциально обмениваться информацией, но и стимулирует развитие открытой экосистемы вокруг маячков, их аппаратного и программного обеспечения, устраняя существующие ограничения и недостатки.
Более подробно о безопасности BLE маячков и эфемерных идентификаторах можно прочитать в этой статье
С техническими деталями спецификации пакета Eddystone-EID можно ознакомиться на github
О Google beacon platform я подробно писал в своих предыдущих статьях:
Google's beacon platform. Часть 1 — Proximity beacon API
Google's beacon platform. Часть 2 — Nearby meassages API
Автор: zviad