首页> 中国专利> 用于解密已加密数据并在存储器空间中定位用于执行的解密数据的方法和设备

用于解密已加密数据并在存储器空间中定位用于执行的解密数据的方法和设备

摘要

一种加密数据解密设备,在已经被加密后的程序和数据处于解密到执行的过程中时,为程序和数据提供增强的安全保护。当一个被解密的部分程序需要被加载到共享存储器(M)中时,控制单元(11)把它加载到一个由存储器定位信息指示的区域中。按照存储器定位信息,多个部分程序被顺序地加载到一个区域中,使得一个部分程序被另一个覆写;因此,没有部分程序长时间在存储器中存在,因此降低部分程序被非法引用的可能性。此外,由于每一次某数据被解密时,解密支持程序认证单元(13)确认解密支持程序(P)的可靠性,就有可能防止有滥用解密支持程序的非法引用。

著录项

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2013-09-11

    未缴年费专利权终止 IPC(主分类):G06F1/00 授权公告日:20080102 终止日期:20120725 申请日:20030725

    专利权的终止

  • 2008-01-02

    授权

    授权

  • 2005-10-12

    实质审查的生效

    实质审查的生效

  • 2005-08-17

    公开

    公开

说明书

发明领域

本发明涉及特别是在程序被执行或使用时解密已加密数据的已加密数据的解密设备,本发明进一步涉及在实现安全保护的同时解密已加密数据的解密设备,本发明也涉及这样的解密方法。

发明背景

按照常规,当要解密在计算机系统上再现或执行的已经为安全目的被加密的数据和程序时,在计算机系统上执行一个解密支持程序;然而,在一个其技术规范对公众开放的开放的计算机系统中,程序可能很容易被分析和修改。这样,就可能有一些非法行为,诸如(i)改变加密支持程序和(ii)把不应被引用或改变的解密的程序修改成一个可引用或可改变的解密的程序。

为了加强安全保护,有人建议了其它方法,例如,将解密支持系统本身加密,和在进行数据解密时,解密支持系统被解密(日本未审查的专利申请公开号09-006232),在解密过程开始之前,检查解密支持系统的可靠性(日本未审查的专利申请公开号11-039156)。在这些案例中作了防止对解密支持程序的改变的安排,以便保护解密的程序和数据的安全。

即使解密过程是通过执行可信的解密支持程序而进行的,如果在解密程序或数据已经被加载到计算机系统的存储器中后,利用非法的中断之类而接管控制,则加载的程序或数据变成是可引用的或可改变的,并且安全不能得到保护。

发明内容

鉴于上述问题,本发明的主要目的是提供一种从解密到执行加密程序和数据的过程期间增强安全的已加密数据的解密设备和方法,进一步提供一种通过对已经解密并加载到存储器中的程序或数据防止非法引用和改变、或把非法引用限定到最低水平,而实现安全保护的已加密数据的解密设备和方法。

为了实现该目的,本发明提供一种为了在计算机系统上执行而解密已经被加密和存储的程序的已加密数据的解密设备,该已加密数据的解密设备包含:存储单元,可用来在其中把该程序存储为多个已加密的部分程序(partial programs);存储器定位信息生成单元,可用来为每个部分程序生成存储器定位信息,包括(i)指示解密的定时(timing)的定时信息,和(ii)指示每个部分程序在被解密后要被定位到哪个定位区域(location area)的位置信息(positionalinformation),该定位区域包含在用于该程序的执行的一个存储器空间中;解密单元,可用来按照定时信息顺序地读取和解密存储单元中的部分程序;加载单元,可用来把每个解密的部分程序定位到由位置信息指示的每个定位区域。

由于这种安排,只有一部分程序被定位在存储器中,用于程序的执行;因此,即使发生存储器中的数据由于滥用中断而被非法引用的情况,也有可能使损失最小化。另外,通过作出安排,即在该至少一个部分程序的解密之前,把至少一个部分程序的存储器定位信息中的位置信息覆写(overwrite)到另一个部分程序已经被定位的定位区域,就有可能缩短某个部分程序在用于程序的执行的存储器中存在的时间期间,并使该部分程序更难被以非法方式引用。

本发明也提供一种安排,其中把位置信息加密后存储,加载单元解密位置信息,使得每个解密的部分程序都按照解密的位置信息被定位到每个定位区域。

用这种安排,有可能防止解密的部分程序已经被加载到的位置可以通过对存储器定位信息的非法引用而被泄漏的情况;因此,有可能增强已经被加载到存储器中的程序的安全。

本发明进一步提供一种安排,其中,在把每个部分程序放入一个定位区域时,当该定位区域的大小大于该部分程序的大小时,加载单元把哑元数据(dummy data)写入一个空白区域,它是由于该定位区域的大小与该部分程序的大小之差而尚未被覆写的该定位区域的一部分。

由于这种安排,有可能防止没有在覆写过程中被删除的一个部分程序的这样一部分在存储器中长时间地存留的情形;因此,有可能降低一个部分程序的这样一部分被以非法方式被引用的风险。

本发明进一步提供一种安排,其中,在被放入一个定位区域的一个部分程序结束执行之后另一个部分程序被定位到该定位区域之前过了预定长度的时间时,加载单元删除这一个部分程序。

由于这种安排,有可能防止一个结束处理的部分程序在存储器中长时间地存留的情形;因此,有可能降低该部分程序被以非法方式引用的风险。

本发明也提供进一步包含密钥嵌置单元(key embedding unit)的加密数据解密设备,密钥嵌置单元可用来在程序加密的过程期间预先在至少一个部分程序中嵌置在另一个部分程序的解密过程中使用的加密密钥的部分或全部,其中,解密单元用嵌置在已经被解密并定位在存储器空间中的该至少一个部分程序中的加密密钥执行这个其它部分程序的解密过程。

由于这个安排,即使非法用户取得对系统的控制,并试图让一个特定部分程序加载到存储器中,以便非法地引用它,由于有这个特定部分程序的解密所需的加密密钥的其它部分程序在存储器中不存在,非法引用是不可能的。

此外,为了实现类似的有益效果,也可以接受的是,已加密数据的解密设备进一步包含程序嵌置单元,程序嵌置单元可用来在程序加密的过程期间预先在至少一个部分程序中嵌置一个加密密钥生成程序,该加密密钥生成程序用于生成在另一个部分程序的解密过程中使用的加密密钥的部分或全部,其中,解密单元利用通过执行嵌置在已经被解密并放在存储器空间中的该至少一个部分程序中的加密密钥生成程序而生成的加密密钥执行这个其它部分程序的解密过程,或者,加密数据解密设备进一步包含一个密钥之加密密钥(encryption-key-for-a-key)嵌置单元,该密钥之加密密钥嵌置单元可用来在程序加密的过程期间预先在至少一个部分程序中嵌置一个密钥之加密密钥,该密钥之加密密钥被用来解密一个要在另一个部分程序的解密过程中被使用的加密密钥,其中,解密单元用从已经被解密并放在存储器空间中的该至少一个部分程序中获得的密钥之加密密钥所解密的加密密钥,执行这个其它部分程序的解密过程。

此外,也有可能有一种安排,其中,加载单元在要被解密的部分程序之一初次被定位到存储器空间中之前,动态地确定每个定位区域的绝对地址。

由于这个安排,程序被加载到的存储器中的位置在程序每一次被执行时都改变;因此,即使非法用户企图通过在推测加载位置的同时观察存储器的内容以非法方式引用程序的内容,这种企图成功的可能性也低。

本发明也提供一种安排,其中,解密单元利用一个解密支持程序来解密每个部分程序,加密数据解密设备进一步包含用来确认解密支持程序的可靠性的解密程序确认单元,并且解密单元在解密每个部分程序之前让解密程序确认单元确认解密支持程序的可靠性,并且仅在可靠性被确认之后才解密每个部分程序。

由于这个安排,不可能通过滥用解密支持单元而以非法方式引用程序的内容;因此,有可能改善解密时的安全程度。

也可以接受有这样一种安排,其中,加密数据解密设备进一步包含一个非法访问禁止单元,非法访问禁止单元在检测到中断时,通过删除一个或多个已经被定位在存储器空间中的部分程序而执行一个非法访问禁止过程。

由于这个安排,不可能通过滥用中断以非法方式引用程序的内容。

此外,也可能有这样一种安排,其中,非法访问禁止单元有一个在执行非法访问禁止过程时执行的哑元程序。

另外,通过有这样的安排,其中非法访问禁止单元预先接收一个或多个位置的登记—在每个位置发生合法性程序检查中断,当被检测到的中断发生在登记的位置之一时,不执行非法访问禁止过程,就有可能避免由为了防止非法引用甚至必须禁止合法中断的情形所引起的不便。

也可以接受让加密数据解密设备进一步含有一个存储位置信息存储单元,用于在其中存储已经被加密的、并且为每一个部分程序指示在存储单元中的存储位置的存储位置信息,其中,解密单元按照解密单元已经从存储位置信息存储单元读取并解密的存储位置信息,从存储单元读取并解密每一个部分程序。

