我目前正在从事一个项目,该项目包括移动应用程序(当前使用Ionic平台)和嵌入式设备之间的蓝牙通信。为了进行比较,我们的产品类似于智能锁。
安全是最重要的问题,我们正在研究确保硬件和软件不被黑客入侵的方法。我们应采取什么步骤来确保我们的系统安全?
编辑:是的,我们当前正在加密通信,并且在设备与我们的服务器通信时使用HTTPS。
我目前正在从事一个项目,该项目包括移动应用程序(当前使用Ionic平台)和嵌入式设备之间的蓝牙通信。为了进行比较,我们的产品类似于智能锁。
安全是最重要的问题,我们正在研究确保硬件和软件不被黑客入侵的方法。我们应采取什么步骤来确保我们的系统安全?
编辑:是的,我们当前正在加密通信,并且在设备与我们的服务器通信时使用HTTPS。
Answers:
为了确保您的设备足够安全,我有几点建议:
另外,如果您想了解有关用于保护设备安全的加密和加密的更多信息,请查阅此(免费)电子书。它讨论了加密算法的好坏实现,应该可以帮助您保护产品安全。(注1:请,请不要创建自己的算法。注2:我不隶属于crypto101或lvh。)
如果可以使用端到端TCP,请使用端到端TLS(例如,使用HTTPS)。
不要重新发明轮子,尤其是在涉及密码学时,大多数人都会弄错它。除非设备资源不足以支持TLS,否则如果您降至AES级别,那就错了。#1错误是加密而忘记了身份验证-如果您在服务器和中间人之间使用加密通道,而不是在服务器和设备之间使用加密通道,则加密没有任何好处。如果您不能使用TLS,请确保所使用的任何协议都对所有内容进行身份验证,并对需要保密的内容进行加密。
为了安全地使用TLS,请从每个参与者的角度考虑您需要具备的保证。通常,设备需要知道它正在与合法服务器通信。这意味着它必须检查服务器的证书。设备必须具有记录为受信任的证书颁发机构的X.509证书;这就要求存储不能被攻击者修改,但是不需要存储的任何机密性。请注意,您不应该直接对服务器的证书进行硬编码,因为如果证书受到威胁,那将无法让您轻松替换该证书。而是,设备存储预期的身份服务器的名称(主机名),以及保证某个公钥属于期望的主机名的证书颁发机构的证书。再一次,不要重新发明轮子,而是依靠TLS库或应用程序提供的证书检查。
如果服务器需要知道它正在与合法客户端通信,则每个客户端都需要具有自己的客户端证书。这需要在客户端上进行机密存储。将客户端证书从TLS库传递到TLS会话打开功能,或在应用程序配置中进行设置。
这样可以确保服务器和设备之间的通信安全。如果移动应用程序可以直接与设备通信(例如,允许其在本地wifi网络上断开连接操作),则需要首先在智能交换机和移动电话之间执行配对。配对意味着交换密钥,如果资源允许,最好交换公共密钥,否则意味着达成秘密密钥协议。配对的目的是确保每个设备都知道与谁通话。
无论是直接从移动设备到智能交换机还是通过服务器,您都需要确保控制通道的安全。考虑授权:是否有对交换机的不同访问级别,例如允许进行重新配置的控制级别和仅允许进行开/关切换的基本通道?通常,在建立安全通道(如果可能的话,为TLS)之后通过身份验证步骤来处理。
另一个注意事项是固件更新。这是一个棘手的问题:一方面,没有绝对的安全性,因此您将不时地应用安全补丁。另一方面,固件升级机制是一件复杂的事情,本身可能会存在错误。至少,请确保您的固件升级已签名。纯粹依靠通信通道的安全性进行升级是不明智的,因为基于安全通道的可信度要大于基于静态安全验证的可信度,有时您可能希望在没有网络连接的情况下应用固件更新。除了验证签名之外,理想情况下,您还应具有防止回滚的保护措施,以便对手可以