如何确保应用程序与物联网设备之间的通信安全?


18

我目前正在从事一个项目,该项目包括移动应用程序(当前使用Ionic平台)和嵌入式设备之间的蓝牙通信。为了进行比较,我们的产品类似于智能锁

安全是最重要的问题,我们正在研究确保硬件和软件不被黑客入侵的方法。我们应采取什么步骤来确保我们的系统安全?

编辑:是的,我们当前正在加密通信,并且在设备与我们的服务器通信时使用HTTPS。


使用HTTPS?您要对两个设备都进行编码吗?加密?
Mawg说恢复Monica

1

2
@Mawg据我所知,HTTPS不适用于蓝牙(或者至少不适用于规范/健全的意义)。
goldilocks

1
我投票结束这个问题是因为题外,因为这无法显示这是特定于IoT的。它只是保护设备之间的通信。
Helmar

4
@Helmar设备之间的通信是IoT的一项非常重要的功能,甚至是一项定义功能,因此我看不到为什么这个问题会成为话题。
吉尔(Gilles)“所以,别再邪恶了”

Answers:


13

为了确保您的设备足够安全,我有几点建议:

  1. 为蓝牙通信添加一些加密。我建议不要使用加密密钥。例如,您可能要求用户在移动应用程序的初始设置中扫描设备上,包装盒中印刷的QR码等,也许使用AES密钥?由你决定。这是为了防止某人看到以纯文本形式通过空中传输的密码。
  2. 如果可以,请远离您选择的加密算法的ECB(使用CBC)模式,因为它可能会提供一些有关传输数据的信息。有关更多信息,请参见此处
  3. 在蓝牙数据传输上,请确保包括一些唯一的ID,以使消息不会重复(例如,您可能包括时间戳记)。您可能还实现了一些类似于TOTP的系统。
  4. 在设备上放置一个可以轻松刷新的端口,以防万一您意识到该软件存在错误(并且由于某种原因您无法对其进行OTA更新),该设备并非昂贵的镇纸,而仅仅是一个设备需要将其插入PC并刷新到新软件。
  5. 附加:为了确保拥有流氓根证书的人(可能是自行发行并安装在客户端设备上的人)无法拦截您的服务器通信,请验证HTTPS证书。这是一个针对Android的要求,您也必须能够为iOS找到类似的资源

另外,如果您想了解有关用于保护设备安全的加密和加密的更多信息,请查阅此(免费)电子书。它讨论了加密算法的好坏实现,应该可以帮助您保护产品安全。(注1:请,请不要创建自己的算法。注2:我不隶属于crypto101或lvh。)


2
“如果可以,请远离欧洲央行”。不,不好的建议。可以通过的建议是“永远不要使用ECB”,但仍然不完整。更好的答案是说,如果您在代码中输入字母CBC,那说明您做错了。特别是AES-CBC无法确保通信的完整性或真实性。
吉尔(Gilles)“所以,别再邪恶了”

@Gilles ECB肯定比当今所有的物联网设备好,后者仅以纯文本或具有设定值的异或形式传输内容,但是的,ECB几乎不会使您的产品“不可入侵”(技术上没有,但是您可以尝试做一些事情,以使其在尽可能长的时间内尽可能地保持当前的安全性,并且这不涉及ECB,而是涉及到AES-CBC 256的正确实现。
2016年

13

如果可以使用端到端TCP,请使用端到端TLS(例如,使用HTTPS)。

不要重新发明轮子,尤其是在涉及密码学时,大多数人都会弄错它。除非设备资源不足以支持TLS,否则如果您降至AES级别,那就错了。#1错误是加密而忘记了身份验证-如果您在服务器和中间人之间使用加密通道,而不是在服务器和设备之间使用加密通道,则加密没有任何好处。如果您不能使用TLS,请确保所使用的任何协议都对所有内容进行身份验证,并对需要保密的内容进行加密。

为了安全地使用TLS,请从每个参与者的角度考虑您需要具备的保证。通常,设备需要知道它正在与合法服务器通信。这意味着它必须检查服务器的证书。设备必须具有记录为受信任的证书颁发机构的X.509证书;这就要求存储不能被攻击者修改,但是不需要存储的任何机密性。请注意,您不应该直接对服务器的证书进行硬编码,因为如果证书受到威胁,那将无法让您轻松替换该证书。而是,设备存储预期的身份服务器的名称(主机名),以及保证某个公钥属于期望的主机名的证书颁发机构的证书。再一次,不要重新发明轮子,而是依靠TLS库或应用程序提供的证书检查。

如果服务器需要知道它正在与合法客户端通信,则每个客户端都需要具有自己的客户端证书。这需要在客户端上进行机密存储。将客户端证书从TLS库传递到TLS会话打开功能,或在应用程序配置中进行设置。

这样可以确保服务器和设备之间的通信安全。如果移动应用程序可以直接与设备通信(例如,允许其在本地wifi网络上断开连接操作),则需要首先在智能交换机和移动电话之间执行配对。配对意味着交换密钥,如果资源允许,最好交换公共密钥,否则意味着达成秘密密钥协议。配对的目的是确保每个设备都知道与谁通话。

无论是直接从移动设备到智能交换机还是通过服务器,您都需要确保控制通道的安全。考虑授权:是否有对交换机的不同访问级别,例如允许进行重新配置的控制级别和仅允许进行开/关切换的基本通道?通常,在建立安全通道(如果可能的话,为TLS)之后通过身份验证步骤来处理。

另一个注意事项是固件更新。这是一个棘手的问题:一方面,没有绝对的安全性,因此您将不时地应用安全补丁。另一方面,固件升级机制是一件复杂的事情,本身可能会存在错误。至少,请确保您的固件升级已签名。纯粹依靠通信通道的安全性进行升级是不明智的,因为基于安全通道的可信度要大于基于静态安全验证的可信度,有时您可能希望在没有网络连接的情况下应用固件更新。除了验证签名之外,理想情况下,您还应具有防止回滚的保护措施,以便对手可以

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.