蓝牙配对安全指南:从Legacy Pairing到Secure Simple Pairing(SSP)的演进与配置

Kali Linux蓝牙安全实战:从环境搭建到Crackle破解蓝牙配对漏洞 无线通信安全是网络安全领域的重要分支,其核心在于保障数据传输的机密性与完整性。蓝牙作为与Wi-Fi并驾齐驱的主流短距离无线协议,广泛应用于各类物联网与移动设备中。其安全机制依赖于配对过程中的密钥协商,若协议实现存在缺陷或配置不当,可能导致通信被窃听或劫持。从工程实践角度看,对蓝牙协议栈进行安全测试能有效评估智能设备的风险面,提升整体安防水平。本文聚焦于使用Kali Linux这一渗透测试平台,系统介绍如何配置专业的蓝牙监控环境,并重点演示如何利用Crackle工具对蓝牙传统配对过程中的安全漏洞进行实战分析与 阅读详情

蓝牙安全配对实战:从Legacy到SSP的协议演进与HCI日志深度解析

在物联网设备开发中,蓝牙配对不仅是连接建立的第一步,更是整个系统安全性的基石。许多开发者都曾遇到过这样的场景:设备在实验室测试时配对一切正常,但一到实际部署环境,连接就变得不稳定甚至频繁失败。当你打开HCI日志,面对密密麻麻的十六进制数据流,如何快速定位问题所在?是PIN码输入错误,还是SSP协商失败?是加密模式配置不当,还是协议版本不兼容?

这篇文章将带你深入蓝牙配对的安全演进历程,从传统的Legacy Pairing到现代的Secure Simple Pairing(SSP),通过真实的HCI日志案例,解析Authentication、Pairing、Encryption三个关键阶段在协议层面的具体表现。无论你是正在开发智能家居设备、可穿戴产品,还是工业物联网终端,掌握这些核心知识都能让你在调试配对问题时游刃有余,确保设备在实际部署中的可靠性与安全性。

1. 蓝牙配对安全演进:从Legacy到SSP的技术变迁

蓝牙配对机制的发展,本质上是一场安全性与用户体验的持续博弈。早期的蓝牙设备采用Legacy Pairing(传统配对),这种方式基于固定的PIN码,虽然实现简单,但存在明显安全短板。当蓝牙2.1+EDR规范引入**Secure Simple Pairing(SSP)**后,配对过程在安全性和便利性上都实现了质的飞跃。

1.1 Legacy Pairing:简单但脆弱的基础方案

Legacy Pairing的核心是共享密钥模型。两个设备通过交换一个预先设定的PIN码(通常是4-6位数字)来建立初始信任关系。这个过程在协议层面体现为以下几个关键步骤:

  1. 初始化密钥(Kinit)生成:基于PIN码、随机数(IN_RAND)和响应者的蓝牙地址(BD_ADDR)计算得出
  2. 链路密钥(Link Key)协商:双方交换LMP_COMB_KEY PDU,其中包含用Kinit异或加密的随机数
  3. 双向认证:使用新生成的链路密钥进行相互验证,确保两端拥有相同的密钥

在HCI日志中,Legacy Pairing的典型特征非常明显:

# 典型的Legacy Pairing HCI事件流
HCI_Authentication_Requested
HCI_Link_Key_Request
HCI_Link_Key_Request_Reply  # Host回复存储的Link Key
HCI_Authentication_Complete  # 认证完成

注意:如果Host没有存储对应的Link Key,则会回复HCI_Link_Key_Request_Negative_Reply,触发完整的Pairing流程而非直接认证。

Legacy Pairing的主要安全风险在于PIN码的脆弱性。许多设备使用默认的"0000"或"1234"作为PIN码,攻击者可以轻易尝试常见组合。此外,PIN码在传输过程中也可能被窃听,特别是当用户需要手动输入时。

1.2 Secure Simple Pairing(SSP):现代蓝牙的安全基石

SSP在蓝牙2.1规范中引入,彻底改变了配对的安全模型。它不再依赖用户记忆和输入PIN码,而是通过密码学协议确保配对过程的安全。SSP支持四种关联模型(Association Models),适应不同设备的IO能力:

关联模型适用场景安全特性
数值比较(Numeric Comparison)双方都有显示屏用户确认屏幕上显示的6位数字是否一致
密码输入(Passkey Entry)一方有键盘,另一方有显示屏用户在一端输入另一端显示的6位数字
带外通信(Out of Band)支持NFC等近场通信通过安全信道交换配对信息
Just Works至少一方无输入输出能力便捷但安全性较低,易受中间人攻击

SSP的安全核心基于椭圆曲线密码学(ECC)。在蓝牙4.2之前使用P-192曲线,蓝牙4.2及之后支持P-256曲线,提供更强的安全保证。整个SSP过程分为四个明确的LMP阶段,每个阶段在HCI和AIR日志中都有独特的特征。

2. HCI日志中的配对流程:从命令到事件的完整映射

