在BLE开发及debug中,我们常常会需要抓空中包,但是很多时候会遇到抓到的包是加密的(常见带锁标识)。
那么该如何去解密这些data呢?
首先来看一下,数据加密的原因,这主要源于BLE对数据的隐私保护,会使用某种加密方式,通过link key来加密信道数据,以BT core spec4.2为例,该link key为Long term key(LTK)。所以为了解密数据,就需要知道该LTK。
常用的方式,是通过HCI log来获取,当然,如果您有将该Key 写入过Flash或filesystem保存,也可以通过读出的方式打印出来。
举例:
一般,BLE中link key出现在SM的pairing过程(Phase 2)完成以后。首先可通过查找command:HCI_LE_Long_Term_Key_Request(Responder)或HCI_LE_Start_Encryption(Initiator),从其中的参数中找到long_term_key,将Value值倒序输出,即为Link key。
1)以just work配对方式为例,HCI log中,查找Long term key方式如下图示,找到key value为67e299ae:12bca990:f6bbeba9:eaac1eca。
2)在Air sniffer log中,与之对应的link key为CA1EACEA:A9EBBBF6:90A9BC12:AE99E267,输入->验证,参考下图:
如此步骤后,就可以看到air data了。
当然,对于解密传统BT air包,是相似的原理。