Спецификация сетевого аксессуара «Найти мое устройство»

v1.3

Спецификация аксессуаров Find My Device Network (FMDN) определяет метод сквозного шифрования для отслеживания устройств Bluetooth Low Energy (BLE) с маяками. На этой странице FMDN описан как расширение спецификации Fast Pair. Провайдерам следует включить это расширение, если у них есть устройства, совместимые с FMDN, и они готовы включить отслеживание местоположения для этих устройств.

Спецификация ГАТТ

В службу быстрого сопряжения следует добавить дополнительную характеристику общих атрибутов (GATT) со следующей семантикой:

Характеристики службы быстрого сопряжения Зашифрованный Разрешения UUID
Действия маяка Нет Читайте, пишите и сообщайте FE2C1238-8366-4814-8EB0-01DE32100BEA

Таблица 1. Характеристики службы быстрого сопряжения для FMDN.

Аутентификация

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

Октет Тип данных Описание Ценить
0 uint8 Основной номер версии протокола 0x01
1 - 8 массив байтов Одноразовый случайный одноразовый номер варьируется

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

Затем Seeker вычисляет одноразовый ключ аутентификации, который будет использоваться в последующем запросе на запись. Ключ аутентификации рассчитывается, как описано в таблицах 2–5. В зависимости от запрашиваемой операции Искатель доказывает знание одного или нескольких из следующих ключей:

Операции

Формат данных, записываемых в характеристику, приведен в таблицах со 2 по 5. Каждая из операций обсуждается более подробно далее в этом разделе.

Октет Тип данных Описание Ценить
0 uint8 Идентификатор данных
  • 0x00: Чтение параметров маяка.
  • 0x01: Чтение состояния подготовки.
  • 0x02: Установить эфемерный идентификационный ключ.
  • 0x03: Очистить эфемерный идентификационный ключ.
1 uint8 Длина данных варьируется
2–9 массив байтов Одноразовый ключ аутентификации Первые 8 байтов HMAC-SHA256(account key, protocol major version number || the last nonce read from the characteristic || data ID || data length || additional data)
10 - вар массив байтов Дополнительные данные
  • 0x00: нет данных
  • 0x01: нет данных
  • 0x02: 32 байта, которые представляют собой эфемерный идентификационный ключ, зашифрованный по алгоритму AES-ECB-128 с помощью ключа учетной записи. Если у поставщика уже установлен эфемерный идентификационный ключ, также отправьте первые 8 байтов SHA256(current ephemeral identity key || the last nonce read from the characteristic)
  • 0x03: первые 8 байтов SHA256(ephemeral identity key || the last nonce read from the characteristic)

Таблица 2: Запрос на предоставление маяка.

Октет Тип данных Описание Ценить
0 uint8 Идентификатор данных 0x04: Чтение эфемерного ключа идентификации с согласия пользователя.
1 uint8 Длина данных 0x08
2–9 массив байтов Одноразовый ключ аутентификации Первые 8 байтов HMAC-SHA256(recovery key, protocol major version number || the last nonce read from the characteristic || data ID || data length)

Таблица 3. Запрос на восстановление ключа предоставления маяка.

Октет Тип данных Описание Ценить
0 uint8 Идентификатор данных
  • 0x05: Кольцо
  • 0x06: Чтение состояния звонка
1 uint8 Длина данных варьируется
2–9 массив байтов Одноразовый ключ аутентификации Первые 8 байтов HMAC-SHA256(ring key, protocol major version number || the last nonce read from the characteristic || data ID || data length || additional data)
10 - вар массив байтов Дополнительные данные
  • 0x05: 4 байта, указывающие состояние звонка, продолжительность звонка и громкость звонка.
  • 0x06: нет данных

Таблица 4: Запрос на звонок.

Октет Тип данных Описание Ценить
0 uint8 Идентификатор данных
  • 0x07: активировать режим защиты от нежелательного отслеживания.
  • 0x08: отключить режим защиты от нежелательного отслеживания.
1 uint8 Длина данных варьируется
2–9 массив байтов Одноразовый ключ аутентификации Первые 8 байтов HMAC-SHA256(unwanted tracking protection key, protocol major version number || the last nonce read from the characteristic || data ID || data length || additional data)
10 - вар массив байтов Дополнительные данные
  • 0x07: 1 байт флагов управления (необязательно).
  • 0x08: первые 8 байтов SHA256(ephemeral identity key || the last nonce read from the characteristic)

Таблица 5. Запрос на защиту от нежелательного отслеживания.

Успешные записи вызывают уведомления, перечисленные в таблице 6.

Уведомления с идентификатором данных, отличным от 0x05: изменение состояния звонка должно быть отправлено до завершения транзакции записи, которая запускает уведомление, то есть до того, как будет отправлен ответный PDU для запроса на запись.

