iOS上通过蓝牙进行类似TLS的encryption?

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

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

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

换句话说,我们需要自己构buildencryption。 外围的开发者和我同意使用TLS握手来交stream密钥交换,以减less我们可能破坏的事情的数量。

我花了最近几天寻找解决scheme,以及如何解决这个问题。 但是,这似乎是一个非常具体的案例,并不是很多人已经解决了。 我能find的所有图书馆都依赖于套接字。 而我所能find的有关iOS的套接字是IPnetworking,而不是蓝牙。

有没有人有这种蓝牙通信的经验? 或者其他一些build议? 也许我忽略了一些明显的解决scheme?

谢谢 :)

TLS的全部基础build立在信任基础之上,即证书,证书颁发机构和authentication链,并确保发送和接收的所有数据都得到authentication。 你可以说整个安全依赖于authentication部分。 encryption本身是非常简单的。 你应该回答的一个问题是:

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

由于每个智能手机最初也必须经过未经authentication的处理,如果您稍后需要恢复会话,则需要将分配给每个智能手机的唯一ID存储在外围设备中。

考虑到这一点,你基本上有三个不同的select:

  1. 尝试修改一些目前的TLS服务器软件(如mbedtls),通过BLE而不是套接字发送所有数据包。 我有一种感觉,这可能是不平凡的,因为它似乎是基于阻塞套接字的概念。
  2. 只需阅读https://tools.ietf.org/html/rfc5246上的TLS规范,然后仅使用您所需的function实现最小的TLS服务器。 这实际上并不难,因为它可能看起来像第一,如果你只做一个最小的实现,并使用现有的构build块,如RSA,AES,SHA-2,ECDHE,X.509证书parsing代码(你可以在这里find: https ://tls.mbed.org/source-code )。
  3. 提取TLS中的重要部分,制作一个没有所有协商参数的简化协议(因为它们可以被硬编码)。 例如,您不需要发送并能够parsing所有types的消息(例如ClientHello),处理分段等。只需直接发送随机值,证书,签名数据,encryption数据即可。