一个联网的应用常常会涉及不同类型的设备组成的网络。这些设备可能是只有几十KB存储空间的单片机、数百KB片内存储器的运行一些“瘦”嵌入OS(如UC/OS、FreeRTOS等)的单片机、运行ARM-Linux的胖嵌入式设备(如智能手机)、运行Windows和各种UNIX的PC机或者大型服务器。
有些设备节点状态是相对封闭的,如智能开关中的单片机系统。有些像手机、PC这样的,则是比较的开放节点,应用常常与其他软件共存,设备中甚至可能存在着恶意软件、木马和病毒。连接这些设备的网络一般是开放的,无论是考虑传输介质还是网络路由设备,网络上传输的信号可能被攻击者窃听、篡改,设备收到的信号有可能是攻击者精心伪造的。
加密系统是由运行在这样一些节点上的软件和硬件组成的整体,他们之间以密钥层次关系维持信任。通过应用加密算法处理数据,挫败来自于开放网络上的攻击。在设备节点上,用于加密的关键要素有:1、算法逻辑,其实现形态可以是软件子程序,也可以是硬件电路;2、密钥,这是一串需要保护的比特,被保护信息的安全依赖于密钥的安全可控,密钥常常需要利用硬件或者操作系统的访问控制机制予以保护;3、随机数,安全的加密必需要各设备实时产生的随机数参与,否则会给攻击者提供可以预测的加密参量,从而缩小攻击者的穷举空间,危及密钥的安全。
对于在Windows、各种UNIX等“胖”OS平台上运行的应用,充分利用OS的加密设施是最佳选择。这些OS不仅仅包含了经过严格验证的算法软件实现,还有与系统安全机制紧密结合的数据保护机制可以来保护密钥等关键加密要素。这些操作系统的加密体系设计也可作为我们建立应用加密体系的参考。
对于在缺乏OS支持的嵌入式设备,保护机制必须自行设计,这种节点一般相对封闭,设计起来并不会特别复杂。算法的实现也需要单独考虑,运行速度、存储空间的约束,使得我们能够使用的算法会比较有限。有些单片机含有一些加密算法硬件模块,利用这些硬件会显著提升嵌入式设备上的加密速度。
一些对于加密安全性要求高的系统,如网银,会用到智能卡、USBKey等专用加密硬件。使用这些加密硬件,能够更有效的保护秘密密钥,但也会面对成本和分发等方面的困难。