ios - 在 iOS 上通过蓝牙进行类似 TLS 的加密?
<p><p>所以,这可能是一个非常特殊的情况,但我希望有人可以在这里帮助我。</p>
<p>我需要通过蓝牙与外围设备通话。我们还控制其固件的设备。现在的问题是:我们需要确保没有人可以窃听,因为要发送的信息是保密的。这意味着我们需要加密通信。 </p>
<p>据我所知,蓝牙 LE 4.2 支持加密,但我们必须能够支持比 6s 更旧的 iPhone。这意味着:没有 BLE 4.2,也没有内置加密。</p>
<p>换句话说:我们需要自己构建加密。外围开发人员和我同意使用 TLS 握手来传达 key 交换,以减少我们可能破坏的东西的数量。</p>
<p>过去几天我一直在寻找解决方案以及如何解决这个问题。然而,这似乎是一个非常具体的案例,并没有很多人处理过。我能找到的所有库都依赖于套接字。我能找到的关于 iOS 套接字的所有信息都是 IP 网络,而不是蓝牙。</p>
<p>有人有这种蓝牙通信的经验吗?或者其他一些建议?也许我忽略了一些明显的解决方案?</p>
<p>谢谢:)</p></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>TLS 的整个基础建立在信任之上,即证书、证书颁发机构和证书链,并确保所有发送和接收的数据都经过身份验证。您可以说整个安全性依赖于身份验证部分。加密本身非常简单。您应该回答的一个问题是:</p>
<p>是否可以连接到模仿您的协议(protocol)的外围设备,即不是您制造的外围设备?如果没有,在您的前提下,您必须在每个外围设备中拥有一些(唯一的) secret ,例如私钥。对应的公钥可以由你自己的 CA 签名。 CA 的公钥可以捆绑在您的智能手机应用程序中(因此您的应用程序中只需要一个 key ,而不是所有外围设备都需要一个 key )。这样您就可以验证您连接的外围设备是否由您的公司制造。此公钥也应该是外围设备的 <em></em> 标识符。如果您的外围设备中没有私钥/公钥对并且无法进行密码比较并且没有任何共享的对称 key ,据我所知,这是不可能避免中间人攻击的。 </p>
<p>由于每部智能手机最初也必须未经身份验证,因此如果您需要稍后恢复 session ,则需要在外围设备中存储分配给每部智能手机的一些唯一 ID。</p>
<p>考虑到这一点,您基本上有三种不同的选择:</p>
<ol>
<li>尝试修改一些现有的 TLS 服务器软件,例如 mbedtls,以通过 BLE 而不是套接字发送所有数据包。我觉得这可能很重要,因为它似乎是基于阻塞套接字的概念。</li>
<li>只需阅读 <a href="https://www.rfc-editor.org/rfc/rfc5246" rel="noreferrer noopener nofollow">https://www.rfc-editor.org/rfc/rfc5246</a> 上的 TLS 规范,并实现一个仅包含您需要的功能的最小 TLS 服务器。这实际上并不像最初看起来那么难,如果你只做一个最小的实现并使用现有的构建 block ,如 RSA、AES、SHA-2、ECDHE、X.509 证书解析代码(你可以在这里找到那些:<a href="https://tls.mbed.org/source-code" rel="noreferrer noopener nofollow">https://tls.mbed.org/source-code</a> )。</li>
<li>提取 TLS 中的重要部分,并制作一个没有所有协商参数的简化协议(protocol)(因为它们可以被硬编码)。例如,您不需要发送并且能够解析所有类型的消息(例如 ClientHello)、处理碎片等。只需直接发送随机值、证书、签名数据、加密数据即可。</li>
</ol></p>
<p style="font-size: 20px;">关于ios - 在 iOS 上通过蓝牙进行类似 TLS 的加密?,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/38662923/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/38662923/
</a>
</p>
页:
[1]