如何保护物联网设备中的 UART 通信

时间:2023-03-13

随着物联网 (IoT) 系统中备受瞩目的数据和隐私泄露事件不断增多,企业和消费者在购买联网产品时更加意识到安全需求。提供一流的产品或服务已经不够了。无法提供足够安全性的设备将无法与提供端到端安全性的设备竞争。

许多协议在标准内实现安全性,并且是任何控制器的内置部分。但是,通过通用异步收发器 (UART) 连接的嵌入式设备不受保护。UART 是设备之间简单的数字通信接口之一。这是一种无 ACK 通信协议,如果波特率已知,任何设备都可以读取它。

为了防止数据被读取或注入系统,通信通道需要由发送和接收数据的系统保护。因此,即使入侵者以正确的波特率访问了通信信道,该信道也将受到保护。


通信通道通常使用加密算法进行保护。从广义上讲,密码算法可以分为对称算法和非对称算法。使用对称密钥算法,发送方和接收方共享一个密钥。发送方使用密钥对消息进行加密,并与接收方共享加密后的消息。然后接收方使用相同的密钥来解密消息。

对称密钥算法的主要安全问题是如何在发送方和接收方之间安全地交换密钥。如果密钥在密钥交换期间被另一个实体捕获,则该实体也可以解密发送方发送的消息。因此,在对称密钥算法中仅与发送方和接收方安全地共享密钥至关重要。

为了启用安全的对称密钥交换,使用了非对称密钥算法。非对称算法使用不同的密钥进行加密和解密过程。尽管这些密钥不同,但它们在数学上是相关的。对称密钥可以通过使用非对称密钥对其进行加密和接收方使用相关的非对称密钥对其进行解密来安全地交换。非对称算法的一个缺点是它们涉及复杂的数学计算并且往往是计算密集型的。

为了获得别的安全性,RSA 加密被用作非对称密钥算法。使用 RSA,通信实体具有公钥和私钥。顾名思义,公钥是公开共享的,任何人都可以使用。相反,私钥仅由通信实体持有。为了向实体发送消息,发送方使用实体的公钥加密消息。此加密消息只能由私钥解密。由于私钥仅对预期的接收者可用,这确保了只有接收者才能解密消息。


RSA 使用指数计算和非常大数的质因数分解,使其高度安全但同时也是计算密集型的。此外,实时实施 RSA(以避免通信延迟)会因需要更高性能的处理引擎而增加系统成本。许多嵌入式系统不需要这种级别的安全性。相反,他们可以使用更精简的加密算法,如加密标准 (AES),这种算法更实用且更具成本效益,因为它需要更少的处理资源。

AES 是一种对称加密算法,这意味着通信通道的双方共享一个公共密钥。如上所述,AES 的局限性在于在 UART 发送方和接收方之间安全地共享密钥,而不会将其暴露给外部实体。为了解决这个问题,可以使用 RSA 来加密 AES 密钥并安全地交换它。由于公共密钥只需要共享,通信通道可以承受RSA的复杂性和延迟。换句话说,处理 RSA 算法的延迟只影响初始密钥交换,而不是每条消息。

安全密钥交换发生在几个阶段(图 1)。首先,UART 接收方生成一个 RSA 密钥对并与发送方共享其公钥。另一个实体是否看到公钥并不重要,因为它只会用于加密发送给 UART 接收器的消息。然后发送方随机生成一个 AES 密钥并使用接收方的公钥对其进行加密。接收方使用 RSA 私钥解密 AES 密钥。


图 1:使用 RSA 公钥和私钥安全交换 AES 密钥。()

由于只有接收方可以访问 RSA 私钥,因此加密的 AES 密钥只能由接收方解密。这确保了 AES 密钥只为发送方和接收方所知,任何有权访问通信通道的入侵者都无法导出密钥。此外,发送方和接收方之间的所有后续消息都使用 AES 密钥加密,使得不打算接收它们的任何其他方都无法访问这些消息。这也消除了中间人 (MIM) 攻击的威胁,MIM 攻击涉及在消息发送之后但在接收之前修改消息。


使用固件在嵌入式设备中实施安全算法会带来许多设计挑战。密码算法,就其本质而言,往往是计算密集型的。它们还增加了内存占用,增加了处理延迟,并给系统带来了极大的复杂性。因此,在固件中实现安全性将消耗大量的 CPU 周期和 MCU 资源。此外,为满足实时应用要求,需要更高性能的MCU,从而增加系统成本。

使用如此多 MCU 资源的部分原因是因为 MCU 是通用处理单元。出于这个原因,许多 MCU 集成了专门为加密算法设计的硬件。与没有基于硬件的加密处理功能的 MCU 相比,MCU 具有集成的加密引擎,可以以更小的占用空间和更低的成本提供实时数据加密和解密。

Infineon 的PSoC 6 MCU 就是一个很好的例子。它有一个专用的加密块,可以提供加密功能的硬件加速。密码块是灵活的,可用于支持不同的密码算法以确保数据受到保护。这使开发人员能够使用 AES、DES、TDES 和 RSA 等加密标准以及安全哈希算法 (SHA) 和循环冗余校验 (CRC) 等完整性检查为嵌入式物联网设备引入安全性。以这种方式从 MCU 卸载加密功能,可以经济高效地为几乎所有嵌入式应用程序引入安全性,而无需使用更强大的处理器。


然而,保护嵌入式系统需要的不仅仅是加密通信。具体来说,系统生成的 AES 密钥需要是随机的。然而,MCU 是确定性的,因此生成的密钥也将是确定性的,使黑客能够使用“蛮力”循环遍历不同的可能随机种子并可能导出 AES 密钥。因此,固件需要一种方法来生成真正的随机数,以确保 AES 密钥的随机性,因此不能被暴力破解。

为此,加密块必须包含一个真随机数生成器 (TRNG)。例如,在 PSoC 6 加密块中,TRNG 有六个提供物理噪声源的环形振荡器。环形振荡器包含在环形振荡器的信号中引入抖动的温度敏感反相器。该信号使 MCU 可以访问真正的随机数源,以确保其生成的 AES 密钥的随机性。

例如,要生成一个 16 字节的密钥,会生成一个随机数 16 次并将其附加到之前的数字。这使得 2^128 个键成为可能。这足以防止“AES”密钥被暴力破解或猜测。

一些加密攻击专注于分析捕获的通信。有了足够的资源,任何密钥终都可以被破解。为了解决这种可能性并提高通信通道的整体安全性,每次重新启动时都会生成 AES 密钥。这是提高嵌入式系统安全性的一种简单但有效的措施。简而言之,即使入侵者识别出密钥,在可以利用该密钥时,该密钥也可能不再使用。


此时,可能很容易认为 UART 接口是安全的。但是,UART 是一种无 ACK 通信协议。这意味着该协议没有机制来确保接收方收到的消息 a) 完整以及 b) 未损坏。

需要的安全阶段来确认消息的完整性。实现此目的的一种有效方法是使用 SHA 算法对消息进行哈希处理。通过 SHA 等加密散列函数运行消息会生成散列,即固定长度的输出。因为散列函数是不可逆的单向函数,所以识别生成特定散列的消息的方法是尝试对所有可能的输入进行强力搜索。


图 2:哈希函数可确保安全密钥交换和消息传输期间通信的完整性。()

上一篇:通过最小化热环路寄生效应来优化开关电源布局
下一篇:处理数字示波器测量问题

免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

相关技术资料