即使在密钥(PIN)更改后,蓝牙设备也会保持连接

时间:2013-10-01 17:34:27

标签: bluetooth

我正在使用SPP蓝牙模块在我的Android手机应用和模块之间发送数据。我今天偶然发现了一件有趣的事情。

  1. 通过输入密码
  2. 与我的模块配对
  3. 我通常可以在我的应用和模块之间来回发送数据
  4. 从我的应用程序中,我断开与模块的连接并关闭我的应用程序。
  5. 在模块上,我将其密钥更改为新值。
  6. 我重新打开我的应用程序,仍然可以交换数据。我不需要再次进行配对。当我第一次配对时,我的手机和模块交换的所有安全信息(使用旧的密钥)似乎仍然有效,即使更改模块上的PIN后也是如此。
  7. 然后我关闭了我的应用并取消了蓝牙设置中的设备。
  8. 之后,我将这两个设备配对,以确保Passkey更改实际上已被接受,而且确实足够了。我现在只能配对新的PIN码。
  9. 令我惊讶的是,在上面的第5点,即使没有在我的手机上更新PIN,一切仍然有效。我计划通过在向模块发送更改PIN的命令后使用反射调用removeBond()来解决这个问题,因为这对我的特定用例来说已经足够了。但是,如果PIN更改可能由其他东西触发,那么我的手机将无效。

    我的问题是这是否正常。蓝牙规格很长,所以我希望有人知道这一点。我想在更改蓝牙设备的密码后,所有已与之配对的设备都必须再次通过配对过程,这次使用新的密钥。但上述步骤表明情况并非如此。这是我的蓝牙模块(Bluegiga WT12)上的错误还是这种预期的行为?有没有人遇到过这个?

    谢谢。

    干杯!

1 个答案:

答案 0 :(得分:0)

因此,蓝牙规格比我想象的更友好。我在这一段中找到了答案:

蓝牙PIN用于验证两个蓝牙设备(尚未验证) 之前交换过的链接密钥)并创建一个可信任的关系 它们之间。 PIN用于配对程序(参见第11.2节) 第241页)生成用于进一步验证的初始链接密钥。

所以passkey不像路由器中的密码。它只是两个设备在连接时需要知道的序列,以便一个人验证另一个。一旦他们确信他们可以相互信任,他们就会交换链接密钥,并将其用于未来的通信。然后,密钥/密码不相关。

我希望我理解这一点。

非常抱歉发布太快。

干杯!