由于这个安排,只有合法的部分程序将被执行。换言之,有可能防止由执行一个为了非法引用的目的并已经替代合法的部分程序而存储在存储装置中的程序的非法用户进行的非法引用。此外,也可以接受让加密数据解密设备进一步含有一个存储位置信息认证单元,用于判定存储位置信息是否可信,其中,当存储位置信息认证单元作出肯定性判定时,解密单元从存储单元读取并解密每一个部分程序。

此外,本发明进一步提供一种为了在计算机系统上执行而解密已经被加密和存储的程序的已加密数据的解密设备,该已加密数据的解密设备包含:存储单元,可用来在其中把该程序存储为多个已加密的部分程序;解密单元,可用来从存储单元读取作为执行目标的的一个部分程序并解密所读取的部分程序;存储器定位确定单元,可用来动态地确定作为执行目标的该部分程序的定位位置,该定位位置指示在用于程序的执行的存储器空间中的一个地址;加载单元,可用来把该解密的部分程序定位到由存储器定位确定单元所确定的定位位置。

用这个安排,程序被定位到的存储器中的位置,将在程序每一次被执行时都改变;因此,即使非法用户企图通过在推测加载位置的同时观察存储器的内容以非法方式引用程序的内容,这种企图成功的可能性也低。

此外,有这样一个安排是有效的,其中,存储器定位确定单元为至少一个部分程序的每一个确定一个定位位置,使得一个部分程序被覆写到一个包含在存储器空间中的、一个或多个其它部分程序已经被定位的区域中。为了使非法引用更难,可以接受的是,加密数据解密设备进一步含有一个执行目的存储器确定单元(execution-purposememory determining unit),用于在程序的执行开始之前,动态地确定存储器空间的起始地址和大小的其中之一或二者。也希望有这样一种安排,其中,当存储器定位确定单元确定一个部分程序的定位位置,使得该部分程序被覆写到一个或多个其它部分程序已经定位的区域时,该定位位置被确定得使得该部分程序覆写一个最早在该存储器空间定位的部分程序,或者希望有这样一种安排,其中,当存储器定位确定单元确定一个部分程序的定位位置,使得该部分程序被覆写到一个或多个其它部分程序已经定位的区域时,该定位位置被确定得使得该部分程序部分地或全部地延伸到已经被定位的两个或更多的其它部分程序上

此外,这里提及的有益效果可以通过以下方式实现:(i)一种由具有上述特征的加密数据解密设备执行的加密数据解密方法;或(ii)一种让计算机执行这个解密方法的程序。此外,以下事项对实现上述的有益效果也有用:生成存储器定位信息和加密密钥的程序、加密密钥、以及在生成“密钥之加密密钥”的同时加密程序的加密程序生成装置,它们都被具有上述特征的加密数据解密设备使用。

附图简要说明

图1是一个程序加载器的框图,该程序加载器是本发明的加密数据解密设备的一个实施例,是在程序加载器运行所在的计算机系统中显示的;

图2是表示实施例中部分程序的存储地址信息与存储位置之间的对应的示意图,存储位置处于一个二级存储装置中并由存储地址信息限定;

图3是表示本发明实施例中存储器定位信息的结构和内容的例子示意图;

图4是表示如何将本实施例中解密的部分程序定位在共享存储器中的示意图;

图5是表示本实施例中在加密程序的解密和加载过程中程序加载器的操作的流程图;

图6表示区域地址信息的例子;

图7表示区域地址信息的其它例子;

图8是表示哑元数据嵌置过程沿时间线的总体结构的示意图;

图9是表示一个改进例子中的程序加载器的结构的框图;

图10是表示由调用关系信息定义的部分程序之间的的调用关系的示意图;

图11是表示在解密过程的时候部分程序的存储器位置沿时间线的示意图;

图12是表示一个改进例中的程序加载器的结构的框图;

图13是表示一个改进例中的程序加载器的结构的框图;

图14是表示另一个改进例中的程序加载器的结构的框图;

图15A到15E是表示如何将改进例中的解密的部分程序定位在共享存储器M中的示意图;

图16表示改进例中的存储器管理信息的内容;

图17是表示改进例子中确定一个部分程序的存储器位置的流程的流程图。

具体实施方式

以下参照附图说明本发明的加密数据解密设备的实施例。

总体结构

图1是一个程序加载器1和相关装置的框图,该程序加载器是本发明的加密数据解密设备的一个实施例,该程序加载器和相关装置是在程序加载器和相关装置运行所在的计算机系统中显示的。在本实施例中,要被加密数据解密设备解密的加密数据是个程序。

在本实施例中,程序加载器1按照来自操作系统(以下称为OS)的指令,从二级存储装置S中读取加密的程序并解密之,然后将它加载到用于执行的共享存储器M中。“加载”的意思是把一个程序定位到存储器空间中以便执行之。

程序加载器1的特点在于使用作为常规地用于管理存储器的技术的覆盖(overlay)方法,以便保护解密程序的安全。覆盖方法是一种用于将程序存储到一个大小小于该程序的存储器中的技术。覆盖方法是把一个程序划分成段(segments)(以下称为“部分程序”),然后在交错的时间把它们定位进相同的存储器区域。尽管有存储器大得足以同时在其中定位整个程序,本发明的程序加载器1为了实现安全保护而故意采用覆盖方法。特别地,程序加载器1将程序以一组部分程序的形式加密和存储程序,当程序需要被执行时,程序加载器1将程序以部分程序为单位解密,并通过顺序地彼此覆写而把它们加载到共享存储器M的同一个区域。此外,由于定位部分程序的位置和定时是在考虑到机密性的同时确定的,安全保护能力高得许多。

解密和加载的过程是以部分程序为单位进行的,部分程序表示从一个源文件或一组彼此相关的源文件生成的目标码。更具体来说,一个目标码表示一个是程序组件的子程序或库模块本身。

通过像这样地按段加载程序,整个程序的内容在非法引用中被泄漏的可能性变小。这是因为,为了引用整个程序,需要在每一次加载一个部分程序时重复进行非法引用。

然而应当注意的是,覆盖方法中并不考虑安全保护,因为覆盖方法的最初目的是节省存储器资源。因此,一个结束处理的部分程序停留在存储器中,一直到被下一个部分程序覆写。另外,由于程序被加载到的区域的地址是固定的,容易解破程序的入口。此外,有可能通过滥用中断功能或篡改解密支持程序以非法方式部分地引用或修改程序。

本实施例的程序加载器1在将其安排为使得考虑安全保护之后执行覆写处理方法,以及检查是否有对中断功能的滥用或对解密支持程序的篡改。

结构

总体结构

以下说明程序加载器1的结构。

程序加载器1包含控制总体过程的控制单元11;包括用解密支持程序P解密的加密的部分程序在内的加密的数据的解密单元12;在解密之前检查解密支持程序P的可靠性的解密支持程序认证单元13;确定将解密的部分程序向共享存储器M中定位的位置和定时的存储器定位定义单元14;以及防止通过让一个在共享存储器M中的正被执行的部分程序中断而进行的非法访问的非法访问禁止单元15。

此外,程序加载器1包含一个在其中存储在程序解密过程中使用的各种加密信息和加密密钥的存储单元16;以及一个确认存储单元16中存储的存储地址信息(将在以后作解释)的可靠性的存储地址信息认证单元17。解密单元12由分别处理不同种类的数据的存储地址解密单元121、存储位置信息解密单元122和部分程序解密单元123组成。

存储单元16中存储的信息包括,用于解密过程的加密密钥161;指示一个作为解密目标的加密的部分程序要被存储到的二级存储装置S中的位置的存储地址信息162;指示解密的部分程序要被存储到的在共享存储器M中的位置的存储器定位信息163。

在从二级存储装置S读取该作为解密目标的加密的部分程序时,存储地址信息162被引用。由于存储地址信息162是在已经被加密后被存储的,存储地址信息解密单元121解密它。然后,在存储地址信息162被解密后,存储地址信息认证单元17检查它的可靠性(检查是否它未被篡改)。

图2是表示存储地址信息162与部分程序的存储位置之间的对应的示意图,存储位置位于二级存储装置S中,由存储地址信息162指定。存储地址信息162由部分程序的标识信息210和指示部分程序各自在二级存储装置S中被存储在哪个位置的地址信息220组成。存储地址信息的项数与部分程序的个数一样多。地址信息220部分被加密。

存储器定位信息163是定义部分程序的每一个在被解密后应当要被定位在共享存储器M中的哪个位置的信息。提前让定位位置被定义,是将每个数据段顺序地覆写到一个预定区域中的覆盖方法的执行的一个前提条件。存储器定位信息163在被加密后被存储,在被存储器定位信息解密单元122引用时得到解密。

