Características
Servicio de Vinculación rápida
El proveedor de Vinculación rápida tendrá 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 | Encriptada | 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 |
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 | Encriptada | Permisos | UUID |
---|---|---|---|
Revisión de firmware | No | Leer | 0x2A26 |
Característica: ID del modelo
Esta característica permite que Seeker lea el ID de modelo según sea necesario, fuera de cuando el dispositivo publica anuncios en el modo detectable. Siempre debería mostrar los siguientes datos:
Octeto | 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 cuando se verifica que el Seeker y el Provider 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/privada contra la falsificación de identidad y el par de claves pública/privada de Seeker, 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 la falsificación de identidad.
Ten en cuenta que, en el modo de vinculación, el proveedor también puede vincularse de la manera habitual, por ejemplo, para vincularse con un dispositivo que no admita la vinculación basada en claves de 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. (Pero 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 cuando se usa la clave precompartida, se combinan 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 del 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
|
varía | Obligatoria |
Entre 2 y 7 | uint48 |
Puedes elegir una de estas opciones:
|
varía | Obligatoria |
8 - 13 | uint48 |
Dirección en BR/EDR del solicitante | varía | Presente solo si se configura el bit de marcas 1 o 3 |
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 |
Puedes elegir una de estas opciones:
|
varía | Obligatoria |
8 | uint8 |
Grupo de mensajes | varía | Obligatorio si se establece el bit 0 de las marcas |
9 | uint8 |
Código del mensaje | varía | Obligatorio si se establece el bit 0 de las marcas |
10 | uint8 |
Depende de las marcas:
|
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 | 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 |
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 la Tabla 1.4.
Octeto | Tipo de datos | Descripción | Valor |
---|---|---|---|
0 a 15 | uint128 |
Respuesta encriptada | varía |
Tabla 1.4: Respuesta encriptada que envía 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 llaves de acceso encriptadas | varía |
Tabla 2.1: Bloqueo de llaves de acceso encriptadas 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 los siguientes:
|
Entre 1 y 3 | unit32 |
Llave de acceso de 6 dígitos | varía |
4 - 15 | Valor aleatorio (sal) | varía |
Tabla 2.2: Bloqueo de llaves 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 deberá hacer lo siguiente:
- Desencripta la clave de la cuenta con el secreto compartido generado en el paso 4 del procedimiento.
- Para proveedores que requieren vinculación (común):
- Antes de desencriptar, verifica que el secreto compartido se haya usado para desencriptar la solicitud de llave de acceso del paso 12. Si este paso no se pasó con este secreto, ignora esta escritura y sal.
- En este punto, el secreto compartido (K en el procedimiento) no se usará de nuevo para esta vinculación. Se deben rechazar todas las solicitudes que se encripten con esta clave sin reiniciar el procedimiento.
- Para proveedores que requieren vinculación (común):
- Verifica que el valor desencriptado comience con
0x04
. De lo contrario, ignora esta escritura y sal. - Verifica si la lista de claves de cuenta guardada tiene espacio para el valor nuevo.
- De lo contrario, borra de la lista el valor que se usó más recientemente.
- 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 Seeker lea la revisión del firmware del proveedor 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 un firmware (p. ej., 3 firmwares para el auricular izquierdo, el derecho y la funda) en el proveedor. El proveedor también puede mostrar las cadenas específicas en casos especiales:
status-upgrade: Si el proveedor se encuentra actualizando a un firmware nuevo. Como alternativa, el proveedor puede mostrar la versión del firmware almacenado en etapa intermedia.
status-abnormal: Si el proveedor se encuentra en un estado anormal. Por ejemplo, no funcionó porque la actualización del firmware falló. Este valor hará que el Seeker muestre un mensaje para informar al usuario que debe actualizarse ahora.
El proveedor debe limitar el acceso a la característica de revisión de firmware para evitar el seguimiento de dispositivos. Restricciones sugeridas:
- los dispositivos vinculados deben tener acceso en todo momento
- cualquier dispositivo debe 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 | Encriptada | 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) | Encriptada | Permisos | UUID |
---|---|---|---|
Datos | No | Escribir y notificar | 0x1237 |
Antes de escribir o notificar sobre 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á la 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 en los datos que se extienden más allá de un único 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 - 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 proveedor a través de una notificación o que el buscador envía 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:
|
Tabla 3.2: Datos sin procesar. Desencriptado de los datos encriptados en la Tabla 3.1.
Cuando se solicite una notificación (p.ej., solicitar un nombre personalizado a través del Bit 2 en la Tabla 1.2.1), el proveedor de Vinculación rápida deberá hacer lo siguiente:
- Genera 8 bytes de forma criptográfica aleatoria para Nonce.
Los datos se encriptan 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
- La clave AES es el secreto compartido del paso 4 del procedimiento.
- clearBlock[i] es un bloque de 16 bytes a partir de data[i * 16]. El último bloque puede tener menos de 16 bytes.
Realiza concat(encryptedBlock[0], encryptedBlock[1],...) para crear los datos encriptados.
Genera HMAC-SHA256
sha256(concat((K ^ opad), sha256(concat((K ^ ipad), concat(nonce, encrypted_data)))))
en el que
- K se genera con concat(shared_secret, 48-byte ZEROs); elshared_secret es del paso 4 en el procedimiento.
- opad tiene un padding externo de 64 bytes, que consta de bytes repetidos con valor
0x5C
. - El ipad tiene un padding interno de 64 bytes, que consta de bytes repetidos con valor
0x36
.
Toma los primeros 8 bytes de HMAC-SHA256 como prefijo del paquete de datos.
Cuando se reciba una solicitud de escritura, el proveedor de Vinculación rápida deberá hacer lo siguiente:
- Para verificar la integridad de los datos, comprueba los primeros 8 bytes de HMAC-SHA256.
Desencripta los datos encriptados con AES-CTR, donde cada bloque se genera usando
clearBlock[i] = encryptedBlock[i] ^ AES(key, concat((uint8) i, 0x00000000000000, nonce))
en el que
- encryptionBlock[i] es un bloque de 16 bytes a partir de encryption_data[i * 16]. El último bloque puede tener menos de 16 bytes.
- La clave AES se genera o se identifica a partir del protocolo de enlace, p.ej.,
- en el flujo de nomenclatura 1, es de ECDH y no se volverá a usar para esta vinculación. Se deben rechazar todas las solicitudes que se encripten con esa clave sin reiniciar el procedimiento.
- en el flujo de nomenclatura 2, es la clave de la cuenta.
Realiza concat(clearBlock[0], clearBlock[1],...) para crear los datos sin procesar.