嵌入式系统的安全性问题探讨

嵌入式设计应用

133人已加入

描述

  我们经常担心自已的个人信息被放进或存储在没有安全防护措施的系统中。网络间的通信所需要的安全保护级别取决于信息的重要程度。

  常见的安全措施

  对嵌入式系统来说,安全防护措施涉及到一个最基本的概念——物理安全性。也就是说,如果像对待珍贵物品那样将系统“锁”起来,那么丢失信息的风险将大大减少。这意味着需要将嵌入式控制器及其它关键任务系统放在上锁的房间内或安全的箱子中。这种方法适用于那些可以将系统“包装”起来的应用,但也往往会导致通信掉线、阻塞或拦截。这种方法适用于不少有线和无线系统。有线系统在一些安全级别较高的应用中具有不可替代的优势。举个简单的例子:如果发生黑客入侵,只要掐断电线就能使关键数据不外泄。

  应用公共密钥加密和椭圆曲线加密能获得非常好的保护效果。这些方法广泛用于电子商务及其它需要高级加密的应用领域。然而,这类方法并不适用于那些对安全级别要求较高的嵌入式系统。有多种软件和硬件技术可以用来使数据“散列”,从而使信息在存储和传输期间难以被拦截。

  一种保护嵌入式系统存储与传递数据的简单方法是使用滚动码。滚动码已出现了很长的时间,例如二战期间的恩尼格码密码机。现代滚动码加密原理是采用串行移位寄存器以及异或函数,使伪随机码确定性增强,但逆向工程更加复杂,如图1所示。

  

安全性

 

  图1 流动码加密

  该原理下异或函数的一个输入是正传输(或加密)的当前位。只要知道最初锁存到寄存器中的起始的种子值,该函数是完全可逆的。在其它加密方案中使用时,这种技术需要填充信息,以确保有足够的数据来防止泄漏密钥。此外,过长的消息可能暴露伪随机码发生器的模式。网络中大多数数据包流量都属于这类加密的范畴。

  时变加密

  数据安全性的一个重要方面是确保密钥不泄密。即使采用公共密钥加密,如果私人密钥泄密,系统也会崩溃。一个确保密钥永不泄密的简单方法是不断发布新密钥。一种较好的做法是使用当前时间。如果每个设备知道在某个时间废弃密钥并开始使用新密钥,将很难对密钥进行逆向工程,因为它已过期。这种思想的一种简单应用是酒店磁卡钥匙。酒店的电子锁已编程为接受编码的磁卡,但只在您住宿期间有效。如果没有其他人使用房间或者对电子锁重新编程,电子锁内的时钟会控制钥匙的有效性。也就是说,电子锁会在一段时间后使磁卡钥匙无法打开房门。

  现在的问题是确保每个人都知道电子锁会在何时令磁卡钥匙失效。有多种方法可以解决这个问题。一种方法是与主时钟同步,这需要使用协议来维护当前时间。所需协议取决于更新密钥的时间间隔,可以使用带有时间信息的周期性数据包(如NTP或网络时间协议),也可以使用更加准确的协议,如IEEE1588精确时间协议(PTP))。PTP提供非常高的准确性,无需每个节点具有GPS接收器或铯原子钟。以太网物理层器件,如美国国家半导体的DP83640,内置了这项功能,且可以与任何媒体访问控制器(MAC)一起工作。

  通过使用同步的时钟,使用伪随机码的密钥发生器可以频繁更新密钥。因此,每一秒钟都会生成新的种子,且在该期间传输的所有数据包都将使用该种子,如图2所示。

  

安全性

 

  图2 密钥发生器可以频繁更新种子

  这里的问题是数据包传递的不确定性。在大型基础设施以及Internet上,数据包到达的实际时间将差别很大,因此需要一个机制来确保到达稍晚的数据包不被拒绝。

  完成这项工作的方法是使用滑动时窗相关,即加密的数据包应在加密的有效载荷中嵌入校验和,以验证其内容。此外,数据包的“存活时间”值将设置时窗大小(及时性)。因此,当接收到数据包时,解密引擎将根据本地的时钟知道当前时间,然后尝试使用本地时间解码数据包。如果解密失败,解密算法会在时间上往回移动时窗的阶段,并再次尝试解密有效载荷。理论上,应该只需1~2次尝试即可使两个位置之间的延迟同步,通常最多需要10~20次尝试。

  如果数据包解密失败,则发送的行为无效,而且该数据包会被丢弃。由于种子变化如此频繁,因此几乎或根本不可能实时解密信息。此外,可以将此功能内置到通信软件栈中或直接内置到硬件中,从而使逆向工程非常困难。即使知道方法,由于缺乏固定的种子也会使解密数据极其困难。

  结语

  通过使用简单的加密方法和使用时变密钥,可以大大增强关键嵌入式系统的安全性。这种加密可以用固件或软件实现,而且给FPGA或CPLD添加加密算法能够使代码更难被破解。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分