Servicio de Vinculación rápida

El proveedor de Vinculación rápida debe implementar el servicio de Vinculación rápida (UUID 0xFE2C), que contiene las siguientes características.

Nombre Encriptado Permisos UUID ¿Es obligatorio?
ID del modelo No Leer FE2C1233-8366-4814-8EB0-01DE32100BEA Obligatorio
Vinculación basada en claves No Escribir y notificar FE2C1234-8366-4814-8EB0-01DE32100BEA Obligatorio
Llave de acceso No Escribir y notificar FE2C1235-8366-4814-8EB0-01DE32100BEA Obligatorio
Clave de la cuenta No Escritura FE2C1236-8366-4814-8EB0-01DE32100BEA Obligatorio
Datos adicionales No Escribir y notificar FE2C1237-8366-4814-8EB0-01DE32100BEA *C1
PSM de flujo de mensajes Sí Leer FE2C1239-8366-4814-8EB0-01DE32100BEA *C2
Llave de acceso adicional No Lectura, escritura y notificación FE2C123A-8366-4814-8EB0-01DE32100BEA *C3
Acción del dispositivo de FP No Escribir y notificar FE2C123B-8366-4814-8EB0-01DE32100BEA *C4

Obligatorio condicional

Característica: ID del modelo

Esta característica permite que el Buscador lea el ID del modelo según sea necesario, fuera de cuando el dispositivo se anuncia en modo detectable. Siempre debe devolver los siguientes datos:

Octet Tipo de datos Descripción Valor
0 - 2 uint24 ID de modelo varía

Característica: Vinculación basada en claves

Esta característica controla el procedimiento de vinculación basada en claves. En este procedimiento, se establece un cierto nivel de confianza verificando que el Buscador y el Proveedor tengan una clave precompartida. La clave es diferente en cada caso:

  • Caso 1: La clave precompartida se basa en el par de claves pública y privada de protección contra la falsificación de identidad y en el par de claves pública y privada del buscador, que cambiará para cada intento de vinculación.

    • El proveedor está en modo de vinculación.
    • El Buscador verifica que el Proveedor tenga la clave privada de protección contra la falsificación de identidad.

    Ten en cuenta que, cuando está en modo de vinculación, el proveedor también puede vincularse de la forma habitual, por ejemplo, para vincularse con un dispositivo que no admite la vinculación basada en claves de la Vinculación rápida.

  • Caso 2: La clave precompartida es una de las claves de la cuenta.

    • Por lo general, el proveedor no está en modo de vinculación. (Sin embargo, esto no es un requisito: el proveedor debe admitir el uso de una clave de cuenta incluso en el modo de vinculación).
    • El buscador y el proveedor verifican que el otro tenga la clave de la cuenta.

Dado que ambos casos son muy similares, excepto por la clave precompartida que se usa, se combinan en el procedimiento.

Formato de datos

Consulta el procedimiento para saber cómo se usa cada formato.

Octet Tipo de datos Descripción Valor ¿Es obligatorio?
0 - 15 uint128 Solicitud encriptada varía Obligatorio
16 - 79 Clave pública varía Opcional

Tabla 1.1: Solicitud encriptada, escrita en la característica por el buscador.

Octet Tipo de datos Descripción Valor ¿Es obligatorio?
0 uint8 Tipo de mensaje 0x00 = Solicitud de vinculación basada en claves Obligatorio
1 uint8 Marcas
  • Bit 0 (MSB): Seeker lo dejó de estar disponible y lo ignora.
  • Bit 1: 1 si el buscador solicita que el proveedor inicie la vinculación y esta solicitud contiene la dirección BR/EDR del buscador. De lo contrario, es 0.
  • Bit 2: 1 si el Buscador solicita que el Proveedor notifique el nombre existente. De lo contrario, es 0.
  • Bit 3: 1 si se trata de una escritura retroactiva de la clave de la cuenta. De lo contrario, es 0.
  • Bit 4: 1 si el buscador admite el dispositivo BLE. De lo contrario, es 0.
  • Bit 5: 1 si el buscador admite LE Audio. De lo contrario, es 0.
  • Los bits 6 y 7 están reservados para uso futuro y se deben ignorar.
varía Obligatorio
2 - 7 uint48 Puedes elegir una de estas opciones:
  • Dirección BLE actual del proveedor
  • Dirección de identidad del proveedor
varía Obligatorio
8 - 13 uint48 Dirección BR/EDR del buscador varía Solo se presenta si se establece el bit 1 o 3 de las marcas
n - 15 Valor aleatorio (sal) varía Obligatorio

