Casos de prueba criptográfica

En esta página, se describen las pruebas que un proveedor puede escribir para verificar el estado componentes de la implementación de su proveedor.

Google recomienda implementar estas pruebas con anticipación para facilitar la integración con Vinculación rápida.

Casos de prueba

Estos casos abarcan lo siguiente:

  • Hashing
  • Filtro Bloom
  • Encriptación AES e intercambio de claves públicas
  • Cifrado y descifrado de mensajes

Hash SHA-256

Valor de entrada:

0x11, 0x22, 0x33, 0x44, 0x55, 0x66 

Resultado con codificación hash:

0xBB, 0x00, 0x0D, 0xDD, 0x92, 0xA0, 0xA2, 0xA3, 0x46, 0xF0, 0xB5, 0x31, 0xF2, 0x78, 0xAF, 0x06, 0xE3, 0x70, 0xF8, 0x69, 0x32, 0xCC, 0xAF, 0xCC, 0xC8, 0x92, 0xD6, 0x8D, 0x35, 0x0F, 0x80, 0xF8 

Encriptación AES

Valor de entrada:

0xF3, 0x0F, 0x4E, 0x78, 0x6C, 0x59, 0xA7, 0xBB, 0xF3, 0x87, 0x3B, 0x5A, 0x49, 0xBA, 0x97, 0xEA 

Clave secreta:

0xA0, 0xBA, 0xF0, 0xBB, 0x95, 0x1F, 0xF7, 0xB6, 0xCF, 0x5E, 0x3F, 0x45, 0x61, 0xC3, 0x32, 0x1D 

Salida encriptada:

0xAC, 0x9A, 0x16, 0xF0, 0x95, 0x3A, 0x3F, 0x22, 0x3D, 0xD1, 0x0C, 0xF5, 0x36, 0xE0, 0x9E, 0x9C 

Intercambio de claves ECDH

Clave privada de Roberto:

0x02, 0xB4, 0x37, 0xB0, 0xED, 0xD6, 0xBB, 0xD4, 0x29, 0x06, 0x4A, 0x4E, 0x52, 0x9F, 0xCB, 0xF1, 0xC4, 0x8D, 0x0D, 0x62, 0x49, 0x24, 0xD5, 0x92, 0x27, 0x4B, 0x7E, 0xD8, 0x11, 0x93, 0xD7, 0x63 

Clave pública de Roberto:

0xF7, 0xD4, 0x96, 0xA6, 0x2E, 0xCA, 0x41, 0x63, 0x51, 0x54, 0x0A, 0xA3, 0x43, 0xBC, 0x69, 0x0A, 0x61, 0x09, 0xF5, 0x51, 0x50, 0x06, 0x66, 0xB8, 0x3B, 0x12, 0x51, 0xFB, 0x84, 0xFA, 0x28, 0x60, 0x79, 0x5E, 0xBD, 0x63, 0xD3, 0xB8, 0x83, 0x6F, 0x44, 0xA9, 0xA3, 0xE2, 0x8B, 0xB3, 0x40, 0x17, 0xE0, 0x15, 0xF5, 0x97, 0x93, 0x05, 0xD8, 0x49, 0xFD, 0xF8, 0xDE, 0x10, 0x12, 0x3B, 0x61, 0xD2 

Clave privada de Alice:

0xD7, 0x5E, 0x54, 0xC7, 0x7D, 0x76, 0x24, 0x89, 0xE5, 0x7C, 0xFA, 0x92, 0x37, 0x43, 0xF1, 0x67, 0x77, 0xA4, 0x28, 0x3D, 0x99, 0x80, 0x0B, 0xAC, 0x55, 0x58, 0x48, 0x38, 0x93, 0xE5, 0xB0, 0x6D 

Clave pública de Alice:

0x36, 0xAC, 0x68, 0x2C, 0x50, 0x82, 0x15, 0x66, 0x8F, 0xBE, 0xFE, 0x24, 0x7D, 0x01, 0xD5, 0xEB, 0x96, 0xE6, 0x31, 0x8E, 0x85, 0x5B, 0x2D, 0x64, 0xB5, 0x19, 0x5D, 0x38, 0xEE, 0x7E, 0x37, 0xBE, 0x18, 0x38, 0xC0, 0xB9, 0x48, 0xC3, 0xF7, 0x55, 0x20, 0xE0, 0x7E, 0x70, 0xF0, 0x72, 0x91, 0x41, 0x9A, 0xCE, 0x2D, 0x28, 0x14, 0x3C, 0x5A, 0xDB, 0x2D, 0xBD, 0x98, 0xEE, 0x3C, 0x8E, 0x4F, 0xBF 

