avatar

松果工作室

欢迎光临

  • 首页
  • freeRTOS
  • ESP
  • 开发手册
  • 快速笔记
  • 个人收藏
  • 工具
Home Airtag Tag
文章

Airtag Tag

Posted 2024-07-16 Updated 2024-07- 26
By YCP
10~13 min read

使用单一公钥进行广播

此程序使用了单一公钥广播,但可以使用多个公钥进行广播
每次广播使用不同的公钥,可以减少被跟踪的风险。若某个公钥被追踪或认为不安全,可以轻松切换到另一个公钥,从而增强设备的安全性和隐私性。
以下只是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;
}
WCH
License:  CC BY 4.0
Share

Further Reading

OLDER

LVGL UI 代码格式

NEWER

CH573(四) TMOS

Recently Updated

  • ESP32(八) 简单的webserver
  • ESP32(七) NVS
  • ESP32(四) STA & AP
  • 多级菜单
  • ESP32(五) ESP32 OTA

Trending Tags

WCH Linux Elec freeRTOS STM ESP Flutter Others SwiftUI

Contents

©2025 松果工作室. Some rights reserved.

Using the Halo theme Chirpy