Características

Servicio y características del servicio GATT

El proveedor de Vinculación rápida contará con el siguiente servicio GATT.

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

Este servicio tendrá las siguientes características.

Características personalizadas

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 Escritura FE2C1236-8366-4814-8EB0-01DE32100BEA

Características estándar

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 del momento en que el dispositivo publica anuncios en el modo detectable. Siempre debe mostrar 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 cuando se verifica que tanto el buscador como el proveedor poseen una clave precompartida. La clave es diferente en cada caso:

  • Caso 1: La clave precompartida se basa en el par de claves públicas/privadas que impiden la falsificación de identidad y en el par de claves públicas/privadas de Seeker, que cambiará con cada intento de vinculación.

    • El proveedor está en modo de vinculación.
    • El buscador verifica que el Proveedor posea la clave privada que impide la falsificación de identidad.

    Ten en cuenta que, cuando se encuentra en el modo de vinculación, el proveedor también puede vincularse de la manera habitual, por ejemplo, para sincronizarse 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 cuenta.

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

Dado que ambos casos son muy similares, excepto cuando se usa una clave precompartida, se los combina en el procedimiento.

Formato de datos

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

Octeto Tipo de datos Descripción Valor ¿Obligatorio?
0 a 15 uint128 Solicitud encriptada varía Obligatoria
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 Obligatoria
1 uint8 Marcas
  • Bit 0 (MSB): Es 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 esto es para Escribir 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 Obligatoria
Entre 2 y 7 uint48 Sigue uno de estos pasos:
  • Dirección BLE actual del proveedor
  • Dirección pública del proveedor
varía Obligatoria
8 a 13 uint48 Dirección BR/EDR del solicitante varía Presente solo si se configuran los bits 1 o 3 de las marcas
n: 15 Valor aleatorio (sal) varía Obligatoria

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

Octeto Tipo de datos Descripción Valor ¿Obligatorio?
0 uint8 Tipo de mensaje 0x10 = Solicitud de acción Obligatoria
1 uint8 Marcas varía Obligatoria
Entre 2 y 7 uint48 Sigue uno de estos pasos:
  • Dirección BLE actual del proveedor
  • Dirección pública del proveedor
varía Obligatoria
8 uint8 Grupo de mensajes varía Obligatorio si se establece el Bit 0 de la marca
9 uint8 Código de mensaje varía Obligatorio si se establece el Bit 0 de la marca
10 uint8 Depende de los indicadores:
  • Se estableció el bit 0: longitud de datos adicional, menor que 6.
  • El bit 1 está configurado: ID de datos.
varía Es obligatorio si se configuran los bits 0 o 1 de la marca.
11: n Datos adicionales varía Opcional
n: 15 Valor aleatorio (sal) varía Obligatoria

Tabla 1.2.2: Solicitud sin procesar (tipo 0x10). Desencriptado 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 (BR/EDR) del proveedor varía
7 - 15 Valor aleatorio (sal) varía

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

Octeto Tipo de datos Descripción Valor
De 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 Bloqueo de llave de acceso encriptada varía

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

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

Tabla 2.2: Bloque de clave 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 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 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 del procedimiento.
    1. Antes de desencriptar, verifica que el secreto compartido se haya usado para desencriptar la solicitud de clave de acceso del paso 12. Si este paso no se realizó con este secreto, ignora esta escritura y cierra.
    2. 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 encriptadas con esta clave sin reiniciar el procedimiento.
  2. Verifica que el valor desencriptado comience con 0x04. Si no es así, ignora esta escritura y cierra.
  3. Verifica si la lista de claves de cuenta persistente tiene espacio para el valor nuevo.
  4. De lo contrario, borra de la lista el valor que se usó por última vez.
  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 buscador lea la revisión del firmware del proveedor según sea necesario. Siempre debe 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 string utf8, incluso si hay más de un firmware (p. ej., 3 firmware para el auricular izquierdo, el derecho y la funda) en el proveedor. El proveedor también puede mostrar las strings específicas para casos especiales:

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

  2. status-anormal: Si el proveedor está en un estado anormal. Por ejemplo, no funciona correctamente porque falló la actualización del firmware. Este valor hará que el buscador muestre un mensaje para informarle al usuario que debe actualizarse ahora.

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 (objetivo que 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 un 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 seguro en los datos que se extienden más allá de un solo bloque de 16 bytes. HMAC-SHA256 se usará 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, que se usa en la encriptación AES-CTR. varía
16: var Datos encriptados. varía

Tabla 3.1: Paquete de datos que envía el proveedor al buscador a través de una notificación, o el buscador envía este paquete al proveedor con una escritura.

Octeto Tipo de datos Descripción Valor
0: var byte array Datos varía, decodificarlo según 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 de la Tabla 3.1.

Cuando se solicite 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 hará lo siguiente:

  1. Genera 8 bytes criptográficamente aleatorios para nonce.
  2. Encriptar los datos usando 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 en el procedimiento.
    2. clearBlock[i] es un bloque de 16 bytes a partir de 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 mediante

    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 es del paso 4 en el procedimiento.
    2. opad tiene un relleno externo de 64 bytes, que consta de bytes repetidos con valores 0x5C.
    3. El ipad tiene un relleno interno de 64 bytes, que consta de bytes repetidos con valores 0x36.
  5. Toma los primeros 8 bytes del HMAC-SHA256 como prefijo del paquete de datos.

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

  1. Verifica la integridad de los datos mediante la comprobación de los primeros 8 bytes de HMAC-SHA256.
  2. Desencripta los datos encriptados usando AES-CTR, donde cada bloque se genera con el

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

    en el que

    1. encriptarBlock[i] es un bloque de 16 bytes que comienza 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 nomenclatura 1, es de ECDH y no se usará de nuevo para esta vinculación. Se deben rechazar todas las solicitudes encriptadas con esta clave sin reiniciar el procedimiento.
      2. en el flujo de nomenclatura 2, es la clave de la cuenta.
  3. Ejecuta concat(clearBlock[0], clearBlock[1],...) para crear los datos sin procesar.