请选择 进入手机版 | 继续访问电脑版
查看: 1429|回复: 0

[技术交流] BLE配对之LESC

[复制链接]

108

主题

163

帖子

618

积分

利尔达员工

Rank: 9Rank: 9Rank: 9

积分
618
发表于 2021-5-24 10:18:31 | 显示全部楼层 |阅读模式
1.基本术语:
             1./paring(配对):配对包括配对能力交换,设备认证,密钥生成,连接加密以及机密信息分发等过程,配对的目的有三个:加密连接,认证设备,以及生成密钥。从手机的角度看,一旦设备跟手机配对成功,蓝牙配置菜单将包含该配对设备
接 收 的 文 件 已 配 对 的 设 备 rdic_HRM O 小 米 运 动 蓝 牙 具 机 mini O Ml BT18 ">
                1.//如果用户需要主动删除配对设备,点击配对设备右下方的“设置”菜单,选择“取消配对”或者“忽略该设备”,设备的配对信息即被手机删除。

           1./ bounding(绑定):配对过程中会生成一个长期密钥(LTK, long-term key),如果配对双方把这个LTK存储起来放在flash中,那么这两个设备再次重连的时候,就可以跳过配对流程,而直接使用LTK对蓝牙连接进行加密,设备的这种状态成为bounding.
              1.//如果paring过程中不存储LTK(不分发LTK)也是可以的,paring完成后连接也是加密的,如果两个设备再次重连,那么久需要重走一次paring流程,否则两者还是明文加密。
           1./SM(security manager):蓝牙协议栈的安全管理层,规定了跟蓝牙安全通信有关的所有要素,包括paring, bouding,以及下面的SMP。
           1./SMP(securitymanger protocol)安全管理协议,SMP着重连个设备间的蓝牙交互命令序列,对paring的空中包进行了严格时序规定。
           1./OOB(out of band)OOB就是不通过蓝牙射频本身来交互,而是通过比如人眼、NFC、UART等带外方式来交互配对信息,这里人眼…….通信方式被称为OOB通信方式。
           1./Passkey 又称pin 码,是指用户在键盘中输入的一串数字,以达到认证设备的目的。低功耗蓝牙的passkey必须为6位。
          1./numeric comparision(数字比较)其实跟passkey一样,也是用来认证设备的,只不过passkey是通过键盘输入的,而numeric comparison 是显示在显示器上的,也是6位数字。
          1./MITM(man in the middle)是指A在和B的通信过程中,C会插进来以模拟A或者B,并且具备截获和篡改A和B之间所有通信报文的能力,从而达到让A或者B信任他,以至于错把C当成B或者A来通信。
          1.//如果对安全要求比较高,需要具备MITM保护能力,在SM中这个是通过认证(authentication)来实现的,SM实现认证的方式有三种:OOB认证信息,passkey以及numericcomparison ,根据自己的实际情况,选择其中的一种即可。
          1./LESC(LE secure connections):又称SC,蓝牙4.2引入的一种新的密钥生成方式和验证方式,SC通过基于椭圆曲线的diffie-hellman 密钥交换算法来生成设备A和设备B的共享密钥,此密钥生成过程中需要用到公私钥对,以及其他的密码算法库。
          1./LTK(long termkey):长期密钥 lagcy配对和LESC配对都会用到LTK,LTK是用来对未来的连接进行加密和解密用的。
           1.//Legacy paring中的LTK由从设备根据相应的算法自己生成的(LTK生成过程中会用到EDIV(分散因子)和Rand(随机数)),然后通过蓝牙空中包传给主机。
           1.//LESC 配对过程中,先通过diffie-hellman生成一个额共享密钥,然后这个共享密钥再对设备A和设备B的蓝牙地址和随机数进行加密,从而得到LTK,LTK由设备A和设备B各自同时生成,因此LTK不会出现在蓝牙空中包中,大大提高了蓝牙通信的安全性。
           1./IRK(identity resolving key):蓝牙设备地址解析密钥。有些设备的地址为可解析的随机地址,比如iphone手机,由于他们的地址随着时间会变化,那如何确定这些变化的地址都来自同一个设备呢?
       答案就是IRK,IRK通过解析变化的地址规律,从而确定这些地址是否来自同一个设备,换句话说,IRK可以用来识别蓝牙设备身份,因此其也成为identity information。IRK一般由设备出厂的时候按照一定的要去自动生成。
           1./identity address 设备唯一地址,蓝牙设备的地址包括public, random static, private resolvable,random unresolved 四类。
                如果设备不支持privacy,那么identity address就等于public address或者random static 。
                如果设备支持,即使用 private resolvable 蓝牙设备地址,在这种情况下,虽然地址每隔一段时间会变化一次,但是identityaddress 仍保持不变,取其值还是等于内在的public或者random static设备地址。
                identityaddress 和IRK都可以用来唯一标识一个蓝牙设备。
            1./IO capabilities输入输出能力, 是指蓝牙设备的输入输出能力,比如是否有键盘,是否有显示器,是否可以输入yes/no 两个确认值。
            1./key size 密钥长度,一般来说,密钥默认长度为16字节,为了适应一些低端的蓝牙是设备处理能力,可以把密钥长度调低,比如10个字节。