Clave compartida generada (ya sea la pública de Alice + la privada de Bob o la de Bob público + privado de Alice):

0x9D, 0xAD, 0xE4, 0xF8, 0x6A, 0xC3, 0x48, 0x8B, 0xBA, 0xC2, 0xAC, 0x34, 0xB5, 0xFE, 0x68, 0xA0, 0xEE, 0x5A, 0x67, 0x06, 0xF5, 0x43, 0xD9, 0x06, 0x1A, 0xD5, 0x78, 0x89, 0x49, 0x8A, 0xE6, 0xBA 

Clave AES del secreto compartido de ECDH

Este es el paso 1b (generación de claves AES) del procedimiento GATT.

Clave compartida ECDH:

0x9D, 0xAD, 0xE4, 0xF8, 0x6A, 0xC3, 0x48, 0x8B, 0xBA, 0xC2, 0xAC, 0x34, 0xB5, 0xFE, 0x68, 0xA0, 0xEE, 0x5A, 0x67, 0x06, 0xF5, 0x43, 0xD9, 0x06, 0x1A, 0xD5, 0x78, 0x89, 0x49, 0x8A, 0xE6, 0xBA 

Clave AES generada:

0xB0, 0x7F, 0x1F, 0x17, 0xC2, 0x36, 0xCB, 0xD3, 0x35, 0x23, 0xC5, 0x15, 0xF3, 0x50, 0xAE, 0x57 

Filtro Bloom

Sal aleatoria:

0xC7C8 

Primera clave de cuenta que se agrega al filtro (combinar con la sal aleatoria anterior):

0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0x00, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF 

Filtro Bloom resultante:

0x02, 0x0C, 0x80, 0x2A 

Datos de la batería (si se incluyen en el anuncio):

0b00110011, // length = 3, show UI indication. 0b01000000, // left bud: not charging, battery level = 64. 0b01000000, // right bud: not charging, battery level = 64. 0b01000000  // case: not charging, battery level = 64. 

Filtro de floración resultante con datos sobre la batería:

0x01, 0x01, 0x46, 0x0A 

Se agregó la segunda clave de cuenta al filtro (combinar con la sal aleatoria anterior):

0x11, 0x11, 0x22, 0x22, 0x33, 0x33, 0x44, 0x44, 0x55, 0x55, 0x66, 0x66, 0x77, 0x77, 0x88, 0x88 

Filtro de floración resultante de ambas claves de cuenta agregadas:

0x84, 0x4A, 0x62, 0x20, 0x8B 

Datos de la batería (si se incluyen en el anuncio):

0b00110011, // length = 3, show UI indication. 0b01000000, // left bud: not charging, battery level = 64. 0b01000000, // right bud: not charging, battery level = 64. 0b01000000  // case: not charging, battery level = 64. 

Filtro de floración resultante de ambas claves de cuenta agregadas con datos de la batería:

0x46, 0x15, 0x24, 0xD0, 0x08 

Encriptación AES-CTR

Datos de entrada: "Auriculares de Google de alguien" con codificación utf-8

0x53, 0x6F, 0x6D, 0x65, 0x6F, 0x6E, 0x65, 0x27, 0x73, 0x20, 0x47, 0x6F, 0x6F, 0x67, 0x6C, 0x65, 0x20, 0x48, 0x65, 0x61, 0x64, 0x70, 0x68, 0x6F, 0x6E, 0x65 

Clave secreta:

0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF 

Nonce:

0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07 

Resultado de encriptación esperado:

0xEE, 0x4A, 0x24, 0x83, 0x73, 0x80, 0x52, 0xE4, 0x4E, 0x9B, 0x2A, 0x14, 0x5E, 0x5D, 0xDF, 0xAA, 0x44, 0xB9, 0xE5, 0x53, 0x6A, 0xF4, 0x38, 0xE1, 0xE5, 0xC6 