图3是表示存储器定位信息的结构和内容的例子的示意图。存储器定位信息指示在哪个时间(即按什么顺序)应当将哪个程序定位在共享存储器M中。共享存储器M中的部分程序存储区(region)被划分成三个区域。

图3中所示的存储位置信息163由区域标识信息部分310和部分程序标识信息部分320组成。区域标识信息部分310在其中存储指示该信息与哪个区域有关的标识信息。部分程序标识信息部分320在其中存储(i)要被定位到由在区域标识信息部分310中存储的标识信息所指示的区域的部分程序的标识信息,和(ii)指示要按什么顺序定位每个部分程序的数据。

存储器定位信息163指示,共享存储器M中的部分程序存储区被划分成三个区域,可以将三个部分程序顺序地定位到区域1中,将四个部分程序顺序地定位到区域2中,将两个部分程序顺序地定位到区域3中。

图4是表示在程序执行时如何按照存储器定位信息163将解密的部分程序定位在共享存储器M中的示意图。图4显示,沿着程序的过程执行的时间线(横轴),部分程序每个被定位在共享存储器M的三个存储区域的一个中。例如,部分程序A、B和C被顺序地定位在区域1中,并且,在时间期间t1,部分程序A(区域1)、部分程序D(区域2)和部分程序H(区域3)在共享存储器M中共存。在同一个时间期间在共享存储器M中共存的部分程序,例如通过在过程的执行期间调用另一个部分程序中的过程而可能互相具有相关性。

上述的存储器定位信息是由存储器定位定义单元14在作为加密目标的程序的加密过程之前生成。这个生成过程与常规覆盖方法中所使用的相同类型的位置信息的生成过程基本相同,然而,在本实施例中,这个生成过程的执行考虑了安全保护。本实施例中的生成过程将在以后解释。

结构的主要部分的说明

以下进一步详细解释至此已经在总体上作过解释的结构的主要部分。

解密支持程序认证单元13

解密支持程序认证单元13在各种加密数据的解密过程之前确认解密支持程序P是否可信。更具体来说,(i)当部分程序解密单元123将要解密一个加密的部分程序时,(ii)当存储地址解密单元121将要解密加密的存储地址信息时,以及(iii)当存储位置信息解密单元122将要解密加密的存储器定位信息时,解密支持程序认证单元13响应来自这些部件的每个的请求而执行解密支持程序P的一个认证过程。解密支持程序认证单元13将该认证过程的结果返回到请求的源。当认证的结果是“可信的(非篡改的)”,解密支持程序认证单元13从请求的源接收作为解密目标的数据,并将其传送到解密支持程序P,然后从解密支持程序P接收解密过程的结果,并将其传送到请求的源。

解密支持程序认证单元13所执行的认证过程是为了确认解密支持程序P在该程序上一次被执行到当前时间之间没有被篡改。为了判断可靠性,将要参考一些包括以下在内的事项:(i)解密支持程序P的大小是否已经改变,(ii)更新的日期和时间,以及(iii)解密支持程序P的单向哈希值(one-way hash values)。应当注意的是,认证方法并不仅限于此,使用用于认证电子签名的方法的技术也是可以接受的。为了执行这个认证过程,解密支持程序认证单元13在其中存储解密支持程序P在首次执行时的大小,以及关于更新的日期和时间的以及哈希值的信息。

存储地址信息认证单元17

存储地址信息认证单元17确认是否存储地址信息是可信的,该存储地址信息已经被解密支持程序P按照一个来自存储地址解密单元121的指令解密。这是要确认该存储地址信息在它上次被执行时与当前时间之间没有被篡改过。

存储地址信息认证单元17用一个通常使用的、诸如单向哈希函数的认证技术执行存储地址信息的认证过程,并把结果返回到存储地址解密单元121。为了执行这个认证过程,存储地址信息认证单元17在其中存储关于该存储地址信息的必要信息(在第一次解密时的哈希值和通常用于认证过程的信息片段(pieces of information))。

控制单元11

当OS指定哪个部分程序要被解密时,控制单元11把该要被解密的部分程序的标识信息传送到存储地址解密单元121,命令存储地址解密单元121获得并解密该部分程序的存储地址。当存储地址解密单元121输出解密的存储地址时,控制单元11把它传送到部分程序解密单元123,命令部分程序解密单元123解密该部分程序。与此同时,控制单元11把作为解密目标的部分程序的标识信息传送到存储位置信息解密单元122,命令存储位置信息解密单元122为该部分程序解密存储器定位信息。

控制单元11按照由存储位置信息解密单元122输出的存储器定位信息,把已经由部分程序解密单元123输出的解密的部分程序,加载到共享存储器M的一个区域中。如图3中所示,存储器定位信息由每个部分程序的标识信息和每个区域的标识信息组成,没有包括指示每个区域的绝对地址值的信息。每个区域的绝对地址值被存储在控制单元11中。

在上述过程的过程中,当解密支持程序P或者存储地址信息有问题时(当这二者中的一个或两个被确认为不真实时),控制单元11命令其它部件中断该过程并执行执行一个删除至此刻为止已经被解密的各种数据(部分程序、存储器定位信息、以及存储地址信息)的过程。

存储器定位定义单元14

在加密部分程序时,存储器定位定义单元14生成、并在存储单元16中存储在上述解密过程中所提到的存储器定位信息163。部分程序由被加密程序生成装置C加密。被加密程序生成装置C把作为加密目标的程序(一组部分程序)转换成一种执行形式,在把它存入二级存储装置之前加密转换了的程序,使得每个部分被按照在存储器定位信息中指定的顺序定位在存储器中。

首先,存储器定位定义单元14从报头信息之类的信息中获得用于为部分程序确定在存储器中的位置所必需的各种信息。此外,存储器定位定义单元14获得在确定时应当认为是重要的那些标准(被系统管理员作为参数指定的标准),包括关于部分程序在执行时要被加载到其中的共享存储器的信息(例如部分程序存储区和该区中包含的区域(area)的个数以及它们的大小)。存储器定位定义单元14根据这些种类的信息,生成存储器定位信息。更具体来说,存储器定位定义单元14在生成存储器定位信息时,参照如下的信息:

(1)每个部分程序的大小(加密前的大小,即解密后的大小)

(2)部分程序之间的相关性(调用的部分程序和被调用的部分程序之间的关系,以及调用的个数)

(3)每个部分程序的机密水平

(4)所要求的性能水平

按照这些信息片段确定存储器中的位置的过程,也在常规的覆写过程中进行;然而,在本实施例中,由于目标是程序的安全保护,与按照通常的覆写方法确定存储器位置的情形相比,第(3)项被认为更重要,第(4)项具有更低的优先级。

因此,存储器定位定义单元14生成这样的存储器定位信息,按照这个存储器定位信息,具有高的机密水平的部分程序来说,加载和删除的过程被频繁地重复,使得这样一个部分程序被定位在共享存储器M中的时间期间的长度最低,一旦过程结束,就被另一个部分程序覆写。部分程序的机密水平,例如可以通过由系统管理员对每个部分程序的评估而被指定,其中,机密的评估值被输入到存储器定位定义单元14中作为参数。

此外,也有可能以下述方式指定存储器定位信息。存储器定位定义单元14用按照常规被用于确定存储器定位信息的算法,生成多个位置信息的模式(pattern)作为候选。然后,按照就安全保护而设定的标准,评估该多个定位信息候选,把最好的候选指定为定位信息。其中一个标准例如是“具有高的机密水平的部分程序在存储器中存在的时间期间的估计长度”。或者,系统管理员参考由存储器定位定义单元14生成的该多个定位信息候选,从中选择一个,这也是可以接受的。

此外,如果需要让同时部署在存储器中的部分程序的大小(在一个时间可以被引用的程序的部分的大小)的总值更小,则最好使部分程序被加载到其中的存储器的大小更小。

应当注意的是,存储器定位定义单元14可以是加密的程序生成装置C的一个成分,而不是程序加载器1的一个成分。

非法访问禁止单元15

非法访问禁止单元15执行用于禁止能为分析在共享存储器M中被执行的部分程序而利用中断进行的非法程序分析的过程。

中断的意思是,在一个过程在计算机系统上被执行期间,发生另一个具有更高优先级的事件。一般来说,发生中断时,正在被执行的该过程被临时中止,用于该中断事件的另一个过程将被执行。利用这个功能,就有可能在一个任意选择的时刻中止一个程序,查看该时刻的存储器或某个寄存器的内容,或者在修改存储器或寄存器的内容后使处理恢复。

例如,通过在程序加载器1解密存储地址信息之后立即有一个中断发生,就有可能查看解密的存储地址信息。另外,通过在解密和加载一个部分程序的完成后使一个中断发生,就有可能被定位在共享存储器M中的该部分程序的内容。

为了防止这种情况,非法访问禁止单元15在检测到一个中断时,中止正被另一个部件执行的过程或删除被加载到共享存储器M中的部分程序。

