蓝牙之CTKD跨传输密钥派生

概述

蓝牙中的 CTKD(Cross-Transport Key Derivation,跨传输密钥派生)是蓝牙核心规范(从4.2版本开始引入并逐步完善)中定义的一种安全机制。它的主要目的是简化双模蓝牙设备(同时支持经典蓝牙 BR/EDR 和低功耗蓝牙 BLE/LE)的配对流程,提升用户体验,同时保证安全一致性。

核心问题:为什么需要 CTKD?

在双模设备(如智能手机、支持蓝牙的电脑、现代耳机/音箱)出现之前:

  1. 设备需要分别配对: 用户需要为同一个物理设备(比如一个耳机)在经典蓝牙模式和低功耗蓝牙模式下分别执行一次完整的配对过程。
  2. 用户体验差: 用户可能需要输入两次 PIN 码(或执行两次确认操作),感觉繁琐且不自然。
  3. 管理复杂: 设备端需要维护两套独立的链路密钥和安全连接。

CTKD 就是为了解决这个问题而设计的:通过一次配对过程,安全地派生出用于另一个传输层(BR/EDR 或 LE)的连接密钥。

CTKD 的核心思想与机制

  1. “主”配对与“从”派生:

    • 用户只需要在一个传输层上执行一次完整的、安全的配对过程(称为 CTKD 配对传输层)。这次配对会生成该传输层专用的长期密钥。
    • CTKD 机制会利用这次配对过程中生成的共享秘密信息(具体是 Long Term Key - LTK 或 Link Key),安全地派生出用于另一个传输层的长期密钥。
    • 派生过程完成后,另一个传输层就被视为已配对,无需用户再次执行完整的配对流程。
  2. 密钥派生方向:

    • LE 安全连接配对派生 BR/EDR 密钥: 当用户在 LE 传输层上执行了符合 LE 安全连接要求的配对(使用 Passkey Entry, Numeric Comparison 或 OOB 方法,满足 MITM 保护)时,CTKD 可以派生出用于 BR/EDR 传输层的 Link Key
    • BR/EDR 安全简单配对派生 LE 密钥: 当用户在 BR/EDR 传输层上执行了符合 安全简单配对要求的配对(使用 Passkey Entry, Numeric Comparison 或 OOB 方法,满足 MITM 保护)时,CTKD 可以派生出用于 LE 传输层的 LTK
    • 注意: 使用 Just Works 方法的配对(无论 LE 还是 BR/EDR)不能触发 CTKD,因为它不提供 MITM 保护,安全性不足。派生方向取决于哪个传输层执行了符合要求的“主”配对。
  3. 关键角色:Cross-transport Key

    • 在 CTKD 配对传输层上生成的 LTK (LE) 或 Link Key (BR/EDR) 被称为 **Cross-transport Key**。
    • 这个密钥是派生过程的基础输入。派生算法由蓝牙规范定义,确保派生出的密钥与直接在目标传输层上配对产生的密钥具有相同的安全强度。
  4. 派生过程 (Cross-transport Key Derivation Function):

    • 使用 Cross-transport Key 和双方设备的地址作为输入。
    • 通过一个安全的密码学函数(通常是基于 HMAC-SHA-256 的 KDF)计算。
    • 输出就是用于目标传输层的长期密钥:如果从 LE 派生 BR/EDR,输出是 Link Key;如果从 BR/EDR 派生 LE,输出是 LTK。
  5. Bonding FlagsKey Distribution

    • Bonding Flags 在配对过程中交换的配置参数。其中一个关键标志位 CTKD 需要被双方设备设置为 SupportedNot Supported,以表明是否支持 CTKD 功能。
    • Key Distribution 在配对阶段 3,执行 CTKD 的设备会将派生出的密钥(BR/EDR Link Key 或 LE LTK)分发给对方设备。这相当于告诉对方设备:“我们已经在另一个传输层上配对好了,这是用于那个传输层的密钥”。
  6. Derived 状态与 Restricted 状态:

    • Derived 当密钥是通过 CTKD 派生(而非直接配对)获得时,该密钥被标记为 Derived 状态。
    • Restricted 这是一个非常重要的安全特性!标记为 Derived 的密钥自动继承其来源 Cross-transport KeyRestricted 状态。这意味着:
      • Restricted 密钥不能用于执行 CTKD 派生! 这是为了防止密钥派生链无限延伸,导致安全边界模糊。例如,一个从 LE 安全连接派生的 BR/EDR Link Key 是 DerivedRestricted 的,它不能再用来派生另一个 LE LTK。
      • Unrestricted 密钥才能用于执行 CTKD 派生。 只有通过完整配对(符合安全要求的方法)直接生成的密钥才是 Unrestricted 的,可以作为 Cross-transport Key 去派生另一个传输层的密钥。

