Características

Servicio de Vinculación rápida

El proveedor de Vinculación rápida debe tener el siguiente servicio GATT.

Servicio UUID
Servicio de Vinculación rápida 0xFE2C

Este servicio tendrá las siguientes características.

Característica del servicio de Vinculación rápida Encriptado Permisos UUID
ID de modelo No Leer FE2C1233-8366-4814-8EB0-01DE32100BEA
Vinculación basada en claves No Escribe y notifica FE2C1234-8366-4814-8EB0-01DE32100BEA
Llave de acceso No Escribe y notifica FE2C1235-8366-4814-8EB0-01DE32100BEA
Clave de cuenta No Escritura FE2C1236-8366-4814-8EB0-01DE32100BEA

Servicio de información del dispositivo

El proveedor de Vinculación rápida también debe admitir el servicio de información del dispositivo.

Servicio UUID
Servicio de información del dispositivo 0x180A

Vinculación rápida Seeker usa las siguientes características.

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

Característica: ID del modelo

Esta característica permite que el buscador lea el ID del modelo según sea necesario, fuera de los momentos en que el dispositivo está anunciando en modo detectable. Siempre debe devolver los siguientes datos:

Octeto Tipo de datos Descripción Valor
0 a 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 tanto el buscador como el proveedor posean una clave precompartida. La clave es diferente en cada caso:

  • Caso 1: La clave precompartida se basa en el par de claves pública/privada anti-suplantación y en el par de claves pública/privada propio del buscador, que cambiará en cada intento de vinculación.

    • El proveedor está en modo de vinculación.
    • El buscador verifica que el proveedor posea la clave privada contra suplantación.

    Ten en cuenta que, cuando está en modo de vinculación, el proveedor también puede vincularse de la manera 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. (Pero 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 extremadamente 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.

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

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

Octeto 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): Está en desuso y Seeker 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 es para escribir la clave de la cuenta de forma retroactiva. De lo contrario, es 0.
  • Los bits del 4 al 7 están reservados para uso futuro y se ignorarán.
varía Obligatorio
2 - 7 uint48 Una de estas opciones:
  • Dirección BLE actual del proveedor
  • Dirección pública del proveedor
varía Obligatorio
8 a 13 uint48 Dirección BR/EDR del buscador varía Solo está presente si se configura el bit 1 o 3 de las marcas.
n - 15 Valor aleatorio (salt) varía Obligatorio

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

Octeto Tipo de datos Descripción Valor ¿Es obligatorio?
0 uint8 Tipo de mensaje 0x10 = Solicitud de acción Obligatorio
1 uint8 Marcas
  • Bit 0 (MSB): 1 si es una acción del dispositivo y 0 en caso contrario.
  • Bit 1: 1 si le seguirá la característica Additional Data; de lo contrario, 0.
  • Los bits del 2 al 7 están reservados para uso futuro y se ignorarán.
varía Obligatorio
2 - 7 uint48 Una de estas opciones:
  • Dirección BLE actual del proveedor
  • Dirección pública del proveedor
varía Obligatorio
8 uint8 Enviar mensaje al grupo varía Obligatorio si se configura el bit 0 de las marcas
9 uint8 Código del mensaje varía Obligatorio si se configura el bit 0 de las marcas
10 uint8 Depende de las marcas:
  • Bit 0 establecido: Longitud de datos adicionales, inferior a 6
  • Bit 1 establecido: ID de datos
varía Obligatorio si se configura el bit 0 o 1 de las marcas
11 - n Datos adicionales varía Opcional
n - 15 Valor aleatorio (salt) varía Obligatorio

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

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

Tabla 1.3: Respuesta sin procesar. Se encripta para producir la respuesta encriptada en la Tabla 1.4.

Octeto Tipo de datos Descripción Valor
0 a 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.

Octeto Tipo de datos Descripción Valor
0 a 15 uint128 Bloque de llave de acceso encriptada varía

Tabla 2.1: Bloque de clave de acceso encriptada. Consulta el procedimiento de vinculación basado en claves para obtener información sobre el uso.

Octeto 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 a 15 Valor aleatorio (salt) 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.

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

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

  1. Descifra la clave de la cuenta con el secreto compartido generado en el paso 4 del procedimiento.
    • Para los proveedores que requieren una 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 superó con este secreto, ignora esta escritura y sal.
    • En este punto, el secreto compartido (K en el procedimiento) no se volverá a usar para este vinculación. Se deben rechazar 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 la cuenta persistente tiene espacio para el valor nuevo.
      • De lo contrario, borra el valor menos usado recientemente de la lista.
      • Agrega el valor nuevo a la lista.
    • Si el valor es 0xFF:
      • Considera esto como una sesión de vinculación temporal y no realices ninguna operación.
      • Esto puede ocurrir con el flujo Escribir la clave de la cuenta de forma retroactiva.
      • No almacenes la clave ni la uses en la lista de claves de la cuenta, en la encriptación ni en los cálculos de MAC.
      • La eliminación de la vinculación se activa por un evento o un tiempo de espera específicos de la función. En el caso de LE Audio Sharing, se recomienda quitar la vinculación BLE y la clave de vinculación 10 minutos después de que se desconecte la sesión temporal.

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

Característica: Revisión de firmware

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

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

Debe encapsularse en una sola cadena UTF-8, 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 nuevo firmware. 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 buscador muestre un mensaje para informar al usuario que debe actualizarse ahora.

El proveedor debe limitar el acceso a la característica de revisión del 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 visible.

Característica: Datos adicionales

Este servicio debe tener la siguiente característica.

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

Antes de escribir o notificar esta característica, debe haber un handshake 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, lo que también se define a continuación.

Octeto Descripción Valor
0 - 7 Son los primeros 8 bytes de HMAC-SHA256. varía
8 - 15 Nonce, que se usa en 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.

Octeto Tipo de datos Descripción Valor
0 - var byte array Datos varies, decodifícalo según el ID de datos de la Tabla 1.2.2:
  • 0x01(nombre personalizado): utf8s

Tabla 3.2: Datos sin procesar. Se descifraron los datos encriptados de 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 aleatorios criptográficos para Nonce.
  2. Encripta los datos con AES-CTR, donde 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. Realiza concat(encryptedBlock[0], encryptedBlock[1],…) para crear los datos encriptados.

  4. Genera HMAC-SHA256 de la siguiente manera:

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

    en el que

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

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

  1. Verifica la integridad de los datos comprobando los primeros 8 bytes de HMAC-SHA256.
  2. Descifrar los datos encriptados con AES-CTR, donde 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 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 este 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.