蓝牙安全 —— SSP与PIN Code

5.1 SECURITY ARCHITECTURE

  • Pairing:创建一个或多个共享密钥的过程;
  • Bonding:存储密钥的动作,目的是形成受信任的设备-密钥对;
  • Device authentication:核实两个设备具有相同的keys;(例如伪造相同Address?)
  • Encrytion:消息加密;
  • Message integrity:防止消息伪造;

 

5.2 BR/EDR SECURE SIMPLE PAIRING

在这一节中,Spec介绍了Simple pairing的目标是在保证安全的情况下,去简化Pairing流程。

Simple pairing的两个安全目标:

  • 防止被窃听;
  • 防止MITM(man-in-the-middle:中间人) 攻击;

SSP的目标是超过使用16个字母、数字PIN提供的最大安全级别,以及蓝牙核心规范版本2.0 + EDR和早期版本中使用的配对算法。 请注意,许多符合蓝牙核心规范2.0 + EDR和早期版本的蓝牙设备使用4位数PIN或固定PIN,这些PIN通常已知,严重限制了链路的安全性。

 

【防止窃听】

防窃听主要依赖于健壮的Link Key以及健壮的加密算法。

 

Link key的强度取决于生成Link Key过程产生的熵的数量(这里的熵应该理解为信息熵,是信息论的一个概念,由香农提出,信息(熵)定义为离散随机事件的出现概率,它有一套固定的算法),在这里我们可以简单的理解,计算出的信息熵越大,Link key的强度越强。

 

SSP使用的防窃听手段是ECDH(Elliptic Curve Diffie Hellman)公钥加密算法,ECDH用于生成密钥,使用该算法是因为其计算量不是特别的大,蓝牙Controller的计算能力通常不会很高,使用这种算法不至于超出Controller的计算能力。

PINSSP的安全强度对比:

使用16位数字PIN(蓝牙核心规范版本2.0 + EDR以及之前的安全协议)可实现约53位的熵,而当使用整个62个字符集([0,... 9,'A',......'Z','a',...'z'])时,16个字符的字母数字,区分大小写的PIN会产生大约95位的熵

对于不支持Secure Connections功能的设备(在Core Specification v4.1中引入),使用FIPS认可的P-192 Elliptic Curve(ECDH之一,用于生成密钥),SSP具有大约96位的熵,这至少与“使用16个字符,字母数字,区分大小写的PIN”的熵一样好。

对于支持Secure Connections功能的设备,使用FIPS认可的P-256 Elliptic Curve(ECDH之一,用于生成密钥),安全简单配对具有大约128位的熵

可知,enable Secure Connections的SSP的安全强度是以上四种之中最高的。

 

【中间人攻击】Man-In-The-Middle Protection

当用户想要让两个设备相连时,其实两个设备并没有直接相互连接,而是在不知不觉中都连接到了第三个(攻击性)设备,这个设备扮演了他们试图配对的设备的角色,从而发生中间人(MITM)攻击。

蓝牙安全 —— SSP与PIN Code_第1张图片

中间人在中间进行转发,以使双方设备错误的认为已经相互连接。此时,双方交换的信息都会被中间人所监听,甚至可以修改。

 

为了避免MITM攻击,SSP提供了两种辅助的数字方法:numerical comparison或者passkey entry(passkey entry典型情景是PC与键盘,一个有输入能力但无显示能力,对端设备则有输出能力,PC显示6位十进制数字,键盘输入这组数字,输入正确则成功).

【认证的必要性】

举个例子:iPhone发起配对时,当前是不要求认证的,所以不会弹数字比较UI,此时, iPhone就不会察觉自己连接的是“预期设备”还是“同名的攻击者”。

而如果有认证动作,双方通过数字比较,就可以知道连接的设备是不是“预期设备”,因为,“同名攻击者”与两个设备相连时,产生的数值是不同的。

蓝牙安全 —— SSP与PIN Code_第2张图片

 

【安全级别】

如果SSP使用16位十进制数字,那么MITM成功加入到链接中的概率是10的16次方分之一,这是一个没有必要的超低概率。

SSP保护用户免受MIMT攻击的目标是1/1000000的攻击成功概率,因此,MIMT的保护强度选用6位十进制数的numerical comparison或者passkey entry。同时,使用6位数字可以使SSP符合FIPS标准。

虽然大多数用户认为只要他们没有泄露密码,4位密钥足以进行身份验证(即银行卡密码),使用6位数字可以使SSP符合FIPS标准,这种差异不易被感知。

 

【PIN Code的攻击防御情况】

传统的PIN CODE方式也可以抵御MITM攻击,但是由于可以通过穷举PIN码的方式进行破译,因此,无法抵御被动监听攻击。

你可能感兴趣的:(蓝牙技术)