Как предотвратить спуфинг iBeacons?

Насколько я могу судить, ничто не может запретить любому разработчику программировать свой маяк для использования определенного UUID, основного, второстепенного или идентификатора.

В случае, если я создаю iBeacon с UUID «foo», что должно помешать другому разработчику создания маяка с тем же идентификатором и (случайно или злонамеренно), в результате чего мое приложение отображает неверные данные?

Я неправильно понял, как работают iBeacons? Пожалуйста, поправьте меня, если я ошибаюсь.

Это абсолютно верно. Я оба подделал iBeacons Apple Store (чтобы доказать это), и мои маяки были подделаны журналом Make для выставки Consumer Electronics Show Scavenger Hunt.

Это не недостаток. Вам просто нужно создать приложение, которое использует iBeacons, поэтому spoofing относительно несущественен. Если вы разрабатываете приложение, так что это не имеет большого значения, кого это волнует?

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

Например, для охоты на CES Scavenger мы просто хранили журнал аудита с отметками времени, чтобы мы знали, что кто-то быстро обнаружил все цели. В конце концов, никто этого не делал – наши участники были хорошими видами спорта!

Вы не можете предотвратить спуфинг рекламного пакета, потому что нет центрального органа, который выдает универсальные уникальные идентификаторы (UUID). UUID произвольно назначаются маяку и на самом деле не гарантированно являются уникальными.

Однако, как только вы спариваете ваш карманный компьютер с маяком, картина отличается. Вы можете запрограммировать маяк (или, более конкретно, устройство с маяком), чтобы генерировать абсолютно уникальную информацию в паре, такую ​​как одноразовый пароль или зашифрованное рукопожатие с секретным ключом между вашим приложением и парным маяком.

Типичным потоком процесса будет:

  1. Телефон обнаруживает передачу ibeacon, читает UUID + Major / Minor.

  2. Телефон запускает ваше приложение (используя событие didEnterRegion).

  3. Ваше приложение запрашивает соединение с маяком, отправляет ему команду для генерации зашифрованного ответа.

  4. Ваше приложение расшифровывает ответ. В случае успеха отобразите счастливое лицо! Если ошибка, отобразите печальное лицо.

Двигаясь вперед, я подозреваю, что большинство маяковых систем будут реализованы таким образом. Если и до тех пор, пока стандарт iBeacon не будет обновлен для обеспечения шифрования, он должен быть гибридным подходом к ping + pair.