CTKD 的流程概览(以 LE 安全连接配对派生 BR/EDR 密钥为例)

  1. 用户操作: 用户将手机(Initiator)和耳机(Responder)在 LE 传输层上配对,使用 Passkey Entry(或 Numeric Comparison / OOB)方法。
  2. 配对过程:
    • 执行 LE 安全连接配对流程(配对阶段 1:Public Key Exchange, Pairing Confirm/Check; 阶段 2:Authentication, LTK 生成)。
    • 在 **配对阶段 3 (Key Distribution)**:
      • 双方设备通过 Bonding Flags 确认对方都支持 CTKD。
      • 手机(或耳机,取决于谁是派生方)执行 Cross-transport Key Derivation Function,输入是 LE 的 LTK(作为 Cross-transport Key)和双方的蓝牙地址。
      • 派生函数输出一个 BR/EDR Link Key
      • 派生方将生成的 BR/EDR Link Key 分发给对方设备(通过加密的通道)。
  3. 结果:
    • LE 传输层: 拥有直接配对的 Unrestricted LTK。连接安全。
    • BR/EDR 传输层: 拥有通过 CTKD 派生的 DerivedRestricted 的 Link Key。该密钥被安全地分发,因此 BR/EDR 传输层也被视为已配对和安全连接,用户无需再执行一次 BR/EDR 配对。
    • 用户只需配对一次(在 LE 上),即可在两个传输层上使用设备。

CTKD 的安全意义

  1. 提升用户体验: 一次配对,双模可用。简化操作。
  2. 安全继承:
    • 派生密钥的安全强度依赖于源 Cross-transport Key 的安全强度。
    • 要求源配对必须使用提供 MITM 保护的方法(Passkey, Numeric Comp, OOB),确保了派生过程的起点是安全的。
    • 派生算法是标准化的密码学安全函数。
  3. 防止密钥派生链滥用 (Restricted Flag): 这是 CTKD 安全架构的核心。它确保了密钥派生只能发生一次(从 UnrestrictedDerived Restricted),阻止了潜在的安全风险(如通过多次派生降低密钥强度或扩大攻击面)。

关键点总结

  • 目的: 让双模蓝牙设备的一次配对(在符合安全要求的传输层上)能同时建立两个传输层(BR/EDR 和 LE)的安全连接。
  • 基础: 在源传输层(CTKD 配对传输层)上执行符合安全要求(MITM 保护)的配对,生成 UnrestrictedCross-transport Key
  • 机制: 使用 Cross-transport Key 和设备地址,通过标准 KDF 派生目标传输层的长期密钥(Link Key 或 LTK)。
  • 状态管理: 派生出的密钥标记为 DerivedRestricted,明确其来源并阻止其被用于进一步派生。
  • 依赖: 双方设备必须通过 Bonding Flags 声明支持 CTKD。
  • 必要条件: 源配对必须使用安全方法(非 Just Works),以生成有效的 Unrestricted Cross-transport Key