首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何实现到CBPeripheral的安全连接?

如何实现到CBPeripheral的安全连接?
EN

Stack Overflow用户
提问于 2015-06-18 01:40:50
回答 1查看 1.5K关注 0票数 0

我只想要可信的设备连接到我的外围设备。我不希望任何人能够发现我的外围设备的服务和特性。因此,在连接到外围设备之前,我想用一个引脚代码显示一个警报。有可能这样做吗?最简单的方法是什么?

我找不到这个问题的答案,试图通过在权限中添加CBAttributePermissionsWriteEncryptionRequired来实现加密特性:

代码语言:javascript
复制
self.characteristic = [[CBMutableCharacteristic alloc] initWithType:[JUUIDBuilder uuidWith:@"1706"]
                                                         properties: CBCharacteristicPropertyWrite
                                                              value:nil permissions:CBAttributePermissionsWriteEncryptionRequired];

由于某些原因,这没有帮助,因为我可以一直从我的第二个设备上写入值,而不需要任何安全检查。( CBAttributePermissionsReadEncryptionRequired的文档显示:

...the特性配置为只允许可信设备读取或订阅其值。当连接的远程中心试图读取或订阅此特性的值时,Core蓝牙尝试将本地外围设备与中心设备配对,以创建安全连接。

对我来说没什么意义。什么是“可信设备”?

有谁可以帮我?什么是只允许连接到具有密码确认的可信设备的最佳实践?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-18 02:03:23

您无法阻止发现服务和特性。您可以为一个主要服务做广告,并提供没有广告的辅助服务,但是一旦连接完成,所有的服务和特性都会被显示出来。

如果您指定一个属性需要加密,那么当您第一次尝试读取/写入该特性时,将启动一个配对(技术结合)过程。此过程交换加密密钥,并使设备相互“信任”。

如果您的外围设备和中心设备都是iOS8设备,那么我已经发现,如果两个设备都配置了相同的iCloud帐户,那么信任就已经建立了(想必是用于类似切换的功能),您将永远不会看到配对对话框。当我试图测试加密特性时,这给我带来了相当大的困惑。

如果您测试使用不同iCloud帐户的设备,那么您应该会看到配对对话框。

即使是配对过程也不会“保护”您的服务/特性,如果“攻击者”控制了这两种设备,因为它们可以简单地完成配对过程。配对/绑定可以保护数据不被窃听,因为传输将被加密。

要真正保护服务,在公开数据之前,您需要某种形式的挑战/响应,涉及到某个特性。

例如,中央需要读取由外围设备随机设置的特征"A“的值。然后,中心需要计算对该值的正确响应,并将其写回"A“。只有在此值正确的情况下,外围设备才会对剩余的特征设置值(或者接受来自中央的其他特征的输入)。

这个解决方案只有在您的挑战/响应机制未被破坏的情况下才是安全的,而且可能会击败未确定的攻击者。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30905157

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档