Октет Тип данных Описание Ценить
0 uint8 Идентификатор данных
  • 0x00: Чтение параметров маяка.
  • 0x01: Чтение состояния подготовки.
  • 0x02: Установить эфемерный идентификационный ключ.
  • 0x03: Очистить эфемерный идентификационный ключ.
  • 0x04: Чтение эфемерного ключа идентификации с согласия пользователя.
  • 0x05: изменение состояния звонка.
  • 0x06: Чтение состояния звонка
  • 0x07: активировать режим защиты от нежелательного отслеживания.
  • 0x08: отключить режим защиты от нежелательного отслеживания.
1 uint8 Длина данных варьируется
2–9 массив байтов Аутентификация Подробно по каждой операции
10 - вар массив байтов Дополнительные данные
  • 0x00: 8 байтов, обозначающих мощность передачи, значение тактовой частоты, метод шифрования и возможности вызова, зашифрованные по AES-ECB-128 с помощью ключа учетной записи (дополненные нулями).
  • 0x01: 1 байт, обозначающий состояние подготовки, за которым следует текущий эфемерный идентификатор (20 или 32 байта), если применимо.
  • 0x04: 32 байта, которые являются эфемерным идентификационным ключом, зашифрованным по алгоритму AES-ECB-128 с помощью ключа учетной записи.
  • 0x05: 4 байта, обозначающие новое состояние и триггер изменения.
  • 0x06: 3 байта, обозначающие активно вызываемые компоненты и количество оставшихся децисекунд для звонка.
  • Другие идентификаторы данных используют пустые дополнительные данные.

Таблица 6: Ответ службы маяка.

В таблице 7 перечислены возможные коды ошибок GATT, возвращаемые операциями.

Код Описание Примечания
0x80 Неаутентифицированный Возвращается в ответ на запрос на запись при сбое аутентификации (включая случай, когда использовался старый одноразовый номер).
0x81 Недопустимое значение Возвращается, когда указано недопустимое значение или полученные данные имеют непредвиденное количество байтов.
0x82 Нет согласия пользователя Возвращается в ответ на запрос на запись с идентификатором данных 0x04: чтение эфемерного ключа идентификации с согласия пользователя , когда устройство не находится в режиме сопряжения.

Таблица 7: Коды ошибок GATT.

Прочитайте параметр маяка

Искатель может запросить у Поставщика параметры маяка, выполнив операцию записи в характеристику, состоящую из запроса из таблицы 2 с идентификатором данных 0x00. Поставщик проверяет, соответствует ли предоставленный одноразовый ключ аутентификации любому из ключей учетной записи, хранящихся на устройстве.

Если проверка не удалась, поставщик возвращает неаутентифицированную ошибку.

В случае успеха Поставщик уведомляет ответом из таблицы 6 с идентификатором данных 0x00. Поставщик создает сегмент данных следующим образом:

Октет Тип данных Описание Ценить
0 uint8 Калиброванная мощность Калиброванная мощность, полученная на расстоянии 0 м (значение в диапазоне [-100, 20]). Представлено в виде целого числа со знаком и разрешением 1 дБм.
1–4 uint32 Значение часов Текущее значение часов в секундах (с обратным порядком байтов).
5 uint8 Выбор кривой Эллиптическая кривая, используемая для шифрования:
  • 0x00 (по умолчанию): SECP160R1
  • 0x01: SECP256R1 (требуется расширенная реклама)
6 uint8 Компоненты Количество компонентов, способных звонить:
  • 0x00: указывает, что устройство не может звонить.
  • 0x01: указывает, что только один компонент может звонить.
  • 0x02: указывает, что два компонента, левый и правый наушники, способны звонить независимо.
  • 0x03: указывает, что три компонента, левый и правый наушники и корпус, способны звонить независимо.
7 uint8 Возможности звонка Поддерживаемые параметры:
  • 0x00: Выбор громкости звонка недоступен.
  • 0x01: Доступен выбор громкости звонка. Если установлено, провайдер должен принимать и обрабатывать 3 уровня громкости, как указано в режиме звонка .
8-15 массив байтов Заполнение Заполнение нулями для шифрования AES.

Данные должны быть зашифрованы по алгоритму AES-ECB-128 с использованием ключа учетной записи, используемого для аутентификации запроса.

Сегмент аутентификации определяется как первые 8 байтов HMAC-SHA256(account key, protocol major version number || the last nonce read from the characteristic || data ID || data length || additional data after encryption || 0x01) .

Чтение состояния подготовки маяка

Искатель может запросить у поставщика состояние обеспечения маяка, выполнив операцию записи в характеристику, состоящую из запроса из таблицы 2 с идентификатором данных 0x01. Поставщик проверяет, соответствует ли предоставленный одноразовый ключ аутентификации любому из ключей учетной записи, хранящихся на устройстве.

Если проверка не удалась, поставщик возвращает неаутентифицированную ошибку.

В случае успеха поставщик уведомляет ответом из таблицы 6 с идентификатором данных 0x01. Поставщик создает сегмент данных следующим образом:

Октет Тип данных Описание Ценить
0 uint8 Состояние подготовки Битовая маска, имеющая следующие значения:
  • Бит 1 (0x01): устанавливается, если для устройства установлен эфемерный идентификационный ключ.
  • Бит 2 (0x02): устанавливается, если предоставленный ключ одноразовой аутентификации соответствует ключу учетной записи владельца.
1–20 или 32 массив байтов Текущий эфемерный идентификатор 20 или 32 байта (в зависимости от используемого метода шифрования), указывающие текущий эфемерный идентификатор, объявленный маяком, если он установлен для устройства.

Сегмент аутентификации определяется как первые 8 байтов HMAC-SHA256(account key, protocol major version number || the last nonce read from the characteristic || data ID || data length || additional data || 0x01) .

Установите эфемерный идентификационный ключ

Чтобы предоставить неинициализированного поставщика в качестве маяка FMDN или изменить эфемерный идентификационный ключ уже предоставленного провайдера, искатель выполняет операцию записи в характеристику, состоящую из запроса из таблицы 2 с идентификатором данных 0x02. Поставщик подтверждает, что:

Если проверка не удалась, поставщик возвращает неаутентифицированную ошибку.

В случае успеха эфемерный идентификационный ключ восстанавливается с помощью AES-ECB-128, расшифровывающего его с использованием соответствующего ключа учетной записи. Ключ должен сохраниться на устройстве, и с этого момента провайдер должен начать рекламировать кадры FMDN. Новый эфемерный идентификационный ключ вступает в силу сразу после разрыва соединения BLE. Поставщик уведомляет ответом из таблицы 6 с идентификатором данных 0x02.

Сегмент аутентификации определяется как первые 8 байтов HMAC-SHA256(account key, protocol major version number || the last nonce read from the characteristic || data ID || data length || 0x01) .

Очистить эфемерный идентификационный ключ

Чтобы отменить предоставление маяковой части Поставщика, Искатель выполняет операцию записи в характеристику, состоящую из запроса из таблицы 2 с идентификатором данных 0x03. Поставщик подтверждает, что:

Если поставщик не предоставлен в качестве маяка FMDN или проверка не удалась, он возвращает неаутентифицированную ошибку.

В случае успеха провайдер забывает ключ и прекращает рекламу кадров FMDN. Поставщик уведомляет ответом из таблицы 6 с идентификатором данных 0x03. Сегмент аутентификации определяется как первые 8 байтов HMAC-SHA256(account key, protocol major version number || the last nonce read from the characteristic || data ID || data length || 0x01) .

Прочтите эфемерный ключ идентификации с согласия пользователя.

Эта опция доступна только для восстановления утерянного ключа, поскольку Искатель хранит ключ только локально. Таким образом, эта возможность доступна только тогда, когда устройство находится в режиме сопряжения или в течение некоторого ограниченного времени после нажатия физической кнопки на устройстве (что означает согласие пользователя).

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

Для чтения EIK Искатель выполняет операцию записи в характеристику, состоящую из запроса из таблицы 3 с идентификатором данных 0x04. Поставщик подтверждает, что:

Если проверка не удалась, поставщик возвращает неаутентифицированную ошибку.

Если устройство не находится в режиме сопряжения, поставщик возвращает ошибку «Нет согласия пользователя».

В случае успеха поставщик уведомляет ответом из таблицы 6 с идентификатором данных 0x04.

Сегмент аутентификации определяется как первые 8 байтов HMAC-SHA256(recovery key, protocol major version number || the last nonce read from the characteristic || data ID || data length || additional data || 0x01) .

Кольцевая операция

Искатель может попросить Провайдера воспроизвести звук, выполнив операцию записи в характеристику, состоящую из запроса из таблицы 4 с идентификатором данных 0x05. Поставщик создает сегмент данных следующим образом:

Октет Тип данных Описание Ценить
0 uint8 Кольцевая операция Битовая маска, имеющая следующие значения:
  • Бит 1 (0x01): звонок направо
  • Бит 2 (0x02): Звонок слева.
  • Бит 3 (0x04): случай звонка
  • 0xFF: вызвать все компоненты.
  • 0x00: прекратить звонить
1 - 2 uint16 Тайм-аут Таймаут в децисекундах. Не должно быть нулем и не должно превышать эквивалент 10 минут.
Поставщик использует это значение, чтобы определить, как долго он должен звонить, прежде чем отключиться. Тайм-аут переопределяет уже действующий, если какой-либо компонент устройства уже звонит.

Если для операции звонка установлено значение 0x00, тайм-аут игнорируется.
3 uint8 Объем
  • 0x00: по умолчанию
  • 0x01: Низкий
  • 0x02: Средний
  • 0x03: высокий
Точное значение этих значений зависит от реализации.

При получении запроса Поставщик проверяет, что:

Если поставщик не предоставляется в качестве маяка FMDN или проверка не удалась, он возвращает неаутентифицированную ошибку. Однако если у поставщика активна защита от нежелательного отслеживания и в инициирующем запросе на защиту от нежелательного отслеживания был включен флаг аутентификации пропуска звонков, поставщику следует пропустить эту проверку. Ожидается, что данные аутентификации будут предоставлены Искателем, но для них может быть установлено произвольное значение.

