由于个人生产设备的快速蔓延,使用蓝牙设备的频率和数量也在不断的增长,这对蓝牙通信安全性提出了更高的要求。随着蓝牙官方协议版本的迭代,经典蓝牙信息安全模型也在不段更新和完善。本文主要讲述经典蓝牙技术安全相关内容。
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算法仅提供对数据的机密性和完整性保护,而无法提供绝对的安全性。如同时使用质询机制等其他安全措施可以增强安全性。
全部0条评论
快来发表一下你的评论吧 !