HCI(Host Controller Interface)日志是调试蓝牙连接问题的宝贵工具。它记录了Host与Controller之间的所有交互,包括命令、事件和数据传输。理解HCI日志中的配对相关事件,是快速定位问题的关键。

2.1 配对触发的HCI命令序列

当两个蓝牙设备尝试建立安全连接时,Host会通过一系列HCI命令启动配对流程。以下是典型的命令序列:

# 连接建立后的安全初始化
HCI_Authentication_Requested (Connection_Handle=0x000C)
  Status: Success (0x00)
  
# Controller询问Host是否有存储的Link Key
HCI_Link_Key_Request (BD_ADDR=00:1A:7D:DA:71:13)
  Status: Success (0x00)
  
# Host回复无Link Key(触发SSP)
HCI_Link_Key_Request_Negative_Reply (BD_ADDR=00:1A:7D:DA:71:13)
  Status: Success (0x00)

在这个序列中,HCI_Link_Key_Request_Negative_Reply是关键转折点。如果Host回复HCI_Link_Key_Request_Reply并提供有效的Link Key,则会直接进入认证阶段,跳过配对流程。只有当Host没有对应Link Key时,才会触发完整的SSP过程。

2.2 SSP四个阶段的HCI事件特征

SSP在协议层分为四个阶段,每个阶段对应特定的LMP PDU交换,并在HCI层面有相应的事件反映:

阶段1:IO能力交换

# LMP层交换IO能力
LMP_features_req (Features: SSP=1, SC=1)
LMP_features_res (Features: SSP=1, SC=0)

# HCI层面可能看到Simple Pairing相关事件
HCI_IO_Capability_Request (BD_ADDR=00:1A:7D:DA:71:13)
HCI_IO_Capability_Response (IO_Capability=DisplayYesNo, OOB_Data=0x00)

阶段2:公钥交换 这个阶段在LMP层通过LMP_ENCAPSULATED_HEADER和LMP_ENCAPSULATED_PAYLOAD PDU完成,因为公钥长度超过单个DM1数据包的有效载荷。在HCI日志中,你可能看到大量的ACL数据包传输,但具体内容需要解析LMP层数据。

阶段3和4:认证阶段

# 认证阶段完成事件
HCI_Simple_Pairing_Complete (BD_ADDR=00:1A:7D:DA:71:13, Status=0x00)

# 新Link Key生成通知
HCI_Link_Key_Notification (BD_ADDR=00:1A:7D:DA:71:13, Link_Key=...)

提示:在分析HCI日志时,重点关注HCI_Simple_Pairing_Complete事件的Status字段。0x00表示成功,其他值表示各种错误原因,如认证失败、用户取消等。

2.3 认证与加密的HCI事件流

配对完成后,设备会使用新生成的Link Key进行相互认证,然后启用加密:

# 相互认证
HCI_Authentication_Complete (Connection_Handle=0x000C, Status=0x00)

# 设置加密模式
HCI_Set_Connection_Encryption (Connection_Handle=0x000C, Encryption_Enable=0x01)
HCI_Encryption_Change (Connection_Handle=0x000C, Encryption_Enabled=0x01)

# 加密密钥刷新(如使用临时密钥)
HCI_Encryption_Key_Refresh_Complete (Connection_Handle=0x000C, Status=0x00)

在实际调试中,我经常遇到加密启用失败的情况。最常见的原因是两端设备的加密能力不匹配,或者Secure Connections(SC)支持状态不一致。这时需要检查双方的LMP特性位:

# 读取远端设备支持的LMP特性
HCI_Read_Remote_Supported_Features (Connection_Handle=0x000C)
HCI_Read_Remote_Supported_Features_Complete 
  LMP_Features: 0x876BFFD7FE8FFE9B
  # 解析关键位:
  # Bit 20: Secure Connections (Host Support) = 1
  # Bit 21: Secure Connections (Controller Support) = 1
  # Bit 29: Encryption Pause and Resume = 1

3. AIR日志解析:LMP层的配对协议细节

虽然HCI日志提供了Host与Controller的交互视图,但要深入理解配对协议的具体执行过程,还需要分析AIR(空口)日志。AIR日志捕获了设备之间实际交换的LMP PDU,揭示了配对协议的内部工作机制。

3.1 Legacy Pairing的LMP PDU序列

在Legacy Pairing中,LMP层的PDU交换遵循严格的顺序:

Initiator                            Responder
    |                                    |
    |--- LMP_IN_RAND ------------------->|
    |                                    |
    |<-- LMP_ACCEPTED -------------------|
    |   (或 LMP_IN_RAND 如果使用固定PIN)  |
    |                                    |
    |--- LMP_COMB_KEY ------------------>|
    |                                    |
    |<-- LMP_COMB_KEY -------------------|
    |                                    |
    |--- LMP_AU_RAND ------------------->|
    |                                    |
    |<-- LMP_SRES -----------------------|
    |                                    |
    |--- LMP_SRES ---------------------->|

