在iOS上通过蓝牙进行类似TLS的加密?

时间:2016-07-29 15:53:44

标签: ios sockets encryption bluetooth tls1.2

所以,这可能是一个非常特殊的情况,但我希望有人可以帮助我。

我需要通过蓝牙与外设通话。我们还控制固件的设备。现在的问题是:我们需要确保没有人能够窃听,因为要发送的信息将是保密的。这意味着我们需要加密通信。

从我看到的是蓝牙LE 4.2支持加密,但我们必须能够支持比6s更老的iPhone。这意味着:没有BLE 4.2,也没有内置加密。

换句话说:我们需要自己构建加密。外围开发人员和我同意使用TLS握手来传达密钥交换,以减少我们可能破坏的内容。

我花了最近几天寻找解决方案以及如何解决这个问题。然而,这似乎是一个非常具体的案例,并没有很多人解决。我能找到的所有库都依赖于套接字。而我所能找到的关于iOS套接字的是IP网络,而不是蓝牙。

有没有人有这种蓝牙通信的经验?或者其他一些建议?也许是我忽视的一些明显的解决方案?

谢谢:)

1 个答案:

答案 0 :(得分:3)

TLS的整个基础建立在信任基础上,即证书,证书颁发机构和认证链,并确保所有发送和接收的数据都经过身份验证。您可以说整个安全性依赖于身份验证部分。加密本身非常简单。你应该回答的一个问题是:

是否可以连接到模仿协议的外围设备,即非由您制造的外围设备?如果没有,您的场所必须在每个外围设备中都有一些(唯一的)秘密,例如私钥。相应的公钥可以由您自己的CA签名。 CA的公钥可以捆绑在您的智能手机应用程序中(因此您的应用程序中只需要一个密钥,而不是所有外围设备的密钥)。这样,您可以验证您连接的外围设备是否由您的公司制作。此公钥也应该是外围设备的 标识符。如果您的外围设备中没有私钥/公钥对,并且无法进行密钥比较,也没有任何共享的对称密钥,据我所知,不可能避免中间人攻击。

由于每个智能手机最初也必须经过未经身份验证,如果您需要稍后恢复会话,则需要为外围设备中的每个智能手机分配一些唯一ID。

考虑到这一点,您基本上有三种不同的选择:

  1. 尝试修改一些现有的TLS服务器软件,如mbedtls,通过BLE而不是套接字发送所有数据包。我觉得这可能是非平凡的,因为它似乎是基于阻塞套接字的概念。
  2. 只需阅读https://tools.ietf.org/html/rfc5246上的TLS规范,并实现一个只有您需要的功能的最小TLS服务器。如果你只做一个最小的实现并使用现有的构建块,如RSA,AES,SHA-2,ECDHE,X.509证书解析代码,那么这实际上并不像看起来那么难(你可以在这里找到它们:{ {3}})。
  3. 在TLS中提取重要部分,并在没有所有协商参数的情况下制作简化协议(因为它们可以硬编码)。例如,您不需要发送并能够解析所有类型的消息(例如ClientHello),处理碎片等。只需直接发送随机值,证书,签名数据,加密数据。