Características

Servicio de Vinculación rápida

El proveedor de vinculación rápida deberá tener el siguiente servicio GATT.

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

Este servicio deberá tener 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 Escribir y notificar FE2C1234-8366-4814-8EB0-01DE32100BEA
Llave de acceso No Escribir y notificar FE2C1235-8366-4814-8EB0-01DE32100BEA
Clave de la cuenta No Escribir 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

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: ID del modelo

Esta característica permite que el Seeker lea el ID del modelo según sea necesario, fuera de Cuando el dispositivo publica anuncios en el modo detectable. Siempre debería devolverse 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 con la verificación de que el Buscador Ambos proveedores poseen una clave precompartida. La clave es diferente en cada caso:

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

    • El proveedor está en modo de vinculación.
    • El Buscador verifica que el Proveedor esté en posesión del con una clave privada contra la falsificación de identidad.

    Ten en cuenta que, en el modo de vinculación, el Proveedor también puede vincularse en la forma habitual, por ejemplo, para vincular con un dispositivo que no admita Fast Vinculación basada en claves de Pair.

  • 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 esta no es una obligatorio: el proveedor debe admitir el uso de una clave de cuenta incluso cuando modo de vinculación).
    • Tanto el Buscador como el Proveedor verifican que el otro posee el clave de cuenta.

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

Formato de los datos

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

Octeto Tipo de datos Descripción Valor ¿Obligatorio?
Entre 0 y 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 ¿Obligatorio?
0 uint8 Tipo de mensaje 0x00 = Solicitud de vinculación basada en claves Obligatorio
1 uint8 Marcas
  • Bit 0 (MSB): obsoleto e ignorado por Seeker.
  • 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, 0.
  • Bit 2: 1 si el Buscador solicita que el Proveedor notifique el nombre existente. De lo contrario, 0.
  • Bit 3: 1 si es para escribir la clave de cuenta de forma retroactiva. De lo contrario, 0.
  • Los bits 4 a 7 están reservados para uso futuro y deben ignorarse.
varía Obligatorio
Entre 2 y 7 uint48 Puedes elegir una de las siguientes opciones:
  • Dirección BLE actual del proveedor
  • Dirección pública del proveedor
varía Obligatorio
8 a 13 uint48 Dirección de BR/EDR del solicitante varía Presente solo si se establecieron los bits 1 o 3 de las marcas
n: 15 Valor aleatorio (sal) varía Obligatorio

Tabla 1.2.1: Solicitud sin procesar (tipo 0x00). Desencriptado desde la carpeta Solicitud en la Tabla 1.1.

Octeto Tipo de datos Descripción Valor ¿Obligatorio?
0 uint8 Tipo de mensaje 0x10 = Solicitud de acción Obligatorio
1 uint8 Marcas varía Obligatorio
Entre 2 y 7 uint48 Puedes elegir una de las siguientes opciones:
  • Dirección BLE actual del proveedor
  • Dirección pública del proveedor
varía Obligatorio
8 uint8 Grupo de mensajes varía Obligatorio si el bit 0 de la marca está configurado
9 uint8 Código de mensaje varía Obligatorio si el bit 0 de la marca está configurado
10 uint8 Depende de las marcas:
  • El bit 0 está configurado: Longitud de datos adicionales, menor que 6
  • Se configura el bit 1: ID de datos
varía Obligatoria si se configuran los bits 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). Desencriptado desde la carpeta Solicitud 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
Entre 1 y 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 Encriptado para producir la respuesta encriptada en Tabla 1.4.

Octeto Tipo de datos Descripción Valor
Entre 0 y 15 uint128 Respuesta encriptada varía

Tabla 1.4: Respuesta encriptada, enviada por el Proveedor al Buscador a través de un notificar.

Característica: Llave de acceso

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

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

Tabla 2.1: Bloque de llave de acceso encriptado Consulta Procedimiento de vinculación basado en claves para su 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
Entre 1 y 3 unit32 Llave de acceso de 6 dígitos varía
Entre 4 y 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 la cuenta