每个PDU都包含关键的安全参数:

  • LMP_IN_RAND:16字节随机数,用于Kinit计算
  • LMP_COMB_KEY:16字节数据,包含LK_RAND ⊕ Kinit
  • LMP_AU_RAND:认证随机数挑战
  • LMP_SRES:认证响应(SRES)

在实际抓取的AIR日志中,这些PDU可以通过Opcode字段识别:

# LMP PDU Opcode定义(部分)
LMP_IN_RAND        = 0x0B
LMP_COMB_KEY       = 0x0C
LMP_AU_RAND        = 0x0D
LMP_SRES           = 0x0E
LMP_ACCEPTED       = 0x03
LMP_NOT_ACCEPTED   = 0x04

3.2 SSP的LMP PDU序列与安全分析

SSP的LMP交换更加复杂,涉及椭圆曲线密码学操作。以下是典型的SSP LMP序列:

Initiator                            Responder
    |                                    |
    |--- LMP_IO_CAPABILITY_REQ --------->|
    |                                    |
    |<-- LMP_IO_CAPABILITY_RES ----------|
    |                                    |
    |--- LMP_ENCAPSULATED_HEADER ------->|
    |--- LMP_ENCAPSULATED_PAYLOAD ------>| (公钥数据)
    |                                    |
    |<-- LMP_ENCAPSULATED_HEADER --------|
    |<-- LMP_ENCAPSULATED_PAYLOAD -------| (公钥数据)
    |                                    |
    |--- LMP_SIMPLE_PAIRING_CONFIRM ---->|
    |                                    |
    |<-- LMP_SIMPLE_PAIRING_NUMBER ------|
    |                                    |
    |--- LMP_ACCEPTED ------------------>|
    |                                    |
    |<-- LMP_SIMPLE_PAIRING_CONFIRM -----|
    |                                    |
    |--- LMP_SIMPLE_PAIRING_NUMBER ----->|
    |                                    |
    |<-- LMP_ACCEPTED -------------------|
    |                                    |
    |--- LMP_DHKEY_CHECK --------------->|
    |                                    |
    |<-- LMP_ACCEPTED -------------------|
    |                                    |
    |<-- LMP_DHKEY_CHECK ----------------|
    |                                    |
    |--- LMP_ACCEPTED ------------------>|

关键安全参数解析:

  1. 公钥交换:使用LMP_ENCAPSULATED_* PDU传输ECC公钥。对于不支持Secure Connections的设备,使用P-192曲线;双方都支持SC时,使用更安全的P-256曲线。

  2. 认证阶段:根据IO能力选择合适的关联模型。数值比较模式中,双方计算并显示6位数字供用户确认;密码输入模式中,一端显示6位数字,另一端输入。

  3. DHKey验证:LMP_DHKEY_CHECK PDU包含基于Diffie-Hellman密钥和交换信息计算的确认值,用于防止中间人攻击。

3.3 常见配对失败场景的AIR日志特征

在实际开发中,配对失败的原因多种多样。通过AIR日志的特征模式,可以快速定位问题:

场景1:IO能力不匹配

LMP_IO_CAPABILITY_REQ (IO_Cap=DisplayOnly, OOB=0, AuthReq=MITM)
LMP_IO_CAPABILITY_RES (IO_Cap=NoInputNoOutput, OOB=0, AuthReq=NoBonding)
LMP_NOT_ACCEPTED (Error: Pairing Not Supported)

这种情况发生在设备IO能力无法支持任何SSP关联模型时,通常会回退到Just Works模式或直接失败。

场景2:用户取消配对

LMP_SIMPLE_PAIRING_CONFIRM
LMP_NOT_ACCEPTED (Error: User Confirmation Failed)

在数值比较或密码输入模式中,用户可以选择取消配对,这时会收到明确的错误码。

场景3:安全连接协商失败

LMP_features_req (SC=1)  # 发起方支持Secure Connections
LMP_features_res (SC=0)  # 响应方不支持Secure Connections
# 后续使用P-192曲线而非P-256

虽然配对可能成功,但安全强度降低。在要求高安全性的应用中,这可能需要特别处理。

4. 加密配置与HCI命令实战

配对和认证完成后,下一步就是启用链路加密。蓝牙支持两种加密机制:传统的E0加密和更现代的AES-CCM加密。选择哪种机制取决于设备的能力和安全需求。

4.1 加密模式配置命令

加密配置通过HCI命令完成,主要涉及以下几个关键命令:

# 1. 设置加密模式
HCI_Set_Connection_Encryption (Connection_Handle=0x000C, Encryption_Enable=0x01)
  Status: Success (0x00)
  
# 2. 加密状态变化事件
HCI_Encryption_Change (Connection_Handle=0x000C, Encryption_Enabled=0x01)
  Status: Success (0x00)
  