更具体来说,在检测到一个中断后,非法访问禁止单元15发布一个陷阱指令,该指令要中止正在其中包括程序加载器1的计算机系统上被执行的程序的过程,并查看CPU中的一个IDT(中断描述符表)。IDT是一个表,它定义关于相应于中断指令的处理程序的信息。在本实施例中,这种处理程序被定义得被用于执行对一个程序的中止和对在共享存储器M的解密的部分程序存储区中存储的内容的删除。非法访问禁止单元15把过程转移到这样一个处理程序,以便程序的中止和存储器内容的删除被执行。

同样,在上述过程的同时,非法访问禁止单元15执行一个执行哑元程序的过程。哑元程序被用来干扰试图以中断的滥用接管控制的人,与此同时程序被中止或者存储器内容被删除。这里,假设一个哑元程序的过程是一个不影响其它程序的过程的过程,例如“只显示字符串”或“输出一个与一个加密的程序的执行的结果相反的结果”。在检测到中断时,非法访问禁止单元15调用一个已经被预先加载到执行环境中的哑元程序并使其执行。

操作

其次,下面参照附图,解释具有如上所述的结构的程序加载器1的操作,焦点在于控制单元11的描述。

图5是表示程序加载器1在加密的程序的解密和加载的过程中的操作的流程图。然而应当注意的是,非法访问禁止单元15所执行的过程没有在图中表示,因为它是以中断的方式被执行的。同样,图中也没有表示要被并行地执行的加密程序的过程和生成存储器定位信息的过程。

解密和加载的过程,在控制单元11从外部(OS或正在系统执行的一个程序)接收到一条要求执行该过程的指令(其包括指定将被处理的部分程序的标识信息)时开始(S501:是)。在目标程序被启动,并且,在启动后,被解密并加载后的正在执行的部分程序调用另一个部分程序时,该要求执行该过程的指令从OS被传送。就一条在启动时的指令来说,具有程序的入口点的部分程序是解密目标。就一条在启动后的指令来说,被调用的部分程序的标识信息是该过程的目标。

控制单元11接收指令后,把被指定的部分程序的标识信息传送到存储地址解密单元121,命令它解密存储地址,以便从二级存储装置S读取被指定的部分程序。

存储地址解密单元121接收来自控制单元11的指令后,从存储单元16读取该部分程序的(被加密的)存储地址信息(S502),也命令解密支持程序认证单元13确认是否解密支持程序P是可信的。

如果解密支持程序P被确认是真实的(S503:是),存储地址解密单元121用解密支持程序P解密在步骤S502读取的存储地址信息。此时,存储地址解密单元121从存储单元16获得一个用于解密这个存储地址信息的加密密钥,并把该加密密钥和加密的存储地址信息传送到解密支持程序P,以便执行解密过程(S504)。

反之,如果解密支持程序被确认不是可信的(当被判断已经篡改时)(S503:No),解密支持程序认证单元13通知控制单元11这个判断结果。控制单元11通知OS检测到篡改,并中止该解密和加载的过程(S514)。

在步骤S504已经获得解密的存储地址信息的存储地址解密单元121,把解密的存储地址信息传送到存储地址信息认证单元17,以便执行认证过程。存储地址信息认证单元17用一个通常使用的、诸如单向哈希函数的认证技术执行认证过程,并把结果返回到存储地址解密单元121。存储地址解密单元121把该结果传送到控制单元11。

如果由于认证过程的结果,存储地址信息被确认是不可信的(S505:No),控制单元11通知OS“存储地址是非法的”,并中止该解密和加载过程(S514)。

另一方面,存储地址信息被确认是可信的(S505:是),控制单元11从存储地址解密单元121获得解密的存储地址信息。然后,控制单元11继续到从二级存储装置S读取作为加密和加载的目标的部分程序的过程和解密该部分程序的过程。更具体来说,首先,控制单元11命令要执行解密过程的部分程序解密单元123开始该过程。

部分程序解密单元123收到来自控制单元11的指令后,首先从二级存储装置S的存储位置,读取被指定的加密的部分程序和一个用于解密该部分程序的加密密钥(S506)。然后,部分程序解密单元123命令解密支持程序认证单元13执行一个解密支持程序P的认证过程,并把结果返回到控制单元11。

如果解密支持程序P被确认是可信的(S507:是),部分程序解密单元123把在步骤S506获得的加密的部分程序与该加密密钥一起传送到解密支持程序P,以便执行该部分程序的解密过程(S508).。

反之,如果解密支持程序被确认不是可信地(S507:否),部分程序解密单元123通知控制单元11该结果。控制单元11通知OS“已经检测到对解密支持程序的篡改”,并中止该部分程序的解密和加载的过程(S514)。同样,此时如果有任何已经被加载到共享存储器M中的解密的部分程序,控制单元11删除它,也删除解密的存储地址(S514)。

部分程序解密单元123完成对部分程序的解密过程后,把解密的部分程序输出到通知控制单元11。控制单元11执行把该解密的部分程序定位到共享存储器M中的空间的过程。更具体来说,控制单元11命令存储器定位信息解密单元122从存储单元16读取加密的存储器定位信息和加密密钥(S509)。

存储器定位信息解密单元122使解密支持程序认证单元13执行一个对解密支持程序P的认证过程。

如果解密支持程序P被确认是真实的(S510:是),存储器定位信息解密单元122把加密的存储器定位信息和加密密钥传送到解密支持程序P,以便执行解密过程,然后把已经被解密的存储器定位信息返回到控制单元11(S511)。控制单元11按照解密的存储器定位信息,把在步骤S508中解密的部分程序定位到共享存储器M中(S512)。

如果解密支持程序P被确认不是可信的(S510:否),存储器定位信息解密单元122通知控制单元11该结果。控制单元11删除在步骤S508中解密的部分程序,然后中止该过程(S514)。此外,如果有已经被加载到存储器空间中的任何部分程序,控制单元也删除之。

至此所述的各过程将被重复,一直到整个目标程序结束被处理(S513:是)。

总结

正如迄此为止所述的那样,使用覆盖(overlay)方法的本实施例的程序加载器1,以部分程序为单位,解密作为解密目标的加密的程序,并按照一个已经对安全保护加以考虑后而设定的存储器定位信息,通过一个覆写过程,把解密的部分程序定位到存储器的一个预定区域中;程序加载器1由此防止对整个程序的非法引用。此外,通过以下过程使安全保护得到更有力的保障:(1)通过每个部分程序每次被解密时检查解密支持程序的可靠性而核实对解密支持程序的非法篡改;(2)通过也加密指示解密的部分程序位于存储器中的哪里的存储器定位信息,给对解密的程序的非法查看制造困难;和(3)通过在检测到中断时删除解密的数据(例如部分程序),防止利用中断的滥用进行的非法引用。

改进例

以下解释上述实施例的六个可能的改进例子。

改进例1

在上述实施例中,非法访问禁止单元15判断所有中断都非法,并中止过程和删除解密的数据;然而,有些中断是合法的。在本改进例中,过程被执行,以接受合法的中断。

本改进例中的总体的加密数据解密设备与前文所述的实施例的加密数据解密设备相同,只是非法访问禁止单元所执行的过程有部分不同。因此,将省略该结构的图形,但是把该单元称作非法访问禁止单元15’,以示区别。

本改进例中的非法访问禁止单元15’防止以非法的方式利用中断对程序进行反向分析,同时通过允许与用于以是合法目的的、检查故障之类为目的的调试程序有关的中断,接受用于合法的调试程序的中断。调试程序是一种功能,它在期望的位置停止(暂停)一个程序的过程,以便有可能在该状态下察看或修改存储器内容,以检查故障。

进行通过暂停停止程序的方式,是预先在每个出现停止之处设定一个断点,并在过程每次到达其中一个断点时让一个中断发生。也有可能设定详细的条件,每个条件作为在每个断点处停止程序的前提条件。然而,按照前述实施例的非法访问禁止单元15的处理方法,当OS让一个要暂停的中断发生时,程序就停止;因此,检查故障是不可能的。

因此,本改进实施例的非法访问禁止单元15’以下述方式把与调试程序有关的中断(用于暂停的中断)与其它中断区分开来:

在程序生成装置C转换成一种执行形式后,非法访问禁止单元15’在程序仍然处于加密前的阶段,从被合法授权的用户接收该执行形式的程序的断点的设置。非法访问禁止单元15’在其中存储已经被设定的断点的(以行号、函数名、地址等表达的)位置信息。

然后,在程序的解密和加载阶段,非法访问禁止单元15’监视中断(与非法访问禁止单元15的方式相同)。当程序正在执行期间发生中断时,非法访问禁止单元15’把发生位置与已经被存储的中断位置信息比较。当发生位置与预先已经在断点位置信息中设定的断点的位置之一相符时,则不执行在实施例中所述的诸如删除存储器内容的过程,允许用户继续该程序。

反之,如果中断发生在一个与预先设定的位置不同的位置,则非法访问禁止单元15’与非法访问禁止单元15一样地中止程序的执行,并执行删除存储器M中的诸如部分程序的加密的数据的过程。

