我正在研究Android和传感器之间的BLE连接,当我试图解密Wireshark .pcap文件时,我遇到了问题,因为我不太确定LTK是如何形成的。
有一个屏幕截图与包Encryption_Req & Encryption_Rsp关于我得到了什么,使用德州仪器用嗅探器。
我认为LTK是与SKDm & SKDm或SKDs &SKDm相匹配的。
意思是: BE952D3D760331A834CC6A4274417E48 (SKDm -> SKD)
或: A834CC6A4274417E48BE952D3D760331 (SKDs -> SKDm)
我不确定这是正确的还是我遗漏了什么。
发布于 2018-05-24 22:08:14
LTK是存储在设备中的长期密钥,在键合后进行交换。在遗产配对中,从设备只需选择一个随机LTK并将其发送给主程序。在中,LTK来自diffie交换。
LL_ENC_REQ和LL_ENC_RSP数据包包含“会话密钥多样化器”,而不是LTK (因为如果在启用加密之前以明文形式发送密钥,这会破坏安全性)。为了确保每个新连接的安全,每个连接都使用一个新的会话密钥。若要创建此会话密钥,每个设备都会生成8+4字节随机数据。SKDm和SKD值连接到一个16字节的SKD。会话密钥由LTK作为值和SKD作为密钥的AES加密生成。注意,在连接SKDm和SKD之后,在将其输入到标准的AES函数之前,将其全部反转,因为蓝牙很少使用endian,但AES标准使用的是大endian。
所以487E4174426ACC34A83103763D2D95BE是你的SKD格式,所有的AES库期待。
LL_ENC_REQ中的Rand和EDIV字段作为标识符发送到从键,以便它可以在其数据库中查找LTK。
应该将IVm和IVs值连接起来以获得IV (而不是反转)。此IV被用作AES-CCM加密中的nonce的一部分.参见蓝牙核心规范5.0,第6卷,E部分,第2.1章。
https://stackoverflow.com/questions/50508258
复制相似问题