# 3. 使用临时链路密钥时的密钥刷新
HCI_Encryption_Key_Refresh_Complete (Connection_Handle=0x000C, Status=0x00)

在LMP层,加密协商通过以下PDU完成:

LMP_ENCRYPTION_MODE_REQ (Encryption_Mode=1, Encryption_Key_Size=16)
LMP_ACCEPTED
LMP_START_ENCRYPTION_REQ
LMP_ACCEPTED

重要:如果双方设备都支持Secure Connections(SC),则必须使用AES-CCM加密。如果一端收到Encryption_Mode=0(禁用加密)的请求,应回复错误码0x25(加密模式不允许)。

4.2 加密参数配置详解

加密配置涉及多个参数,每个参数都影响最终的安全性和性能:

参数取值范围说明配置命令
加密模式0-20=禁用,1=启用,2=仅点对点HCI_Set_Connection_Encryption
密钥长度1-16字节AES-CCM建议16字节LMP_ENCRYPTION_MODE_REQ
加密暂停0/1是否支持加密暂停恢复LMP特性位Bit 29
安全连接0/1是否使用AES-CCMLMP特性位Bit 20-21

在实际配置中,我通常使用以下代码片段检查设备能力并配置加密:

// 检查远端设备是否支持Secure Connections
uint64_t remote_features = read_remote_supported_features(conn_handle);
bool supports_sc = (remote_features & (1ULL << 20)) && 
                   (remote_features & (1ULL << 21));

// 根据支持情况选择加密参数
if (supports_sc) {
    // 使用AES-CCM加密,密钥长度16字节
    set_encryption_params(conn_handle, ENCRYPTION_AES_CCM, 16);
} else {
    // 回退到E0加密
    set_encryption_params(conn_handle, ENCRYPTION_E0, 16);
}

// 启用加密
hci_set_connection_encryption(conn_handle, 1);

4.3 加密故障排查实战案例

让我分享一个实际项目中遇到的加密问题。设备在配对成功后,加密始终无法启用。查看HCI日志发现:

HCI_Set_Connection_Encryption (Connection_Handle=0x000C, Encryption_Enable=0x01)
HCI_Command_Status (Status=0x0C)  # Command Disallowed

错误码0x0C表示命令不允许。进一步分析发现,问题出在角色切换上。设备在连接建立后发生了角色切换(从Central变为Peripheral),但在某些蓝牙栈实现中,Peripheral角色不能主动启用加密。

解决方案是在发送加密命令前检查当前角色:

// 获取当前连接角色
uint8_t role = get_connection_role(conn_handle);

if (role == ROLE_PERIPHERAL) {
    // Peripheral等待Central启用加密
    wait_for_encryption_change();
} else {
    // Central主动启用加密
    hci_set_connection_encryption(conn_handle, 1);
}

另一个常见问题是加密密钥长度协商失败。当两端设备支持的最大密钥长度不一致时,加密可能无法启用。这时需要检查双方的LMP特性:

# 读取远端扩展特性
HCI_Read_Remote_Extended_Features (Connection_Handle=0x000C, Page_Number=1)
HCI_Read_Remote_Extended_Features_Complete
  Extended_LMP_Features: 0x0000000000000000
  # Bit 5: 16-bit Encryption Key Size Supported = 0
  # 表示不支持16字节密钥

在这种情况下,可能需要协商更短的密钥长度,或者考虑这种安全限制是否可接受。

5. 蓝牙5.2安全增强与未来趋势

蓝牙5.2规范在安全方面引入了多项重要改进,特别是LE Audio的LC3编解码器和增强属性协议(EATT)。虽然这些特性主要针对低功耗蓝牙,但也影响了经典蓝牙的安全生态。

5.1 安全连接增强特性

蓝牙5.2对Secure Connections进行了进一步强化:

  1. HCI安全命令扩展:新增了管理长期密钥(LTK)和身份解析密钥(IRK)的命令,支持更复杂的密钥管理场景。

  2. 加密暂停改进:优化了加密暂停和恢复机制,减少了对实时音频流的影响。

  3. 连接参数安全:增加了对连接参数更新过程的安全保护,防止参数操纵攻击。

在HCI日志中,这些新特性体现为新增的命令和事件:

# 蓝牙5.2新增的安全相关命令
HCI_LE_Read_Local_P256_Public_Key
HCI_LE_Generate_DHKey
HCI_LE_Add_Device_To_Resolving_List

# 对应的完成事件
HCI_LE_Read_Local_P256_Public_Key_Complete
HCI_LE_Generate_DHKey_Complete
HCI_LE_Add_Device_To_Resolving_List_Complete

5.2 实际开发中的安全最佳实践

基于多年的蓝牙开发经验,我总结了以下安全最佳实践:

1. 始终优先使用SSP而非Legacy Pairing 除非兼容性要求,否则应在设备固件中禁用Legacy Pairing。这可以通过设置Simple Pairing Mode实现:

// 启用Secure Simple Pairing
hci_write_simple_pairing_mode(0x01);  // Enable SSP

2. 合理选择关联模型 根据设备实际IO能力选择最安全的关联模型:

// 设置IO能力
io_capability_t get_io_capability(void) {
    if (has_display() && has_keyboard()) {
        return IO_CAP_KEYBOARD_DISPLAY;  // 支持密码输入
    } else if (has_display()) {
        return IO_CAP_DISPLAY_ONLY;       // 支持数值比较
    } else if (has_keyboard()) {
        return IO_CAP_KEYBOARD_ONLY;      // 支持密码输入
    } else {
        return IO_CAP_NO_INPUT_NO_OUTPUT; // Just Works
    }
}

3. 强制使用Secure Connections 当双方设备都支持SC时,强制使用AES-CCM加密和P-256曲线:

bool require_secure_connections(connection_t *conn) {
    // 检查本地支持
    if (!local_supports_sc()) {
        return false;
    }
    
    // 检查远端支持
    uint64_t remote_features = get_remote_features(conn->handle);
    bool remote_sc = (remote_features & SC_HOST_SUPPORT) &&
                     (remote_features & SC_CONTROLLER_SUPPORT);
    
    if (!remote_sc) {
        // 记录安全警告
        log_warning("Remote device does not support Secure Connections");
        return false;
    }
    
    return true;
}

4. 实施定期密钥更新 对于长期连接,实施定期密钥更新以降低密钥泄露风险:

void schedule_key_refresh(connection_t *conn) {
    // 每24小时刷新一次加密密钥
    timer_set(&conn->key_refresh_timer, 24 * 60 * 60 * 1000);
    
    // 定时器回调函数
    conn->key_refresh_cb = refresh_encryption_key;
}

void refresh_encryption_key(connection_t *conn) {
    // 暂停加密
    hci_set_connection_encryption(conn->handle, 0);
    
    // 生成新密钥(实际实现更复杂)
    generate_new_link_key(conn);
    
    // 恢复加密
    hci_set_connection_encryption(conn->handle, 1);
    
    // 重新调度
    schedule_key_refresh(conn);
}

5.3 调试技巧与工具推荐

在调试蓝牙配对问题时,有几个工具和技巧特别有用:

1. 分层日志分析 同时捕获HCI日志和AIR日志,对照分析。Wireshark的蓝牙解析插件在这方面表现出色,能自动解析各层协议。

2. 错误码速查表 准备一份蓝牙规范中的错误码速查表。常见错误如:

  • 0x05: Authentication Failure
  • 0x0C: Command Disallowed
  • 0x25: Encryption Mode Not Acceptable
  • 0x29: Instant Passed

3. 测试用例设计 设计覆盖各种配对场景的测试用例:

  • 正常SSP配对(数值比较、密码输入)
  • Legacy Pairing回退
  • 加密协商失败
  • 角色切换后的安全重协商
  • 跨版本兼容性测试(蓝牙4.2设备与5.2设备配对)

4. 实时监控工具 使用btmon(Linux BlueZ)或类似工具实时监控HCI流量,配合脚本自动检测异常模式。

蓝牙配对安全是一个深度话题,涉及密码学、协议设计和实际工程实现的多个层面。从Legacy Pairing到SSP的演进,反映了蓝牙社区对安全性和用户体验的不懈追求。在实际开发中,理解协议细节固然重要,但更重要的是建立系统的安全思维——从威胁建模到防御实现,从协议合规到实际部署,每个环节都需要精心设计。

我见过太多项目在安全方面走捷径,最后在量产阶段遇到难以修复的漏洞。蓝牙配对作为设备安全的第一道防线,值得投入时间深入研究。当你下次面对配对失败的问题时,不要只停留在现象表面,深入HCI和AIR日志,理解每一字节的含义,你会发现蓝牙协议设计者的智慧,也能为自己的产品构建更坚固的安全基础。

ThinkBook蓝牙PIN码配对失败?从原理到驱动避坑全解析 蓝牙配对是设备互连的基础,PIN码验证则是早期蓝牙安全机制的产物。随着Secure Simple Pairing(SSP)普及,现代耳机、鼠标应自动完成配对,但当系统驱动异常时,Windows可能回退到传统PIN码输入界面,导致ThinkBook等设备出现PIN码灰色不可用、配对失败等问题。理解蓝牙配对原理,有助于快速定位问题根源。在实际应用中,无论是连接蓝牙耳机还是无线鼠标,驱动状态、系统服务和快速启动设置都直接影响配对成功率。针对联想ThinkBook的蓝牙故障,从原理到驱动提供完整的排查思路,帮助用户 阅读详情

相关推荐

Win10与Linux双系统蓝牙反复失效?根因分析与三种解决方案

