涉及到Bluetooth的Security相关的概念很多,并分散到不同的文档(Specification, Whitepaper)中,甚至Specification中不同的部分都零散着Security的论述。导致给理解Bluetooth的Security带来不少的困难。也许是因为大家理解不够的缘故吧,使得各种Bluetooth产品的对于Security的UI有很大的差异。从而对于用户来说,本来很Simple的Bluetooth产品反而使用起来颇为繁琐了。也许,也有另外一个原因,是Bluetooth Specification过于灵活了,太多的Optional Requirement了吧。
1,Bluetooth Security的不同安全模式
【被访问者】
Bluetooth Device根据不同的安全需求可以处于不用的安全模式(厂家决定或者让用户选择)。
Security Mode 1:
没有任何的安全检查
Security Mode 2:
Service Level的安全检查,在Link的时候并不需要进行安全检查,只是在Link建立后,在访问Service之前(channel establishment request – 接收到L2CAP_ConnectReq之前)进行安全检查。
Security Mode 2中的各种Service又可以有不同的安全要求,从而进行不同的安全检查
-------------------------------------------------------------------------------------------------------------------------------
. Authorization Required:
在访问该Service之前,需要进行Authorization (授权认证); Authorization包含了Authentication(身份认证),这意味着,在授权(Authorization)之前你需要知道对方是谁(Authentication)。如果需要访问处于该安全等级的Device中的Service,有下面的途径:
1)Trusted Device可以自动可以访问
2)Untrusted Device每次访问Service之前都需要一个Authorization步骤
. Authentication Required:
在访问该Service之前,需要Authentication(身份认证)。
. Encryption Required:
在访问该Service之前,切换到加密模式(encrypted mode)
-------------------------------------------------------------------------------------------------------------------------------
Security Mode1可以看作Security Mode 2的一个特例。当Security Mode 2的Device中的任何一个Service都没有上述的安全要求的时候,也就意味着不进行任何的安全检查 --- 等同于Security Mode1。
Security Mode 3:
Link Level的安全检查,在Link建立之前(发出LMP_link_setup_complete之前),进行安全检查。安全检查主要是Authentication,也可以同时进行Encryption。
请注意Authorization (授权认证)和Authentication(身份认证)之间的区别。
Authentication:对对方Device进行身份认证,证明对方是你认识的人。技术上要求两个Device之间存在一个Link Key。如果Authentication的时候没保存有Link Key,就进行Paring(让用户输入Passkey)。注意,在一个session期间(连接开始到断开连接),可能进行很多次Authentication。
Authorization:这是指在Security Mode 2下,控制对不同Service的访问权限。在UI上可以表现为显示一个对话框”A想要访问你的X Service,是否允许?” 。 Authorization包含了Authentication。
【访问者】
对于访问对象Device A,访问者Device B可以是A的:
. Trusted Device
该设备已经通过Authentication,并保存有一个Link Key,并被标示(可以通过一个UI选择)为”Trusted”。
. Untrusted Device
该设备已经通过Authentication,并保存有一个Link Key,但没有”Trusted”标示。
. Unknown Device
该设备没保存有任何安全信息。
由此可见,对于保存有Link Key的Trusted Device和Untrusted Device,都可以自动通过Authentication检查。但只有Trusted Device可以自动通过Authorization检查。
2,几个相关概念的定义
Paring:
这是指通过UI输入一个Passkey (PIN),建立一个Link Key的过程。Paring可以发生在在Bonding的过程中,或者发生在如果两个设备之间没有保存的Link Key的情况下进行Link或者channel连接而需要Authentication的时候。
Bonding:
这是指通过Paring建立一个Link Key,并把该Link Key保存起来的过程。这个保存起来的Link Key可以供以后的Authentication使用。Bonding可以分为General bonding和Dedicated bonding;General bonding不仅仅Paring,还可以对高层(high layer)进行安全参数设置(比如设置”Trusted”标示)。
Passkey:
这是一个UI层次的概念,由用户输入。Passkey在UI之外的地方也被称为PIN。Passkey可以长达16个字符。
Link Key:
也称为Authentication Key,由Passkey产生,用于进行Authentication并产生Encryption Key。Link Key为128 bits。
Encryption Key:
由Link Key产生,用于进行加密(encryption)。可以是8-128 bits。可变长的主要原因是不同国家对出口产品的加密算法有不同的限制。
Encryption Key是经常发生改变的,每当切换到加密模式就产生一个新的Encryption Key。
而Link Key就相对稳定一些,但在不同的时候/不同的环境下有不同类型的Link Key被使用:
The combination key Kab: 由两个Device组合产生Link Key
The unit key Ka: 由一个Device产生Link Key;Kab会更安全一些,但条件不允许的情况下也可以采用Ka
The temporary key Kmaster: 这是用于某些特殊目的(比如Master广播数据到所有的Slave)而临时产生的,使用完成后切换回原来的Link Key
The initialization key Kinit: 在没有任何Link key的情况下需要产生Kab或者Ka作为Common Link Key的时候,使用Kinit作为临时Link Key来保证新产生的Common Link Key被安全地交换。
参考:
"Specificaiton of the Bluetooth System" 2.0 + EDR
"Bluetooth Securtiy Architecture" 1.0
"Bluetooth Security White Paper" 1.0