Tabla 1.2.1: Solicitud sin procesar (tipo 0x00). Se desencriptó de la solicitud encriptada en la tabla 1.1.

Octet Tipo de datos Descripción Valor ¿Es obligatorio?
0 uint8 Tipo de mensaje 0x10 = Solicitud de acción Obligatorio
1 uint8 Marcas varía Obligatorio
2 - 7 uint48 Puedes elegir una de estas opciones:
  • Dirección BLE actual del proveedor
  • Dirección de identidad del proveedor
varía Obligatorio
8 uint8 Enviar mensaje al grupo varía Obligatorio si se establece el bit 0 de marcas
9 uint8 Código del mensaje varía Obligatorio si se establece el bit 0 de marcas
10 uint8 Depende de las marcas:
  • Se establece el bit 0: Longitud de datos adicionales, menos de 6
  • Se establece el bit 1: ID de datos
varía Obligatorio si se establece el bit 0 o 1 de las marcas
11 - n Datos adicionales varía Opcional
n - 15 Valor aleatorio (sal) varía Obligatorio

Tabla 1.2.2: Solicitud sin procesar (tipo 0x10). Se desencriptó de la solicitud encriptada en la tabla 1.1.

Octet Tipo de datos Descripción Valor
0 uint8 Tipo de mensaje 0x01 = Respuesta de vinculación basada en claves
1 - 6 uint48 Dirección pública (BR/EDR) del proveedor varía
7 - 15 Valor aleatorio (sal) varía

Tabla 1.3: Respuesta sin procesar (tipo 0x01). Se encripta para producir la respuesta encriptada en la tabla 1.4.

Octet Tipo de datos Descripción Valor
0 uint8 Tipo de mensaje 0x02 = Key-based Pairing Extended Response
1 uint8 Marcas
  • Bit 0 (MSB): 1 si el proveedor es un dispositivo solo de LE; de lo contrario, 0. Si el bit 0 se establece en 1, el Buscador supondrá que el bit 1 se establece en 1.
  • Bit 1: 1 si el proveedor prefiere la vinculación de LE; de lo contrario, 0.
  • Bit 2: 1 si el tipo de dirección de la segunda dirección es aleatorio, 0 si es público.
  • Los bits del 3 al 7 están reservados para uso futuro y se deben ignorar.
varía
2 uint8 Cantidad de direcciones del proveedor
Los valores válidos son 1 y 2.
varía
De 3 a 8 o
de 3 a 14
  • La primera dirección debe ser la dirección de identidad del dispositivo principal y debe ser vinculable si se prefiere la vinculación de BR/EDR.
  • La segunda dirección debe ser la dirección vinculable del dispositivo secundario si este está disponible.
varía
9-15 o 15 Valor aleatorio (sal) varía

Tabla 1.3.2: Respuesta sin procesar (tipo 0x02). Se encripta para producir la respuesta encriptada en la tabla 1.4.

Octet Tipo de datos Descripción Valor
0 -15 uint128 Respuesta encriptada varía

Tabla 1.4: Respuesta encriptada, enviada por el proveedor al buscador a través de una notificación.

Característica: Llave de acceso

Esta característica se usa durante el procedimiento de vinculación basada en claves.

Octet Tipo de datos Descripción Valor
0 - 15 uint128 Bloque de llave de acceso encriptado varía

Tabla 2.1: Bloque de llave de acceso encriptada. Consulta el procedimiento de vinculación basada en claves para conocer el uso.

Octet Tipo de datos Descripción Valor
0 uint8 Tipo de mensaje Uno de los siguientes:
  • 0x02 = Llave de acceso del buscador
  • 0x03 = Llave de acceso del proveedor
1 - 3 unit32 Llave de acceso de 6 dígitos varía
4 - 15 Valor aleatorio (sal) varía

Tabla 2.2: Bloque de llave de acceso sin procesar. Versión desencriptada de la tabla 2.1.

Característica: Clave de cuenta

Después de la vinculación, el buscador de Vinculación rápida escribirá una clave de cuenta en el proveedor de Vinculación rápida.

Octet Tipo de datos Descripción Valor
0 - 15 uint128 Clave de cuenta (encriptada) varía