蓝牙作为最常用的短距无线通信技术,支撑着鼠标、键盘、耳机等外设的日常使用。但在Windows与Linux双系统环境中,蓝牙设备连接不稳定、频繁掉线甚至无法配对,是许多用户都遭遇过的经典难题。其根源并不在于驱动,而是两套操作系统各自维护独立的配对数据库——Windows存储于注册表,Linux基于BlueZ协议栈存放于/var/lib/bluetooth。由于外设端仅保留有限的Link Key配对记录,系统切换后密钥不一致,连接请求就会被拒绝。理解BD_ADDR与Link Key的校验原理,是解决冲突的技术前

weixin_33423874的博客 317

蓝牙之SSP过程分析

蓝牙之SSP过程分析 | DD'Notes[TOC] 背景 Kernel: v5.4.18 Bluetooth:v5.2 Bluez: v5.53 相关概念SSP:Secure Simple PairingOOB: Out of Band Host A: 手机Host B: PC 手机主动连接PC(Linux)的蓝牙,配对走的是SSP,IO Capability Exchange为DisplayYesNo,使用的是Numeric Comhttps://notes.z-dd.net/2021/09/08/%E

DD'Notes 2169

【MSC】规范精讲[4]: 验明正身再开工——配对鉴权加密十一连招全拆解(附双机真实日志对照)

本文详解蓝牙安全连接配对(SSP)的十一招流程,以“商务拜访”类比:鉴权如核对身份,配对如现场制证,加密如锁闭会议室。核心在于通过椭圆曲线密钥交换、用户参与认证(数字比较、密码输入、带外校验)与双向验证,实现安全密钥生成。不同设备能力决定认证方式——有屏设备可数字比对,无屏则退化为静默的JustWorks,牺牲安全性换取体验。工程上巧妙将耗时的密钥计算藏于用户等待中,提升感知效率。真实抓包印证了从密钥协商到加密放行的完整闭环,揭示协议设计的精妙逻辑。

byte轻骑兵的技术小窝 9373

BLE蓝牙安全机制

蓝牙配对是建立安全连接的关键过程。对于传统蓝牙应采用SSP配对方式,而低功耗蓝牙4.0和4.1的版本应使用legacy pairing配对方式,4.2以后的版本应采用Secure connection的配对方式。传统的蓝牙采用的配对方式如下:蓝牙2.1版本之前使用的Legacy pairing。该配对方式蓝牙双方采用输入固定pin Code来实现身份的认证,该方式目前已经不在使用。蓝牙2.1版本提出了简单安全配对(Secure simple pairing)的方式。

weixin_43586667的博客 3790

经典蓝牙(Bluetooth Classic / BR/EDR)-安全机制

SSP 解决的是"窃听者拿不到密钥",SC 在此之上额外解决"密钥不可降级、算法可合规审计、加密自带完整性"。对需要过 FIPS / 政府合规认证的产品,SC 不是可选项而是硬门槛。

qq_58662768的博客 352

经典蓝牙(Bluetooth Classic / BR/EDR)学习计划

博主为自己设定了一份经典蓝牙学习计划,希望快速学习完成,对经典蓝牙有更深度的认知。目前博主只计划使用安卓、Windows。前面的学习的差不多了,到这里检点经验包。

qq_58662768的博客 392

蓝牙 SPP 协议详解及 Android 实现

蓝牙 SPP(Serial Port Profile,串口通信协议)是一种经典蓝牙协议,它允许设备之间通过模拟串口的方式进行无线数据传输。基于 RFCOMM 通信层,SPP 协议与传统的 RS-232 串口标准类似,因此非常适合低速、短距离的数据传输,如 Android 设备和传感器、微控制器之间的通信。本文将详细介绍蓝牙 SPP 协议的原理、工作流程,并结合 Android 实现,展示如何在移动设备中应用该协议。SPP 是一种点对点的蓝牙通信协议,适合小数据量的双向传输。

weixin_44780781的博客 7257

蓝牙串口 十六进制 BluetoothSSP安卓demo

蓝牙串口 十六进制 BluetoothSSP 安卓

蓝牙配对协议分析二

蓝牙配对协议分析二 本篇接着《蓝牙配对协议分析一》来继续分析下SSP安全简单配对的完整流程。 SSP流程总体上的消息序列图如下: 从上图可以明显看出整个过程大概分为11个步骤,有些步骤存在不同的可选项,接下来依次讲解下每个步骤的流程。 Step 1: Optional OOB Information Collection 可选步骤,OOB信息收集。如果蓝牙设备支持OOB信息交换,则协议栈Host应该从蓝牙控制器Controller获取到OOB信息的C和R值,并将此信息传输到OOB系统。 获取信息的流程图

坏小子-无线通信技术 3747

Cadence 设计实践笔记-小哥allegro 2层板笔记

规范建立文件夹本章节主要跟着B站PCB入门首选视频-小哥Cadence Allegro 2层板视频,结合自己的实践一步步完成一个完整的PCB板的设计。规范建立文件夹建立八个文件夹我使用的Cadence 17.4 有些差异原理图绘制原图绘制首先要熟悉原理图工作原理工作原理下面是这个项目的原理图重点关注电源新建原理图库打开Cadence 软件创建项目新建工程 File ==========》Project我这里选择了Enable PSPice 试试能不能仿真,新建项目如下。

