专利名称:在安全存储区中保护应用程序数据的方法和装置的制作方法
技术领域:
本发明涉及一种用于控制从非安全存储器中接收到的应用程序的可靠性以及当这种程序在计算机的安全环境中运行时为保持系统的安全性而控制这种程序的数据访问的方法和装置。
在数据处理系统中使用装置和程序控制的方法来防止应用程序访问和修改存储器的保护区是操作系统技术中已有的。例如Richard P.Jones的美国专利5,144,659和5,289,540。Jones以位于磁盘驱动器适配卡上的可编程辅助存储器和控制单元的形式公开了其硬件,所述磁盘驱动器适配卡用于监听控制逻辑、地址以及中央处理器和文件存储器之间的数据信号通路。一旦Jones系统的硬件和相关软件安装之后,操作系统就不再控制和访问文件系统。在Jones系统中辅助存储器存储所有合法文件的签名。文件签名只是简单的循环冗余校验码(CRC)。所述签名可以通过检测最后一次计算CRC之后文件是否被病毒修改来防止病毒的攻击。但是所述签名不能防止黑客的攻击,因为在修改程序之后计算CRC并将新的CRC添加到文件中非常简单。
最近,硬件中央处理器(CPU)自身具有特权等级,例如,在此基础上可以防止以级别3运行的应用程序直接访问具有级别0的内存段。在Advanced Micro Devices 1994年一月出版的《Am486微处理器软件用户手册)》A-28页到A-34页中有一个例子。虽然这种电路防止级别3的应用程序直接对超级用户级的存储器空间寻址,但是当必须进行这样的访问时,微处理器并没有相应的机制来确定该应用程序为可靠的而且要访问的数据确实被分配给此可靠程序。
使用加密技术来确认用户身份和程序或ID卡的可靠性的技术是已知的。这一技术的一个例子是IBM的4755加密适配卡。然而,在当前技术的教导中没有说明应用程序从非安全数据源中装入时如何保护安全区中的永久数据。
在运行多个应用程序并能存储这些程序的长期数据的计算机系统中,需要防止除了创建该存储区的程序以外的其它程序对该存储区进行访问。术语“其它程序”既包括完全不同的程序也包括试图假装成创建该存储区的程序。然而,所有程序的新版本必须能够访问该程序的旧版本所创建的数据区。
在这特定的情况中,数据在计算机内存中永久保存,而应用程序本身则不然。当不再需要此应用程序时它就被从内存中删除,当以后再一次需要时它们将被重新加载。每一应用程序使用的数据区保留在计算机中,存储在一永久媒体中并由计算机操作系统管理。当应用程序重新加载时,它必须对它所拥有的数据进行访问,但是不允许它访问其它应用程序所拥有的数据。与此相似,并发操作的应用程序必须不能互相访问彼此的数据。从中重新加载应用程序的程序存储媒体不必进行任何方式的保护,所以必须对应用程序进行组织使得它们能在改动时进行保护,并使它们包含用于与它们数据区安全地关联的保护信息。
本发明提供了一种能有效地确认从非安全区加载到安全区的应用程序的可靠性并且将经过确认的应用程序与永久内存中已存在的数据区相关联的方法和装置,从而克服了上面所述技术的缺点与限制。
所发明的永久数据区安全访问控制的一个优点是可以从一非安全区中加载应用程序并且该应用程序能得到对永久数据的访问而不会造成对安全的妨害。
本发明的另一个优点是当允许一个甚至没有驻留在永久存储器中的应用程序访问数据时可以利用处理器的特权优先级来保护永久数据。
下面对本发明更加详细的说明将使读者对这些优点以及其它的优点更加明了。
附图.1是本发明在其中发挥作用的计算机系统的框图。
附图.2是根据本发明改进的操作系统的框图。
附图.3是根据本发明的应用程序验证过程的流程图。
附图.4是根据本发明加载并核对应用程序的流程图。
附图.5是应用程序对一数据区进行访问的流程图。
现在参看附
图1,为了在一个特定实施例的环境中说明本发明,说明了一个典型的个人计算机结构,如在许多IBM个人计算机中采用的配置。本发明同样可以用于其它数字计算机结构,如小型机和大型机环境以及计算机本地和广域网环境。它只要求计算机在物理上是安全的,能够防止攻击者探察并改变该计算机的电路。在计算机自身在物理上不安全的情况下本发明的实施例可以采用具有美国专利5,159,629和5,027,397中所说明的具有安全模型13的安全卡11。
个人计算机结构的处理部件是微处理器15,例如INTEL的80486、Pentium以及其它相似的微处理器。微处理器15连到总线17上,总线17包括一组数据线、一组地址线以及一组控制线。包括内存以及存储设备的若干I/O设备通过各自的适配器连到总线17。这些I/O设备可以是个人计算机的标准件,也可以是可选的插件。例如,这些设备可以包括一个通过图形适配卡21连接的彩色显示器19、通过适配器25连接的键盘23以及通过一已知的用于IBM计算机和IBM兼容机的SCSI适配器29连接的硬盘驱动器27等。其它设备也同样作为个人计算机的一部分包括在其中或是作为可选插件可以从IBM公司或其它供应商处得到。
随机访问存储器(RAM)31和只读存储器(ROM)33作为个人计算机的标准配件包含在其中,而且辅助随机访问存储器作为RAM 31的补充可以通过一可选扩展存储器插件来添加。
ROM 33中存储了许多指令,即是基本的输入/输出操作系统,或BIOS,这些指令通过微处理器15来执行。BIOS控制计算机的基本I/O操作。一个操作系统如IBM公司的通常与IBM个人计算机一起使用的IBMOS/2操作系统,被加载到RAM 31并与存储在ROM 33中的BIOS一起运行。本领域的技术人员可以理解个人计算机系统可以进行设置,将BIOS的一部分或是全部都存储到RAN31中而不是ROM 33中,这样就可以允许通过对可加载到RAM 31中的BIOS程序进行修改来改动基本系统操作。同样地,存储在RAM 31中的程序、数据以及知识表示可以存储到ROM33中。
如附图1所示,实现本发明的方法的程序35通过刻录到光盘37或其它的媒体中作为制造商的产品得到有利的实施。媒体37可以用通过适配器41与总线相连的读入设备39来读取。进一步来说,可以通过在RAM 31、ROM 33或者两者的组合或是DASD 27中存储程序35的可执行指令将该程序具体化成一特殊功能装置,微处理器15可以通过适配器29进行访问并执行。
除了与主微处理器15一起使用外,本发明还可以在特殊用途设备如保密卡11中有效地使用,也就是上面提及的与总线17相连的加密卡11。另一方面,具体实施本发明的方法的程序35可以通过将其可执行代码存储在RAM 53或ROM55或是两者的组合或是如上面所述的从DASD 27中加载到RAM 53中来作为一特殊用途装置实现。加密卡11还包含一加密处理模块57用来有效地执行诸如数据加密标准(DES)算法、RSA(RivestShamir & Adleman)算法等可用的算法。
本发明的最佳实施例被合并到操作系统中并成为操作系统中的一部分,如附图2中以框图形式说明的IBM OS/2操作系统。为了简化说明,本发明将作为安全加密卡11的一部分来具体加以说明,同样如附图1所示,一个依照本发明的已确认的应用程序的非安全应用程序源为DASD27。
在附图2中,操作系统核心101在框图的中间部分。核心101实现许多用于允许在计算机中有效地编写和运行应用程序的系统控制功能。
为应用程序分配内存是操作系统所完成的最重要的控制功能之一。如1983年出版的Ed Iacobucci所著的《OS/2编程指南》中第四章内存管理中所说明的,OS/2操作系统为每一个应用程序分配局部地址空间并将此局部地址空间根据局部描述符表映射到实际内存中。
所以,存储器段与应用程序自然地独立开来。也就是说,分配给一个应用程序的存储段对其它应用程序来说是不可见、不可修改的。
当应用程序和它对应的数据区只是短期地存在于内存中,并且每次加载一个应用程序到内存中都要建立局部描述符表并分配新的内存时,操作系统所使用的上述方法在Intel 80286及更高级微处理器中可以很好地工作。当数据区必须保存在一永久存储器如闪速存储器中时,必须提供其它的方法来为一可靠性已经得到确认并已经重新加载到内存中的应用程序安全地重新分配连续的存储区。
在执行例如从一DASD设备中加载的应用程序之前,由于应用程序在安全环境之外,必须对它的可靠性进行确认。否则,有可能将一个冒名顶替的应用程序加载进来,该冒名顶替的应用程序可能会攻击安全环境。而且,为加载的程序重新分配连续的存储区时必须保持独立,并且不能允许将其它应用程序的存储区分配给此新加载的程序。
可靠性核对在加载设备111中依照本发明由首先进行的应用程序验证以及在它们加载到安全存储区之前的应用程序核对来完成。而实现独立的过程是由安全相关数据元素(SRDI)根据本发明通过对数据区表中的标志字段和应用程序标志进行比较来完成。数据区表由操作系统的一个新的改进措施来进行维护,下面将再次参照附图2对该措施进行说明。
RAM 53以及ROM 55包括在安全模块13中,RAM 53以及ROM 55中包含有操作系统,在本发明的加密卡版本中此操作系统可能是OS/2的一个子集。核心101管理内存分配以及其它资源,如通过一DES资源管理器103管理数据加密标准算法(DES)以及通过一RSA资源管理器105管理Rivest Shamir & Adleman(RSA)。
一种永久内存如闪速存储器或依靠电池供电的内存在107处提供。107永久内存的实地址空间映射到全局描述符表,并从此可以为操作系统所用,当使用内存107的应用程序在内存53中停止运行时也不会消失。将内存107中的地址分配给应用程序由本发明的SRDI管理器进行处理。
根据本发明的一个改进的程序加载设备提供于111处,其目的是为了从未保护的DASD113或其它未保护的外部媒体中载入或重新加载一个应用程序。
安全模型13中有理由为电路提供的物理保护,但此时从物理上来防止一个DASD设备受到攻击的代价或复杂性都是不实际的。因此,有必要确保一个从DASD 27加载的应用程序没有被修改或替换为能对系统进行攻击的一部分。这是由程序加载设备111使用操作系统中可用的加密资源来完成的。
在一个应用程序加载和使用之前,由控制和确保系统的安全性的计算机系统的所有者或制造商或其它相应的中央部件来进行验证。验证工作是通过加密卡11的加密设备如附图3所示根据本发明完成的。
在附图3中,在框201中为程序A选择一个唯一的名字NA,并存储在框203中。该名字不必含有任何特殊字符,只要在将被验证的程序的名字域中是唯一的。名字NA以及程序PA作为205的输入在207中被合并成为单一、相邻的数据对象并存储在框209中。虽然还有其它可能的方法,但在最佳实施例中是通过将NA和PA连接在一起实现的。合并后的对象用PANA表示。
在框211中,用PANA计算一个散列值来得到H(PANA)。H(PANA)具有统一的长度,与PANA的大小无关。而且,公共密钥技术通常可以只将小于密钥系数大小,如一个典型的RSA密钥是1024位,的数据进行加密。
在框215中验证方要通过H(PANA)用在框213从安全永久存储器中得到的一个私有密钥KPR来计算数字签名DSIG。加密的结果就是此数字签名DSIG。KPR是一个公共/私有密钥对中的私有密钥。相应的公共密钥KPU在程序用KPR来验证的可靠性所要用到的每一计算机系统中都是可用的。
数字签名的计算可以采用任何已知的技术,包括但并不限于数字签名算法RSA和DSA,以及散列算法SHA-1,MD5,MD4和MDC。
DSIG在框217中被附加到合并的程序/名称对象PANA中并存储在框219中。从而该数据签名可以在程序发送和加载到一计算机系统中时与程序一起传输。最终发送的对象包括程序、名称和数字签名,即被称作已验证的程序A(CPA)。已验证的程序现在可以在框221中发送到具有一安全永久存储区和一依照本发明的操作系统的最终用户的位置。
当依照本发明的操作系统将一个程序加载到计算机系统时,它通过核对所附的数字签名DSIG来核对程序本身以及程序名称的可靠性。如上面所说明的,公共密钥KPU在要用到程序PA的每一个计算机系统中都是可用的。
参照附图4,当加载一个程序来运行时,计算机的操作系统将依照本发明完成以下各步在框301中,已验证的程序对象CPA分成数字签名DSIG和合并的程序/名称对象PANA。
依照下面各步,根据公共密钥KPU完成确认该数字签名是否该对象PANA中程序和名称的合法签名的工作。首先,在框303中使用公共密钥KPU将数字签名DSIG进行解密。如果数字签名确实是由相应的私有密钥所生成的,解密的结果应该是散列值H′(PANA)。
然后在框中用与验证过程中相同的方法计算散列值H(PANA)。在框307中对框303和305进行比较来看H(PANA)是否等于H′(PANA)。如果相等,数字签名核对并证明了PANA是由验证方时所形成的,并且能证明PANA没有被修改过。
如果该签名不正确,在框309中加载过程退出。如果签名正确,则在框311中将对象PANA分为程序PA和程序名NA。程序名NA保存在操作系统存储器框313中的数据区分配表中,在其中除了操作系统本身外的其它程序都不能对它进行修改。程序在框315中加载,并在框317中开始程序PA的执行。
所有程序占有的永久数据区由计算机的操作系统进行管理。任何应用程序如果没有向操作系统请求服务则都不能直接对它们进行访问。
当程序向操作系统请求分配一个新的永久数据区时,操作系统查找该程序的名称并将它以与永久数据区永久关联的方式存储。从而每一个永久数据区就附加有一永久、不可修改的拥有者名称域。
此后,当程序请求对一存在的数据区进行访问时,操作系统核对请求的程序是该数据区的创建者,也就是该数据区的拥有者。它将加载时存储的程序名称与数据区本身所附加的拥有者名称进行比较。如果两者不是完全相同的话,程序将不会被允许对所请求的数据区进行访问。如果我们可以保证程序名称不能以任何方式伪造的话,这种机制就可以防止程序获得对任何其它程序的数据的访问。这种保证可以通过上面所述的程序验证和加载程序时的处理来提供。
可以理解,唯一的应用程序名称与数据区拥有者的名称的比较不必完全匹配,并且在一些系统中,部分比较或全部的比较可以以更好的方式完成。例如,对于一组请求访问同一永久数据区并完成允许此访问的程序来说,所有的名称可以由性确认方指定为以相同的字母开始但以不同的后缀结束。一组XYZ系列程序可以包括XYZA、XYZB等等。在此例中,只要求名称中的XYZ部分与永久数据区的拥有者名称匹配。同样地,除了完全匹配之外,可以有其它的匹配方式进行补充而不会违背本发明的精神,如字符反序匹配以及其它的变化。
数据区访问控制在附图5的流程图中进行了举例说明,其中包括如下步骤。具有名称NA的应用程序A在框401中请求访问数据区D2。该请求在框409中随虚线表示的路径送到SRDI管理器109。SRDI管理器109寻找加载程序A时所保存的名称NA。SRDI管理器109接着检查与数据区D2相关联的拥有者名称。
SRDI管理器109在框405对这两个值进行比较,并在框407中发现请求者的名称(NA)与数据拥有者的名称(NA)相等,通过将数据区D2分配到程序A的局部描述符表来允许访问。
在实线表示的路径中,附图5还表示了试图访问其它程序拥有的数据区时的情况,此时将发生以下各步。具有名称NA的应用程序A在框402中请求访问数据区D1。该请求在框403中随实线表示的路径送到SRDI管理器。SRDI管理器寻找加载程序A时所保存的名称。同样该名称为NA。SRDI管理器接着检查与数据区D1相关联的拥有者名称,并且发现名称为NB。在框405中SRDI管理器对这两个值进行比较,既然请求者的名称(NA)不等于数据拥有者的名称(NA),则不分配内存所以访问被拒绝,从而程序A不能访问程序B拥有的数据。可以理解的是,虽然此最佳实施例中比较是采用完全相等的办法,为了匹配程序名和数据拥有者名称可以选用其它的比较方法。
可以理解的是,对永久存储器中的数据区的访问的允许可以通过上述的分配来完成或者是真正地从它的局部描述符表中分配的区域中将数据复制到保护级别为0的SRDI管理器,也就是RAM中的另一区域。此RAM中的区域由保护级别为0的SRDI管理器的局部描述符进行分配并通过应用程序的级别为3的局部描述符分配给发出请求的应用程序。
本发明提供了一种将安全区域中的永久数据与来自该安全区域之外的暂时应用程序相关联的安全的方法。当一个程序加载时,要对它的可靠性进行确认并自动地将程序与它所创建的数据区关联起来。任何程序不能获得对其它程序创建的任何数据区的访问。
当然,可以对本发明进行一些修改和适应来发挥其优势而不会背离本发明的精神。而且,本发明的一些特征的使用可以不必与其它特征的使用相一致。因此,本描述只应仅仅作为本发明原理的一个示例,而不应成为对它的限制。
权利要求
1.一种允许将来自外部的已验证的应用程序加载到计算机系统的安全模块中并执行的方法,包括在可靠性集中验证时验证应用程序的可靠性;在该应用程序将要加载和执行的计算机中进行应用程序的可靠性核对;将该应用程序加载到计算机的安全模块中;比较该应用程序的唯一名称与所存储的与永久数据区相关联的名称;只有在该应用程序的唯一名称与所存储的与永久数据区相关联的名称的比较匹配时,才允许应用程序访问该永久数据区。
2.一种验证应用程序P的可靠性,以使应用程序P可以存储在安全模块之外并可以加载到安全模块中且在其中执行的方法,该方法包括为程序P选择一个唯一的名称N;将名称N和程序P合并为一个单独的相邻的对象PN;使用一个私有-公共密钥对算法中的私有密钥从PN中计算得到一数字签名DPN;将该数字签名DPN附加到对象PN来获得一已验证的程序CP;建立一对应于此私有-公共密钥对算法中私有密钥的公共密钥,该密钥在此程序P所要加载和执行的每一个安全区中都是可用的。
3.一种从外部存储器中将一个已验证的程序CP加载到一个安全区以在该安全区中执行的方法,该已验证的程序CP具有相关联的数字签名DPN,该方法包括请求驻留在安全区中的操作系统加载一个程序CP;将该程序CP从外部存储器中检索到处于操作系统保护模式的内存中;在安全区处于保护模式的内存中将数字签名DPN从已验证程序CP的对象PN中分离出来;使用对应于用来产生DPN的私有-公共密钥对算法中私有密钥的公共密钥来确认该数字签名是否为对象PN的合法签名;将程序P从对象PN的名称N分离出来;将程序P加载到内存中执行;将程序名称N存储到保护的操作系统内存中供以后用来允许程序P访问安全区的内存中的数据文件。
4.如权利要求3所述的方法,其特征在于,进一步包括在操作系统中检索程序P对一数据对象的访问请求;从处于保护的内存中获得程序P的名称N;从数据对象D中获得其拥有者名称n;将名称N和拥有者名称n进行比较;如果名称N和拥有者名称n匹配,则授权程序P访问数据对象D;如果名称N和拥有者名称n不匹配,则不允许程序P访问数据对象D。
5.一种验证程序可靠性以使应用程序可以存储于安全区外部并可以加载到安全区中执行的装置,包括为程序P选择一唯一名称N的装置;将名称N和程序P合并为一个单独的相邻的对象PN的装置;使用一个私有-公共密钥对算法中的私有密钥从PN中计算数字签名DPN的装置;将该数字签名DPN附加到对象PN来获得一已验证的程序CP的装置;分配对应于此私有-公共密钥对算法中私有密钥的公共密钥的装置,该密钥在此程序P所要加载和执行的每一个安全区中都是可用的。
6.一种从外部存储器中加载一个已验证的程序CP到一安全区以在该安全区中执行的装置,此已验证的程序CP具有附加的数字签名DPN,包括请求驻留在安全区中的操作系统加载程序CP的装置;将该程序CP从外部存储器中检索到处于操作系统保护模式的内存中的装置;在安全区的处于保护模式的内存中将数字签名DPN从已验证程序CP的对象PN中分离出来的装置;使用对应于用来产生DPN的私有-公共密钥对算法中私有密钥的公共密钥来确认该数字签名是否为对象PN的合法签名的装置;将程序P与对象PN的名称N分离出来的装置;将程序P加载到内存中以执行的装置;将程序名称N存储到操作系统保护内存中供以后用来允许程序P访问安全区的内存中的数据文件的装置。
7.如权利要求6所述的装置,其特征在于,进一步包括在操作系统中接收程序P对一数据对象的访问请求的装置;从处于保护模式的内存中获得程序P的名称N的装置;从数据对象D中获得其拥有者名称n的装置;将名称N和拥有者名称n进行比较的装置;当名称N和拥有者名称n匹配时授权程序P访问数据对象D以及当名称N和拥有者名称n不匹配时不允许程序P访问数据对象D的装置。
8.一种计算机程序产品,该产品具有计算机可读媒体,其上记录了用于验证程序的可靠性,使得程序P可以存储在安全区之外并可以加载到安全区中执行的计算机程序逻辑,该产品包括为程序P选择一唯一名称N的装置;将名称N和程序P合并为一个单独的相邻的对象PN的装置;使用一个私有-公共密钥对算法中的私有密钥从PN中计算数字签名DPN的装置;将该数字签名DPN附加到对象PN来获得一已验证的程序CP的装置;分配对应于此私有-公共密钥对算法中私有密钥的公共密钥的装置,该密钥在此程序P所要加载和执行的每一个安全区中都是可用的。
9.一种计算机程序产品,该产品具有计算机可读媒体,其上记录了用于加载存储在安全区之外的程序P并在安全区中执行该程序的计算机程序逻辑,该程序P具有一附加的数字签名DPN,该程序产品包括请求驻留在安全区中的操作系统加载程序CP的装置;将该程序CP从外部存储器中检索到处于操作系统保护模式的内存中的装置;在安全区的处于保护模式的内存中将数字签名DPN从已验证程序CP的对象PN中分离出来的装置;使用对应于用来产生DPN的私有-公共密钥对算法中私有密钥的公共密钥来确认该数字签名是否为对象PN的合法签名的装置;将程序P从对象PN的名称N中分离出来的装置;将程序P加载到内存中执行的装置;将名称N存储到操作系统保护内存中供以后用来允许程序P访问安全区的内存中的数据文件的装置。
10.如权利要求9所述的装置,其特征在于,进一步包括在操作系统之中检索程序P对一数据对象的访问请求的装置;从处于保护模式的内存中获得程序P的名称N的装置;从数据对象D中获得其拥有者名称n的装置;将名称N和拥有者名称n进行比较的装置;当名称N和拥有者名称n匹配时授权程序P访问数据对象D以及当名称N和拥有者名称n不匹配时不允许程序P访问数据对象D的装置。
全文摘要
公开了一种用于验证程序可靠性并用于安全地将其验证过程已经被核对的已验证的应用程序与它们所拥有的永久应用程序数据相关联的方法、装置以及计算机程序产品。本发明可以防止其它应用程序,包括其验证过程已经被核对的已验证的应用程序,访问不属于它们的数据。
文档编号G06F21/00GK1203394SQ9810839
公开日1998年12月30日 申请日期1998年5月19日 优先权日1997年6月20日
发明者托德·维斯顿·阿诺尔德 申请人:国际商业机器公司