Cuando reciba una solicitud de escritura, el proveedor de Vinculación rápida deberá hacer lo siguiente:

  1. Desencripta la clave de la cuenta con el secreto compartido que se generó en el paso 4 del procedimiento.
    • Para los proveedores que requieren fianza (común):
      • Antes de desencriptar, verifica que se haya usado el secreto compartido para desencriptar la solicitud de llave de acceso del paso 12. Si este paso no se aprobó con este secreto, ignora esta escritura y sal.
    • En este punto, el secreto compartido (K en el procedimiento) no se volverá a usar para esta vinculación. Se deben rechazar todas las solicitudes que lleguen encriptadas con esta clave sin reiniciar el procedimiento.
  2. Verifica que el valor desencriptado comience con 0x04 o 0xFF. Si no es así, ignora esta escritura y sal.
    • Si el valor es 0x04:
      • Verifica si la lista de claves de cuenta persistente tiene espacio para el valor nuevo.
      • De lo contrario, borra de la lista el valor menos usado recientemente.
      • Agrega el valor nuevo a la lista.
    • Si el valor es 0xFF:
      • Trata esto como una sesión de vinculación temporal y no realices ninguna operación.
      • Esto puede ocurrir con el flujo Retroactively writing account key.
      • No almacenes la clave ni la uses en la lista de claves de la cuenta, la encriptación ni los cálculos de MAC.
      • La eliminación de la vinculación se activa por un evento específico de la función o un tiempo de espera. Para el uso compartido de audio de LE, se recomienda quitar la vinculación de BLE y la clave de vínculo 10 minutos después de que se desconecte la sesión temporal.

Las claves de cuenta de la lista se usan durante la vinculación basada en claves.

Característica: Datos adicionales

Este servicio tendrá la siguiente característica.

Característica del servicio de Vinculación rápida Encriptado Permisos UUID
Datos No Escribir y notificar FE2C1237-8366-4814-8EB0-01DE32100BEA
Característica antigua del servicio de Vinculación rápida (se dará de baja el 1/1/2021) Encriptado Permisos UUID
Datos No Escribir y notificar 0x1237

Antes de escribir o notificar a esta característica, debe haber un protocolo de enlace a través de la característica FE2C1234-8366-4814-8EB0-01DE32100BEA para tener un secreto compartido. Se usará AES-CTR para encriptar los datos que fluyen a través de esta característica, cuyo algoritmo se define a continuación. Este modo es más seguro para los datos que se extienden más allá de un solo bloque de 16 bytes. Se usará HMAC-SHA256 para garantizar la integridad de los datos, que también se define a continuación.

Octet Descripción Valor
0 - 7 Los primeros 8 bytes de HMAC-SHA256. varía
8 - 15 Nonce, que usa la encriptación AES-CTR. varía
16 - var Datos encriptados varía

Tabla 3.1: Paquete de datos, enviado por el proveedor al buscador a través de una notificación o enviado por el buscador al proveedor a través de una escritura.

Octet Tipo de datos Descripción Valor
0 - var byte array Datos varía, decodifícalo según el ID de datos de la Tabla 1.2.2:
  • 0x01(personalized name): utf8s

Tabla 3.2: Datos sin procesar. Se desencriptaron a partir de los datos encriptados en la tabla 3.1.

Cuando se solicita una notificación (p.ej., se solicita un nombre personalizado a través del bit 2 en la tabla 1.2.1), el proveedor de Vinculación rápida debe hacer lo siguiente:

  1. Genera 8 bytes criptográficamente aleatorios para el nonce.
  2. Encripta los datos con AES-CTR, en el que cada bloque de 16 bytes se genera con

    encryptedBlock[i] = clearBlock[i] ^ AES(key, concat((uint8) i, 0x00000000000000, nonce))
    

    en el que

    1. La clave AES es el secreto compartido del paso 4 del procedimiento.
    2. clearBlock[i] es un bloque de 16 bytes que comienza en data[i * 16]. El último bloque puede tener menos de 16 bytes.
  3. Ejecuta concat(encryptedBlock[0], encryptedBlock[1],...) para crear los datos encriptados.

  4. Genera HMAC-SHA256 con

    sha256(concat((K ^ opad), sha256(concat((K ^ ipad), concat(nonce, encrypted_data)))))
    

    en el que

    1. K se genera mediante concat(shared_secret, 48-byte ZEROs), el shared_secret proviene del paso 4 del procedimiento.
    2. opad es un padding externo de 64 bytes, que consiste en bytes repetidos con el valor 0x5C.
    3. ipad es un padding interno de 64 bytes, que consiste en bytes repetidos con el valor 0x36.
  5. Toma los primeros 8 bytes del HMAC-SHA256 como el prefijo del paquete de datos.

