2016-07-29 102 views
1

所以,这可能是一个非常特殊的情况,但我希望有人能帮助我。iOS上通过蓝牙进行类似TLS的加密?

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

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

换句话说:我们需要自己构建加密。外围开发者和我一致同意使用TLS握手来交流密钥交换,以减少我们可能发生的事情数量。

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

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

谢谢:)

+0

加密的GATT属性在iphone4s及以上版本和iPad mini及以上(即任何带有BLE的设备)上都受支持。 BLE 4.2对加密整个连接有更好的加密和支持,但它的主要作用是在配对期间防止MITM攻击。这对你来说是一个很大的风险吗? – Paulw11

+0

你在外设中有多少内存/代码空间,以及你的cpu速度有多快? – Emil

+0

Pre-v4.2 BLE确实支持AES-CCM加密,但对窃听功能的保护有限。即如果窃听者在iPhone和外设之间的配对过程中出现,它可以获得共享密钥并在未来的加密通信期间收听。如果窃听者在配对过程中不存在,它将无法破译加密的数据。 – Preeti

回答

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证书解析代码(您可以在这里找到这些代码:https://tls.mbed.org/source-code )。
  3. 提取TLS中的重要部分并制作一个没有所有协商参数的简化协议(因为它们可以被硬编码)。例如,您不需要发送并能够解析所有类型的消息(例如ClientHello),处理分段等。只需直接发送随机值,证书,签名数据,加密数据即可。