IoT安全已经引起了各界人士的关注,特别是许多传统行业都在准备向物联网智能化转型的人们,由于对物联网的未知因素造成了望而却步的局面,甚至只能看到竞争对手们越来越重视,越来越多的传统产业开始走向智能化。
在物联网数据传输过程中,固件加密升级技术已经出现很长时间了,而考虑设备固件设计时,密码学原理通常在保护设备免受攻击方面发挥了重要作用。本文将讨论四个示例,说明如何使用加密技术使嵌入式处理更安全:安全地进行空中(OTA)更新、主机网络上的加密通信、安全的密钥共享、身份验证。
OEM在开发和批量生产后,需要从部署的设备更新固件来修正错误,并添加新的产品功能。做这类更新的最实用方法,特别是当需要更新大量设备时,就是让每一个设备都无线下载一个新的固件,通常是从因特网的服务器下载。
在网络通信日益普及的今天,数据的完整性和真实性受到广泛关注。下载软件/非官方固件也成为潜在的危险。假如下载并安装了一个攻击者作为合法固件冒用的软件,这就意味着攻击者已经成功地劫持了这个设备。所以,下载固件一定是可信来源提供。
一个常用的方法是使用数字签名。数位签名和签名验证被用来验证数据。在这种情况下作为固件映像文件的可靠性较高。原理是以不对称的方式进行加密,用一个加密的方式指定作为公钥,另一个指定为私钥。可信来源使用私有密钥签署合法固件镜像文件,并且允许将签名与图像文件一起下载。该设备下载图像文件和签名,然后使用一个公共密钥来验证签名。
假如图片文件正好是一个用私钥签名的文件,那么签名就会成功验证。但是,某图像文件与使用私钥签署的文件相差1个字节,那么签名验证就会失败。
技术细节要做到简洁,可计算整个图像文件的散列值(或汇总),然后使用私钥加密散列值,以产生数字签名。你可以用公钥解密下载的签名,然后把结果和你下载的图片文件中计算出来的散列值比较,你就能验证下载的签名。在两个比较项相等的情况下,签名验证成功。
公用密钥存在于设备中,这样当需要时才执行签名验证。
很明显,因为使用私钥进行数字签名的任何文件都会被认证为合法文件,所以私钥必须安全地保存在安全的地方,以免被别人滥用。所以,我们提供了一种方法来证明其下载的固件映像和来源可靠的固件映像一样,所以安装是安全的,还是伪造的而且肯定无法安装。
缺少了该机制,OTA更新就会遭到黑客的攻击,这些黑客想要把自己的代码引入到设备中。
正如需要安全地执行OTA更新一样,一般而言,网络通信也是如此。在像Internet这样的公共网络上尤其如此,因为通过直接连接到设备或窃听往返于设备的流量,潜在黑客的可访问性变得更大。
设备和所有连接的对等方应相互加密其通信。黑客可以轻松地分析纯文本流量,以窃取敏感信息或了解如何模仿通信。通过执行后者,黑客可以发送恶意命令来控制设备,并且设备会响应它们,认为它们来自合法对等方。
在两个通信节点之间实现加密和解密的最简单方法是使用诸如AES之类的算法,该算法使用两个节点中的相同加密密钥来加密出站流量并解密入站流量。AES是对称密码的一个示例。
这样的基本方案具有简单和快速的优点。它很容易在固件中实现。另外,AES速度快,并且需要相对较低的计算能力,这使其成为嵌入式设备的诱人选择。但是,它的主要缺点是容易受到损害。由于相同的密钥已预安装到设备和所有合法对等设备上,并且不会更改,因此,黑客可以获得更多的机会来破解它。他们拥有更多的目标密钥承载者,并且没有时间限制来发现密钥。
一种改进是定期更改密钥。然后,即使黑客成功获取了密钥,如果密钥已过期并且新密钥已激活,它也将不允许与设备进行交互或解密未来的流量。
但是,当发生密钥更改时,如何在所有对等方之间安全地传达新密钥?请记住,他们是在公共网络上,窃听是一个主要问题。答案再次在于引入与非对称密码学相关的技术。值得一提的是,非对称算法相对更复杂,因此比对称算法需要更多的计算能力。
同时使用对称算法和非对称算法的好处是,它使实现能够利用每个人的优势,而同时又不受其局限性的不利影响。保护数据流量需要持续进行。因此,有意义的是对称加密和解密以提高功率效率。
加密密钥应该定期更改,因为静态密钥可能容易受到攻击,但是没有对称方法可以安全地进行操作。可以使用非对称方法。但是,它不是非常省电的。幸运的是,这将是偶发事件,其功率效率并不重要。因此,非对称地更改密钥是适当的。
本文的其余部分详细说明了仅使用对称密码保护数据流量的系统的局限性,以及密钥共享机制在使用非对称方法的改进设计中如何工作。另外,将证明,非对称算法可以用于认证,以防止黑客试图模仿嵌入式设备或通信对等体的攻击类型。
但是首先,关于使用标准化网络协议的说明...
我们正在描述一种方法,借助该方法,可以借助基于非对称密码学的原理使在任意介质上的网络通信更加安全。但是,请理解,如果您的通信介质已经带有定义良好且标准化的安全基础结构,则不建议您按照此处所述设计自己的安全通信方案。
例如,如果您的设备将通过Wi-Fi与TCP / IP网络上的对等方通信,则很可能应该使用传输层安全性(TLS)来保护它。如果您的设备将通过低功耗蓝牙通信,那么至少在撰写本文时,LE安全连接可能是最好的方法。
此外,用于诸如此类的流行媒体的可商购模块通常带有稳定且经过测试的网络堆栈。它们使设计人员能够在实施相对较少的自定义代码的同时支持标准化协议,从而减少引入错误的机会。安全性既复杂又重要,因此您不希望冒险使用无法完全正确实现的自定义实现来暴露设备中的漏洞。
但是,如果您的通信媒体尚未提供这种标准化的网络和安全性,则可以使用一种方法(如此处讨论的方法)来设计协议。例如,如果您在设备中使用其中之一,则市场上任何数量的Sub-GHz无线电模块都需要自定义协议。但是,不管您的案例是否需要自定义设计,希望本文对理解非对称密码系统中的典型机制很有帮助。
现在,回到对称密码的局限...
早先,我们提到过像AES这样的对称加密算法是保护嵌入式设备通信的理想之选,因为它计算速度快并且需要相对较低的计算能力。对于电池供电的设备(必须能够长时间运行,然后再充电或更换电池)而言,这一点尤其重要。
但是,我们也发现了一个缺点,即仅采用一种仅使用诸如AES之类的算法的简单方法,两个通信节点都使用相同的不变密钥,这可能表明可能存在黑客漏洞。如果黑客能够发现此秘密密钥,则他/她将可以解密用它加密的所有捕获的通信(过去,现在和将来),并与受感染的节点进行恶意交互。显然,这将是一个严重的问题,并且可能会造成灾难性的后果,具体取决于在设备和合法对等设备之间传输的数据的敏感性,或者黑客能够与之交互的后果。
因此,周期性地改变秘密密钥的能力将是非常有利的。如果某个密钥确实遭到破坏,则黑客将只能在使用下一密钥激活之前仅解密使用该密钥加密的网络流量,并且仅与该设备进行交互,直到该下一密钥变为活动状态为止。
但是,如何通过通信网络安全地更改密钥呢?这正是我们怀疑黑客正在窃听的网络,我们旨在通过加密来保护它。通过网络以明文形式发送新密钥将是有问题的,因为窃听的黑客会很明显地看到它。传输使用前一个密钥加密的新密钥同样会遇到问题,因为它引发了一个问题:“当两个节点首次开始通信时,如何传输第一个密钥?” 此外,激活新密钥的全部原因是因为我们怀疑先前的密钥可能已被破坏。
这就是不对称密码学原理可以提供帮助的地方。非对称密码学的有效性取决于所谓的陷门单向函数。这样的函数很容易在正向方向上进行计算,但是在没有一些秘密信息的情况下却很难在反方向上进行计算。
例如,广泛用于保护Internet通信的RSA加密,其明文消息是该活板门功能的输入,而密文是它的输出,其工作原理是。也就是说,(正向)加密很容易,而如果没有私有密钥(那条秘密信息),则(反向)解密将非常困难。
通过利用另一个活板单向功能中的此属性来执行称为Diffie-Hellman密钥交换的操作,可以实现安全密钥共享。执行这种密钥交换的两个节点中的每个节点都将其自己的私有号码以及公共的公用共享号码输入到陷门功能中,并公开地将其输出结果传输到另一个节点。
这个特殊的陷门功能具有一个附加的特殊属性:当每个节点第二次计算该函数时,将从另一个节点接收的输出结果作为输入来代替公共公用编号,则这两个节点的第二次计算的结果为相同。这个共同的结果就是新的秘密密钥。
该机制相当于安全密钥共享,因为新的秘密密钥本身实际上并没有通过网络共享,以供窃听者看到(图2)。需要两个节点的私有号码来导出新密钥。由于陷阱门功能的单向性质(即,在反向方向上极度困难的计算),因此在网络上共享的陷阱门功能输出对于窃听者来说没有用来计算这些私有号码。
在任何时候,以我们选择的任何频率,我们都可以为嵌入式设备及其需要与之通信的任何对等方提供一种方法,以安全的方式商定新的密钥。此新密钥随后可以用于对称加密和解密,直到密钥再次更改为止。如果发现任何秘密密钥,那么黑客可以希望解密的传输数据量将取决于调用此新密钥协商机制的频率。
但是,应注意,该频率应谨慎选择。正如我们已经提到的,与非对称操作相比,对称密码操作在计算上更省钱,更省力。这就是为什么我们选择像AES这样的对称密码来执行所有加密和解密的原因。我们应注意,添加以我们选择的速率更改密钥的机制是否会明显影响嵌入式设备的电池寿命。
尽管我们现在有一种安全地共享秘密密钥的方法,但这仅有助于保护我们的嵌入式设备免于因某种原因而发现用于与合法对等方通信的密钥的破坏。我们还必须解决黑客可能将嵌入式设备冒充给合法对等设备,反之亦然,并寻求获得其自己的密钥的可能性!
为此,模仿者将按照上一节中的说明执行成功的密钥协议,然后与设备或对等方进行完全加密的对话,而无需知道其实际上正在与攻击者进行对话。请注意,如果黑客同时冒充他人,则称为MITM攻击。
如果黑客知道如何参与密钥交换,那么密钥交换本身就不会阻止黑客成功。为此,我们需要来自非对称密码学的另一种机制的帮助,即身份验证。
身份验证实际上与我们在本文前面介绍的数字签名验证相同。回想一下,应该验证无线固件更新文件是否来自受信任的源,并且文件提供者通常的方法是在下载时将数字签名应用于文件和嵌入式设备以验证此签名。文件。在当前情况下,此相同的验证过程非常有用,除了现在需要验证的不是合法性,不是固件映像文件的合法性,而是Diffie-Hellman密钥交换中的消息。
应该为每个嵌入式设备及其合法对等方生成一个单独的RSA密钥对。设备的私钥已安装在设备中,其公钥已安装在对等方中。为了安全起见,这应该在受信任的通信渠道上完成,而不是在黑客可以访问的网络上完成。通常,它会在生产时或在现场首次部署设备时发生。可信通信通道可以是例如到本地连接的便携式计算机的USB。同样,对等方的私钥也通过受信任的通道安装在对等方中,其公钥安装在设备中。
当设备在密钥协商过程中将其消息发送给对等方时,它将使用其私钥对这些消息进行签名。当对等方收到消息时,它将使用设备的公钥验证随附的签名,从而验证消息实际上是由设备发送的。类似地,对等方使用其私钥签署其密钥协议消息,并且设备使用对等方的公钥对对等方进行身份验证。更具体地,数字签名采用陷门单向功能,类似于先前提到的RSA加密功能。