改进例2

以下解释一个更严格地确保存储器定位信息的安全保护的改进例。

在前述的实施例中,,一旦生成的存储器定位信息被重复地使用,其内容与每一次一个目标加密的程序被解密和加载时的内容相同。换言之,当一个加密的程序被执行时,构成该程序的每个部分程序每次在相同的定时被定位在存储器空间中相同的地址。因此,在监视存储器空间中的数据的同时,通过程序的重复执行,可以解译存储器定位信息,这很难说是没有可能的。当存储器定位信息被解译时,对信息的使用的非法参考就变得可能。

因此,本改进例的目的是防止存储器定位信息被解译,以及确保对加密的程序的安全保护。因此,在本改进例中,生成存储器定位信息的使得构成程序的部分程序的存储器定位位置在程序每次被执行时都动态变化。

更具体来说,将存储器定位信息设定得使得要被分配给共享存储器M中的三个区域的每一个的绝对地址值在程序每次被执行时都变化。

本改进例中的总体的加密数据解密设备的结构与前述实施例中的相同,只有由存储器定位定义单元执行的部分过程是不同的。因此,将省略该总体设备的结构的图形,但是以下将把本改进例中的存储器定位定义单元称作存储器定位定义单元14’,以示区别。

图6表示三种模式的区域地址信息601、602、和603,它们被存储器定位定义单元14’存储,被用于改变区域的地址。每个区域地址信息,由一个区域和一个被分配给该区域的绝对地址的组合组成,有一个标识符部分610和一个绝对值地址部分620。

在前述实施例中,控制单元11在其中存储且使用相应于区域地址信息(例如区域地址信息610)的仅仅一种信息。在本改进例中,存储器定位定义单元14’在存储器定位信息被生成时,从三种模式的区域地址信息选择一个,并把它传送到控制单元11。当某个部分程序被解密和加载时,控制单元11按照所选择的区域地址的模式确定每个区域的绝对地址,并进一步按照每个区域的绝对地址和存储器定位信息为解密的部分程序获得共享存储器M中的一个定位地址。

存储器定位定义单元14’可以在(i)一条要求执行程序的指令被输入到程序加载器1时,或者在(ii)解密和加载程序的过程已经开始并且在第一个部分程序被加载之前,选择一种模式的区域地址信息。

应当注意的是,如果如上述方式把一个模式改变到另一个模式,不必非要按上述方式改变区域的绝对地址。也可能通过“滑动”绝对地址来改变存储器定位位置。

图7标识按照通过滑动改变绝对地址值的方法的区域地址信息。在区域地址信息700中,区域和绝对地址值是一一对应的,每个绝对地址值包括一个是α、β和γ的其中之一的变量(滑动宽度)。存储器定位定义单元14’通过改变每个变量的值来改变区域的绝对地址。

利用一个随机数生成程序(例如随机数生成函数、或者使用存储在定时器等中的时间信息的随机数生成程序),把每个变量的值确定为一个任意值,是可以接受的。把每个变量的值确定得满足下列条件,即“一个区域的变量(即滑动宽度)的值与要被定位在该区域中的部分程序的大小的总和不大于该区域的大小”。其理由是,应当避免这样一种情况,即一个部分程序被滑动时,被定位得部分地位于该区域之外。

应当注意的是,也有可能这样安排,使得存储器定位定义单元14’在其中存储有程序上一次被执行时的各区域地址,并通过查看它们,确保各区域的绝对地址与上一次的不同。

区域地址的改变,可以由控制单元11自己执行,而不是由控制单元11按照如上所述由存储器定位定义单元14’存储的信息执行。

改进例3

以下解释一个通过防止某个部分程序长时间被定位在共享存储器M中而更严格地确保部分程序的安全保护的改进例。

之所以在前述实施例中采用将部分程序覆写在相同区域中的覆盖方法,是因为当某个部分长时间保持位于共享存储器中时,被非法引用的风险增大。然而,即使采用覆盖方法,根据一个要被另一个覆写的部分程序的大小而定,已经被处理的该部分程序的一部分将保持在存储器中,不被删除。

例如,在按照图4中所示的方式把部分程序定位在存储器中时,对于顺序定位在区域1中的三个部分程序来说,假设部分程序B和部分程序C每个都只有首先被定位的部分程序A的大小的一半。在这种情况下,部分程序A的后一半不被通过用部分程序B和C覆写而删除,而是保持在区域1中。如果部分程序A的后一半特别地有一个高的保密级,则就安全保护来说,让它长时间保持就位是不太可取的。

在区域3中,不管部分程序H的过程在时间期间t1结尾时被完成的事实,部分程序H的数据从时间期间t2的开始到下一个部分程序得到定位期间,依然保持。

在本改进例中,每次当一个部分程序被解密并定位在存储器空间中时,都检查该定位区域的大小与该部分程序的大小之间是否有差别。当定位区域更大时,将通过把哑元数据(哑元程序)嵌置(覆写)在该区域的空白区域中而解决上述问题。当一个部分程序结束处理时,将从该时刻测量消逝的时间,当消逝了预定的时间时,整个区域将被哑元数据覆写。这里提到的这个过程将由一个控制单元执行。(以下将称其为控制单元11’,以区别于实施例中的控制单元11)。

图8是表示哑元数据嵌置过程的总体结构的示意图。该图显示顺着时间线在某个区域N中定位部分程序以及如何嵌置哑元数据。在时间期间T2、T3和T5,由于每个被定位的部分程序都小,要嵌置一段哑元数据来填充区域大小与部分程序大小之间的差额。在时间期间T4,将一段哑元数据填充整个区域,因为在前一个部分程序结束处理之后立刻存在一个预定长度的时间流逝。

当控制单元11’按照存储器定位信息把一个由部分程序解密单元123解密的部分程序定位在共享存储器M的区域之一中时,控制单元11’获得解密后的部分程序的大小(该大小由存储器定位定义单元14’制定为存储器定位信息的一部分),并且也通过查看共享存储器而获得定位区域的大小。

控制单元11’比较这两个大小的值,当区域大小较大时,从哑元程序存储区域中读取大小为这两个大小之间的差额的哑元程序数据,然后把该数据嵌置到该区域中的空白区域(在部分程序的结尾后的间隙和/或在部分程序的开始之前的间隙)。通过这个过程,前一个被定位在该区域中的部分程序的数据将被完全删除。

与时间消逝相应的哑元数据嵌置过程,将在一个部分程序完成处理之后被执行。当一个被加载到某个区域中的部分程序完成处理时,控制单元11’就开始用一个内置计时器为这个特定区域测量消逝的时间。当消逝的时间达到一个预定值时,如果下一个要被加载到这个区域的部分程序尚未被解密,则将哑元数据嵌置整个区域。

通过这个过程,前一次已经被定位在该区域中的部分程序的数据被完全删除。哑元程序实际上是一种实际不执行的程序,或者在执行时不执行有意义的处理的程序代码。

改进例4

在本改进例中,通过对加密密钥的存储位置以及通过获得加密密钥的程序具有一个不同安排,加强对每个部分程序的安全保护。更具体来说,做出这样的安排,即一个用于解密一个部分程序的加密密钥,可以从在该一个部分程序之前已经被合法地加载到共享存储器M中的另一个部分程序中获得。

在本改进例中,在每个部分程序中,嵌置(i)一个用于解密要被这个特定部分程序调用的另一个部分程序的加密密钥、或者(ii)用于获得该加密密钥的某种数据。当被调用的部分程序需要被解密时,将使用用于获得被嵌置到调用部分程序中的该加密密钥或者该加密密钥的数据。

基本例

这个方法的最基本的实施例如下所述:首先,在加密的程序生成装置C加密一个调用部分程序时,把一个用于加密一个被调用部分程序的加密要嵌置在该调用部分程序中。然后,该调用部分程序被加密。随后,将该加密密钥的嵌置位置存储到存储单元16中。

然后,当该被调用部分程序需要被解密时,部分程序解密单元123从存储单元16读取有关该调用部分程序的嵌置位置信息,并按照该嵌置位置信息从位于共享存储器M中的调用部分程序读取该加密密钥,然后用该加密密钥解密该被调用部分程序。

例如,设想一种情形,其中一个非法用户以非法方式取得控制,并把一个用于将一个想得到的部分程序加载到存储器中的调用指令发出。在这样的情况下,被假定要调用该想得到的部分程序的合法部分程序在共享存储器M中不存在,因此,按照本改进实施例的方法,就不可能获得该加密密钥并解密该想得到的部分程序。因此,该非法用户所想得到的部分程序将不被加载到共享存储器M中,这就有可能防止引用。

高级例

本改进例的基本方式如上所述。也有可能通过进一步的调整更有力地确保安全保护。下面解释高级例。

高级例1

