搞定蓝牙——第五篇(SMP)
- 原理
- Security Manager(简称SM,不要想歪)
- 秘钥
- 配对
- 秘钥生成
- 特定秘钥分发
- 原理总结
原理
Security Manager(简称SM,不要想歪)
按照前面的试验,两个设备可以通过ble通讯了,但是,这两个demo都是带有spp的,也就是透明传输的意思,也就是说,这两个设备的ble通讯在空中的数据是透明的,也就意味着会被别的设备捕获到,然后被破解出来,如果用来传输一些私密的东西那当然是不安全的了,所以,ble协议栈中还有一个协议专门做这个事情(给空中传输的数据进行加密),Security Manager Procotol,简称SMP。
秘钥
我们知道,数据的加密是需要一套加密算法的,既能按照算法推演出加密后的数据,又能将加密的数据解密出来。这个时候这套算法就一定有个参数来修改(如果是固定,别人捕获了这个数据按照这套算法来就可以解密了),这个参数叫做秘钥。
配对
那么,接收数据的那个ble设备怎么知道发送数据的ble的秘钥呢,这个时候就需要在发送数据前协商一下了,这个过程叫配对(Pairing)。
你想用手机连接蓝牙手环,如果隔壁大哥和你有一个一样的手环,这两个设备的名字设备的名字都是一样的,那么,你怎么知道你连接的是你的手环呢?我们可以在手环屏幕上显示,有一个手机要连接手环,然后加一个按钮,用户自己确定是不是要连接,为了防止大哥也正在连接大哥的手环,可以在手机显示一串数字,在手环显示同样的数字,我们只需要判断是不是相同数字就知道了。这个过程叫做鉴权,属于配对的一个小步骤,这串数字叫做key。
鉴权有两类,
- OOB,这种事不需要人来参与的,例如通过两者本来已经连接的wifi来交互这个key
- MITM,需要人来确认key的。这里有几种方式:
A. 一个设备显示key,另外一个设备输入key
B. 两个设备显示相同key,用户确认
C. 两个设备都需要输入同样的key
D. 两个设备都不需要输入,这种就是没有鉴权了
当然,有些ble设备没有屏幕没有按键的,就无法输入key也无法查看key了,这就需要按照ble设备来决定使用哪种鉴权方式了,称为IO Capabilities。
有这六种方式。
NoInputNoOutput
DisplayOnly
NoInputNoOutput1
DisplayYesNo
KeyboardOnly
KeyboardDisplay
我们发现,我们手机连接手环只需要在买回来第一次输入key,后面就不需要了,这是因为,手机和手环的ble中的秘钥已经被存储到各自的存储器里面了,使用下次直接使用就行,这个行为叫做绑定。
秘钥生成
通过上面的步骤已经拿到key了,但是这个key可能会被旁边人偷窥到,这个key就不能直接用来作为秘钥了,两个ble这个时候使用这个key来作为临时秘钥来建立临时连接,然后使用这个临时秘钥来传输各自生成的真正的秘钥,最后使用这个真正的秘钥来加密要传输的数据。
特定秘钥分发
最后还有一步,就是ble其他协议还有一些秘钥和一些敏感数据,通过最后真正安全连接后来发送,称为特定秘钥分发。
原理总结
总结一下,SMP是一个给传输数据加密的安全管理协议。分为三大块,配对,秘钥生成,特定秘钥分发。配对其实有两种配对方式,LE legacy pairing和LE Secure Connections,后者更安全,蓝牙4.2以后才有,需要双方都支持这种。鉴权有两大类,OOB和MITM,主要取决于是不是需要人来参与,当然,设备优先使用OOB。在MITM中使用哪种鉴权方式,取决于两个设备是否能输入、是否能显示,具体看下图。