Cuando reciba una solicitud de escritura, el proveedor de Vinculación rápida deberá hacer lo siguiente:

  1. Verifica la integridad de los datos comprobando los primeros 8 bytes de HMAC-SHA256.
  2. Desencripta los datos encriptados con AES-CTR, en el que cada bloque se genera con

    clearBlock[i] = encryptedBlock[i] ^ AES(key, concat((uint8) i, 0x00000000000000, nonce))
    

    en el que

    1. encryptedBlock[i] es un bloque de 16 bytes que comienza en encrypted_data[i * 16]. El último bloque puede tener menos de 16 bytes.
    2. La clave AES se genera o se identifica a partir del protocolo de enlace, p.ej.,
      1. En el flujo de asignación de nombres 1, proviene de ECDH y no se volverá a usar para esta vinculación. Se deben rechazar todas las solicitudes que lleguen encriptadas con esta clave sin reiniciar el procedimiento.
      2. En el flujo de asignación de nombres 2, es la clave de la cuenta.
  3. Realiza concat(clearBlock[0], clearBlock[1],...) para crear los datos sin procesar.

Característica: PSM de flujo de mensajes

Consulta Dispositivo BLE: PSM de flujo de mensajes.

Característica: Llave de acceso adicional

Consulta Dispositivo BLE: Llave de acceso adicional.

Característica: Acción del dispositivo de FP

Característica del servicio de Vinculación rápida Encriptado Permisos UUID
Acción del dispositivo de FP No Escribir y notificar FE2C123B-8366-4814-8EB0-01DE32100BEA

Octet Descripción Valor
0 - 7 Los primeros 8 bytes de HMAC-SHA256. varía
8 - 15 Nonce, que usa la encriptación AES-CTR. varía
16 - var Datos encriptados varía

Tabla 4.1: Paquete de datos, enviado por el proveedor al buscador como una notificación o por el buscador al proveedor como una escritura.

Octet Tipo de datos Descripción Valor
0 - var byte array Solicitud de acción Uno de los siguientes:
  • Lectura del nombre personalizado, 0x01
  • Escribe el nombre personalizado, consulta la tabla 4.3.1
  • Lectura de información del conjunto coordinado, 0x02
  • Leer las funciones del dispositivo, 0x03

Tabla 4.2: Datos sin procesar. Se desencripta a partir de los datos encriptados en la tabla 4.1 que el buscador envía al proveedor como una escritura.

Octet Tipo de datos Descripción Valor
0 - var byte array Respuesta de acción Uno de los siguientes:
  • Nombre personalizado, consulta la tabla 4.3.1
  • Información del conjunto coordinado, consulta la tabla 4.3.2
  • Funciones del dispositivo, consulta la Tabla 4.3.3
  • Código de error
    • 0x80 (solicitud no admitida)
    • 0x81 (solicitud no válida)

Tabla 4.3: Datos sin procesar. Se desencripta a partir de los datos encriptados en la tabla 4.1 que el proveedor envía al buscador como notificación.

Octet Tipo de datos Descripción Valor
0 uint8 ID de acción 0x01
1 - var utf8s Nombre personalizado varía

Tabla 4.3.1: Formato de nombre personalizado

Octet Tipo de datos Descripción Valor
0 uint8 ID de acción 0x02
1 uint8 Tipo de miembro del conjunto coordinado de Vinculación rápida
  • 0x00: componente izquierdo
  • 0x01: componente derecho
2 uint8 Tamaño del conjunto coordinado recuento de componentes
3 uint8 Cómo configurar el tipo de clave de resolución de identidad 0x01 (SIRK de texto sin formato)
4 - 19 uint128 Establece el valor de la clave de resolución de identidad Datos de 16 bytes, consulta Servicio de identificación de conjuntos coordinados

Tabla 4.3.2: Formato de información del conjunto coordinado

Octet Tipo de datos Descripción Valor
0 uint8 ID de acción 0x03
1 - 2 uint16 Funciones del dispositivo
  • Bits 0 a 15: reservados, se deben establecer en 0

Tabla 4.3.3: Formato de las funciones del dispositivo

Operaciones de Vinculación rápida

Se definen dos operaciones principales para esta característica

  • Lectura de Vinculación rápida: Lee datos del proveedor.
    1. Buscador: Habilita la notificación de GATT
    2. Proveedor: Se registró la notificación de GATT
    3. Buscador: Solicitud de escritura de GATT, los datos sin procesar solo contienen Action ID
    4. Proveedor: Respuesta de escritura de GATT
    5. Proveedor: Notificación de GATT, los datos sin procesar contienen
      • ID de acción
      • Datos del ID de acción
    6. Buscador: Se recibió la notificación de GATT
  • Escritura de Vinculación rápida: escribe datos en el proveedor.
    1. Solicitud de escritura de GATT del buscador, los datos sin procesar contienen lo siguiente:
      • ID de acción
      • Datos del ID de acción
    2. Proveedor: Respuesta de escritura de GATT