图9表示从调用部分程序中的部分代码生成一个用于被调用程序的加密/解密的加密密钥的本发明高级例的程序加载器9,在该程序加载器的一个安排中,其中一个执行加密的组件(加密的程序生成装置C9)和一个执行解密的组件(部分程序解密单元923)的每个有共同的相同加密密钥生成装置(密钥生成装置901a和901b)。应当注意的是,执行与程序加载器1的相同的过程的组件被给予相同的标注号,因此解释被省略。

加密时的过程

加密的程序生成装置C9首先生成指示各部分程序之间的调用关系的调用关系信息,然后把每个部分程序转换成执行形式。然后,加密的程序生成装置C9参考调用关系信息,为每个部分程序生成一个加密密钥,然后用每个加密密钥加密每个部分程序。

图10是表示各部分程序之间的调用关系的示意图。

以下解释用于加密一个部分程序的以及由加密的程序生成装置C9执行的过程。一开始,加密的程序生成装置C9通过查看调用关系信息检测到一个调用另一个部分程序的部分程序,然后,读取该调用部分程序的执行形式的代码的部分。随后,加密的程序生成装置C9把所读代码传送到密钥生成单元901a,并命令它生成一个加密密钥。密钥生成单元901a为该代码计算哈希值,并把该哈希值作为一个加密密钥返回到加密的程序生成装置C9。

加密的程序生成装置C9用这个加密密钥加密该被调用部分程序,并在被加密的被调用部分程序上,附加指示用于该加密密钥的生成的代码的位置的信息(该调用部分程序的执行形式的代码的一个偏移地址)。然后,加密的程序生成装置C9把被加密的被调用部分程序存储在二级存储装置S中。

在一个部分程序被特定多个部分程序调用的情况中,被调用程序被用从各是调用程序部分的每个的部分所生成的加密密钥加密。这样,从一个被调用部分程序生成多个模式的加密的被调用程序。在这种情况下,有必要作这样的安排,即例如通过在把被加密部分程序存储到二级存储装置S之前,让每个调用部分程序的标识信息附加到对应模式的被加密部分程序,使得执行解密过程的组件能明白对应关系。然而应当注意的是,即使在有多个调用该部分程序的部分程序时,只有在不在存储器中的被调用部分程序被调用时,加密密钥才是必需的;因此,没有必要从一个只对在存储器中的被调用部分程序进行调用的调用部分程序生成一个加密密钥。

例如,对于图10中所示的部分程序H,可以从部分程序C至F各自生成加密密钥。然而应当注意的是,如果同时满足以下两个条件,则应当只从部分程序F生成用于解密部分程序H的加密密钥,而不必从部分程序C生成一个加密密钥:

(i)当部分程序H被部分程序F调用时,触发部分程序H的解密和加载;和

(ii)存储器定位信息定义在部分程序C调用部分程序H时,部分程序H已经被加载到存储器中。

解密时的过程

以下解释在程序执行的阶段解密一个加密的部分程序的并由部分程序解密单元923执行的过程。首先,部分程序解密单元923从控制单元911接收(i)一个要被解密并加载到共享存储器M中的被调用部分程序的标识信息、和(ii)一个调用部分程序的标识信息。然后,部分程序解密单元923从二级存储装置S读取要被解密的加密的被调用部分程序。

随后,部分程序解密单元923从该加密的被调用部分程序中读取指示要从中生成一个加密密钥的代码的位置的信息,并且也从被加载到共享存储器M中的该调用部分程序中读取由该代码位置所指示的代码。随后,部分程序解密单元923把所读取的代码传送到密钥生成单元910b并让它生成加密密钥。然后,部分程序解密单元923用这个加密密钥解密该被加密的被调用部分程序。该解密过程一完成,就删除该加密密钥。

图11是表示在解密过程的时候部分程序的存储器位置顺着时间线的示意图。在该图中所示的例子中,当部分程序H被已经被加载到区域1中部分程序F调用时,触发该部分程序H向区域3中的加载。随后,已经被加载到区域3中的部分程序H,将被后来被加载到区域2中的部分程序C调用。

相应地,部分程序解密单元923用从部分程序F生成的一个加密密钥,解密部分程序H。当部分程序C调用部分程序H时,部分程序解密单元923不进行解密过程。判断当部分程序C调用部分程序H时不必执行解密过程的,可以是控制单元911或者是部分程序解密单元923。可以通过以下方式判断:(i)比较被调用部分程序的标识信息与存储器定位信息,或者(ii)检查是否被调用部分程序已经被加载到存储器M中。

高级例2

以下解释另一个高级例:

图12所示的本高级例的加密的程序生成装置C12,在加密过程期间,在一个调用部分程序中,嵌置一个用于获得一个为一个被调用部分程序获得加密密钥的密钥获得程序(密钥获得程序生成单元1201和加密的程序生成装置C12)。在解密该被调用部分程序时,部分程序解密单元1223通过让嵌置在该调用部分程序中的该密钥获得程序被执行而获得该加密密钥,然后用该加密密钥解密该被调用部分程序。

加密时的过程

由加密的程序生成装置C12执行的过程与前述实施例中的过程,直到把要被加密的程序转换成执行形式并把该程序化分成部分程序的步骤,都是相同的。以下解释当一个部分程序被加密时由加密的程序生成装置C12执行的一个过程。

加密的程序生成装置C12为一个要被加密的部分程序生成一个加密密钥K,然后把这个加密密钥K存储到一个预定的存储位置,并保持指示该存储位置的信息(地址、偏移地址之类)。这个存储位置可以位于二级存储装置S内的一个预定位置,或者位于另一个部分程序的一个预定位置,当另一个部分程序被解密时该另一个部分程序被加载到的共享存储器M中,等等。加密的程序生成装置C12把该存储位置通知给密钥获得程序生成单元1201,并让它生成一个执行“一个从该存储位置读取密钥K并把它写入存储单元16内的一个预定位置(为该特定部分程序分配的用于存储加密密钥K的区域)的过程”的密钥获得程序。

当该特定部分程序的上述过程完成时,加密的程序生成装置C12把该密钥获得程序嵌置到要调用这个特定部分程序的另一个部分程序中。该密钥获得程序例如被嵌置到该特定部分程序在其中被调用的过程之前的一个位置。

当为所有部分程序的每个都完成生成要获得程序的过程和把密钥获得程序嵌入每个调用部分程序的过程时,加密的程序生成装置C12加密各部分程序。

解密时的过程

获得一个用于解密的加密密钥的过程,与前述实施例中的类似。当接收一个解密一个部分程序的指令时,部分程序解密单元1223通过查看存储单元16内的为存储该特定部分程序的加密密钥K而分配的区域,读取该加密密钥K,并通过太加密密钥K执行解密过程。通过嵌置在已经被加载到共享存储器M中的调用部分程序的密钥获得程序的执行,这个加密密钥K已经被写入这个区域。当完成解密过程时,部分程序解密单元1223从该区域中删除该加密密钥K。即使相同的部分程序被再次调用,由于被嵌置在调用部分程序的密钥获得程序那时把加密密钥K写入相同的区域,删除该解密密钥K将没有问题。

与把所有的部分程序共同的加密密钥总是存储在诸如存储单元的预定位置的情形相比,在本改进例中,通过这个过程,就有可能降低加密密钥被偷盗的风险。同样,即使一个部分程序的加密密钥偶然被偷盗,对其它部分程序也将没有影响。此外,也可以做出这样的安排,使得一个被调用部分程序仅当被原始合法过程流中的一个合法调用程序调用时才能被解密;因此,即使已经取得非法控制的人为了非法引用的目的试图把某个部分程序加载到存储器中,他/她也将不能进行非法的引用,因为没有加密密钥可用。

改进例4的注释

应当注意的是,在以上的解释中,将用于获得在被调用部分程序的解密过程中使用的加密密钥的数据或程序,嵌置在调用部分程序中,但是,将该数据或程序嵌置在其它地方也是可以接受的。例如,把用于获得加密密钥的数据或程序,嵌置在当作出调用时在共享存储器中存在的(不是调用部分程序的)部分程序之一中,也是可以接受的。同样,作为一种选择,当一个部分程序完成执行并被从共享存储器中删除时,控制单元只读取用于获得一个加密密钥的并且已经被嵌置在该部分程序中的数据或程序,并把该数据或程序存储在它的一个专有区域中,然后在以后为另一个部分程序在执行一个解密过程中使用它,这也是可以接受的。

在以上的解释中的安排是,把用于获得一个解密要的数据或程序嵌置在一个部分程序(调用部分程序)中;然而,如果把该数据或程序嵌置在多个部分程序中,那也是可以接受的。

例如,为了嵌置一个解密密钥本身,把该解密密钥分解并嵌置在当作为解密目标的部分程序被调用时位于共享存储器M中的多个部分程序中,在解密时,部分程序解密单元读取这些被分解的加密密钥,并把它们合并在一起,以获得该加密密钥,这也是可以接受的。一个好主意例如是,存储器信息定义单元在加密时,单独地规定一些指示以下内容的信息:(i)要从什么部分程序的那些位置读取被分解的加密密钥;和(ii)应当以什么顺序把已经读取的分解的加密密钥合并在一起,以获得一个加密密钥。

