硬件密码组件与软件密码组件的比较研究
(7)逆向工程攻击
SCM保存在计算机硬盘或内存中,而一般的计算机对硬盘和内存的保护是非常脆弱的,因此它容易受到逆向工程攻击。
SCM的基本组成如图2所示。SCM用到的数据包括敏感数据和一般数据。敏感数据是指密钥、用户PIN码等数据。SCM的程序逻辑可分为密码算法(对称和非对称的)、密码协议(例如SSL、IPSEC等)以及其它程序控制逻辑。利用逆向工程的工具和技术,攻击者可以监控程序的输入和输出,从而获得用户口令等敏感信息;其次攻击者还可以扫描程序数据区,得到密钥、口令信息;另外攻击者对程序的运行逻辑进行跟踪,可以得到密码算法和密码协议的运行轨迹,特别是如果算法和协议不是公开的,而是保密的,这时攻击者可以得到重要信息。而且攻击者还可以进一步修改软件执行逻辑,制造“后门”。
逆向工程工具可以分为两大类:第一类是为获得程序的运行逻辑,反汇编、反编译工具属于此类;第二类是为获得程序实时的运行信息,仿真、调试工具属于此类。IDA Pro是目前最有效的反汇编工具。它可以自动对目标代码进行分析,自动检测Win32 API功能调用,并能建立这些调用之间的关联。IDA Pro还能以交互方式运行,攻击者可以告诉IDA Pro某些程序片断是带何种参数的API调用,从而提高IDA Pro的分析能力。另外IDA Pro还有脚本语言,攻击者可以用该语言编写能够进行反汇编的小程序。W32Dasm是另一个著名的反汇编自由软件,同时它是一个功能强大的调试器,可以获取程序运行的实时信息。Java是目前最流行的网络编程语言,Java源代码经过汇编成为Java字节代码。这种代码不同于一般的汇编代码,它具有唯一性,独立于底层的处理器。这就意味着Java源代码和Java字节代码之间几乎存在着一一对应的关系,所以Java类文件可以很容易反编译成Java源文件。互联网上有很多专门完成这项功能的工具软件。另一个类C反编译工具是REC,它可以输出可读性较好、容易理解的反编译结果。
利用仿真、调试工具可以建立软件的模拟运行环境,在这个环境中通过实时观察各种变量、内存和寄存器的变化情况,从而获得较为准确的程序运行信息。javascript:window.open(this.src);" style="cursor:pointer;"/>最著名的调试工具是SoftICE。利用该软件对在操作系统内核层运行的驱动程序都可以进行跟踪调试。Microsoft Visual Studio亦提供了功能强大的调试环境,不过它主要是对在操作系统用户层运行的程序进行仿真跟踪。
(8)密钥的随机性保证
在HCM一般都有物理噪声源,可以产生真随机数,以此为种子可以产生高质量的随机大素数、公钥密钥对和会话密钥;而在SCM中没有物理噪声源,只有取系统时钟、用户击键频率等作为随机因素,由此生成的公钥密钥对和会话密钥的随机性很难保证。
(9)物理暴露与密封
普通的计算机在物理上是暴露的,攻击者可以轻易地进行系统重启、修改硬盘文件,安装黑客软件等攻击操作。甚至攻击者还可以将整台机器“盗走”,据为已有。另外,普通计算机上的系统主板等电路没有防护措施,攻击者可以利用逻辑分析仪等其它工具对印刷电路板上的芯片进行侦测、记录。当密钥在芯片之间传递时就可能被攻击者获取。而HCM有物理防护措施,其关键电路在物理上被密封,避免被攻击者探测。如果强行打开物理密封,则会导致系统自毁或敏感数据完全清除,从而保证了HCM在物理攻击下的安全性。
(10)备份与灾难恢复
对于重要的信息系统,备份与灾难恢复机制是必不可少的。这就需要把关键数据复制,分散保存在不同地方。但如何保障这些数据不被窃取、修改和盗用呢?单单利用SCM不能很好地解决这个问题,而采用HCM则可构建安全可靠的数据备份与恢复系统。
(11)可靠的时间戳服务
时间戳在密码系统中的应用越来越广,最初使用时间戳是用来保证认证和密钥协商协议中传递消息的新鲜性。目前随着网上电子商务的不断发展,在传统信息的保密性、身份的真实性、内容的完整性和数据的不可抵赖性等安全要求之外,还要解决信息的时效性问题,这主要有两方面的含义。
① 保证信息的时效性。对于像商业情报、专利发明等对时间敏感的信息,通过申请时间戳,可以证明你在某一时刻拥有这一信息。
② 保证操作有时效性。对于像竟标、竟拍等对时间敏感的活动,通过申请时间戳,可以证明你在某一时刻完成了这项活动。
在HCM中可以包含精确的时钟部件,它可以独立可靠地为系统提供准确时间信息。而SCM本身不能产生时间信息,只能取计算机的系统时间,显然这是不可靠的;或者从专门的时间提供系统获取时间信息。
javascript:window.open(this.src);" style="cursor:pointer;"/>
3 硬件密码组件的硬件结构
典型的硬件密码组件结构如图3所示。基本组成部件由中央处理器与外围接口、随机存储器、Flash、BBRAM、硬件随机数发生器、密码运算协处理器、实时时钟、总线接口等组成。其中Flash保存所有固件和部分加密敏感信息,BBRAM作为安全存储器保存敏感信息明文。硬件控制逻辑通过大规模的可编程逻辑阵列CPLD实现。另有物理安全检测与反应电路,负责检测物理攻击,并及时向中央处理器