我的专栏 1481

Chromatix_AEC—深入解析曝光表配置与传感器参数计算

本文深入解析高通Chromatix AEC模块中的曝光表配置与传感器参数计算,详细介绍了自动曝光控制(AEC)的核心概念、首行曝光时间计算、行时间与曝光模式对比、帧率计算逻辑以及曝光表高级配置技巧。通过实战案例展示如何优化传感器参数联调,帮助开发者掌握Chromatix工具在摄像头系统中的关键应用。

266

蓝牙BLE安全-SSP简单安全配对

在这种模型中,只有显示屏的设备显示一个6位数的数字,然后用户在具有输入能力的设备上输入该数字。设备验证阶段如下图所示,注意与LSC不一样的地方在于,SSP的设备双方都是申验者和验证者,即通信的设备既会验证对方的Link Key,也会被对方验证本方的Link Key,只要有一方验证失败,则这整个阶段都验证失败。接下来的加密密钥的生成以及加密算法如下图所示,可以看到其大致与LSC一致,不过采用的算法完全不一样,这里采用h3来生成加密密钥,使用AES-CCM来加密数据包。包的长度时,要使用专门的。

weixin_43586667的博客 3115

告别Mumu!在Mac(M1/M2)上免费搭建Android Emulator的保姆级避坑指南

本文提供在Mac(M1/M2)上免费搭建高性能Android模拟器的详细指南,特别针对Apple Silicon芯片优化。通过使用Google官方的ARM原生模拟器,开发者可以获得3-5倍的性能提升,降低CPU占用,并避免x86转译的兼容性问题。文章涵盖从环境准备、工具安装到AVD创建与优化的全流程,帮助用户避开常见陷阱,实现接近原生性能的体验。

weixin_42531886的博客 599

蓝牙配对方式Legacy/SSP/Secure Connection区别

BR/EDR Prior to version 2.1 => BR/EDR legacy Version 2.1 => BR/EDR (uses Secure Simple Pairing) Version 4.2 => BR/EDR (uses Secure Connections) LE Version 4.0 and 4.1 => LE legacy (uses Secure Simple Pairing) Version 4.2 => LE (uses Sec

大西几的知识小仓库 3182

【5G核心网】Packet Forwarding Model 数据包转发模型

CP 通过建立,修改,删除 PFCP 会话上下文,以及通过为每个 PFCP 会话赏析哪问提供 PDR FAR QER URR BAR,来控制 UP 面的数据包处理。 每一个 PDR 都包含 PDI(Packet Detection Information,包探测信息),一个或多个字段,与输入数据包进行匹配,并可能与以下规则相关联,从而提供了适用于与 PDI 匹配的数据包的指令集: - One FAR(包含了处理数据包的相关指令) an Apply Act...

zhonglinzhang 1万+

FUEL算法解读(一)——框架解读,思维导图可以很清晰看懂算法启动框架,已更新完,图太大放不上来链接在文末

一图看懂FUEL算法节点框架!!!

weixin_43793717的博客 2786

蓝牙安全全解析——从 SSP 到 LE Secure Connections

蓝牙安全机制演进与防护指南 摘要:蓝牙安全历经四代升级(Legacy PIN → SSP → Secure Connections → LE Secure Connections),核心改进包括引入ECDH密钥交换、强化加密算法(AES-CCM)及关联模型。当前主流方案采用P-256曲线和128位密钥,但仍存在KNOB、BLURtooth等攻击风险。本文系统解析经典蓝牙与BLE的密钥体系、配对流程及安全模式,对比不同版本的防护能力(如SSP的四种关联模型中仅Just Works无MITM保护),并针对常见攻

YsmileTlong的博客 1020

HTML音乐爱心3D旋转相册完整源码

HTML音乐爱心3D旋转相册完整源码

LilyCoder的博客 1380

蓝牙BLE学习-安全

BLE的配对和绑定是一连串的动作,总结下来可以用下图来表示。阶段1:配对特征交换,得到临时密钥(TK)值(配对请求、配对响应)阶段2:身份确认以及短期密钥(STK)生成(通过安全管理协议(SMP)配对),确定自己正在和一个真正想要通信的设备通信,而非第三方。即确定对方身份。阶段3:传输特定密钥(密钥分配)。绑定所需存储到安全数据库的数据也是在此阶段发送的。上述三阶段总结:配对认证:主从机一方提供密码,一方输入密码,如果双方密码一致,那么此密码将作为TK(临时密码)。

weixin_43586667的博客 4789

华为OD机考双机位A卷 -陷阱方格/机器人走迷宫问题Java & Python& JS & C/C++ & GO )