Después de la vinculación, el Buscador de Vinculación rápida escribirá una clave de la cuenta en la Vinculación rápida Proveedor

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

Cuando se reciba una solicitud de escritura, el proveedor de vinculación rápida hará lo siguiente:

  1. Desencripta la clave de la cuenta con el secreto compartido generado en el paso 4. procedimiento.
    • Para proveedores que requieren unión (común):
      • Antes de desencriptar, verifica que el secreto compartido se haya usado para desencriptar el solicitud de llave de acceso del paso 12. Si este paso no se completó con esta Secret, ignora esta escritura y sal.
    • En este punto, no se usará el secreto compartido (K en el procedimiento) de nuevo para esta vinculación. Todas las solicitudes que lleguen encriptadas con esta clave sin reiniciar el procedimiento debe rechazarse.
  2. Verifica que el valor desencriptado comience con 0x04. De lo contrario, ignora escribir y salir.
  3. Verifica si la lista de claves de cuenta persistente tiene espacio para la nueva valor.
  4. De lo contrario, borra de la lista el valor que se usó menos recientemente.
  5. Agrega el valor nuevo a la lista.

Las claves de cuenta de 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 de la al proveedor de servicios en la nube, según sea necesario. Siempre debería mostrar 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 utf8, incluso si hay más de una (p. ej., 3 firmwares para el auricular izquierdo, el derecho y la funda) del Proveedor. El proveedor también puede mostrar las cadenas específicas para casos especiales:

  1. status-refresh: si el proveedor se está actualizando a un nuevo firmware. Como alternativa, el Proveedor puede devolver la versión del firmware en etapa de pruebas.

  2. status-anormal: Si el proveedor se encuentra en un estado anormal. Por ejemplo, no funcionó correctamente porque se produjo un error en la actualización del firmware. Este valor causará al buscador para que muestre un mensaje que le indique al usuario que se debe actualizar en ese momento.

El proveedor debe limitar el acceso a las características de la revisión de firmware a los siguientes fines: para impedir el seguimiento de dispositivos. Restricciones sugeridas:

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

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 anterior del servicio de vinculación rápida (el destino dejará de estar disponible el 1/1/2021) Encriptado Permisos UUID
Datos No Escribir y notificar 0x1237

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

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

Tabla 3.1: Paquete de datos, que el Proveedor envía al Buscador a través de un notificar o enviar el Buscador al Proveedor a través de una operación de escritura.

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

Tabla 3.2: Datos sin procesar Se desencripta de los datos encriptados en Tabla 3.1.

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

  1. Genera 8 bytes criptográficos aleatorios para nonce.
  2. Encriptar los datos con AES-CTR, donde cada bloque de 16 bytes se genera usando

    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 a partir de data[i * 16]. El último puede ser inferior a 16 bytes.
  3. Realiza concat(encryptedBlock[0], encryptedBlock[1],...) para crear el Datos encriptados.

  4. Genera HMAC-SHA256 mediante

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

    en el que

    1. K es generado por concat(shared_secret, ZERO de 48 bytes), el shared_secret es del paso 4 del procedimiento.
    2. El opad es un padding externo de 64 bytes, que consiste en bytes repetidos de 0x5C
    3. El iPad tiene un padding interno de 64 bytes, que consiste en bytes repetidos de 0x36
  5. Toma los primeros 8 bytes de HMAC-SHA256 como prefijo del campo Datos paquete.

Cuando se reciba una solicitud de escritura, el proveedor de vinculación rápida hará lo siguiente:

  1. Verificar la integridad de los datos; para ello, comprueba los primeros 8 bytes de HMAC-SHA256
  2. Desencriptar 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. encryptionBlock[i] es un comienzo en bloque de 16 bytes a partir deencrypted_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 nombres 1, es de ECDH, y no volver a usar para esta vinculación. Todas las solicitudes que lleguen con esta clave sin reiniciar el procedimiento. rechazadas.
      2. en el flujo de nombres 2, es la clave de la cuenta.
  3. Realiza concat(clearBlock[0], clearBlock[1],...) para crear los datos sin procesar.