Когда звонок начинается или прекращается, отправляется уведомление, как указано в таблице 6, с идентификатором данных 0x05. Содержание уведомления определяется следующим образом:

Октет Тип данных Описание Ценить
0 uint8 Состояние звонка
  • 0x00: Началось
  • 0x01: Не удалось запустить или остановить (все запрошенные компоненты находятся вне диапазона)
  • 0x02: остановлено (таймаут)
  • 0x03: Остановлено (нажатие кнопки)
  • 0x04: остановлено (запрос ГАТТ).
1 uint8 Компоненты звонка Битовая маска активно звонящих компонентов, как определено в запросе.
2–3 uint16 Тайм-аут Оставшееся время до звонка в децисекундах. Если устройство перестало звонить, должно быть возвращено 0x0000.

Сегмент аутентификации определяется как первые 8 байтов HMAC-SHA256(ring key, protocol major version number || the nonce used to initiate the ringing command || data ID || data length || additional data || 0x01) .

Если устройство уже находится в запрошенном состоянии звонка, когда получен запрос на звонок или прекращение звонка, Провайдер должен отправить уведомление с состоянием звонка или либо 0x00: Начато, либо 0x04: Остановлено (запрос GATT) соответственно. Этот запрос переопределяет параметры существующего состояния, поэтому продолжительность звонка может быть увеличена.

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

Получить состояние звонка маяка

Для получения состояния звонка маяка Искатель выполняет операцию записи в характеристику, состоящую из запроса из таблицы 4 с идентификатором данных 0x06. Поставщик проверяет, соответствует ли предоставленный ключ одноразовой аутентификации ключу звонка.

Если поставщик не предоставляется в качестве маяка FMDN или если проверка не удалась, поставщик возвращает неаутентифицированную ошибку.

В случае успеха Поставщик уведомляет ответом из таблицы 6 с идентификатором данных 0x06. Поставщик создает сегмент данных следующим образом:

Октет Тип данных Описание Ценить
0 uint8 Компоненты звонка Компоненты, активно звонящие, как определено в запросе звонка.
1 - 2 uint16 Тайм-аут Оставшееся время до звонка в децисекундах. Обратите внимание: если устройство не звонит, должно быть возвращено 0x0000.

Сегмент аутентификации определяется как первые 8 байтов HMAC-SHA256 (ring key, protocol major version number || the last nonce read from the characteristic || data ID || data length || additional data || 0x01) .

Режим защиты от нежелательного отслеживания

Режим защиты от нежелательного отслеживания предназначен для того, чтобы любой клиент мог идентифицировать злоупотребляющие устройства без связи с сервером. По умолчанию поставщик должен выполнять ротацию всех идентификаторов, как описано в разделе «Ротация идентификаторов» . Служба «Найти мое устройство» может ретранслировать запрос на активацию режима защиты от нежелательного отслеживания через сеть «Найти мое устройство». При этом служба заставляет провайдера временно использовать фиксированный MAC-адрес, позволяя клиентам обнаруживать устройство и предупреждать пользователя о возможном нежелательном отслеживании.

Для активации или деактивации режима защиты маяка от нежелательного слежения Искатель выполняет операцию записи в характеристику, состоящую из запроса из таблицы 5 с идентификатором данных 0x07 или 0x08 соответственно.

При включении режима защиты от нежелательного отслеживания

Поставщик создает сегмент данных следующим образом:

Октет Тип данных Описание Ценить
0 uint8 Флаги управления
  • 0x01: Пропустить аутентификацию по телефону. Если этот параметр установлен, запросы на вызов не аутентифицируются в режиме защиты от нежелательного отслеживания.
Если флаг не установлен (все байты содержат нули), можно вообще опустить раздел данных и отправить пустой раздел данных.
Флаги действуют только до тех пор, пока не будет отключен режим защиты от нежелательного слежения.

Поставщик проверяет, соответствует ли предоставленный одноразовый ключ аутентификации ключу защиты от нежелательного отслеживания. Если поставщик не предоставляется в качестве маяка FMDN или проверка не удалась, он возвращает неаутентифицированную ошибку.

При активации режима защиты от нежелательного отслеживания маяк должен снизить частоту смены частных MAC-адресов до одного раза в 24 часа. Объявленный эфемерный идентификатор должен продолжать меняться как обычно. Тип кадра должен быть установлен на 0x41. Состояние также отражается в разделе хешированных флагов .

При отключении режима защиты от нежелательного слежения

Поставщик подтверждает, что:

  • Предоставленный одноразовый ключ аутентификации соответствует ключу защиты от нежелательного отслеживания.
  • Хешированный эфемерный идентификационный ключ соответствует текущему эфемерному идентификационному ключу.

Если Поставщик не предоставлен в качестве маяка FMDN или проверка не удалась, Поставщик возвращает неаутентифицированную ошибку.