ID de acción de lectura compatible con la Vinculación rápida

  • 0x01 (nombre personalizado)
  • 0x02 (información del conjunto coordinado)
  • 0x03 (Funciones del dispositivo)

ID de acción de escritura compatible con la Vinculación rápida

Si el proveedor no comprende un ID de acción, responde con una notificación de GATT que contiene una solicitud no admitida (0x80), como se describe en la tabla 4.3.

Algoritmo criptográfico

Cuando se solicita una notificación, el proveedor de Vinculación rápida debe hacer lo siguiente:

  1. Genera 8 bytes criptográficamente aleatorios para el nonce.
  2. Encripta los datos con AES-CTR, en el que cada bloque de 16 bytes se genera con

    encryptedBlock[i] = clearBlock[i] ^ AES(key, concat((uint8) i, 0x00000000000000, nonce))
    

    en el que

    1. La clave AES es el secreto compartido del paso 4 del procedimiento.
    2. clearBlock[i] es un bloque de 16 bytes que comienza en data[i * 16]. El último bloque puede tener menos de 16 bytes.
  3. Ejecuta concat(encryptedBlock[0], encryptedBlock[1],...) para crear los datos encriptados.

  4. Genera HMAC-SHA256 con

    sha256(concat((K ^ opad), sha256(concat((K ^ ipad), concat(nonce, encrypted_data)))))
    

    en el que

    1. K se genera mediante concat(shared_secret, 48-byte ZEROs), el shared_secret proviene del paso 4 del procedimiento.
    2. opad es un padding externo de 64 bytes, que consiste en bytes repetidos con el valor 0x5C.
    3. ipad es un padding interno de 64 bytes, que consiste en bytes repetidos con el valor 0x36.
  5. Toma los primeros 8 bytes del HMAC-SHA256 como el prefijo del paquete de datos.

Cuando reciba una solicitud de escritura, el proveedor de Vinculación rápida deberá hacer lo siguiente:

  1. Verifica la integridad de los datos comprobando los primeros 8 bytes de HMAC-SHA256.
  2. Desencripta los datos encriptados con AES-CTR, en el que cada bloque se genera con

    clearBlock[i] = encryptedBlock[i] ^ AES(key, concat((uint8) i, 0x00000000000000, nonce))
    

    en el que

    1. encryptedBlock[i] es un bloque de 16 bytes que comienza en encrypted_data[i * 16]. El último bloque puede tener menos de 16 bytes.
    2. La clave AES se genera o se identifica a partir del protocolo de enlace, por ejemplo:
      1. En el flujo de asignación de nombres 1, proviene de ECDH y no se volverá a usar para esta vinculación. Se deben rechazar todas las solicitudes que lleguen encriptadas con esta clave sin reiniciar el procedimiento.
      2. En el flujo de asignación de nombres 2, es la clave de la cuenta.
  3. Realiza concat(clearBlock[0], clearBlock[1],...) para crear los datos sin procesar.

Servicio de información del dispositivo

El proveedor de Vinculación rápida también debe admitir el servicio de información del dispositivo (UUID 0x180A). El buscador de Vinculación rápida usa las siguientes características.

Nombre Encriptado Permisos UUID
Revisión de firmware No Leer 0x2A26

Característica: Revisión de firmware

Esta característica permite que el buscador lea la revisión de firmware del proveedor según sea necesario. Siempre debe devolver los siguientes datos:

Octet Tipo de datos Descripción Valor
0 - var utf8s Código de revisión de firmware varía

Debe encapsularse en una sola cadena utf8, incluso si hay más de un firmware (p. ej., 3 firmwares para el auricular izquierdo, el auricular derecho y el estuche) en el proveedor. El proveedor también puede devolver las cadenas específicas para casos especiales:

  1. status-updating: Si el proveedor se está actualizando a un firmware nuevo Como alternativa, el proveedor podría devolver la versión del firmware en etapa de pruebas.

  2. status-abnormal: Si el proveedor se encuentra en un estado anormal. Por ejemplo, no funciona correctamente porque falló la actualización de firmware. Este valor hará que el Seeker muestre un mensaje para que el usuario sepa que debe actualizarse ahora.

El proveedor debe limitar el acceso a la característica de revisión de firmware para evitar el seguimiento del dispositivo. Restricciones sugeridas:

  • los dispositivos vinculados deben tener acceso en cualquier momento
  • Cualquier dispositivo debería tener acceso cuando el proveedor sea detectable.

Si el proveedor admite Localizador, se requiere una implementación adicional. Consulta Actualizaciones de firmware de Localizador para obtener más detalles.