泰凌微电子经典蓝牙技术安全知识讲解

描述

由于个人生产设备的快速蔓延,使用蓝牙设备的频率和数量也在不断的增长,这对蓝牙通信安全性提出了更高的要求。随着蓝牙官方协议版本的迭代,经典蓝牙信息安全模型也在不段更新和完善。本文主要讲述经典蓝牙技术安全相关内容。

1

蓝牙安全模型

目前,蓝牙安全模型主要分为五个安全部分:

认证(Authentication):建立设备间的信任关系,证明正在通讯的设备是真正的设备而不是其他冒名的设备。

保密性 (Confidentiality):对传输的数据加密,确保内容不被窃听者获取。

授权(Authorization):是否允许对端设备通过建立的链接操作本地的数据项。

数据完整性(Integrity):确认收到的数据就是对端发送的数据。

配对/绑定(Pairing/Bonding):创建一个或多个共享密钥并存储用于后续连接,以形成可信设备。

2

经典蓝牙安全机制

蓝牙核心安全架构随着时间的推移而发展,已经有多种安全机制。

早期BR/EDR使用legacy pairing方式进行配对,该方式基于E21或E22算法进行。E21和E22均基于E1算法。通信加密则利用了MasseyRueppel 算法衍生的e0算法。这种方式局限于无法提供加密消息的完整性。目前,出于加密安全的考虑,使用较多的是Secure Simple Pairing (SSP),其使用ECDH生成Link Key。且在4.0版本之前使用P-192 Elliptic Curve计算Link Key,设备认证和加密算法与2.0+EDR相同。4.1版本引入Secure connection功能,使用P-256 Elliptic Curve计算Link Key,通过AES-CCM进行加密。

SSP提供了四种关联模型:Numeric Comparison、Passkey Entry、Just Works以及Out of Band (OOB)。

Numeric Comparison:两个蓝牙设备显示6位数字,用户选择“是”或“否”,与使用PIN的区别是显示的数字不作为计算Link Key的条件,因此窃听者也不能用它生成连接或者密钥。

Passkey Entry:一个设备有输入能力另外一个有显示能力使用此模型,和Numeric Comparison一样,传输的6位数字不作为计算Link Key的条件,所以对窃听者也没有作用。

Just Works:没有输入和显示的设备适用此模型,与Numeric Comparison在认证阶段1相同,因为没有显示,不能对比两个设备上的数值就接受了连接,因此不能提供MITM保护。

Out of Band (OOB):通过有线或者NFC等其他方式进行设备的发现和加密数据的交换。

算法

SSP流程图

算法

SSP生成Link Key流程

总共分为三步:

算法

算法

算法

每个设备各自计算自己的公-私密钥,双方都支持安全连接使用P-256 elliptic curves 否则 P-192 curves。

1:每个设备发送public key给对方。这里public key的依赖于椭圆加密算法,每次连接时随机生成。

2:执行authentication stage 1。

3:第一个设备计算出确认值E1并发送给设备2,设备2对E1 进行验证,验证通过后,设备二计算确认值E2并发给第一个设备。

4:如果E2检查通过,那么双方就进行Link Key的计算。

01

认证

蓝牙的认证过程使用challenge–response scheme(质询-响应)方式,这个方式通过验证Link Key的方式验证设备。

认证流程有2种:Legacy Authentication和Secure Authentication(双方都支持安全连接使用此流程)

如果认证失败,蓝牙设备会间隔一段时间后重试,间隔时间会成指数级增长,以避免攻击。

02

传统身份验证

当使用传统配对或者P-192进行SSP配对时使用此流程。

算法

Step 1:verifier发送128bit的随机数(AU_RAND)质询claimant。

Step 2:claimant使用 “E1 algorithm”,通过输入48bit的mac地址、Link Key、AU_RAND来计算认证响应。Verifier也执行相同的流程。E1输出的高32位用于身份验证。剩余的96位时ACO,用于创建加密密钥。

Step 3:E1输出的高32位,即the Signed Response (SRES),发送给Verifier。

Step 4:Verifier拿自己的SRES与claimant的SRES进行比较。

Step 5:如果相同则认证成功否则失败。

03

安全认证

使用P-256 Elliptic Curve进行SSP执行此流程。

算法

Step 1:Master发送128bit的随机数RAND_M给Slave

Step 2:Slave 发送RAND_S给Master

Step 3:Master和Slave都利用“h4 and h5 algorithms”计算认证响应。以Master的MAC地址,Slave的mac地址、RAND_S、RAND_M、Link Key作为输入。h5输出的高32位用于验证,其余96位作为Authenticated Ciphering Offset (ACO) 用于创建密钥。

Step 4:Slave把SRES_slave 传给master

Step 5:Master吧SRES_master传给Slave

Step 6:Master和Slave拿自己的SRES与对方的进行比较

Step 7:相同则认证成功,否则失败。

3

经典蓝牙的保密性

处理配对和认证之外蓝牙还有单独的保密服务,防止数据包被监听。

Encryption Mode 1 — 没有任何保加密

Encryption Mode 2—Individually addressed traffic is encrypted using encryption keys based on individual link keys; broadcast traffic is not encrypted.

Encryption Mode 3—All traffic is encrypted using an encryption key based on the master link key.

模式2和3使用E0或者AES_CCM加密机制。

AES_CCM是一种对称密钥加密算法,用于保护通信中传输的数据的机密性和完整性。它广泛应用于无线通信协议如蓝牙(Bluetooth)和Wi-Fi等中,为4.0版本之后新加入的加密机制。

AES_CCM是基于AES算法(Advanced Encryption Standard)和CCM模式(Counter with CBC-MAC mode)的组合设计。AES算法是一种分组密码算法,通过多轮置换和混淆的方式进行加密和解密。CCM模式则是一种加密模式,它使用计数器和CBC-MAC模式对数据进行加密和验证,同时提供了认证和传输机密性保护功能。

下图为蓝牙packet中AES_CCM与E0的加密范围和流程:

算法

需要注意的是,AES_CCM算法仅提供对数据的机密性和完整性保护,而无法提供绝对的安全性。如同时使用质询机制等其他安全措施可以增强安全性。

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分