Когда режим защиты от нежелательного отслеживания деактивирован, маяк должен снова начать ротацию MAC-адреса с нормальной скоростью, синхронизированную с ротацией эфемерного идентификатора. Тип кадра должен быть установлен обратно на 0x40. Состояние также отражается в разделе хешированных флагов .

В случае успеха поставщик уведомляет ответом из таблицы 6 с идентификатором данных 0x07 или 0x08.

Сегмент аутентификации определяется как первые 8 байтов HMAC-SHA256(unwanted tracking protection key, protocol major version number || the last nonce read from the characteristic || data ID || data length || 0x01) .

Рекламируемые кадры

Ожидается, что после подготовки поставщик будет анонсировать кадры FMDN не реже одного раза в 2 секунды. Если объявляются кадры быстрого соединения, провайдер должен чередовать кадры FMDN в обычных объявлениях быстрого соединения. Например, каждые две секунды провайдер должен рекламировать семь рекламных объявлений Fast Pair и одно рекламное объявление FMDN.

Кадр FMDN содержит открытый ключ, используемый для шифрования отчетов о местоположении любым поддерживающим клиентом, который вносит свой вклад в краудсорсинговую сеть. Доступны два типа ключей с эллиптической кривой: 160-битный ключ, соответствующий устаревшим кадрам BLE 4, или 256-битный ключ, требующий BLE 5 с расширенными рекламными возможностями. Реализация поставщика определяет, какая кривая используется.

Кадр FMDN структурирован следующим образом.

Октет Ценить Описание
0 0x02 Длина
1 0x01 Значение типа данных флагов
2 0x06 Данные флагов
3 0x18 или 0x19 Длина
4 0x16 Значение типа данных служебных данных
5 0xAA 16-битный UUID службы
6 0xFE ...
7 0x40 или 0x41 Тип кадра FMDN с индикацией режима защиты от нежелательного отслеживания
8..27 20-байтовый эфемерный идентификатор
28 Хешированные флаги

Таблица 8: Кадр FMDN, поддерживающий 160-битную кривую.

В таблице 9 показаны смещения байтов и значения для 256-битной кривой.

Октет Ценить Описание
0 0x02 Длина
1 0x01 Значение типа данных флагов
2 0x06 Данные флагов
3 0x24 или 0x25 Длина
4 0x16 Значение типа данных служебных данных
5 0xAA 16-битный UUID службы
6 0xFE ...
7 0x40 или 0x41 Тип кадра FMDN с индикацией режима защиты от нежелательного отслеживания
8..39 32-байтовый эфемерный идентификатор
40 Хешированные флаги

Таблица 9: Кадр FMDN, поддерживающий 256-битную кривую.

Вычисление эфемерного идентификатора (EID)

Случайное число генерируется с помощью AES-ECB-256, шифрующего следующую структуру данных с помощью эфемерного идентификационного ключа:

Октет Поле Описание
0–10 Заполнение Значение = 0xFF
11 К Показатель периода вращения
12–15 ТС[0]...ТС[3] Счетчик времени маяка в 32-битном формате с прямым порядком байтов. K младших битов очищаются.
16 - 26 Заполнение Значение = 0x00
27 К Показатель периода вращения
28 - 31 ТС[0]...ТС[3] Счетчик времени маяка в 32-битном формате с прямым порядком байтов. K младших битов очищаются.

Таблица 10: Построение псевдослучайного числа.

Результатом этого вычисления является 256-битное число, обозначаемое r' .

Для остальных вычислений SECP160R1 или SECP256R1 используются для криптографических операций на эллиптических кривых. См. определения кривых в разделе SEC 2: Рекомендуемые параметры области эллиптической кривой , где определяются Fp , n и G указанные далее.

r' теперь проецируется на конечное поле Fp путем вычисления r = r' mod n . Наконец, вычислите R = r * G — точку на кривой, представляющую используемый открытый ключ. Маяк объявляет Rx , который является координатой x R , в качестве своего эфемерного идентификатора.

Хешированные флаги

Поле хешированных флагов рассчитывается следующим образом (биты отсчитываются от наиболее значимого к наименее значимому):

  • Биты 0–4: зарезервированы (установлены в нули).
  • Биты 5-6 указывают уровень заряда батареи устройства следующим образом:
    • 00: Индикация уровня заряда батареи не поддерживается.
    • 01: Нормальный уровень заряда батареи
    • 10: Низкий уровень заряда батареи
    • 11: Критически низкий уровень заряда батареи (скоро потребуется замена батареи)
  • Бит 7 устанавливается в 1, если маяк находится в режиме защиты от нежелательного отслеживания, и в 0 в противном случае.

Чтобы получить окончательное значение этого байта, он подвергается операции xor с младшим значащим байтом SHA256(r) .

Обратите внимание, что r должно соответствовать размеру кривой. Добавьте нули в качестве старших битов, если его представление короче 160 или 256 бит, или старшие биты должны быть усечены, если его представление больше 160 или 256 бит.

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

Шифрование с помощью EID

