• 蓝牙协议之配对和绑定学习笔记


    蓝牙配对及绑定专业术语

    术语描述
    BDA蓝牙设备地址
    RPAResolvable Private Address的缩写,可解析的蓝牙设备地址,它会周期性的变化
    IRK全称:Identity Resolving Key,用于解析蓝牙设备地址的密钥
    STKShort Term Key,短期密钥,在LE Legacy配对中用于初始加密
    Identity Address和IRK关联的地址,它不会随时间变化,可以由IRK解析RPA得到
    Long-Term Key(LTK)长期密钥,用于长期的加密
    Pairing配对,产生和交换密钥的过程
    Encryption配对之后的数据是被加密的,或者是重新加密的
    Association配对方式取决于两个设备的IO能力,对于低功耗设备支持Just Works、Numeric Comparison、Passkey Entry和OOB这四种配对方式
    Authentication配对流程使用支持MITM(中间人)保护机制的配对方式
    Bonding绑定,将配对过程生成的密钥保存到Flash
    Authorization授权,这个是除了认证之外的应用层验证
    OOB带外,配对钥匙不会在空中传输,OOB提供MITM保护机制
    MITM中间人保护,MITM在配对过程中提供身份验证,这有助于防止恶意攻击者在密钥交换期间冒充peer设备
    MITM-attacks攻击者在两个连接设备之间扮演成中间人,窃听和篡改设备的发送信息
    Just works无认证的配对方式,密钥的交换没有MITM保护

    Pairing

    (1)窃听保护

      在蓝牙低功耗中,空中传输的信息可以被附近的设备窃听到,虽然无法避免空中数据包被拦截,但我们可以使用加密手段来防止空中消息被恶意设备解析。
      配对是用来与连接设备创建加密连接的过程。在蓝牙低功耗中,有两种主要的配对模型LE Legacy(传统)LE Secure Connection。配对请求命令中PDU中的SC位决定了设备支持哪种配对模型,当集中器和外部设备都支持LE Secure Connections的时候,则使用LE Secure Connections。否则,使用LE legacy pairing。如果两个设备使用LE Legacy配对,并且使用配对方式Just Works或者Passkey Entry,加密连接仍有被窃听的可能 。

    (2)MITM Attacks

      BLE受到的另一种攻击就是来自“中间人”攻击。MITM Attack是指恶意设备连接到两个不知情的设备,并拦截两个设备之间发送的消息,攻击设备可以在传递消息之前注入自己的恶意数据。OOB、Passkey Entry和数值比较配对方式提供了MITM保护机制,但Just Works和Passkey Entry这两种关联模型不提供任何被动窃听保护

    (3)配对模型的比较

      这里记录下LE Legacy和LE安全连接配对的异同。
      LE Legacy在配对过程中基本没有防窃听保护,除非使用OOB关联模型,然而它又保证了会话隐私,因为短期密钥(STK)是随机的不固定的,这意味着如果有人找到了STK,他们还是无法解密之前的会话数据。在蓝牙核心规范V4.2中有介绍LE Secure Connections配对,配对过程使用Elliptic Curve Diffie-Hellman密码学以及LE Legacy配对的安全机制,这使得LE Secure Connections配对具备防窃听保护。LE Legacy和LE Secure connections的密钥生成的方法有点区别,LE secure connections相对多了数值比较(Numeric Comparison)。

    关联模式使用条件
    Just Works这个模式用于没有有效OOB数据和设备没有输入能力的情况下
    Passkey Entry用于没有有效OOB数据,但是至少有一个设备具备IO能力能够输入密码,并且另一个设备可显示密码
    Out of Band如果OOB数据在两个连接设备中都是有效的,那么该模式将被使用
    Numeric Comparison该密钥生成方法用于两个设备都支持SC(Secure Connections),可以显示Yes/No消息和拥有输入能力

    (4)LE Legacy配对步骤:

    (4.1) 配对特征交换
    配对过程是怎么开始的?->集中器设备先发送配对请求命令到外设,或者外设发送一个加密请求(Security Request) 。 注意,集中器在接收到加密请求之后可以选择是否初始化配对。不是所有的手机设备都支持加密请求命令,所以在依赖加密请求命令初始化配对或者加密之前最好事先看下安卓和苹果蓝牙相应的开发指南,下图展示的是配对特性交换。
    在这里插入图片描述

      配对请求命令包含集中器支持的配对类型信息,而外设响应请求中又包含了外设它自己支持的安全特征。两个设备共同支持的安全特征将决定使用哪个配对关联模型去生成加密密钥。下面是配对请求的命令格式:
    在这里插入图片描述
    其中IO能力有:
    ··Display Only Device只有输出显示的能力
    ··NoDisplay Or InputDevice没有输入输出能力
    ··Display and Yes or No capable能显示并且有输入Yes或No的能力
    ··Keyboard Only能输入0~9,没有显示
    ··Both Keyboard and Display Capable能输入0~9,具备显示能力
    配对响应命令格式:
    在这里插入图片描述
    外设安全请求命令格式:
    #pic_center

    (4.2)配对步骤2:
      在步骤二中,密钥产生并且分享密钥用于加密连接。生成的密钥的类型取决于用的是LE Legacy还是LE secure connections,后者生成的是LTK,前者用的是TK和STK,在接收到配对响应之后,配对确认值会被交换。这里介绍下配对确认值(Confirm Value),配对发起设备用的名叫Mconfirm,而Peer设备用的名叫Sconfirm,它们的字节长度是 16Bytes。每个设备会产生一个随机数(LP_RAND_I和LP_RAND_R-Legacy配对初始值和响应随机数),可与临时密钥TK一起生成配对确认值。

      在集中器设备接收到Pairing Confirm命令之后,集中器将会发送Pairing Random命令给外设,该命令中包含了随机数,这个随机数恰是用来计算配对确认值的。紧接着,外设也会响应随机数给集中器,同样的通过它能计算出外设的配对确认值。两个设备将根据先前交换的确认值检查随机数,如果数值对的上,那么配对流程继续;如果数值对不上,外设会发送Pairing Failed命令,该命令包含了配对失败的原因。
      如果Pairing Random交换成功,集中器将会使用STK将链接加密。STK是怎么得到的呢?STK是由短期密钥和随机数计算得到的,因此STK不会通过Air传播。下图可以直观的描述蓝牙配对的STK产生过程:
    在这里插入图片描述
      注意上图,如果Confirm值解出来不对,那么外设会发送Pairing Failed命令。
      到现在我们应该对配对流程有所了解,那么接下来再看看关联模型(钥匙生成方法)和它们各自的优点缺点。
    Just works:
      这种关联模型直接将TK设置成0,我们前面也记录过STK是由TK和rand计算得出的,TK设置为0,而随机数在空中传输是不加密的,因此别人计算STK是非常简单的。同样地,此方法不提供任何对参与连接的设备进行身份验证的方法。但是呢,考虑到在配对过程中没人会去窃听,用于生成STK的随机数还是确保了该关联模型是安全的。
    Passkey entry:
      该关联模型的TK是由6个数字组成。应用场景我们应该都有遇到过,就是手机试图连接一个蓝牙设备,手机上会弹出一个窗口叫你输入6个数字的密码,这里的密码就是TK,当我们把密码输好之后,密码会通过Air传输,所以如果在TK传输期间有人在监听,那么这种场景下用这关联模型是不妥的。之所以认为这种方法比Just Works更安全,是因为它有认证环节,从而阻止了MITM攻击。
    Out of Band
      该关联模型使用了另一种无线技术传输TK,如果OOB通道不受MITM攻击,那么我们可以放心地把蓝牙连接看成也是不受MITM攻击的。与此同时,如果OOB通道不受监听,那么该关联模型可以被认为是最安全的,但这需要一个完全安全的OOB通道,常用的无线技术选择是NFC协议,因为只有两个设备靠近时才会建立连接,使用NFC还允许使用非常长的TK,从而大大增强安全性。

    Bonding

      绑定是存储密钥的过程,这里说的密钥是在配对过程生成的。绑定的目的是在以后的连接过程能迅速恢复加密。绑定信息一般是存储在flash里面,当设备重新连接时绑定信息从Flash中读取后应用。

    (1)Privacy

      这小节记录绑定的私密性。
      反跟踪(Anti-Tracking):蓝牙设备地址(Bluetooth deice address, BDA)就像是蓝牙设备的身份证号,这个地址是蓝牙设备之间交互所必需的,设备发送的很多数据包中都附上了自己的蓝牙设备地址。然而,因为这个地址可以被附近其他的蓝牙设备发现,使得它可以潜在的用于收集给定设备的信息。为了防止被跟踪,BLE设备可以使能一些Privacy特性,比如不使用固定的地址,而是周期性生成新的地址并且用新的地址。

    (2)Bluetooth Address类型

      Bluetooth Core Specification Version 5.2 中有定义蓝牙地址类型,总共有四种类型:

    Public Address直接使用Identity Address(BDA是固定的)
    Random Static Address每次上电生成一个随机的地址,这个地址在设备供电期间不再变化
    Resolvable Private Address(RPA)周期性的生成随机地址,使用IRK生成,peer设备可以使用IRK解析随机RPA得到对方的Identity Address
    Non-resolvable Private Address也是周期性产生随机地址,但是它不能解析出Identity Address

    (3)产生和解析Private地址

      为了能够产生可解析的私密地址,设备往往将IRK作为传参给随机地址哈希函数(在蓝牙协议栈中,生成随机地址使用的是硬件哈希算法),函数的输出只是可解析私密地址Resolvable Private Address的一部分。没有IRK的Peer设备只能确定设备正在使用RPA,但是不能确定设备的身份地址 Identity Address。

  • 相关阅读:
    港科夜闻|叶玉如校长对行政长官李家超先生10月25日的施政报告表示欢迎及感谢...
    CSS动效合集之实现气泡发散动画
    CMake | 编辑规范
    web前端期末大作业《中华传统文化题材网页之丝绸之路》 html+css+javascript网页设计实例
    Scala基础【模板方法设计模式、基础面向对象编程】
    用梯度下降算法极大化对数似然函数来估计参数
    欠拟合(Under-Fitting)、拟合(Fitting)、过拟合(Over-Fitting)示例
    Springboot定时任务热部署设计及实现
    Java实现 数组匹配,矩阵行排序
    新一代L3虚拟网络接入解决方案(畅想)
  • 原文地址:https://blog.csdn.net/qq_40993639/article/details/126326772