译者按:本文是对NIST的文档《Guide to Bluetooth Security》第三节的翻译,原文链接http://csrc.nist.gov/publications/nistpubs/800-121-rev1/sp800-121_rev1.pdf。
3. 蓝牙安全特性
本节提供了关于蓝牙安全机制的概述。这些机制被包含在蓝牙规范之中,阐明了它们的限制并提供了第四节中安全建议的基础。图3-1描绘了关于蓝牙无线路径安全适用范围的高层级的例子。在这个例子中,蓝牙安全机制被用于手机和笔记本电脑之间,而IEEE802.11安全机制保护了笔记本电脑和IEEE 802.11路由器之间的WLAN链接。有线网络上的通信是不被蓝牙与IEEE 802.11安全功能保护的。因此,如果不使用更高层级的、在蓝牙和IEEE802.11的安全功能之上的安全方案,端对端的安全是不可能的。
![](https://img-blog.csdn.net/20151110135925051)
图3-1. 蓝牙空中接口安全
蓝牙标准中规定了三项基本的安全服务:
- 认证:基于蓝牙设备地址,验证正在通信的设备的身份。蓝牙不提供原生的用户认证机制。
- 机密性:确保只有被授权的设备能够访问和查看传输的数据,以防止窃听导致的信息泄露。
- 授权:通过确保设备在被允许使用一项服务之前是已经被授权的,来允许其对资源的控制。
下面将详述蓝牙提供的这三项安全服务以及有关安全模式的细节。蓝牙不满足其他的安全服务需求,比如审计,完整性和不可抵赖性;如果需要这些服务,需要通过额外的方式来提供。
3.1 蓝牙BR/EDR/HS的安全特性
逐步地,蓝牙BR/EDR/HS系列规范定义了四种安全模式。每个蓝牙设备必须工作于这些模式之一。这些模式以安全模式1到4命名。这些模式决定了什么时候蓝牙设备开启安全性,而不是它是否支持安全功能。
安全模式1的设备被看作是无安全性的。安全功能(认证和加密)从未被开启,任由攻击者轻易地影响设备和连接。实际上,处于这个模式的蓝牙设备是“不加选择的”,没有采用任何机制来阻止其他开启蓝牙功能的设备与之建立连接。但是,如果一个远程设备启动了安全机制——比如配对、认证或加密请求——则一个安全模式1的设备需要参与进来。根据各个蓝牙规范版本,所有v2.0及更早的设备能够支持安全模式1,而v2.1及之后的设备能够使用安全模式1以向下兼容老的设备。但是NIST建议绝对不要使用安全模式1。
在安全模式2——服务级强制安全模式之中,安全过程可被启动于链路建立之后但逻辑信道建立之前。对于这种安全模式,一个本机的安全管理器(如在蓝牙架构中规定的)控制了对特定服务的访问。中心化的安全管理器维护着访问控制策略和与其他协议及设备使用者的接口。用于限制访问的不同的安全策略和信任级别,可以针对并行运行的、具有不同安全需求的应用来定义。这样一种情况是可能的,即在没有提供对一部分服务的权限的情况下,允许对其他服务的访问。在这种模式中,“授权”的概念——决定一个特定设备是否被允许访问一个特定服务的过程——被引入了。通常蓝牙服务发现能在任何安全要求(例如,认证、加密和/或授权)之前被执行。但是,所有其他的蓝牙服务应该需要所有的安全机制。
特别需要注意的是安全模式2中使用的认证和加密机制,它们是在控制器中实现的,这如同下面描述的安全模式3。所有v2.0及更早的设备能够支持安全模式2,但是v2.1及之后的设备仅为了向下兼容v2.0或更早的设备而支持它。
安全模式3是一种链路级强制安全模式。在这种模式中,一个蓝牙设备在完全建立物理链路之前就会发起安全过程。运行在安全模式3之下的蓝牙设备对所有发出和收到的连接进行强制认证和加密。所以,在认证、加密和授权已经被执行前,甚至连服务发现也不能被执行。一旦一个设备已经被认证了,安全模式3的设备通常不会执行服务级的授权。但是,NIST建议应当执行服务级授权以阻止“认证滥用”——已被认证的远程设备在本地设备拥有者不知晓的情况下使用蓝牙服务。
所有v2.0及更早的设备能够支持安全模式3,但v2.1及之后的设备仅仅为了向下兼容的目的而能够支持它。
与安全模式2类似,安全模式4(在蓝牙v2.1+EDR中引入)是一种服务级强制安全模式。在这种安全模式中,在物理和逻辑链路建立后,安全过程才被发起。安全模式4使用安全简单配对(SSP)。该配对使用椭圆曲线Diffie-Hellman(ECDH)密钥协商替代了传统的密钥协商来生成链接密钥(见3.1.1节)。但是,其设备认证和加密算法与蓝牙v2.0+EDR及更早版本的算法是完全一样的。安全模式4用于保护服务的安全要求可归类为以下之一:
- 需要认证的链接密钥
- 不需认证的链接密钥
- 没有安全要求
是否要认证链接密钥取决于使用的SSP关联模式(见3.1.1.2节)。安全模式4要求对所有的服务加密(服务发现除外)。对于v2.1及之后的BR/EDR设备间的通信,该模式也是一项强制要求。但是,为了向下兼容,当与蓝牙v2.0及更早的、不支持安全模式4的设备通信时,安全模式4的设备能够回退到任何其他三种安全模式下。在这种情况下,NIST建议使用安全模式3。
这个章节的剩余部分会详细讨论具体的蓝牙安全机制的构成——配对与链接密钥生成、认证、机密性和其他蓝牙安全功能。
3.1.1 配对与链接密钥生成
蓝牙提供的认证和加密机制的关键点是机密的对称密钥(被称为“链接密钥”)的生成。如3.1节提到的,蓝牙BR/EDR采用两种方式中的一种来执行配对(即链接密钥生成)过程。安全模式2和3通过称为个人识别号码(PIN)配对方式(即传统或经典配对)来发起链接密钥建立过程,而安全模式4使用SSP。下面会描述这两种方式。
3.1.1.1 PIN/传统配对
对于PIN/传统配对,当用户(们)在一个或两个设备上输入完全相同的机密的PIN码时,根据配置和设备类型,两个蓝牙设备同时获得链接密钥。图3-2从概念上描述了PIN码输入和密钥获得过程。注意,如果PIN码小于16字节,会用发起设备的地址(BD_ADDR)来补足PIN值以生成初始密钥。那些E
x框代表了蓝牙链接密钥获得过程所使用的加密算法。3.1.2和3.1.3分别概述了更多关于蓝牙认证和加密过程的细节。
图3-2. 从PIN生成链接密钥
完成链接密钥生成后,设备通过互相认证彼此来完成配对,以验证他们拥有相同的链接密钥。蓝牙配对中使用的PIN码可以是1到16个字节的二进制数或更常见的字母数字字符。对于低风险应用场景,典型的4位数PIN码可能是足够的;对于要求更高安全级别的设备,应当使用更长的PIN码(例如, 8个字符的字母数字)。
3.1.1.2 安全简单配对
蓝牙v2.1+EDR中引入了SSP以配合安全模式4的使用。SSP通过提供一些关联模型来简化配对过程。这些模型具有适应不同设备输入/输出能力的灵活性。SSP也通过增加ECDH公钥加密来改进安全性,以防止配对过程中的被动窃听和中间人(MITM)攻击。
SSP提供了如下四种关联模型:
- 数字比较 被设计用于这样的情景,即两个蓝牙设备都有显示6位数字的能力并允许用户输入“是”或“否”响应。在配对期间,每个设备的显示屏上会显示一个6位数字给用户,如果这些数字匹配,用户在每个设备上提供“是”响应。否则,用户响应“否”,配对失败。这个操作与传统配对中使用PIN的关键不同是显示的数字并不是作为生成链接密钥的输入。因此,一个窃听者即便能看到(或以其他方式捕获)显示的值,也不可能用它来确定生成的链路或加密密钥。
- 万能钥匙进入 被设计用于这样的情景,即一个蓝牙设备具有输入能力(例如,键盘),而另一个设备有显示但没有输入能力。在这个模型中,只具有显示能力的设备显示一个6位数字,然后用户在具有输入能力的设备上输入它。如同数字比较模型,在这个交互处理中使用的6位数字不掺入到链接密钥生成,对于窃听者是无用的。
- 立即工作 被设计用于这样的情景,即至少有一个配对设备既没有显示也没有键盘来输入数字(例如,耳机)。它采用与数字比较模型相同的方式执行认证阶段1(见图3-3),除了显示是不可用的。用户被要求不验证两个设备上计算出的值就接受连接,所以立即工作模型不提供MITM保护。
- 带外(OOB) 被设计用于这样一些设备,即它们支持共同的额外无线或有线技术(例如,近场通信或NFC)来作为设备发现和加密值交换。在NFC的情形中,OOB模型允许设备通过简单地互相碰一下,随后通过用户按下单个按钮接受配对。重要的是,需要注意保持配对过程尽可能安全,OOB技术应当被设计和配置为能减少窃听和MITM攻击风险。
安全模式4要求蓝牙服务强制要求认证的链接密钥、未认证的链接密钥或完全无安全保证。以上所述的关联模型,除立即工作模型外,都提供认证的链接密钥。
图3-3显示了如何为SSP建立链接密钥。注意该技术是如何使用ECDH公钥/私钥对,而不是通过一个PIN生成对称密钥。
图3-3. 安全简单配对的链接密钥建立
3.1.1.3 从蓝牙链接密钥得到AMP链接密钥
略。
3.1.2 认证
蓝牙设备认证过程是质询-响应方案的形式。认证过程中互动的每个设备被称为申请者(Claimant)或验证者(Verifier)。申请者是试图证明自己身份的设备,而验证者是验证申请者身份的设备。质询-响应协议通过校验一个机密的密钥——蓝牙链路密钥来验证设备。图3-5从概念上展示了质询-响应验证方案。
图3-5. 蓝牙认证
认证过程中的步骤如下:
- 步骤 1. 验证者发送一个128位的随机质询(AU_RAND)给申请者
- 步骤 2. 申请者使用E1算法,以他或她的唯一的48位蓝牙设备地址、链接密钥和AU_RAND为输入,计算出一个认证响应。验证者执行同样的计算。只有E1输出的高32位才被用于认证的目的。128位输出中剩余的96位作为认证加密偏移(ACO)值,将被稍后用作输入以创建蓝牙加密密钥。
- 步骤 3. 申请者返回E1输出的高32位作为计算的响应——已签名的响应(SRES)——给验证者。
- 步骤 4. 验证者比较来自申请者的SRES和自己计算的值。
- 步骤 5. 如果两个32位值相等,认证被认为是成功的。如果两个32位值不相等,认证失败。
把这些步骤执行一遍就完成了一个单向认证。蓝牙标准允许执行单向和相互认证。用于相互认证时,验证者和申请者交换角色重复上述过程。
如果认证失败,蓝牙设备会等待一定时间间隔再做新的尝试。这个时间间隔呈指数级增长,以防止攻击者采用不同的链接密钥以试错法来击破认证方案。重要的是,要注意该技术不提供针对离线攻击的安全保证。这种攻击利用窃听配对帧和穷尽猜测PIN码来确定链接密钥。
注意,与认证相关的安全机制是完全基于链接密钥的保密性。虽然蓝牙设备地址和随机质询值被视为公开参数,但链路密钥不是。链路密钥是在配对过程中生成出来的,不应该在蓝牙设备之外暴露出来或通过无线链路传输。但是,链路密钥从主机到控制器(例如,PC到USB适配器)是明文传输,而当主机被用于密钥存储时情况相反。质询值是与认证过程相关的公开参数,对每次交互处理过程必须是随机且唯一的。质询值由蓝牙控制器中的伪随机数发生器生成。
3.1.3 机密性
除了用于配对和认证的安全模式,蓝牙提供了独立的机密性服务来阻止试图窃听蓝牙设备之间交换的数据包的有效载荷。蓝牙有三种加密方式,但是只有其中两种提供实际的机密性。这些方式如下:
- 加密方式1——对任何流量不执行加密
- 加密方式2——单独寻址的流量使用基于单独链路密钥的加密密钥进行加密;广播流量未加密。
- 加密方式3——所有流量使用基于主机链路密钥的加密密钥进行加密。
加密方式2和3使用相同的加密机制。
蓝牙2.1+EDR中引入的安全模式4要求加密被应用于除服务发现之外的所有数据流量。
如图3-6所示,提供给加密算法的加密密钥是使用内部密钥发生器(KG)产生的。KG产生的流密码密钥是基于:128位链接密钥(它是一个被掌握于蓝牙设备内部的机密)、128位随机数(EN_RAND)和96位ACO值。ACO是在认证过程中产生的,如图3-4所示。
蓝牙加密过程是基于流密码,E
0。密钥流输出会和有效负载位进行异或操作,然后发送到接收设备。该密钥流是利用基于线性反馈移位寄存器(LFSRs)的加密算法产生的。加密函数采用以下参数作为输入:主设备地址(BD_ADDR)、128位随机数(EN_RAND),基于微微网时钟的时隙号和加密密钥。如果加密已启用,在每个分组包传输之前,当这些参数被组合时,它们会初始化LFSRs。流密码中使用的时隙号随着每个分组包改变;加密引擎会随每个分组包被重新初始化,而其他变量保持不变。
图3-6. 蓝牙加密过程
加密密钥(KC)是从当前链路密钥算出的,并且其长度以单字节为增量在1字节到16字节间变化,其值是在主从设备间的协商过程中被设置的。在本次协商期间,主设备给从设备一个建议的密钥大小。主设备建议的初始密钥大小是被制造商编程在控制器中的,且并非总是16字节。在产品实现中,可设置一个“最小可接受的”密钥大小参数来防止恶意用户驱使密钥大小降到最小的1字节——这会使该链路的安全性变低。
重要的是,注意E
0不是联邦信息处理标准(FIPS)批准的算法,且在算法强度方面没有受到详细审查。一项已公开的、理论上的已知明文攻击可以在2^38次计算中重新获得加密密钥,而暴力破解需要测试2^128个可能的密钥。如果通信需要FIPS认证的加密保护(例如,为了保护联邦机构间传输的敏感信息),这种保护可以通过在原生蓝牙加密之上层叠FIPS认可的应用级加密。
3.1.4 信任级别、服务安全级别和授权
除了四种安全模式,蓝牙允许不同层次信任级别和服务安全级别。
两种蓝牙信任级别是信任和不信任。一个可信任的设备与其他设备有固定的关系,并拥有所有服务的完全访问权限。不可信的设备与其他蓝牙设备没有已建立的关系,这导致不可信的设备受到对服务的限制访问。
可用的服务安全级别取决于使用的安全模式。安全模式1和3中,没有指定服务安全级别。安全模式2中,可强制执行以下安全性要求:
因此,可用的服务安全级别包括上述的任何组合,包括无安全保护(通常只用于服务发现)。需要注意的是,BR/EDR加密不能在没有认证的情况下被执行,因为加密密钥是来源于认证过程的产出(见3.1.3节)。
对于安全模式4,蓝牙规范为蓝牙服务规定了四个安全级别以便在SSP中使用。这些服务安全级别如下:
- 服务级别3——需要MITM保护和加密;用户交互是可接受的。
- 服务级别2——只需要加密;MITM保护不是必要的。
- 服务级别1——不需要MITM保护和加密。最少的用户交互。
- 服务级别0——无MITM保护、加密或者用户交互。
蓝牙架构允许定义可设置信任关系的安全策略:即使可信的设备也只能获取对特定服务的访问权限。虽然蓝牙核心协议只能认证设备而不能认证用户,但是基于用户的认证仍然是可能的。蓝牙安全架构(通过安全管理器)允许应用实施更细致的安全策略。蓝牙特定的安全控制是在运行在链路层的,对应用层施加的安全控制来说,该层是透明的。因此,蓝牙安全框架内通过应用层实现基于用户的认证和精细访问控制是可能的,虽然这样做已经超出了蓝牙规范的范围。
3.2 低功耗蓝牙的安全特性
因为低功耗蓝牙要支持计算和存储受限设备,LE安全不同于蓝牙BR/EDR/HS。一个区别是,LE配对结果是长期密钥(LTK)的生成,而不是链路密钥。虽然在根本上执行和链路密钥一样的机密的密钥函数,但是LTK是以不同的方式建立的。LTK是使用密钥传输协议生成的,而不是BR/EDR的密钥协商。也就是说,在配对过程中,一个设备确定了LTK,然后发送它到其他设备,而不是两个设备都独立地生成同样的密钥。
LE首次在蓝牙规范中引入了先进加密标准——CBC-MAC(AES-CCM)加密的计数器。除了提供强大的、基于标准的加密技术,对AES-CCM的包含为低功耗蓝牙设备以后通过原生FIPS-140认证铺平了道路。
LE还引入了一些特性,诸如私有设备地址和数据签名。被称为身份解析密钥(IRK)和连接签名解析密钥(CSRK)的新加密密钥分别支持这些特性。
随着LE的隐私功能启用后,IRK被用来解决私有向公共设备地址映射的问题。这允许受信任的设备从周期性变化的私有设备地址来确定另一个设备的公共设备地址。以前,设备会被分配一个静态的“公共”地址,该地址会在发现期间被设为可用。如果设备仍然是可发现的,它的位置很容易被攻击者跟踪。利用周期性变化的私有地址(公共地址的IRK加密形式)能减轻这一威胁。由于可发现的LE设备会发送(“广播”)身份信息,这个隐私功能特别有用。
CSRK被用于验证来自特定设备的加密签名数据帧。这允许蓝牙连接使用数据签名(其提供了完整性和认证)来保护连接,而不是使用数据加密(在AES-CCM情况下,其提供了机密性、完整性和认证)。
所有这些加密密钥(即LTK、IRK、CSRK)是在LE配对期间产生和安全分配的。参见3.2.2节的详细信息。
3.2.1 LE安全模式和等级
LE安全模式类似于BR/EDR服务级安全模式(即安全模式2和4)中,每个服务都可以有其自己的安全要求。然而,低功耗蓝牙还规定,每个服务请求也都可以有自己的安全要求。设备依靠遵循适当的安全模式和等级来强制执行服务相关的安全要求。
- LE安全模式1有多个和加密有关的等级。等级1表示没有安全性,这意味着不会发起认证和加密。等级2要求带加密的未认证配对。等级3要求带加密的认证配对。
- LE安全模式2有多个和数据签名有关的等级。数据签名提供了强大的数据完整性,但没有机密性。等级1要求带数据签名的未认证配对。等级2要求带数据签名的认证配对。
如果一个特定的服务请求和相关联的服务具有不同的安全模式和/或等级,那么以较强的安全要求为准。例如,如果两者之一要求安全模式1等级3,那对于安全模式1等级3的要求就要强制执行。
由于安全模式1等级3要求认证配对和加密,NIST认为这是这些模式/等级中最安全的,并强烈建议将其用于所有的LE连接。安全模式1等级1是安全性最低的,绝不应该被使用。同时,由于安全模式2不提供加密,安全模式1等级3强烈优于安全模式2。
3.2.2 LE配对方法
虽然LE采用类似于BR/EDR SSP的配对方法名称,但LE配对不使用基于ECDH的加密且不提供无窃听的保护。因此,如果攻击者能够捕获LE配对帧,他/她有可能确定产生的LTK。
因为LE配对使用的是密钥传输而不是密钥协商,所以在LE配对期间需要一个密钥分配的步骤。如图3-7所示,LE配对始于两个设备商定临时密钥(TK),其值取决于所使用的配对方法。然后,这些设备之间交换随机数值,并将基于这些数值和TK来生成短期密钥(STK)。随后,使用STK来给链路加密,这就容许安全的LTK、IRK和CSRK密钥分配。
图3-7. 低功耗蓝牙配对
以下的小节介绍了LE配对关联模型。与BR/EDR SSP一样,用于特定连接的关联模型是基于双方设备的输入/输出能力。重要的一点是,要注意LE配对关联模型名称虽然类似于BR/EDR SSP关联模型,但是模型提供的安全性是有很大的不同。
3.2.2.1 带外
如果两个设备都支持共同的OOB技术,如NFC或数据系链,它们会用OOB方法来配对。在这种模型中,TK通过OOB技术从一个设备传递给另一个设备。
TK应该是唯一的、随机的,其应该至少相当于6位的十进制数(即十六进制方位0x0-0xF423F)。当实际运用时,NIST强烈建议使用一个完整的128位随机二进制(非字母数字)值。
因为OOB配对产生一个认证的LTK,它应该提供至少一个百万分之一几率的保护来抵御MITM攻击——基于的前提是攻击者必须要成功地猜测出这个6位TK值。然而,OOB配对能提供的实际保护取决于该OOB技术本身所提供的MITM保护,因为一个成功的OOB窃听者会知道TK值,而非必须去猜测它。
3.2.2.2 万能钥匙进入
如果这些设备不支持共同的OOB技术,就要基于两个设备的输入/输出能力来确定要使用的配对方法。
如果在最低限度上,一个设备支持键盘输入,另一个支持显示输出(或也有键盘输入),则万能钥匙进入配对方法会被用于配对。在这种模型中,TK生成于每个设备上生成和/或输入的万能钥匙。规范要求万能钥匙的大小为6位数字;因此,可以提供最多20位的熵。
万能钥匙配对也产生了认证的LTK。因为使用了一个6位数的万能钥匙,攻击者将会有百万分之一猜测到正确万能钥匙的机会来执行MITM攻击。NIST建议为每一次配对使用一个唯一的、随机的万能钥匙来提供横跨多次配对的保护等级。
3.2.2.3 立即工作
如果因为设备的输入/输出限制,即不支持OOB也不支持万能钥匙进入关联模型,则立即工作配对方法会被使用。
与BR/EDR/HS中的SSP一样,从安全角度来说,LE的立即工作配对方法是最弱的一个配对选择。在这种模型中,TK被设置为全零(0x00)。因此,窃听者或MITM攻击者不需要猜测TK来生成STK。
立即工作配对方法会导致一个未认证的LTK,因为配对过程中没有提供MITM保护。
3.2.3 LE密钥生成和分配
一旦链路使用STK加密了,这两个设备就可以分配机密的密钥,如LTK、IRK和CSRK。在分配前,需要为密钥的生成确定两个选项。设备可以简单地生成一些随机的128位值,并将它们存储在本地数据库(规范中称为“数据库查找”)。另一个选项是使用单个128位的静态但随机的值来生成这些密钥;这个值被称为带有16位变化符(DIV)的加密根(ER),它对每个受信设备是唯一的。这个选项在规范中被称为“密钥层次结构”。例如,这些密钥可以使用下面的公式从ER、DIV和标识根(IR)得出:
LTK=d1(ER,DIV,0)
CSRK=d1(ER,DIV,1)
IRK=d1(IR,1,0)
函数d1被称为多元函数,该函数基于AES-128加密。然而,规范也允许其他密钥导出函数(例如,那些在NIST SP 800-108《
利用伪随机函数导出密钥的建议》中讨论的函数)的使用。
使用密钥层次结构的方法,设备不需要为每个受信设备存储多个128位密钥;相反,它仅需要存储其ER和每个每个设备唯一的DIV。重新连接期间,远程设备发送其EDIV(这是DIV的掩蔽版本)。然后,本地设备可根据ER和传送的EDIV来重新生成LTK和/或CSRK。如果数据加密或签名被成功设置,则验证了远程设备拥有正确的LTK或CRSK。如果不成功,则链路被丢弃。
注意,在上面的例子中,IRK是静态的和特定于设备的,因此可以先于配对过程生成(例如,在制造过程中)。
3.2.4 机密性、认证和完整性
AES-CCM被用于低功耗蓝牙中来提供机密性以及每个数据包的认证和完整性。LE没有像BR/EDR/HS那样提供单独的认证质询/响应步骤来验证它们都具有相同的LTK或CSRK。
因为LTK被用作加密密钥的输入,成功的加密设置提供隐含的认证。同样,数据签名也提供隐含的认证,即远程设备持有正确的CSRK——虽然不提供机密性。