华为OD机考双机位A卷 -陷阱方格/机器人走迷宫问题(OD上机考试双机位A卷)。提供在线OJ刷题。Java、C++、Python、GO语言、C语言、JavaScript题解,并提供完整思路讲解。

算法大师! 2965

串行RapidIO(Serial RapidIO,SRIO):协议介绍

目录一、RapidIO背景介绍二、RapidIO协议概述2.1 包与控制符号2.2 包格式2.4 消息传递2.5 全局共享存储器2.6 流量控制2.7 串行物理层三、I/O逻辑操作与包格式四、维护操作与包格式五、消息操作与包格式六、总结 本文是基于Xilinx平台SRIO介绍(一)RapidIO协议介绍的内容作读书笔记。 一、RapidIO背景介绍 RapidIO采用三层分级体系结构,包括逻辑层、传输层和物理层该分级结的如下图所示: ● 逻辑层:位于最高层,定义全部协议和包的格式,它们为端点器件发起和完

Starry__的博客 1万+

蓝牙键盘PIN码输入全解析:配对原理、操作流程与排查指南

蓝牙配对是无线外设连接中的基础环节,而PIN码作为经典配对模式下的身份验证手段,至今仍频繁出现在各类设备的连接过程中。无论是Windows、macOS还是Linux,用户都可能遇到屏幕弹出PIN码却无法输入的窘境,其背后往往涉及蓝牙协议栈、HID设备识别、按键映射与系统输入焦点等多重因素。现代BLE键盘虽多采用Just Works或Passkey Entry等安全简单配对机制,但老式设备或兼容性回退场景仍会触发PIN码流程。理解不同配对模式的差异,掌握各系统下正确的输入方式,并学会排查焦点冲突、输入法干扰、

weixin_34112181的博客 388

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

BLE安全配对实战:从SSP原理到嵌入式开发避坑指南

蓝牙低功耗(BLE)的配对安全是物联网设备通信的基石,其核心机制Secure Simple Pairing(SSP)基于公钥密码学原理,通过ECDH密钥交换实现安全连接。该技术能有效防御中间人攻击(MITM)与被动窃听,为智能门锁、医疗设备等高安全需求场景提供保障。在实际开发中,开发者需根据设备IO能力正确配置关联模型(如Numeric Comparison或Passkey Entry),并注意避免常见陷阱,如错误设置`lesc`标志或`io_caps`能力,否则可能导致安全降级。本文结合嵌入式开发实践,深

weixin_34192816的博客 402

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

蓝牙PIN配对失败全解析:从协议机制到排查实战

蓝牙设备之间“能搜索到”与“能配对成功”是两种完全不同的协议路径,配对失败常表现为PIN输入无效或提示错误,原因多在于协议栈中的IO能力不匹配与密钥协商异常。传统配对依赖固定PIN(如0000/1234),而安全简单配对(SSP)将PIN拆解为Passkey Entry、Just Works等模式。理解PIN在经典蓝牙与BLE(SMP)中的角色,并掌握HCI日志与抓包分析方法,就能快速定位根因。无论是蓝牙键盘连不上电脑,还是HC05模块、ESP32开发板的配对调试,都能从协议机制入手,结合Windows清缓

weixin_42550597的博客 290

蓝牙键盘PIN码是什么?配对原理与各平台输入方法全解析

蓝牙设备之间的连接并非简单的点对点传输,而是涉及协议协商、安全验证与双向握手的复杂过程。PIN码是蓝牙配对机制中用于确认设备身份、防止中间人劫持的关键口令。根据蓝牙协议版本的不同,固定PIN码(如0000/1234)与动态Passkey码分别对应不同的输入逻辑,误用其中任意一种方式都会导致配对失败。理解设备类型与配对模式的对应关系,掌握Windows、macOS、Android等平台下的正确输入时机与操作细节,可以有效解决蓝牙键盘连接失败、反复提示输入PIN码等高频工程问题。本文从底层协议切入,结合实操经验

weixin_31534091的博客 103

蓝牙键盘PIN码输错?从配对原理到各平台连接排查指南

蓝牙键盘在首次连接时,经常会出现要求输入PIN码的环节。很多人误以为这是设备出厂设定的固定密码,然而在蓝牙协议中,PIN码本质上是配对协商过程中的临时凭据,可能来自键盘默认值,也可能由主机端临时生成。理解Secure Simple Pairing中的Passkey Entry模式,是正确区分“有框输默认、无框敲随机”的关键。这一概念在Windows、macOS、Android等平台的实践操作中有着不同表现,也经常与驱动兼容性、多设备切换等问题交织。掌握其底层逻辑,不仅能快速解决PIN码错误提示,还能系统性地

weixin_33851177的博客 270
上一篇: 效率提升90%:IPIDEA动态住宅IP如何破解跨境电商数据采集瓶颈
下一篇: AI编程CLI工具实战评测:心流CLI、OpenAI Codex与Claude Code的开发者体验对比
java5
博客等级 码龄22年 85粉丝 2103原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值