Чтобы зашифровать сообщение m , наблюдатель (прочитавший Rx от маяка) должен сделать следующее:

  1. Выберите случайное число s в Fp , как определено в разделе вычисления EID .
  2. Вычислите S = s * G
  3. Вычислите R = (Rx, Ry) путем подстановки в уравнение кривой и выбора произвольного значения Ry из возможных результатов.
  4. Вычислите 256-битный ключ AES k = HKDF-SHA256((s * R)x) где (s * R)x — координата x результата умножения кривой. Соль не указана.
  5. Пусть URx и LRx будут старшими и младшими 80 битами Rx соответственно в формате с прямым порядком байтов. Аналогичным образом определите USx и LSx для S
  6. Вычислить nonce = LRx || LSx .
  7. Вычислить (m', tag) = AES-EAX-256-ENC(k, nonce, m) .
  8. Отправьте (URx, Sx, m', tag) владельцу, возможно, через ненадежную удаленную службу.

Расшифровка значений, зашифрованных с помощью EID

Клиент владельца, владеющий EIK и показателем периода ротации, расшифровывает сообщение следующим образом:

  1. Учитывая URx , получите значение счетчика времени маяка, на котором основан URx . Это может быть сделано клиентом владельца, вычисляющим значения Rx для значений счетчика времени маяка для недавнего прошлого и ближайшего будущего.
  2. Учитывая значение счетчика времени маяка, на котором основан URx , вычислите ожидаемое значение r , как определено в разделе вычисления EID .
  3. Вычислите R = r * G и проверьте соответствие значению URx предоставленному наблюдателем.
  4. Вычислите S = (Sx, Sy) путем подстановки в уравнение кривой и выбора произвольного значения Sy из возможных результатов.
  5. Вычислите k = HKDF-SHA256((r * S)x) где (r * S)x — координата x результата умножения кривой.
  6. Вычислить nonce = LRx || LSx .
  7. Вычислить m = AES-EAX-256-DEC(k, nonce, m', tag) .

ротация идентификаторов

Разрешимый (RPA) или неразрешимый (NRPA) адрес BLE должен использоваться для объявления кадров FMDN. RPA требуется для устройств LE Audio (LEA) и рекомендуется для других устройств, за исключением тегов локатора, которые не используют связывание.

Объявление Fast Pair, объявление FMDN и соответствующие адреса BLE должны меняться одновременно. Вращение должно происходить в среднем каждые 1024 секунды. Точная точка, в которой маяк начинает рекламировать новый идентификатор, должна быть выбрана случайным образом в пределах окна.

Рекомендуемый подход к рандомизации времени вращения — установить его равным следующему ожидаемому времени вращения (если рандомизация не применялась) плюс положительный рандомизированный временной коэффициент в диапазоне от 1 до 204 секунд.

Когда устройство находится в режиме защиты от нежелательного отслеживания, адрес BLE объявления FMDN должен быть фиксированным, но RPA для необнаружимой рекламы FP (например, Fast Pair) должен постоянно меняться. Допустимо использование разных адресов для разных протоколов.

Восстановление после потери мощности

Разрешение эфемерного идентификатора сильно привязано к его тактовому значению во время объявления, поэтому важно, чтобы поставщик мог восстановить его тактовое значение в случае сбоя питания. Рекомендуется, чтобы поставщик записывал свое текущее значение часов в энергонезависимую память по крайней мере один раз в день, а во время загрузки поставщик проверял NVM, чтобы увидеть, имеется ли значение для инициализации. Резолверы эфемерного идентификатора будут реализовывать разрешение в течение временного окна, достаточного для обеспечения как разумного дрейфа тактового сигнала, так и такого типа восстановления при потере питания.

Провайдерам по-прежнему следует прилагать все усилия, чтобы минимизировать отклонения тактовой частоты, поскольку временное окно разрешения ограничено. Должен быть реализован как минимум один дополнительный метод синхронизации часов (объявление необнаруживаемых кадров Fast Pair или реализация потока сообщений ).

Рекомендации по внедрению Fast Pair

В этом разделе описаны специальные аспекты реализации Fast Pair у провайдеров, поддерживающих FMDN.

Рекомендации по использованию тегов локаторов

  • Если поставщик был сопряжен, но FMDN не был предоставлен в течение 5 минут (или если обновление OTA было применено, когда устройство было сопряжено, но не было предоставлено FMDN), поставщику следует вернуться к заводской конфигурации и очистить сохраненные ключи учетной записи.
  • После сопряжения поставщика он не должен менять свой MAC-адрес до тех пор, пока не будет предоставлен FMDN или не пройдет 5 минут.
  • Если эфемерный идентификационный ключ удален с устройства, устройство должно выполнить сброс настроек, а также очистить сохраненные ключи учетной записи.
  • Провайдер должен отклонять обычные попытки сопряжения по Bluetooth и принимать только сопряжения по быстрому соединению.
  • Провайдер должен предусмотреть механизм, позволяющий пользователям временно прекращать рекламу без сброса настроек устройства (например, нажатия комбинации кнопок).
  • После потери питания устройство должно объявлять необнаружимые кадры Fast Pair до следующего вызова параметров чтения маяка . Это позволяет Seeker обнаружить устройство и синхронизировать часы, даже если произошел значительный сдвиг часов.
  • При объявлении недоступных для обнаружения кадров Fast Pair индикации пользовательского интерфейса не следует включать.
  • Обнаруживаемые кадры Fast Pair не должны объявляться, пока поставщик подготовлен для FMDN.
  • Поставщик не должен раскрывать какую-либо идентифицирующую информацию без аутентификации (например, имена или идентификаторы).

Рекомендации для классических устройств Bluetooth

В этом разделе описаны особенности классических устройств Bluetooth, поддерживающих FMDN.

Предоставление FMDN уже сопряженных устройств

Провайдер не всегда подключается к FMDN при сопряжении с Seeker, но через некоторое время после этого. В этом случае у поставщика может не быть актуального MAC-адреса BLE, который требуется для установления соединения GATT. Поставщик должен поддерживать хотя бы один из следующих способов, чтобы искатель получил свой адрес BLE, пока он уже в паре:

  • Поставщик может периодически рекламировать данные учетной записи Fast Pair , которые позволяют искателю найти свой BLE -адрес с помощью BLE Scan.
    Этот подход подходит поставщикам, которые не внедряют поток сообщений.
  • Поставщик может предоставить эти данные через поток сообщений Fast Pare через классический Bluetooth.
    Этот подход подходит поставщикам, которые не рекламируют быстрые пары кадров, находясь подключенным к искателю через Bluetooth.

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

Быстрый поток сообщений

Поставщик может реализовать быстрый поток сообщений и использовать его, чтобы уведомить поиска о информации об устройстве . Реализация потока сообщений обеспечивает определенные функции, как описано в этом разделе.

Поставщик должен отправлять информационные сообщения устройства один раз каждый раз, когда установлен канал RFComm потока сообщений.

Версия прошивки (Информационный код устройства 0x09) и возможность отслеживания

Когда обновление прошивки добавляет поддержку FMDN к поставщику, подключенный искатель может уведомить об этом пользователю и предложить его. В противном случае пользователь должен перейти к списку устройств Bluetooth вручную, чтобы инициировать обеспечение FMDN.

Чтобы разрешить это, поставщик должен использовать свойство версии прошивки (код 0x09), чтобы сообщить о строковом значении, которое представляет версию прошивки. Кроме того, поставщик должен поддерживать протокол, который дает искателю узнать об изменениях возможностей из -за обновлений прошивки.

Октет Тип данных Описание Ценить
0 uint8 Информационное событие устройства 0x03
1 uint8 Версия прошивки 0x09
2–3 uint16 Дополнительная длина данных варьируется
вар байт массив Версия строка варьируется

Таблица 11: Информационное событие устройства: Обновленная версия прошивки.

После получения запроса на обновление возможностей (0x0601), если поставщик включил поддержку для отслеживания FMDN, он должен ответить, как показано в таблице 12.

Октет Тип данных Описание Ценить
0 uint8 Синхронизация возможности устройства 0x06
1 uint8 FMDN отслеживание 0x03
2–3 uint16 Дополнительная длина данных 0x0007
4 uint8 FMDN PRESISIONST 0x00, если недооценен; 0x01, если предоставлено какой -либо учетной записью
5 - 10 байт массив Текущий MAC -адрес BLE MAC варьируется

Таблица 12: Синх.

Текущий эфемерный идентификатор (Информационный код устройства 0x0b)

Поставщик может использовать текущий эфемерный идентификатор (код 0x0b), чтобы сообщить о текущем значении EID и часов, когда поставщик предназначен для FMDN, синхронизировать искателя в случае дрейфа часов (например, из -за дренированной батареи). В противном случае искатель инициирует более дорогое и менее надежное соединение для этой цели.

Октет Тип данных Описание Ценить
0 uint8 Информационное событие устройства 0x03
1 uint8 Текущий эфемерный идентификатор 0x0B
2–3 uint16 Дополнительная длина данных 0x0018 или 0x0024
4 - 7 байт массив Значение часов Пример: 0x13f9ea80
8 - 19 или 31 байт массив Текущий Ид Пример: 0x112334455566788990011233344556677889900

Таблица 13: Информационное событие устройства: синхронизация часов.

Сброс к заводским настройкам

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

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

Нежелательное профилактику отслеживания

Сертифицированные устройства FMDN также должны соответствовать требованиям в версии реализации кроссплатформенного спецификации для обнаружения нежелательных трекеров местоположения (DULT).

Соответствующие руководящие принципы, специфичные для FMDN, соответствуют DULT Spec:

  • Любое совместимое с FMDN устройство должно быть зарегистрировано в ближайшей консоли устройства и активировать возможность «найти мое устройство».
  • Устройство должно реализовать услугу, не являющуюся владельцем, и характеристикой, определенной в версии реализации Spec, включая информационные операции аксессуаров и управления не владельцами .
  • В течение обратного периода совместимости, как определено в спецификации DULT, в рекламном кадре нет никаких изменений, как определено в этом документе.
  • «Нежелательный режим защиты отслеживания», определенный в этом документе, карты в «разделенном состоянии», определенное Dult Spec.
  • Руководящие принципы для реализации дополнительных информационных кодов:
    • Get_product_data должен вернуть идентификатор модели, предоставленную консоли, нулевой мягкой, чтобы соответствовать требованиям 8-байтов. Например, идентификатор модели 0xffffff возвращается как 0x000000000000fffffff.
    • Get_manufacturer_name и get_model_name должны соответствовать значениям, представленным в консоли.
    • Get_accessory_category может вернуть общее значение «трекер местоположения», если никакая другая категория лучше подходит для типа устройства.
    • Get_accessory_capabilities должен указывать на поддержку звонка, а также поиск идентификатора BLE.
    • Get_network_id должен вернуть идентификатор Google (0x02).
  • Рекомендации по реализации OpCode get_Identifier :
    • Операция должна возвращать действительный ответ только в течение 5 минут после того, как пользователь активировал режим «идентификации», который требует комбинации нажатий кнопок. Визуальный или аудиосигнал должен указать пользователю, что поставщик ввел этот режим. Инструкции для активации этого режима для активации этого режима должны быть предоставлены в качестве требования для сертификации и не менее чем за 10 дней до любого обновления или изменения в инструкциях.
    • Ответ построен как: первые 10 байт текущего эфемерного идентификатора, за которым следует первые 8 байт HMAC-SHA256(recovery key, the truncated current ephemeral identifier) .
  • Рекомендации по реализации идентификатора по NFC:
    • В качестве URL используйте find-my.googleapis.com/lookup .
    • В качестве параметра e используйте тот же ответ, который построен для Get_Identifier , HEX, кодированный.
    • В качестве параметра pid используйте тот же ответ, который построен для get_product_data , кодированный hex.
  • Рекомендации по реализации OPCODE SOUNT_START :
    • Команда должна вызвать звонок во всех доступных компонентах.
    • Максимальный поддерживаемый объем должен использоваться.
    • Рекомендуемая продолжительность звонка составляет 12 секунд.
  • Теги локатора должны включать механизм, который позволяет пользователям временно прекращать рекламу без сброса на заводской установке (например, нажатие комбинации кнопок).
    • Инструкции по отключению должны быть задокументированы в общедоступном URL -адресе и предоставлены Google в качестве требования для сертификации и не менее 10 дней до любого обновления или изменения в инструкциях.
    • URL должен поддерживать локализацию. В зависимости от клиента, язык будет предоставлен либо в виде параметра запроса («hl = en»), либо с использованием HTTP заголовка «Принятие».

Рекомендации по переключению протокола

  • Только один протокол следует использовать за раз. Убедитесь, что не более чем одна сеть может работать на устройстве одновременно. Это требование необходимо, чтобы гарантировать, что между различными протоколами не наблюдается конфиденциальных пользовательских данных.
  • Предполагается включить трудный рабочий процесс сброса в устройство, которое позволяет пользователю повторно отобразить устройство с другой сетью.
  • Процесс обновления устройства в сеть должен быть удобным и справедливым между сетями. Пользователь должен иметь возможность выбрать, какую сеть он хочет использовать, не давая предпочтения одной из сетей. Этот поток должен быть утвержден командой Google.

Обновления прошивки

Процесс и распространение обновлений OTA должны управляться партнером с использованием собственного рабочего процесса мобильного или веб -приложения.

Совместимость

Найдите сеть моей устройства, требуемые услуги местоположения и Bluetooth, чтобы включить. Требует сотовой службы или подключения к Интернету. Работает на Android 9+ и в определенных странах для пользователей, имеющих право возраста.

Журнал изменений

FMDN версия Дата Комментарий
v1 Первоначальный выпуск спецификации FMDN для раннего доступа.
v1.1 Февраль 2023 года
  • Добавлено индикация режима нежелательной защиты от нежелательного отслеживания.
  • Добавлена ​​возможность пропустить аутентификацию запросов звонков, находясь в нежелательном режиме защиты отслеживания.
v1.2 апрель 2023 г.
  • Обновлено определение АК Владельца.
  • Добавлена ​​рекомендация для восстановления после потери мощности в тегах локатора.
  • Добавлено разъяснение для рандомизации MAC -адреса.
  • Добавлено разъяснение вращения MAC -адреса, находясь в нежелательном режиме защиты отслеживания.
  • Добавлено руководство по тому, чтобы иметь способ деактивировать тег локатора.
v1.3 декабрь 2023 г.
  • Добавлено разъяснение по идентификации информации, обнаруженной тегами локатора.
  • Добавлено требование для реализации нежелательной спецификации профилактики отслеживания.
  • Добавлены руководящие принципы для переключаемых протокольных устройств.