Un BLE Tag solo es de confianza hasta donde puedes probar que es genuino. Si cualquier placa barata responde con la misma MAC y payload, tu sistema de rastreo, acceso o pago colapsa. Este artículo cubre cómo hacer que un BLE Tag resista clonado y spoofing: challenge-response, claves PUF, identidades rotativas y attestation.

Por qué funciona el clonado

Un BLE Tag difunde una identidad. Un imitador que reproduce el mismo advertising o responde una conexión con la misma clave estática es indistinguishable para un lector ingenuo. La defensa es criptográfica: el tag debe probar posesión de un secreto que no puede filtrar.

Challenge-response con ECDH

El lector emite un nonce aleatorio y el BLE Tag debe devolver una firma sobre él:

resp = Sign(sk, nonce || reader_id)

La clave privada sk nunca sale del secure element. Un clon sin sk no puede producir un resp válido y se rechaza. Usa ECDSA P-256 o Ed25519; combínalo con ECDH para que la clave de sesión sea efímera y de secreto hacia adelante.

PUF: una clave que no puedes leer ni copiar

Una función físicamente no clonable deriva una clave única de la variación del silicio. La clave PUF del BLE Tag nunca se guarda en flash, así que volcar el chip no da nada. Cada dispositivo obtiene una clave distinta sin base de datos de enrolamiento que violar.

Identidades rotativas y anti-replay

Los advertising estáticos se graban y reproducen trivialmente. Rota el ID rotativo anunciado en un intervalo corto:

ID_i = Truncate(HMAC(k, T_i), n)

donde T_i es una ventana de tiempo. El lector valida contra la ventana actual y la previa. Un advertising capturado es inútil minutos después. Combínalo con un contador monótono para matar el replay.

Attestation y confianza de flota

Para una flota gestionada, el BLE Tag debe atestiguar su firmware e identidad. Un blob de attestation firmado, verificado contra una raíz grabada en el lector, prueba que la unidad corre firmware íntegro, bloqueando clones y dispositivos root.

Ataques de rango y relé

La cripto no detiene un relé: un atacante extiende el alcance con dos proxies para que el tag «aparezca» junto al lector. Mitiga con distance-bounding (chequeo de tiempo de ida y vuelta) y atando la transacción a una ventana corta de proximidad física.

Checklist práctica

  • Guarda claves en secure element o PUF, nunca en flash plano.
  • Usa challenge-response, nunca secretos compartidos estáticos.
  • Rota IDs anunciados en intervalo corto con contadores anti-replay.
  • Atestigua firmware contra una cadena de confianza enraizada.
  • Agrega distance-bounding donde el relé es amenaza real.

Un BLE Tag bien defendido hace que clonar sea económicamente inútil: el atacante necesita el silicio, no solo los bytes.