在使用一个加密密钥获得程序时,例如在部分程序是按A、C和H的顺序执行的情况时,也可能以下列方式获得部分程序H的加密密钥:(i)当部分程序A被执行时,嵌置在部分程序A中的加密密钥获得程序把部分程序H的加密密钥的第一半写入存储单元16中的加密密钥存储区域的第一半;和(ii)当部分程序C被执行时,嵌置在部分程序C中的加密密钥获得程序把该加密密钥的第二半写入该加密密钥存储区域的第二半。通过这个过程,当部分程序H被调用时,部分程序H的加密密钥以完整的状态被存储在存储单元中。

应当注意的是,只要没有矛盾,则有可能组合地使用上述不同方法。

此外,在以上解释中,加密的程序生成装置包含执行把加密密钥嵌入加密程序的过程的组件,诸如密钥生成单元901a、或密钥获得程序生成单元1201;然而,程序加载器连同存储器定位定义单元一起包含这些中的一个也是可以接受的。

在本改进例中,本发明的加密的数据解密设备体现为程序加载器,加上执行把加密密钥嵌入加密程序的过程的组件,诸如密钥生成单元901a、或密钥获得程序生成单元1201,它们的每个都是加密的程序解密装置的一部分。

改进例5

在本改进例中,借助使用一个密钥之加密密钥而加密一个用于一个部分程序的加密/解密过程的加密密钥,安全保护得到加强。此外,在程序的加密过程之前,为部分程序的每个个别地生成一个密钥之加密密钥。每个“密钥之加密密钥”在要被一个对应的部分程序调用的每个部分程序的加密/解密时将用于一个加密密钥的加密/解密过程。

图13是表示本改进例中的程序加载器1b和有关装置的结构的框图。在这个安排中,向前述的实施例中增加了一个个别加密密钥生成单元1301(在加密的程序生成单元C13中)和一个加密密钥解密单元1302(在程序加载器1b)中。

加密时的过程

以下描述一个过程,其中,加密的程序生成装置C13加密一个部分程序。首先,加密的程序生成装置C13命令个别加密密钥生成单元1301为部分程序的每个个别地生成“密钥之加密密钥”。然后,加密的程序生成装置C13把每个“密钥之加密密钥”嵌入每个部分程序,与此同时,生成指示嵌置位置的信息(“嵌置位置信息”)。

随后,加密的程序生成装置C13用一个用于加密该程序的加密密钥(这个加密密钥对所有部分程序是共同的)加密该部分程序。然后,加密的程序生成装置C13参照与改进例4中所用的相同的调用关系信息检测调用这个部分程序的另一个部分程序。

然后,加密的程序生成装置C13用对应于该调用部分程序的“密钥之加密密钥”加密用于加密该部分程序的加密密钥。然后,加密的程序生成装置C13向存储单元16传送(i)加密的加密密钥、(ii)对应部分程序的和调用部分程序的标识信息、和(iii)预先生成的嵌置位置信息,以便存储单元16把它们存储在用于加密的加密密钥的区域中。

解密时的过程

解密过程由加密密钥解密单元1302和部分程序解密单元1323。要解密某个部分程序的部分程序解密单元1323,首先通知加密密钥解密单元1302(从控制单元11获得的)要被解密的部分程序的和调用该部分程序的另一个部分程序的标识信息。按照该标识信息,部分程序解密单元1323从在存储单元16中存储的与每个部分程序相应的“加密的加密密钥”和“密钥之加密密钥的嵌置位置信息”集中,读取对应于要被解密的部分程序和调用部分程序的组合的集。

然后,加密密钥解密单元1302从在共享存储器M中的调用部分程序之一中的一个预定位置读取“密钥之加密密钥”。然后,加密密钥解密单元1302用该密钥之加密密钥解密要被解密的部分程序的“加密的加密密钥”,以便获得一个加密密钥,并把它输出到部分程序解密单元1323。

部分程序解密单元1323用该解密的加密密钥解密该部分程序。

在以上的解释中,各部分程序有一个共同的、将它们加密的加密密钥,并且为每个部分程序个别地提供一个用来加密/解密该加密密钥的“密钥之加密密钥”;然而,每个部分程序分别有一个个别的加密密钥也是可以接受的。

同样,在以上的解释中,加密的程序生成装置包含(i)个别加密密钥生成单元1301、(ii)生成嵌置位置信息的组件、和(iii)执行把加密的加密密钥和嵌置位置信息存储到存储单元16中的组件;然而,程序加载器连同存储器定位定义单元一起包含它们也是可以接受的。

改进例6

在本改进例中,当一个部分程序被定位到共享存储器M中时,可以在程序定位区域内动态地确定定位位置。在本改进例中,与定位位置是按照存储器定位信息被固定的的实施例不同,每个部分程序每一次执行时被定位到一个不同位置。因此,这就有可能降低对被加载在存储器中的部分程序的非法引用和篡改的风险,更有力地确保安全保护。

结构

图14是表示本改进例中的程序加载器1c的结构的框图。与实施例中的程序加载器1中的相同的组件具有相同的标注号。程序加载器1c的结构特征是,它有一个代替存储器位置解密单元152的存储器定位确定单元140,以及代替存储器定位信息的存储器管理信息160。

存储器定位确定单元140在一个部分程序被调用并且要被定位到存储器M中时,按照一条来自控制单元11的指令为该部分程序确定存储器定位位置并把所确定的位置通知控制单元11。存储器定位确定单元140也生成和更新被用于管理存储器中部分程序的存储器定位位置的存储器管理信息。以下的例子参照具体的程序定位的例子,进一步详细地解释由存储器定位确定单元140执行的过程。

图15A到15E是表示在程序执行时如何将解密的部分程序定位在共享存储器M中的程序定位区域150中的示意图。存储器定位确定单元140在程序定位区域150中寻找一个大得足够容纳一个要在其中新定位的部分程序的空白区域,如果有一个这样的空白区域,就把该空白区域的地址作为定位位置通知控制单元11。反之,如果没有这样的空白区域,存储器定位确定单元140把一个已经被定位在程序定位区域150中的部分程序的定位区域的地址通知控制单元11,以便该被定位的部分程序被该的部分程序覆写。

图16表示用于如图15中所示被定位的部分程序的、由存储器定位确定单元140顺序生成和更新的存储器管理信息160的内容。存储器管理信息160包括(i)指示作为目标的部分程序的标识信息1601、(ii)指示部分程序的存储位置(它的起始地址)的起始地址1602、(iii)大小1603、和(iv)定位顺序1604,将X指示为要在共享存储器M中定位的第X个部分程序。存储器定位确定单元140为要被新定位的部分程序生成一段存储器管理信息,删除要被新的部分程序覆写的部分程序的存储器管理信息段。因此,存储器管理信息段的数目与当前在程序定位区域150中被定位的的部分程序的个数相同。

如图15A中所示,部分程序A、B和C被顺序地定位在程序定位区域150中。与此相应,存储器定位确定单元140顺序地生成对应于每个部分程序的存储器管理信息(图16A)。应当注意的是,尽管最先被定位的部分程序A在图中位于程序定位区域150的开头,该位置不必固定在该开头。这是因为,如果它是固定在开头的,则第一个部分程序和一些随后的部分程序每次在它们被执行时将不可避免地被定位在几乎相同的位置,因此不能实现本改进例的目的,而该目的是通过动态地改变每一次执行时的定位位置而使非法引用困难。因此,当第一个部分程序被定位时,该位置将滑动一个用随机数之类确定的偏移量的大小,以便有可能避免让定位位置固定在程序定位区域150的开头。

在图15A中所示的状态,部分程序D被部分程序C调用。此时,没有一个足够大的空白区域可用于在其中定位部分程序D;因此,存储器定位确定单元140这样来确定部分程序D的存储器定位位置,即让此时已经在存储器M中存在最长时间的部分程序A,被部分程序D覆写。换言之,存储器定位确定单元140确定部分程序D在存储器中的起始地址与部分程序A的具有相同的值。图15B表示按照这样的存储器定位信息定位了部分程序D时的状态。由于部分程序D较大,部分程序D的后一半扩大到部分程序B的第一半之上。此时,存储器定位确定单元140删除关于部分程序A和B的存储器管理信息,并生成关于部分程序D的存储器管理信息。

然后,存储器定位确定单元140按照规定的顺序确定部分程序E的存储器定位位置(图15C)、部分程序F的存储器定位位置(图15D)和部分程序G的存储器定位位置(图15E)。相应地,存储器定位确定单元140把存储器管理信息160也顺序地更新为图16B所示的和图16C所示的存储器管理信息。(图16B对应于图15C,图16C对应于图15E)。

