Airtag Tag
使用单一公钥进行广播
此程序使用了单一公钥广播,但可以使用多个公钥进行广播
每次广播使用不同的公钥,可以减少被跟踪的风险。若某个公钥被追踪或认为不安全,可以轻松切换到另一个公钥,从而增强设备的安全性和隐私性。
以下只是C代码原理实现,具体根据不同蓝牙芯片进行程序编写
源工程链接
#include <stdint.h>
#include <string.h>
#include <ble.h>
#define ADV_INTERVAL 2000000 /* 2 s */
static char public_key[28] = "OFFLINEFINDINGPUBLICKEYHERE!";
static uint8_t addr = { 0xFF, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF };
static uint8_t offline_finding_adv_template[] = {
0x1e, /* Length (30) */
0xff, /* Manufacturer Specific Data (type 0xff) */
0x4c, 0x00, /* Company ID (Apple) */
0x12, 0x19, /* Offline Finding type and length */
0x00, /* State */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, /* First two bits */
0x00, /* Hint (0x00) */
};
void set_addr_from_key() {
addr[0] = public_key[0] | (0xC0);
addr[1] = public_key[1];
addr[2] = public_key[2];
addr[3] = public_key[3];
addr[4] = public_key[4];
addr[5] = public_key[5];
}
void fill_adv_template_from_key() {
memcpy(&offline_finding_adv_template[7], &public_key[6], 22);
offline_finding_adv_template[29] = public_key[0] >> 6;
}
int main(void) {
set_addr_from_key();
fill_adv_template_from_key();
ll_init(&addr);
ll_set_advertising_data(offline_finding_adv_template, sizeof(offline_finding_adv_template));
ll_advertise_start(LL_PDU_ADV_NONCONN_IND, ADV_INTERVAL, LL_ADV_CH_ALL);
evt_loop_run();
return 0;
}
License:
CC BY 4.0