2012-10-10 37 views
4

简介:我在没有完全熟悉蓝牙协议栈和协议的情况下遇到了这个问题,因此可能需要进行几轮编辑,因为我的假设中存在错误。蓝牙加密数据?

我试图连接到蓝牙设备,Scosche myTREK Pulse Monitor。我能够使用Android的“官方”应用连接到设备,并使用hcidump捕获了蓝牙包输出。我可以通过链接密钥交换来了解和理解连接过程;然而,设备然后发送一个HCI Encrypt Change事件,此后大多数(但不是全部)数据包被标记为ACL数据包,并且很难解释。

的基本问题是:不蓝牙加密数据,以及有没有办法安全地解密呢?这与转向ACL数据包有关吗?

下面是由hcidump为给定连接提供的数据包输出示例,从传递链接密钥开始。 (>指监视器发送数据)

> HCI Event: Link Key Request (0x17) plen 6 
    0000: ** ** ** ** ** **         ?????? 

< HCI Command: Link Key Request Reply (0x01|0x000b) plen 22 
    0000: ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ??????????????? 
    0010: ** ** ** ** ** **         ?????? 

> HCI Event: Command Complete (0x0e) plen 10 
    0000: 01 0b 04 00 ** ** ** ** ** **     ....?????? 

> HCI Event: Encrypt Change (0x08) plen 4 
    0000: 00 0c 00 01          .... 

> ACL data: handle 12 flags 0x02 dlen 12 
    L2CAP(s): Connect req: psm 1 scid 0x0040 

< ACL data: handle 12 flags 0x00 dlen 16 
    0000: 0c 00 01 00 03 02 08 00 40 00 40 00 01 00 00 00 [email protected]@..... 

< ACL data: handle 12 flags 0x00 dlen 10 
    0000: 06 00 01 00 0a 01 02 00 02 00     .......... 

> HCI Event: Number of Completed Packets (0x13) plen 5 
    0000: 01 0c 00 02 00         ..... 

> ACL data: handle 12 flags 0x02 dlen 16 
    L2CAP(s): Info rsp: type 2 result 0 
     Extended feature mask 0x0000 

< ACL data: handle 12 flags 0x00 dlen 16 
    0000: 0c 00 01 00 03 02 08 00 40 00 40 00 00 00 00 00 [email protected]@..... 

< ACL data: handle 12 flags 0x00 dlen 12 
    0000: 08 00 01 00 04 02 04 00 40 00 00 00    [email protected] 

> HCI Event: Number of Completed Packets (0x13) plen 5 
    0000: 01 0c 00 02 00         ..... 

> ACL data: handle 12 flags 0x02 dlen 16 
    L2CAP(s): Config req: dcid 0x0040 flags 0x00 clen 4 
     MTU 48 

< ACL data: handle 12 flags 0x00 dlen 18 
    0000: 0e 00 01 00 05 03 0a 00 40 00 00 00 00 00 01 02 [email protected] 
    0010: 30 00            0. 

> ACL data: handle 12 flags 0x02 dlen 14 
    L2CAP(s): Config rsp: scid 0x0040 flags 0x00 result 0 clen 0 
     Success 

> ACL data: handle 12 flags 0x02 dlen 36 
    L2CAP(d): cid 0x0040 len 32 [psm 0] 
     0000: 06 00 01 00 1b 35 11 1c 00 00 00 00 de ca fa de .....5......??·? 
     0010: de ca de af de ca ca fe 00 26 35 03 09 00 04 00 ???»????.&5..... 

< ACL data: handle 12 flags 0x00 dlen 33 
    0000: 1d 00 40 00 07 00 01 00 18 00 15 35 13 35 11 09 [email protected] 
    0010: 00 04 35 0c 35 03 19 01 00 35 05 19 00 03 08 12 ..5.5....5...... 
    0020: 00            . 

> HCI Event: Number of Completed Packets (0x13) plen 5 
    0000: 01 0c 00 02 00         ..... 

> ACL data: handle 12 flags 0x02 dlen 12 
    L2CAP(s): Disconn req: dcid 0x0040 scid 0x0040 

< ACL data: handle 12 flags 0x00 dlen 12 
    0000: 08 00 01 00 07 04 04 00 40 00 40 00    [email protected]@. 

> ACL data: handle 12 flags 0x02 dlen 12 
    L2CAP(s): Connect req: psm 3 scid 0x0041 

< ACL data: handle 12 flags 0x00 dlen 16 
    0000: 0c 00 01 00 03 05 08 00 40 00 41 00 00 00 00 00 [email protected] 

> HCI Event: Number of Completed Packets (0x13) plen 5 
    0000: 01 0c 00 02 00         ..... 

> ACL data: handle 12 flags 0x02 dlen 16 
    L2CAP(s): Config req: dcid 0x0040 flags 0x00 clen 4 
     MTU 895 

< ACL data: handle 12 flags 0x00 dlen 18 
    0000: 0e 00 01 00 05 06 0a 00 41 00 00 00 00 00 01 02 ........A....... 
    0010: 7f 03            .. 

< ACL data: handle 12 flags 0x00 dlen 16 
    0000: 0c 00 01 00 04 03 08 00 41 00 00 00 01 02 f5 03 ........A.....?. 

> HCI Event: Number of Completed Packets (0x13) plen 5 
    0000: 01 0c 00 02 00         ..... 

> ACL data: handle 12 flags 0x02 dlen 18 
    L2CAP(s): Config rsp: scid 0x0040 flags 0x00 result 0 clen 4 
     MTU 1013 

此时,由装置输送的有效载荷急剧变化过程之间,在一次运行中要少得多。我已经放在日志的其余部分在引擎收录为简洁:Link

+0

感谢您的答案,迄今为止,Kenogu,但这个问题显然是脱离主题。 –

+0

有没有一个你会推荐的堆栈而不是这个堆栈? –

+0

可能[crypto](http://crypto.stackexchange.com),但Google也会想到。 –

回答

6

是,蓝牙在空中加密数据。是的,这适用于ACL数据。但是您通过HCI界面看到的数据已经被解密。你的问题是你不知道如何解释ACL数据流。在ACL数据之上有几个级别的协议。除非你的设备记录了他们的协议,否则你可能会运气不好。这很可能是他们正在运行SPP(串行端口配置文件)或RFCOMM与android应用程序交谈。因此,您有以下嵌套协议层来解码SPP - > RFCOMM - > L2CAP - > ACL数据。

它也可能是您的设备/应用程序做额外的应用级加密对SPP的顶部。那样的话,你运气不好。