当一个部分程序被定位到存储器中以便覆写另一个部分程序时,没有必要非要按图15B中所示的安排那样地确定存储器定位信息,使得一个已经在存储器中定位了最长时间的部分程序,从起开始位置起,被另一个部分程序覆写。作为选择,也可以如图15D中所示的那样确定定位位置,即一个部分程序从中间某个地方开始被另一个部分程序覆写。作这样的安排,使得两个或更多的部分程序在一次覆写中被一个部分程序(完全地或部分地)删除。在图15D中的安排是,部分程序D从中间的某个地方开始被比部分程序D小的部分程序F覆写,以便部分程序F也覆写部分程序E的第一半。

通过这个方式的安排,即使存储器M的内容例如在图15D的阶段被非法引用,则只有部分程序F是能被完全引用的部分程序。假设部分程序D是从其起始位置起被部分程序F覆写的,则不但部分程序F、而且部分程序E,都会完全地被引用。存储器定位确定单元140判断图15D中所示的覆写过程是否是必需的,应当在哪里开始覆写,并根据部分程序D和跟随的部分程序E在程序定位区域中的位置以及要覆写其它部分程序的部分程序F的大小,作出判断。

应当注意的是,为了执行上述过程,存储器定位确定单元140从控制单元11获得要被定位到存储器中的部分程序的标识信息和大小。诸如存储器M中程序定位区域的起始地址和大小的信息也被预先存储。

操作

以下解释在确定部分程序的存储器定位的过程中,程序加载器1c(特别是存储器定位确定单元140)的操作。

图17是表示确定部分程序的存储器定位的过程流的流程图。应当注意的是,图中所示的过程是程序加载器1c所执行的程序解密过程和存储器定位过程的一部分。图中的过程是程序加载器1在实施例中执行的如图5中步骤S509至S511所示的过程的一种替代选择。

首先,已经接收了需要加载一个部分程序的请求的控制单元11,向存储器定位确定单元140传送(i)确定一个存储器定位的请求、(ii)部分程序的标识信息、和(iii)部分程序的大小(S1701)。假设在该请求之前,控制单元11已经完成从二级存储装置S读取该部分程序并解密之。

存储器定位确定单元140查看已经被定位的部分程序的大小1603和包含在存储器管理信息160中的起始地址1602,并检查程序定位区域150中空白区域的位置和大小。存储器定位确定单元140比较该大小与从控制单元11获得的部分程序的大小,判断是否有一个足够大的空白区域能在其中定位该部分程序(S1702)。

如果有一个足够大的空白区域(S1703:是),存储器定位确定单元140通知控制单元11该空白区域的地址(S1704),生成该部分程序的存储器管理信息(S1708)。在存储器管理信息160中,对于标识信息1601和大小1603,从控制单元11接收的信息被原封不动地使用;至于起始地址1602,将使用已经向控制单元11通知的地址。存储器定位确定单元140用内置的计数器计算已经被定位的部分程序的个数,并用该计数器值规定“定位顺序1604”的值。

如果没有足够大的空白区域(S1703:否),存储器定位确定单元140查看包含在存储器管理信息160中的定位顺序1604,并从当前位于存储器的部分程序中选择一个最早被定位在存储器中的部分程序(即定位顺序1604的值最小的部分程序),作为要被删除的部分程序(S1705)。随后,存储器定位确定单元140向控制单元11通知该要被删除的部分程序的区域的地址(S1706)。

如果要被新定位的部分程序大于要被删除的部分程序(参看图15B),将向控制单元11通知要被删除的部分程序的起始地址。反之,如果要被新定位的部分程序小于要被删除的部分程序(参看图15D),将向控制单元11通知要被删除的部分程序位于的区域中的某个地方的地址。这样安排的原因是,如前文所述,如果多个已经被定位在存储器中的部分程序通过加载一个部分程序被覆写将更好。规定地址值,使得新定位部分程序出现在要被删除的部分程序与随后的部分程序(即图15c中的部分程序D和E)之间的边界的两边。该值能从要被删除的部分程序的结尾地址、随后的部分程序的开始地址、和新定位的部分程序的大小中找出。

此外,存储器定位确定单元140生成新定位的部分程序的存储器管理信息(S1708)并删除已经被新定位的部分程序覆写的部分程序的存储器定位信息(S1707)。

总结

如至此所解释的那样,按照本改进例中程序加载器1c,因为动态确定存储器定位位置,有可能降低已经被加载到存储器中的部分程序被非法引用或被篡改的风险,因此有力地确保安全保护。

应当注意的是,在以上解释中,先前存在的部分程序被新定位的部分程序覆写;然而,如果先删除先前存在的部分程序,再把新定位的部分程序定位到因该删除而获得的区域中,那也是可以接受的。在使用覆写过程时,当先前存在的部分程序大于新定位的部分程序时,先前存在的部分程序的一部分将依然留在存储器中;然而,当使用在定位部分程序之前发生删除的过程时,有可能避免部分程序的一部分依然保留的情形。此外,为了避免部分程序的一部分依然保留的情形,先用新定位的部分程序执行覆写过程,再用哑元数据覆写剩余的部分,那也是可以接受的。要被哑元数据覆写的区域,将根据先前存在的部分程序和新定位的部分程序二者的起始位置和结束位置判断。

此外,在上述解释中,在每一次程序被执行时,定位区域在程序定位区域中被动态改变;然而,这样安排也是可以接受的,即在每一次程序被执行时,程序定位区域的地址也改变。在这样的情况下,当程序的执行开始时,控制单元1确定程序定位区域的地址,并把它向存储器定位确定单元通知。这样,就使对程序定位区域的内容的非法引用更困难,使安全保护得到改善。

此外,任意地设定程序定位区域的大小,也是可以接受的。当程序定位区域的大小较小时,能被在其中定位的程序的个数同样变小,因此,即使发生非法引用,被泄漏的信息也有限。

本改进例与改进例2和改进例3的相同之处在于,其目的是防止“因为部分程序的定位位置固定,所以容易进行非法引用”的情形。因此,也有可能把本改进例与这些改进例的每个组合起来。换言之,在本改进例中利用改进例2中的方法,在每一次程序被执行时改变程序定位区域的地址,这也是可以接受的。同样,在如图15B和15D中所示的那样,先前存在的部分程序被新定位的部分程序覆写,而先前存在的程序的部分依然存留的情形中,如改进例3中那样用哑元数据片断覆写剩余的部分,那也是可以接受的。(要被哑元数据覆写的区域,将根据先前存在的部分程序的起始位置和大小以及新定位的部分程序的起始地址和大小判断)。

工业应用

本发明的加密的数据解密设备在解密过程只期间和之后在加强通常以执行和参考为目的的被解密的数据的安全保护中十分有用。

额外信息

以下是关于至此所述的的实施例和改进例的注释。

在实施例中,为了实现安全保护,只把要被用解密支持程序解密的程序分解成部分程序;然而,把解密支持程序也作为一组部分程序而加密,然后解密、加载到存储器中、以部分程序为单位执行,那也是可以接受的。这样,就有可能降低导致算法的内容和在解密过程中使用的加密密钥被从存储器中的描述支持程序中读取的风险,因此实现更高水平的安全保护。

除了实施例中提及的过程外,为了检查每个部分程序是否在被加载到存储器M中后在被执行时被改变,将在被加载到存储器M中时的每个部分程序的内容与在结束执行时的内容比较,那也是可以接受的。如果检测到改变,就中止过程,删除解密的数据。

以上提及的加密密钥,是一种在诸如DES的加密方法中使用的加密密钥,被安排得使得该加密密钥一般被嵌置在程序的一个预定区域中,或者被隐藏在用户看不到的区域或文件中;然而,加密方法可以是不同的加密方法。为了简化加密方法,简单地计算各值的逻辑异或(exclusive logical OR),那也是可以接受的。隐藏密钥的方法也不限于以上的方法。

此外,部分程序解密单元、存储地址解密单元和存储器定位信息解密单元可以在一起构成一个组件,或者可以是单独的组件。当它们一起构成一个组件时,请求一个解密过程的单元,以参数的形式规定指示要被解密的数据的类型的信息,解密单元通过引用该信息而执行与所规定的数据的类型相应的解密过程。

此外,已经提供的解释中假设解密目标是程序;然而,解密目标是程序以外的数据,也是可能的。

也可以接受这样的安排,即把程序分解成模块单元或例程单元,以便获得部分程序。或者,在预先准备的诸如DLL的有些部分被组合成一个程序进行操作的情形中,把这些部分的每个或者个别地或者全体地当作一个程序部分,那也是可以接受的。本发明的前提是多个部分程序合起来作为一个程序操作,如何生成部分程序并不是一个基本问题。

此外,在实施例和改进例中表示的设备和装置,每个都可以以被计算机执行的程序的形式实现。当它们的每个被以程序的形式实现时,也可以接受这样的安排,即加密的数据解密程序自己被作为一组加密的部分程序保存,并以部分程序为单位被解密和执行。

就实施例和改进例中而提出的特征性安排,只要没有冲突,就可以组合地使用。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号