2.paring流程及命令
             paring包含三个阶段
             阶段1:配对特性交换,即交换各自都支持哪些配对特性,比如支不支持SC,支不支持MITM,支不支持OOB,以及它的输入输出能力等。
             阶段2:密钥生成阶段,legacy paring 和 LESCparing 两者的区别就在这里。
                         SCparing:LTK的生成。
             阶段3:通过蓝牙空中包分发一些秘密信息。Legacy paring 需要分发LTK,IRK等,而SC paring只需分发IRK。秘密信息分发之前,必须保证连接已加密。

  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
阶段1:配对特性交换,配对特性交换涉及到三条PDU命令
  
             paring request
  
  
  
    paring response
  
  
    security request(optional)
  
  
IO capability 占用一个字节,其定义如下
  
  
  
AuthReq也是占用一个字节,其定义如下
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
Paring  request: 连接建立后,central主动发起paring request,包含自己的配对参数,并且对端在收到这个PDU之后蓝牙协议栈会产生一个BLE_GAP_EVT_PARAMS_REQUEST。
  
  
  
  
  
  
  
  
  
  
  
  
  
  
Paring response:在BLE_GAP_EVT_PARAMS_REQUEST事件触发后,app可以调用sd_ble_gap_params_reply(),来回应,回应参数里包含自己的配对参数,和keyset参数,keyset参数。要注意,要在配对成功之前一直存在的。
  
  
  
  
  
  
  
  
  
  
  

阶段2:密钥生成,根据阶段1 的IO输入输出能力以及是否存在OOB,阶段2存在以下几种配对方式(或者说认证方式)
            just works、numeric comparision (LESC特有)、passkey、OOB
对于SC paring,如果A和B有一方支持OOB,那么两者就会采用OOB的方式进行配对。否则根据IO能力选择配对方式。不同的IO能力对应的配对方式如下图所示


        粗略的来说,有认证的配对方式就具备MITM保护功能,从IO角度看,有三种配对方式:just works、passkey、numeric comparision,其中just works没有MITM保护功能,。如果你要求你的设备具有MITM保护功能,那么它一定有IO能力,而不能是“NoInputNooutput”。至于OOB方式有没有MITM保护,取决于OOB通信的安全性。如果OOB通信有,那么蓝牙也具备。
  
2.1
  
  
LESC paring
  
  
  
  
LESC paring是通过diffie-hellman算法直接生成LTK, 因此它不需要生成TK和STK。为了生成LTK,双方需要先交换公钥,流程如下
  
  
  
  
  
  
  
  
公钥交换后,设备A和设备B就开始计算各自的DHKey,按照D-H算法,他们俩算出的D-Hkey会是同一个。而LTK和MacKey就是通过这个DHKey加密一系列数据而得到的。
  






本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表