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

安全是最重要的问题,我们正在研究确保硬件和软件不被黑客攻击的方法。

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

评论

使用HTTPS?您要对两个设备都进行编码吗?加密吗?

Consiedr还询问了security.stackexchange.com

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

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

@Helmar设备之间的通信是IoT的一项非常重要的功能,甚至是一项定义功能,因此我看不到为什么这个问题会引起关注。

#1 楼

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


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

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

评论


“如果可以,请远离欧洲央行”。不,不好的建议。可以通过的建议是“永远不要使用ECB”,但是它仍然不完整。更好的答案是说,如果在代码中键入字母C-B-C,则说明这样做是错误的。特别是AES-CBC无法确保通信的完整性或真实性。

–吉尔斯'所以-不再是邪恶的'
16 Dec 7'在0:26

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

–以前
16 Dec 7'在0:33



#2 楼

如果可以使用端到端TCP,请使用端到端TLS(例如,使用HTTPS)。这是错误的。除非设备资源不足以支持TLS,否则如果您降至AES级别,那就错了。 #1错误是加密而忘记了身份验证-如果您在服务器和中间人之间使用加密通道,而不是在服务器和设备之间使用加密通道,则加密没有任何好处。如果您无法使用TLS,请确保使用的协议能够对所有内容进行身份验证,并对需要保密的内容进行加密。

要安全地使用TLS,请考虑一下您需要具备的保证,从每个参与者的角度来看。通常,设备需要知道它正在与合法服务器通信。这意味着它必须检查服务器的证书。设备必须具有记录为受信任的证书颁发机构的X.509证书;这就要求存储不能被攻击者修改,但是不需要存储的任何机密性。请注意,您不应该直接对服务器的证书进行硬编码,因为如果证书受到威胁,那将无法让您轻松替换该证书。而是,设备存储服务器的预期标识(主机名)和保证特定公钥属于预期主机名的证书颁发机构的证书。再一次,不要重蹈覆辙,请依靠TLS库或应用程序提供的证书检查。有自己的客户证书。这需要在客户端上进行机密存储。将客户端证书从TLS库传递到TLS会话打开功能,或在应用程序配置中进行设置。

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

您还需要确保控制通道的安全性,无论它是直接从移动设备转到智能交换机还是从控制面板转到智能交换机通过服务器。考虑一下授权:对交换机有不同级别的访问权限,例如一个允许进行重新配置的控制级别以及一个仅允许通/断切换的基本通道?通常,在建立安全通道(如果可能的话,则是TLS)之后,通过身份验证步骤来处理。这是一个棘手的问题:一方面,没有绝对的安全性,因此您将不时地应用安全补丁。另一方面,固件升级机制是一件复杂的事情,并且本身可能存在错误。至少,请确保您的固件升级已签名。纯粹依靠通信通道的安全性来进行升级是不明智的,因为基于安全通道的可信度大于基于静态安全验证的可信度,有时您可能希望在没有网络连接的情况下应用固件更新。除了验证签名之外,理想情况下,您还应具有防止回滚的保护,以使攻击者不能只是在运行版本2的系统上将“更新”推送到版本1,然后利用版本2修补的安全漏洞。 br />