安全蓝牙服务
Secure Bluetooth Service
假设 public space 中安装了多个设备,并为指定的 workers/technicians 广播 BLE 连接,以便能够与设备通信。可以采取哪些安全措施来防止不需要的用户连接到它们?
唯一想到的解决方案是密码,但组合数量有限。因此最终可能会猜到实际的密钥。
我假设有无限数量的授权用户(没有您可以绑定的简短、固定的设备列表)。
此类问题的典型解决方案是基于共享秘密的质询-响应。作为一个示例设计(这个设计有一些缺陷,我将在后面讨论):
- 客户端和设备共享一个预先安排的 128 位随机密钥
- 客户端进行未经身份验证的加密 ("Just Works") 连接
- 设备生成客户端读取的随机 128 位质询
- 客户端使用密钥加密挑战,returns它
- 设备验证加密是否正确,并验证连接
对于安全性较低的情况,这是不错的,非常容易实现,并且不需要设备或任何额外硬件的大量处理能力。但是,它确实存在问题。
首先,Just Works 加密对于暴力破解和 MiTM 来说并不难。如果设备经常被工作人员访问,并且攻击者有一定的奉献精神,这将失败。
如果设备有一个可以遮挡视线的显示器,那么改进的设计将使用 Passkey Entry 来执行初始配对,然后使用质询-响应进行身份验证:
- 设备生成 6 位密码
- 工作人员将 6 位密码输入客户端
- 客户端使用带 pin 的密码输入连接到设备
- 如上继续随机 challenge/response 进行身份验证
如果设备具有 NFC 芯片,则可以通过使用 NFC 分发配对密钥,然后使用共享密钥进行身份验证来简化用户操作。 (这称为 OOB 或 "out of band" 配对。)
所有这一切的关键在于,您首先要创建尽可能安全的连接,以防止窃听和 MiTM。然后,作为一个单独的问题,您使用共享密钥对客户端进行身份验证。
这个系统的一个可能的缺点是任何拥有共享秘密的人都可以冒充该设备。从你的描述来看,这并不是一个大问题,但如果是,你可以通过使用 public-private keys 来避免这个问题,这样设备持有一个私钥,所有客户端都持有 public 键。但是,这种情况下的 public 密钥是秘密的。 (您可以更进一步,发布客户端密钥并进行相互身份验证,但这可能有点矫枉过正,除非您的设备非常强大并且已连接网络。)
假设 public space 中安装了多个设备,并为指定的 workers/technicians 广播 BLE 连接,以便能够与设备通信。可以采取哪些安全措施来防止不需要的用户连接到它们?
唯一想到的解决方案是密码,但组合数量有限。因此最终可能会猜到实际的密钥。
我假设有无限数量的授权用户(没有您可以绑定的简短、固定的设备列表)。
此类问题的典型解决方案是基于共享秘密的质询-响应。作为一个示例设计(这个设计有一些缺陷,我将在后面讨论):
- 客户端和设备共享一个预先安排的 128 位随机密钥
- 客户端进行未经身份验证的加密 ("Just Works") 连接
- 设备生成客户端读取的随机 128 位质询
- 客户端使用密钥加密挑战,returns它
- 设备验证加密是否正确,并验证连接
对于安全性较低的情况,这是不错的,非常容易实现,并且不需要设备或任何额外硬件的大量处理能力。但是,它确实存在问题。
首先,Just Works 加密对于暴力破解和 MiTM 来说并不难。如果设备经常被工作人员访问,并且攻击者有一定的奉献精神,这将失败。
如果设备有一个可以遮挡视线的显示器,那么改进的设计将使用 Passkey Entry 来执行初始配对,然后使用质询-响应进行身份验证:
- 设备生成 6 位密码
- 工作人员将 6 位密码输入客户端
- 客户端使用带 pin 的密码输入连接到设备
- 如上继续随机 challenge/response 进行身份验证
如果设备具有 NFC 芯片,则可以通过使用 NFC 分发配对密钥,然后使用共享密钥进行身份验证来简化用户操作。 (这称为 OOB 或 "out of band" 配对。)
所有这一切的关键在于,您首先要创建尽可能安全的连接,以防止窃听和 MiTM。然后,作为一个单独的问题,您使用共享密钥对客户端进行身份验证。
这个系统的一个可能的缺点是任何拥有共享秘密的人都可以冒充该设备。从你的描述来看,这并不是一个大问题,但如果是,你可以通过使用 public-private keys 来避免这个问题,这样设备持有一个私钥,所有客户端都持有 public 键。但是,这种情况下的 public 密钥是秘密的。 (您可以更进一步,发布客户端密钥并进行相互身份验证,但这可能有点矫枉过正,除非您的设备非常强大并且已连接网络。)