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
|
varía | Obligatorio |
Entre 2 y 7 | uint48 |
Puedes elegir una de las siguientes opciones:
|
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:
|
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:
|
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:
|
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:
- 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.
- Para proveedores que requieren unión (común):
- Verifica que el valor desencriptado comience con
0x04
. De lo contrario, ignora escribir y salir. - Verifica si la lista de claves de cuenta persistente tiene espacio para la nueva valor.
- De lo contrario, borra de la lista el valor que se usó menos 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 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:
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.
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:
|
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:
- Genera 8 bytes criptográficos aleatorios para nonce.
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
- 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 puede ser inferior a 16 bytes.
Realiza concat(encryptedBlock[0], encryptedBlock[1],...) para crear el Datos encriptados.
Genera HMAC-SHA256 mediante
sha256(concat((K ^ opad), sha256(concat((K ^ ipad), concat(nonce, encrypted_data)))))
en el que
- K es generado por concat(shared_secret, ZERO de 48 bytes), el shared_secret es del paso 4 del procedimiento.
- El opad es un padding externo de 64 bytes, que consiste en bytes repetidos de
0x5C
- El iPad tiene un padding interno de 64 bytes, que consiste en bytes repetidos de
0x36
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:
- Verificar la integridad de los datos; para ello, comprueba los primeros 8 bytes de HMAC-SHA256
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
- 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.
- La clave AES se genera o identifica a partir del protocolo de enlace, p.ej.,
- 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.
- en el flujo de nombres 2, es la clave de la cuenta.
Realiza concat(clearBlock[0], clearBlock[1],...) para crear los datos sin procesar.