HMAC‑SHA256

Datos de entrada:

0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0xEE, 0x4A, 0x24, 0x83, 0x73, 0x80, 0x52, 0xE4, 0x4E, 0x9B, 0x2A, 0x14, 0x5E, 0x5D, 0xDF, 0xAA, 0x44, 0xB9, 0xE5, 0x53, 0x6A, 0xF4, 0x38, 0xE1, 0xE5, 0xC6 

Clave secreta:

0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF 

Resultado de HMAC-SHA256 esperado:

0x55, 0xEC, 0x5E, 0x60, 0x55, 0xAF, 0x6E, 0x92, 0x61, 0x8B, 0x7D, 0x87, 0x10, 0xD4, 0x41, 0x37, 0x09, 0xAB, 0x5D, 0xA2, 0x7C, 0xA2, 0x6A, 0x66, 0xF5, 0x2E, 0x5A, 0xD4, 0xE8, 0x20, 0x90, 0x52 

Codificar el nombre personalizado en el paquete de datos adicional

Datos de entrada: "Auriculares de Google de alguien" con codificación utf-8

0x53, 0x6F, 0x6D, 0x65, 0x6F, 0x6E, 0x65, 0x27, 0x73, 0x20, 0x47, 0x6F, 0x6F, 0x67, 0x6C, 0x65, 0x20, 0x48, 0x65, 0x61, 0x64, 0x70, 0x68, 0x6F, 0x6E, 0x65 

Clave secreta:

0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF 

Nonce:

0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07 

Paquete de datos adicional esperado:

0x55, 0xEC, 0x5E, 0x60, 0x55, 0xAF, 0x6E, 0x92, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0xEE, 0x4A, 0x24, 0x83, 0x73, 0x80, 0x52, 0xE4, 0x4E, 0x9B, 0x2A, 0x14, 0x5E, 0x5D, 0xDF, 0xAA, 0x44, 0xB9, 0xE5, 0x53, 0x6A, 0xF4, 0x38, 0xE1, 0xE5, 0xC6 

Decodifica el paquete de datos adicional para obtener un nombre personalizado

Datos de entrada:

0x55, 0xEC, 0x5E, 0x60, 0x55, 0xAF, 0x6E, 0x92, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0xEE, 0x4A, 0x24, 0x83, 0x73, 0x80, 0x52, 0xE4, 0x4E, 0x9B, 0x2A, 0x14, 0x5E, 0x5D, 0xDF, 0xAA, 0x44, 0xB9, 0xE5, 0x53, 0x6A, 0xF4, 0x38, 0xE1, 0xE5, 0xC6 

Clave secreta:

0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF 

Nombre esperado: "Auriculares de Google de alguien" con codificación utf-8

0x53, 0x6F, 0x6D, 0x65, 0x6F, 0x6E, 0x65, 0x27, 0x73, 0x20, 0x47, 0x6F, 0x6F, 0x67, 0x6C, 0x65, 0x20, 0x48, 0x65, 0x61, 0x64, 0x70, 0x68, 0x6F, 0x6E, 0x65 

Campo de estado de conexión encriptada

Longitud y tipo de campo:

0b001100101 (length = 3, type = connection status field) 

Estado de conexión:

0b10000101:  * on head detection = 1 * connection availability = 0 * focus mode = 0 * auto-reconnected = 0 * connection state = 0x5 (A2DP with AVRCP) 

Datos personalizados:

0x38 

Mapa de bits de dispositivos conectados:

0b00001001 

Datos sin procesar del campo de estado de conexión (combinar más de 4 bytes):

0x35853809 

Clave de cuenta en uso (esta es la clave):

0x04, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0x00, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF 

Clave de cuenta que no está en uso:

0x04, 0x11, 0x22, 0x22, 0x33, 0x33, 0x44, 0x44, 0x55, 0x55, 0x66, 0x66, 0x77, 0x77, 0x88, 0x88 

Sal aleatoria:

0xC7C8 

Filtro de clave de cuenta (este es IV): se genera modificando el primer byte de en uso de 0b00000100 a 0b00000110.

0x8C, 0xA9, 0x0C, 0x08, 0x1C 

Campo de estado de conexión encriptada:

0xF4, 0xBB, 0x40, 0x6F