微处理器的制作方法

文档序号:7917094阅读:548来源:国知局
专利名称:微处理器的制作方法
技术领域
本发明涉及一种提高了耐窜改性的微处理器。
背景技术
由于近年来的计算机应用技术的发展,程序的解析、复制等成为比原来可容易进行的状况。因此,为了更加可靠地保护程序内部的秘密,寻求提高了程序等的内部秘密的解析困难性(耐窜改性)的技术。
(1)耐窜改·软件技术作为这样的技术,人们所知道的有例如耐窜改·软件技术(DavidAucsmith,et al;“Tamper Resistant SoftwareAn Implementation”,Proceeding of the 1996,Intel Software Developer’s Conference)。
在该文献所揭示的技术中,将程序的一部分或全部加密后分配保存,在执行它时,程序本身解密并执行程序和内部的数据等,在结束时,根据需要再次进行加密。
但是,耐窜改·软件技术基本上是用于使逆汇编程序、排错程序等的解析工具进行的解析变困难的技术,因此,既然程序由原来的处理器可以进行,若从程序的开始时按照顺序解析,则就一定能解析程序的执行过程。
例如,有由监视处理器的输入输出信号的ICE(电路内防真程序In Circuit Emulator)等的装置、特权水平的其它的程序等得知程序执行时的处理器的输入输出信号或存储器内容的危险。这样,当处理器的输入输出信号或存储器内容被解析了时,可以推测执行着程序的处理,可以推测程序内部的秘密。
因此,人们谋求一种在处理器内部具有保持处理数据的秘密的功能的处理器,以便从外部的程序、解析装置等不能参照。
(2)进行加密·解密的处理器因此,通过在处理器内部(?)执行程序的加密·解密处理来保守程序、数据的秘密的技术所知道的有例如Hampson发明的美国发明专利第4,847,902号、Hartman的美国发明专利第5,224,166号、Davis的美国发明专利第5,806,706号、Takahasi的美国发明专利第5,825,878号、Leonard,et al的美国发明专利第6,003,117号、日本特开平11-282756号等。
通过使用这些文献所公开的技术,可以在用密码保护的状态分配程序。这样地被加密地分配的程序在不知道密钥的情况下,难以用密码学进行由逆汇编程序等进行的执行过程的解析、向希望的状态改变程序等。
但是,在这些技术中,没有考虑到并行地进行在多个处理(任务、作业、线索等)多重处理环境下的动作。
在多重处理环境下,使用称为上下文开关的处理以时间分割的方式执行多个处理,该上下文开关在切换处理时进行表示寄存器等的处理器的执行状态的信息(上下文)的保留/复位。在该上下文开关的过程中,具有操作系统(OS)等的特权的处理可以进行处理器的上下文的读写。
因此,OS等的特权处理有可能通过有意地读取程序的上下文或窜改上下文可以解析程序的动作等的秘密。
(3)由硬件对上下文加密·解密的技术为了解决该问题,在日本特愿2000-133010号中公开的技术中,用硬件执行上下文开关,在上下文的保留时对上下文加密并保留到存储器中,由此,使OS等的特权程序不能知道上下文的内容。由此,难以用密码学通过解析保留到存储器中的上下文来解析程序的动作等的秘密。
但是,在该技术中,上下文的加密·解密的处理负荷比较大,在频繁地进行上下文开关的多重处理环境下,由上下文开关带来的内务操作大。因此,希望降低上下文开关的负荷。
(4)上下文(context)开关负荷的降低因此,在日本特愿2000-333635号公开的技术中,由在上下文开关中使用标记存储器的处理控制实现了上下文开关的高速化。在该技术中,标签的管理委托给OS,但是从提高上下文的改变困难性的观点出发,希望在处理器内执行标签的管理。
因此,在日本专利2001-24480号公开的技术中,通过使这些管理简单化而使其在处理器内进行。在该技术中,因为通过在处理器内保持上下文键表降低了被外部知道上下文的密钥的可能性,因此,作为上下文的加密方法使用对称键(共用键方式的密钥)。由此,与使用非对称键(公开键方式的密钥)的情况相比,可以缩短加密的处理时间,实现了上下文开关的进一步高速化。
另外,在该技术中,由每次保留上下文从外部不可预测的随机数生成上下文键,在上下文复位时,从上下文键图表消除该上下文键的密钥。由此,从外部对上下文的内容加密、或按照其希望对上下文的内容进行窜改变得非常困难。另外,在该技术中将保留到存储器上的上下文保存于另外的区域,即使以后想要使其复位,由于已经不存在上下文的密钥,也不能正确地复位上下文。因此,可以使上下文被人得知的可能性更加降低。
在上述日本专利2001-24480号公开的技术中,同时存在的全部的耐窜改性的处理的上下文键必须全部保持在设在处理器内的上下文键表中,在该耐窜改性的处理中不仅包括处于执行状态的处理,还包括处于可执行状态、等待状态的处理。
但是,由于设在处理器内的上下文键表的容量是有限的,因此对应于该容量的数量的以上的耐窜改性的处理不能同时存在。即,在该处理器中同时被执行的耐窜改性的处理的数量由于上下文键表的容量而受到限制。
特别是在执行同时使其动作的处理数量多的多重处理,多重用户环境或由多个要求耐窜改性的模块构成的OS等的程序时,由于耐窜改性的处理数量被限制,有时使性能降低。

发明内容
本发明是鉴于上述问题而做出的,其目的是提供一种同时执行的处理的数量不受微处理器内容的表的容量制约的微处理器。
另外,本发明的目的是有助于改善同时被执行的处理数量多的程序执行中的性能。
另外,本发明的第一技术方案的微处理器,其特征在于,包括临时键生成装置、动作信息保留装置、动作信息复位装置,上述临时键生成装置根据随机数生成秘密键方式的密钥,该随机数是在每次微处理器的初始化时、对于各微处理器中的每一个微处理器都不同的、根据微处理器内部的参数生成的随机数,上述动作信息保留装置将表示该微处理器的动作状态的信息由临时键生成装置生成的密钥加密并存储在外部的存储装置中,上述动作信息复位装置将被加密并存储在外部的存储装置中的表示动作状态的信息用临时键生成装置生成的密钥解密。
另外,本发明的第二技术方案的微处理器,是在第一技术方案所述的微处理器中,其特征在于,包括秘密键保持装置、执行键读出装置、执行解密装置、程序执行装置,该秘密键保持装置保持不能读出到外部的每一个微处理器都不同的公开键方式的秘密键,上述执行键读出装置从外部的存储装置读出预先由与秘密键对应的公开键加密的程序执行键,上述执行解密装置用秘密键解密由执行键读出装置读出的程序执行键,上述程序执行键由被解密的程序执行键解密外部的存储装置的规定地址的内容。
另外,本发明的第三技术方案的微处理装置,是在第二技术方案所述的微处理装置器中,其特征在于,包括任意键保持装置、键指定装置,上述任意键保持装置用于保持多个任意的密钥,上述键指定装置在从执行中的程序指令相对于外部的记忆装置的访问时,在从程序未指定使用于访问的键时从临时键生成装置所生成的密钥、执行键读出装置所读出的程序执行键及保持在任意键保持装置中的密钥中的任何一个指定使用于该访问的键。
另外,本发明的第四技术方案的微处理装置,是在第三技术方案所述的微处理装置器中,其特征在于,将各微处理器中的每一个微处理器不同的、根据对应于微处理器内部的参数生成的随机数生成的密钥存储在任意键保持装置中。
另外,本发明的第五技术方案的微处理装置,是在第四技术方案所述的微处理装置器中,其特征在于,包括分配装置、高速缓存装置、管理装置,该分配装置将固有识别信息分别分配给临时键生成装置所生成的密钥、执行键读出装置所读出的程序执行键及保持在任意键保持装置中的键,上述高速缓存装置将存储在存储装置中的数据读出并保持到每个规定的区,上述管理装置使表示保持在高速缓存装置中的存储装置的数据中的至少被加密并存储在存储装置中的区的地址信息与表示使用于与地址信息对应的数据的加密的键的识别信息相对应并予以保存。
另外,本发明的第六技术方案的微处理装置,是在第五技术方案所述的微处理装置器中,其特征在于,包括访问控制装置,该访问控制装置在对存储装置进行访问时,比较由键指定装置指定的键的识别信息和保持在管理装置中的识别信息,在一致时对保持在高速缓存装置中的数据进行访问。


图1是表示本发明的第一实施例的微处理器要部的构成的框图。
图2是表示构成上述微处理器运算处理部件的要部的构成的图。
图3是表示上述微处理器中的初始化处理的流程图。
图4是表示保留到外部存储器中的加密上下文的格式的一个例子的图。
图5是表示上述微处理器中的上下文的保留处理的流程图。
图6是表示上述微处理器中的上下文的复位处理的流程图。
具体实施例方式
本发明可以适用于例如具有保护程序的秘密的硬件机构的微处理器。
1.构成本发明的一实施例的微处理器,如图1中所示,其要部,具有高速缓存(二次高速缓存)101、寄存器组102、运算处理部件(处理器·芯)103、随机发生部104、随机数保持部件105、键(公共键方式的秘密键)表106、总线107、异常检测部件108、加密处理部件109;上述高速缓存101使相对于设在例如DRAM等的微处理器100的外部的存储器(外部存储器)1的访问高速化,上述寄存器组102用于保持数据、运算结果等,上述运算处理部件103从高速缓存101取得指令、数据等,译码指令后执行数据间的运算等的处理,上述随机数发生部104用于产生从处理器外部不能知道的随机数,上述随机数保持部件105用于保持产生的随机数,上述键表106用于进行加密,上述总线107连接与外部存储器或外围设备的接口等,上述异常检测部件108执行对应于中断要求的处理等,上述加密处理部件109在切换包括具有用于保持秘密的规定的步骤的程序(以下称为耐窜改程序)的多个处理间的切换时,进行表示寄存器组102内的各寄存器内容等的微处理器100的动作状态的信息(上下文)等的加密/解密。
该微处理器100由例如一个芯片或封入一个封装中的多个芯片构成,使用于它的封装最好是由难以被破坏的材质构成,并使内部的微处理器100的芯片不露出。是为了使探头难以与芯片直接连接来进行解析。另外,芯片的布局最好是只设置所需最低限度的基座,以便使探头难以直接与随机数发生部104、随机数保持部件105等连接。
高速缓存101具有高速缓存存储器101a和高速缓存控制器101b,该高速缓存存储器101a由比例如SRAM等的外部存储器1高速的存储器构成,上述高速缓存控制器101b管理从外部存储器1对高速缓存存储器101a的数据读出、从高速缓存存储器101a相对于外部处理器1的数据写入。
在高速缓存存储器101a中与通常的微处理器中的存储器高速缓存相同地具有多个规定长度的高速缓存线。在各个高速缓存线上设有标签存储区域101c、状态存储区域101d、地址存储区域101e、数据存储区域101f,该标签存储区域101c用于存储信息(标签),该信息是用于指定解密与上述高速缓存线对应的外部存储器1上的数据用的键,上述状态存储区域101d用于存储表示高速缓存区域的状态(起动)的信息,上述地址存储区域101e用于存储高速缓存区域的地址,上述数据存储区域101f用于存储高速缓存区域的数据。在各存储区域101c~101f中,与每个由来自高速缓存控制器101b的控制而被高速缓存的各区域中的每一个区域中对应地存储着标签、状态、地址、数据。而且,该高速缓存101也使用于在执行耐窜改程序时保持被加密的程序、数据的目的。
在图1中,寄存器组102只设有一个,但是,也可以在每个例如微处理器100的动作中的执行权限(特权水平)设置多个寄存器组102。但是,在以下的说明中,为了简单,对只设有一个寄存器组102的情况进行说明。
该寄存器组102具有与例如常用寄存器、变址高速缓存、控制寄存器等的现有的微处理器同样的寄存器组(通用寄存器组)102a和使用于执行程序等的加密处理的键寄存器组102b,该通常寄存器组102a、键寄存器组102b的内容表示微处理器100的动作状态,被称为上下文。该上下文在例如执行中断处理时保留到外部处理器1等中。
通常寄存器组102a与现有的微处理相同地具有例如保持运算参数、运算结果、程序的状态的值等的寄存器。
键寄存器组102b具有执行键寄存器RKx和数据键寄存器RKd0、…、RKdn,上述执行键寄存器RKx用于存储表示存储着例如执行中的耐窜改程序的执行键(解密键)的区域的信息(键ID),上述数据键寄存器RKd0、…、RKdn用于存储表示执行中的耐窜改程序的执行时的数据的解密键的区域的信息(键ID)。
运算处理部件103执行操作系统(OS)或应用软件等的执行中的运算、控制等的处理。该运算处理部件103如图2所示具有一次(L1)高速缓存(=指令高速缓存103ai+数据高速缓存103ad)103a、从高速缓存101、寄存器组102等取得指令、数据(对于指令的自变数)的读取器103b、对被读取的指令进行译码的指令译码器103c、执行被读取的数据间的运算等的运算单元(ALU)103d、根据被译码的指令执行寄存器、运算单元等的动作控制等的运算控制部件103e。运算控制部件103e通过执行与被例如指令译码器103c译码的指令对应的微程序而执行与指令对应的处理。
随机数发生部104例如每当使微处理器100复位时,产生充分的质量的加密用的随机数。具体地讲,是根据例如微处理器100制造时的偏差等所引起的电压、时钟等的偏差产生充分的质量的加密用的随机数(随机数列)。或者、也可以将量子性的起伏作为随机数的种子、在微处理器100内设置不挥发性的熵场,根据此产生随机数。
这样,通过根据处理器内容的参数产生随机数,可以产生每个处理器不同的、难以推测的随机数。由此,可以防止随机数被外部知道或推测。
另外,随机数发生部104根据这样地发生的随机数生成微处理器100每被复位时不同的加密用的键(处理器临时键)Kc,将生成的处理器临时键Kc存储于随机数保持部件105中。该处理器临时键Kc因为是由上述那样地难以被推测的随机数生成,因此,要从外部推测是非常困难的。
随机数保持部件105可以与例如通常的寄存器相同地构成。可以在该随机数保持部件105中只写入来自随机数发生部104的处理器临时键Kc。另外,该随机数保持部件105的内容构成为可以只读出例如加密处理部件109的构成。因此不能从由运算处理部件103执行的通常的程序进行参照。
保持在该随机数保持部件105中的处理器临时键Kc的值不会写到外部存储器1。另外,在该微处理器100中,不能将处理器临时键Kc的值读出到其它的寄存器、高速缓存101等中。因此,在微处理器100的客户、微处理器100上被执行的程序等不能参照处理器临时键Kc的值。
保持在该随机数保持部件105中的处理器临时键Kc如上所述那样用于将保留到外部存储器1的上下文加密。如上所述,该处理器临时键Kc非常难以从外部进行推测。因此,保留到外部存储器1中的上下文的加密由公共键方式的加密进行。即,处理器临时键Kc用作对称键,通过将保留到外部存储器1中的上下文加密作为寄存器102的使其值复位时也使用该处理器临时键Kc。
这样,通过使用根据每微处理器100的复位不同的、从外部难以知道的随机数生成的对称键进行上下文的加密而在微处理器内部生成的处理器临时键被外部知道的可能性低,即使上下文的加密使用对称键方式的加密方法也可以将耐窜改性维持为实用上充分足够的水平。因此,与使用非对称键的加密相比,可以降低用于加密处理的负荷。
另外,为了用每复位不同的对称键进行全部的上下文的加密,因为不需要像例如日本特愿2001-24480号所公开的处理器那样分别保持每上下文的保留都不同的对称键的表,因此,可以不受表尺寸所引起的同时可执行的处理数量的限制,可以使同时可执行的处理数量增加。
另外,在键表106上设有定义着比上述键寄存器组102b内的寄存器的数量多的登记项(键ID),在每个键ID中保持着键的键数据保持部件106b和表示保持在对应的键数据保持部件106b中的键的使用次数的寄存器参照计数器106a。
与各个键ID对应的键数据保持部件106b是例如根据键ID一意义地被决定。例如相对于规定的存储器定义着地址,若在根据键ID的地址中存储与该地址对应的加密键,则不需要另外设置存储键ID的区域。
另外,与各键ID对应地被存储的键被做成为各不相同的键,使得相同的键不会与不同的键ID对应地被存储。它由例如运算处理部件103形成的指令执行时的处理担保。但是,在偶然供给与处理器临时键Kc相同的键时,同样地保持在键数据保持部件106b中。
另外,在各个键ID上定义着分别对应的加密处理。例如,键ID“0”定义为表示未加密的状态,键ID“1”表示由处理器临时键Kc进行的加密,键ID“2”以上定义为分别由对应的键进行的加密。
寄存器参照计数器106a的值是0的状态是表示不需要与此对应的键数据保持部件106b的状态。因此,可以在与此对应的键ID上分配新的键。但是,上述的键ID“0”由于经常地用于表示“未加密”的状态,因此,在与此对应的寄存器参照计数器106a中存储着1以上的值。但是,该键ID“0”因为固定性地进行使用,因此,与键ID“0”对应的寄存器参照计数器106a的值本身没意义。因此,与键ID“0”对应的寄存器参照计数器106a的值也可以固定为1。
另外,与键ID“1”以上对应的寄存器参照计数器106a的值和与键ID“0”对应的值不同,在键寄存器组102b内的寄存器中设定键ID时,与设定的键ID对应的寄存器参照计数器106a的值被递增计数,当清除设定在键寄存器组102b内的寄存器中的键ID时,对应的寄存器参照计数器106a的值被递减计数。另外,在由上下文的保留使键寄存器组102b内的寄存器保留时,在该寄存器中保持着键ID时,与该键ID对应的寄存器参照计数器106a的值被递减计数。相反,当使上下文复位时,有时在键寄存器组102b内的寄存器中设定键ID。在这时,与新设定的键ID对应的寄存器参照计数器106a的值被递增计数。
但是,键ID“1”由于表示经常地由处理器临时键Kc进行的加密,该键ID“1”不会释放到下一次复位时。因此,与键ID“1”对应的寄存器参照计数器106a的值经常被控制为1以上。
该键ID为了在运算处理部件103执行伴随着对外部储存器1的访问的指令等时,指令用于解密被加密的外部储存器1的内容的键,只在微处理器100内部使用。该键ID从微处理器100的外部不能进行参照。
另外,该键ID由键寄存器组102b内的寄存器指令,但是,只从程序指示完成寄存器的指定不能读出寄存器的值或直接指定值。因此,执行中的程序本身也不能直接指定特定的键ID(例如“1”)进行存储器访问、或指定特定的键ID直接变更键表106的内容。是因为该在该微处理器100中未定义着这样的指令。另外,在运算处理部件103等中设置着进行用于实现这样的处理的管理处理的功能。
另外,异常检测部件108检测出对于微处理器100的中断要求、程序执行上的误差(运算、执行控制、虚拟存储(还具有TLB关系)等),通知到运算处理部件103。
当该异常检测部件108检测出中断时,例如运算处理部件103将上述的上下文保留到外部存储器L这时,加密处理部件109使用与键表106的键ID“1”对应的处理器临时键Kc将想要保留的上下文加密,通过高速缓存101存储到外部存储器1中。这时,临时被保持在高速缓存101中的被加密的上下文由来自高速缓存控制器101b的控制以规定的时刻写入外部存储器1中。
另外,加密处理部件109根据上述的异常检测部件108的指令等执行上下文的加密/解密、存储在外部存储器1中的数据的加密;从外部存储器1读出的数据的加密等的处理。
该加密处理部件109也可以构成为上述运算控制部件103e所执行微程序(109a),也可以构成为与运算处理部件103分别的功能区(109b)。
在构成为微程序时,虽然运算处理部件103的处理负载增大,但是,由于只要进行微处理程序的变更即可,设计、制造比较容易。与此相对,在构成为与运算处理部件103分别的功能区时,虽然硬件的设计负担、制造成本增加,但是,即使进行上下文的加密处理,运算处理部件103的处理负载也不怎么增加。因此,可以根据用途适当地改变加密处理部件109的构成。
另外,该加密处理部件109在执行耐窜改程序时,也执行该耐窜改程序的程序、用于加密数据的处理。
因此,该加密处理部件109保持着例如对于每个微处理器100不同的公开键方式的秘密键(处理器秘密键)及与此对应的公开健(处理器公开键)。秘密键只在微处理器100内使用,不会被外部知道。与此相反,公开键是在例如购入耐窜改程序时提供给程序的提供者等。程序的提供者用提供的公开键使例如耐窜改程序的执行键加密后进行供给。在微处理器100中,对例如加密后被供给的程序的执行键解密而执行耐窜改程序。
该解密处理与上述的上下文的加密不同,例如由使用非对称键的加密进行。因此,加密处理部件109具有加密处理功能,该解密处理功能对于例如每个程序(或处理)根据由与上述的键寄存器组102b中的规定的数据键寄存器RKdm(m=0、1、…、n)指定的键ID对应的秘密键(非对称键)进行该程序、数据的解密。该键寄存器组102b根据随机数105中的、每该程序的识别信息被指定。
(耐窜改程序的提供/执行的概要)耐窜改程序用与固有的秘密键对应的公开键加密后提供给例如各个微处理器100。
这样地被提供的耐窜改程序通过输入输出I/F2存储在硬盘驱动装置(HDD)等的辅助存储装置等中。耐窜改程序在执行前从保持存储装置等读出并存储在外部存储器1中。在该状态下,耐窜改程序是被加密的状态。
当指令耐窜改程序的起动时,例如高速缓存控制器101b从外部存储器1读出该耐窜改程序,供给到加密处理109使其解密,将被解密的耐窜改程序存储在高速缓存101中。该解密如上所述地使用键表106的键ID的值被保持在2以上的键数据保持部件106b中的键进行的。
运算处理部件103执行上述那样地被解密后存储在高速缓存101中的耐窜改程序。当该耐窜改程序的执行结束时,破坏高速缓存101的内容。
加密处理部件109通过参照这样的寄存器的值可以知道用于解密处理的键的键ID。加密处理部件109在解密时将与这样地被知道的键ID对应的键从键表保持部件106b读出执行解密处理。
在该微处理器100中,对各个程序、数据进行加密的键,每键ID被保持在键数据保持部件106b中。用于解密被加密的存储区的内容的键由存储在上述的键寄存器组102b中的执行键寄存器RKx和数据键寄存器RKdm(m=0、1、2、…、n)中的键ID指定。
该微处理器100可以多个并行地执行耐窜改程序、不需要加密处理的通常的程序等。
因此,在该微处理器100中,对个耐窜改程序管理密钥(公开键方式中的秘密键)。上述那样地通过将键ID存储于上述的键寄存器组102b中的执行键寄存器RKx和数据键寄存器RKd0、…、RKdn中进行键的指定。
如上所述,由于微处理器100中,这些寄存器RKx、RKd0、…、RKdn只设有一种,在并行地执行多个耐窜改程序时,在由以时间分割切换由运算处理部件103执行的处理时,这些寄存器RKx、RKd0、…、RKdn的值与其它的上下文一起临时被保留到外部存储器1中,当将以下的执行时间分配给上述那样地进行了上下文的留的处理时,保留的上下文复位到寄存器RKx、RKd0、…、RKdn。由这样的上下文的切换(上下文开关)对于每个耐窜改程序进行键的管理。
但是,上述键表106的容量由于是有限的,在该微处理器100中,键表保持部件106b的内容也可以与上下文一起进行保留。这样,通过保留键表保持部件106b的内容,可以解放与保留了内容的键表保持部件106b对应的键ID。
这样,有时在解放了键ID的键表保持部件106b中由其它的程序保持着键。这时,该程序在上下文的留时也有时不解放该键ID。
在这样的情况下,在复位前面的程序的上下文时,将空着的适当的键ID分配给想要使其复位的键。这时,如果在想要使其复位的寄存器RKx、RKd0、…、RKdn中在上下文保留前指定着该键的键ID,则可将保留前的键ID变更为新分配的键ID。
(根据特权水平的存储器保护)另外,在该微处理器100中,可以进行根据处理器的特权水平(例如一般模式、特权模式等)的存储器保护。因此,该微处理器100具有水平保持装置、限制保持装置及限制装置,该水平保持装置保持现在执行中的处理的特权水平,上述限制保持装置保持每个特权水平的存储器访问的限制,上述限制装置按照根据现在执行中的处理的特权水平的存储器访问的限制执行存储器访问。由此,在该微处理器100中,可以实现根据处理的特权水平的存储器访问。
但是,根据特权水平的存储器保护与根据耐窜改动作形成的保持在程序等的外部存储器1中的数据的加密之间没有直接的关联。因此,它们可以独立地进行设定。
例如,在外部存储器1内的存储区可以有可以以一般模式进行读写但加密地存储数据的存储区和可以仅用特权模式进行读写但以明文的状态存储着数据的、不被加密的存储区等。
同样,耐窜改性也与OS进行的保护存储的机构没有直接的关联。但是,在用于控制OS等的系统的程序和在该程序上进行动作的应用等的程序之间频繁地发生上下文开关。因此,在处理器具有多个特权水平时,由于对每个特权水平设置寄存器组102,由于对每一个特权水平切换寄存器组102,在特权水平不同的处理间的切换中没有必要进行上下文开关。因此,可以减轻上下文处理及附随于它的上述那样的键寄存器组102b内的寄存器的值的操作等负荷。
(特权水平与键表的关系)即使在设定多个特权水平的情况下,键表106也只形成为一个,但是,也可以为了高的特权水平预约键表106的一部分部键ID。由此,在例如OS本身含有耐窜改程序等时,可以降低由于键表106的不足而使OS的动作不稳定的可能性。
即使在这种情况下,直接指定特定的键ID(例如“1”)进行对于外部存储器1的访问或变更键表106的内容那样的指令最好是即使是仅对于例如特权水平的指令也不进行定义。
通过这样地构成,即使在以相同的特权水平执行例如来自不同的提供者的OS、应用、设备驱动程序等的程序时,也可以具有各个程序不同的执行键,保持各个程序的耐窜改性。由此,即使OS的提供者和应用程序或设备驱动程序(用于使特定的设备动作的程序)的提供者不同的情况下,也可以保持各程序的秘密。
另外,在OS等的程序中,有时使用提供者不同的多个特权模式的模件。在这样的程序中,也有有恶意的模件等消耗用于特权模式而预约的键表而使OS不能动作的可能性。但是,这样的可能性可以与处理器的耐窜改功能不同地用OS本身验证各个模件的署名等的方法使其降低。
(存储器保护与高速缓存的关系)在微处理器100访问外部存储器1时,首先按照上述的特权水平判定对于想要访问的地址的访问是否被限制着。在访问被限制着时,微处理器100作为违反存储器保护或双重故障等执行异常处理、强制结束程序等的处理。该动作与不具有耐窜改功能的通常的处理器相同。
在该微处理器100中,如上所述不对根据特权水平限制着存储访问的区域进行访问,而且,只有在保持在与保持于标签存储区域101c中的键ID对应的键数据保持部件106b中的键与将想要访问的外部存储器1上的区域的数据加密了的键对应着时,可以对外部存储器1进行访问。
如上所述,限制着对想要访问的区域访问时的动作与通常的处理器相同。因此,在以下的对存储器访问的说明中,只对由与通常的处理器相同的存储器保护未限制向想要访问的区域的访问的情况进行说明。
2.初始设定(高速缓存的清零)在以上那样地构成的微处理器100中,当接上电源或使微处理器复位时,首先清除高速缓存101的内容。
在微处理器100最初加上电源时,高速缓存控制器101b清除高速缓存存储器101a的全部内容。在以其以外的理由使微处理器100复位时,高速缓存控制器101b在清除高速缓存存储器101a的内容前将保持在高速缓存存储器101a中的数据扫出到外部存储器1中。
在由这样的接入电源以外的原因形成的复位的情况下,不一定需要对高速缓存101的标签存储区域101c的键ID是0的高速缓存线、即设定为不加密的高速缓存线进行清零。但是,对于标签存储区域101c的键ID是0以外(也包括1)的值的高速缓存线需要进行清零。因此,高速缓存控制器101b通过确认各高速缓存线的标签存储区域101c如果是需要则清除高速缓存线的内容。
在这样的高速缓存清零之前,在将标签存储区域101c的键ID是表示处理器临时键的1的高速缓存线扫出到外部存储器1中时,使用复位前的处理器临时键Kc进行加密后存储到外部存储器1。另外,这时的处理器临时键Kc由于马上被变更,扫出到外部存储器1中的数据作为正常的数据而不被二度复位。因此,在高速缓存清零之前扫出的高速缓存线的数据只作为随机数据(适当的数据)读出。处理器临时键Kc用于对上下文加密,因此被保持在高速缓存101中的上下文在复位后作为正常的数据不会再次被复位。
因此,在复位时,在将带有处理器临时键的键ID的高速缓存线扫出到标签存储区域101c时,只要不进行加密地扫出适当的数据存储在前面的外部存储器1上的区域就行。但是,在随机的数据中不含有无论明示还是暗示可以成为用于预测随机侧发生部产生的随机数的关键的信息。具体地讲,例如用与随机数发生器104不同的方法产生的随机数。
(处理器临时键Kc的设定)如上所述,在清除了高速缓存101的内容后,微处理器100设定处理器临时键Kc。该处理器临时键Kc的值如上所述地随机数发生部104在每微处理器100的复位时对应于加密学上的充分的品质的随机数自动地进行设定。具体地讲,例如如图3所示,首先随机数发生部104产生随机数(S1),根据产生的随机数生成处理器临时键Kc(S1),将生成的处理器临时键Kc存储在随机数保持部件105(S3)。
这样,随机数发生部104所发生的随机数对于每个微处理器100不同,不会被外部知道或推测。因此,除了微处理器100本身之外不知道处理器临时键Kc的值。
另外,微处理器100在设定处理器临时键Kc的同时使键表106初始化(S4)。例如,键表106的键ID“0”设定为表示“不加密”的键ID。在与该键ID“0”对应的寄存器参照计数器106a中设定1上的值。该值即使由复位后的动作也不会被变更。另外,键ID“1”成为表示处理器临时键Kc的键ID,将1设定为对应的寄存器参照计数器106a初始值。键ID“2”以后的键表106b的内容全部被清除,对应的寄存器参照计数器106a的值分别被设定为0。
在进行了这样的复位时的初始设定后,微处理器100开始执行来自外部存储器1的规定地址的处理。
然后,微处理器100转移到通常的执行状态,起动例如IPL(InitialProgram Loader)等的初始化程序,根据需要起动OS等的程序。
3.微处理器的动作概要(向耐窜改状态的转移)在微处理器100的运算处理器103中执行的程序在实际中是二进制码,但是为了容易理解,在以下的说明中用一对一地与二进制码对应的助记符进行表现。由助记符表现的指令在实际中作为对应的二进制码存储在外部存储器1、高速缓存101等中。
在微处理器100中执行的程序不依靠于其特权水平地可以转移到执行一边解密被加密的程序一边执行的耐窜改状态的指令。转移到该耐窜改状态的指令例如由下面的助记符进行表现。
strtenc Ra、Rb该strtenc指令需要两个操作数。Ra是指定寄存器的操作数,由此指定表示由程序固有的执行键(程序执行键)加密的存储区的先头地址的值。Rb也同样地指定表示地址的寄存器的操作数,由此,指定由处理器公开键加密的程序执行键的地址。
在该微处理器100中,与例如日本特愿2000-135010号所公开的微处理器同样地在每个微处理器中保持着固有的处理器秘密键(非对称键方式的秘密键)。与该处理器秘密键对应的公开键(处理器公开键)被公开着,耐窜改程序预先由该处理器公开键加密而被供给。
当执行strtenc指令时,加密处理部件109根据来自运算控制部件103a的指示由处理器秘密键对Rb所表示的数据解密,将取出的程序执行键存储在与键表106的规定的键ID对应的区域。而且,加密处理部件109将与存储的程序执行键对应的键ID存储在执行键寄存器RKx中。对于具体的键的登记顺序在后详叙。
在执行键寄存器RKx中存储了键ID后,程序从由Ra指定的地址继续执行。这时,在由Ra指定的地址的外部存储器1中存储着由程序执行键加密的程序,但是,由于加密处理部件109借助存储在执行键寄存器RKx及键表106中的信息将该程序正确地解密,因此,运算处理部件103可以继续执行程序。
以下,将由程序执行键这样地一边解密程序一边执行程序的状态称为耐窜改状态。相反,将不解密外部存储器1上的程序而作为明文读入原样不变地进行执行状态称为通常状态或非耐窜改状态。
(向非耐窜改状态的转移)将微处理器100的执行状态从耐窜改状态转移到非耐窜改状态的方法有例如明示(A)、中断·异常等的处理(B)、系统调用(C)等的方法。
A.由明示的指令形成的向非耐窜改状态的转移在明示地使其转移到非耐窜改状态时,在以耐窜改状态动作的程序中,执行明示地向非耐窜改状态转移的指令。该指令由例如以下的助记符表现。
endenc Ra该endenc指令需要一个操作数。Ra是指定寄存器的操作数,该寄存器表示在非耐窜改状态下应该继续执行的程序的地址。
在耐窜改状态下,当执行该endenc指令时,运算控制部件103e在清除了键寄存器组102b的全部内容后,从由Ra指定的地址在非耐窜改状态下继续执行程序。在由这样的指令进行的向非耐窜改状态的转移中,应该注意到在制作程序时不剩留应该隐藏在从一般寄存器等的其它的程序等可以参照的区域的信息。
B.由中断·异常形成的向非耐窜改状态转移在耐窜改状态下执行程序的过程中,在产生了中断、异常(异常指令的执行、地址变换的误差等)时,可以向非耐窜改状态转移。是否转移到非耐窜改状态是根据例如中断的许可情况、根据发生的异常的处理等来决定。
在这样的转移中,微处理器100以后述的步骤使寄存器组102的内容等的上下文保留。其后,运算控制部件103e清除一部分的寄存器以外的全部寄存器的内容,该一部分的寄存器表示通常寄存器组102a内的寄存器中的、表示特权水平的设定、成为违反存储保护的地址的寄存器等的系统状态。特别是,由于在常用寄存器等中有可能存储着应该被隐藏的数据,因此,需要进行清除。
在执行了这样的处理后,与原来的处理器相同,开始执行中断·异常处理的中断·异常处理器的处理。例如,在中断的情况下,执行用由中断矢量指定的地址定义的处理。
C.由系统调用指令形成的向非耐窜改状态的转移应用程序在执行用于呼叫OS功能的系统调用时,在原来的处理器中使用的是,在一般寄存器中设定了表示功能的功能编号、该功能的参数等后,执行异常指令,使处理转移到特权水平的OS等的异常处理程序。
与此相反,在该微处理器100中,如上所述,由于当执行异常指令时清除寄存器组102的内容,因此,在向OS转移执行的时刻,功能编号和参数等从寄存器组102内的寄存器上消失。
因此,在该微处理器100中定义着系统调用用的指令。该指令例如用以下的助记符表现。
syscall Ra、Rb该syscall指令需要两个操作数。Ra是表示表示呼叫的功能的功能编号的操作数,Rb是表示参数或存储参数的地址的操作数。
在耐窜改状态下,当执行syscall指令时,与异常处理同样地保留上下文,通常寄存器组102a也同样地被清除。但是,Ra和Rb不被清除,而原样不变地成为存储在寄存器内的状态。由此,执行系统调用的处理的系统调用处理器可以取得必要的参数。
另外,在从系统调用复位到原来的程序时,在由syscall指令指定的寄存器中保持着由系统调用获得的值不变,其它的寄存器组102内的寄存器复位到系统调用前的状态。
在该微处理器100中,由以上的处理实现系统调用。
D.耐窜改状态的特有的指令该微处理器100在耐窜改状态和非耐窜改状态中,可以执行与原来的处理器相同的运算、控制等的指令。而且,该微处理器100在耐窜改状态中,可以执行耐窜改状态特有的指令。以下,对这样的耐窜改状态特有的指令进行说明。
(1)由数据键寄存器进行键ID的指令如上所述,在该微处理器100中设有多个键寄存器RKd 0、…、RKdn。在这些键寄存器RKd 0、…、RKdn中如上所述地存储着键ID。
在耐窜改状态中,在微处理器100执行伴随着对于外部存储器1的访问的指令时,一定使用一个键ID。以下将该键ID称作访问键ID。
在该微处理器100中,在耐窜改状态中,固定地确定与寄存器组102a中的、可以存储外部存储器1上的地址的全部的寄存器对应的数据键寄存器RKd0、…、RKdn。例如使数据键寄存器RKd2与主要用于存储栈上的地址的寄存器对应,使其它的一般的存储器与数据键寄存器RKd1对应。
在该微处理器100中,与原来的处理器同样地,在对外部存储器访问的指令中,作为操作数可以指定保持着进行访问的地址的寄存器。在该微处理器100中,与该寄存器对应的键寄存器RKd0、…、RKdn的值成为上述的访问键ID。
另外,按照指令,不是上述那样地被固定地确定的数据键寄存器、而是将不同的特定的数据键寄存器RKdm(m=0、1、…、n)作为省略时值(缺省值)时有时可以减轻程序制作上的负担。
因此,在该微处理器100中,对于若干个指令,确定在省略了根据存储器访问指令及其定址模式指定键寄存器的操作数时使用的数据键寄存器(省略时数据键寄存器)。在这样的指令中,在没有数据键寄存器的指定时,将存储在被确定的省略时数据键寄存器中的键ID作为上述的存储键ID。
若适当地设定上述的数据键寄存器RKd1及数据键寄存器RKd2,则几乎全部情况下的存储器访问通过省略指定数据键寄存器的操作数可以以与通常的动作(非耐窜改状态)相同的指令执行。因此,当上述那样地确定了省略时的访问键ID时,可以减轻程序制作上的负担。
例如用以下的助记符表现从存储器读入数据的通常的指令。
load Ra、Rb在此,Rb是指定表示外部存储器1上的地址的寄存器的操作数,Ra是指定存储读入的数据的寄存器的操作数。
在这样的指令中指定的Rb在是规定的寄存器(例如栈指示字、基本地址指示字等)以外的一般的寄存器时,运算处理部件103被看作为用与保持在数据键寄存器RKd1中的键ID对应的密钥加密的情况,该数据键寄存器RKd1是包括用Rb表示的地址的外部存储器1上的区作为上述的访问键ID被定义的。因此,加密处理部件109根据来自运算处理部件103的指示从键表106取得与保持在数据键寄存器RKd1中的键ID对应的键。另外,加密处理部件109取得由Rb表示的地址的内容,并由在前面取得的键对其加密。用这样地被加密的Rd表示的地址的内容被存储在Ra中。
(2)由数据键寄存器形成的键寄存器修饰在使用与由固定地被决定的键寄存器指定的键ID不同的键ID访问外部存储器1时,在将该不同的键ID存储在数据键寄存器RKd1、RKd2中后执行上述的load指令、或对load指令附加键寄存器修饰。例如,在访问键ID想要使用数据键寄存器RKd3表示的键ID时,执行由以下的助记符表现的load指令。
load/Kd3 Ra、Rb在此,“/Kd3”是键寄存器修饰,在这时,指的是应该将与保持在键寄存器RKd3中的键ID对应的键作为访问键ID执行与load指令“load Ra、Rb”同样的处理。
另外,在RKd0中经常地保持着上述的键ID“0”。该键ID“0”表示“未加密”的状态。在耐窜改状态中以未加密进行存储器访问(例如load)时,由该RKd0进行键寄存器修饰。执行这样的键寄存器修饰的指令由以下那样的助记符表现。
load/Kd0 Ra、Rb它指的是包括用Rb表示的存储器地址的区被看作是明文的状态,在不使该区的内容解密的情况下原样的不变的读入Ra。
另外,在键寄存器修饰中使用的键寄存器不限于上述那样的数据键寄存器RKd0、…、RKdn。例如也可以如下所述地由执行键寄存器RKx进行键寄存器修饰。
load/Kx Ra、Rb它指的是用Rb表示的存储器地址被看作为处于由(程序)执行键加密的区域内的地址,使用与保持在执行键寄存器RKdx中的键ID对应的现在的执行键进行解密。
这样,通过定义用执行键解密存储器的内容的load指令,预先在耐窜改程序内的加密部分中安全地埋入秘密的数据,可以进行执行时参照的程序的执行。由此可以有助于程序内的数据安全性的提高。另外,可以降低这样的程序的制作负担。
另外,键寄存器修饰也不限于上述的load指令,例如也可以附加在运算指令等的伴随着存储器访问的任意的指令上。
(3)键的装入另外,在该微处理器100中,可以在数据键寄存器设定键。用于它的指令由例如以下的那样的助记符表现。
loadKd RKd、Ra该loadKd指令需要两个操作数。RKd是指定数据键寄存器RKd0以外的数据键寄存器RKd1~RKdn之一的操作数。另外,Ra是指定保持着存储着应该设定的对称键的地址的寄存器的操作数。该指令由于是在耐窜改状态下执行,因此,在由该Ra指定的寄存器中存储的地址存储着被加密的地址键。因此,为了明文地将被加密的对称键解密并读出,由该Ra指定的寄存器需要借助上述任何一种地址修饰,被保持着表示明文以外的有效键的数据键寄存器键寄存器修饰。
当执行loadKd指令时,保持在保持于Ra中的地址中的对称键被读出。被读出的对称键被由与上述那样地被修饰的数据键寄存器的内容(键ID)对应的键解密。在被解密的对称键中分配空着的适当的键ID。而且,被解密的对称键被保持在与分配的键ID对应的键数据保持部件106b中。与此并行地,在由RKd指定的键数据寄存器中存储着被分配到该对称键中的键ID。
在该loadKd指令上也可以以上述的load指令同样地附加键寄存器修饰。被键寄存器修饰的loadKd指令由例如以下的助记符表现。
loadKd/kx RKd、Ra在此,RKd是指定键数据寄存器的操作数,Ra是指定外部存储器1上的地址的操作数。该loadKd指令因为由执行键寄存器RKx修饰着,由Ra指定的地址成为与由现在的执行键加密的程序码相同的加密区内,上述现在的执行键与保持在执行键寄存器RKx中的键ID对应。
通过使用这样的loadKd指令,将使用于数据参照的固定的键预先加密并埋入到程序内,在执行时可以执行参照的程序的执行。由此,可以有助于程序内的数据安全性的提高,而且也可以降低这样的程序的制作负担。
(4)键的存储另外,在该微处理器100中可以将在数据键寄存器中存储着键ID的键从键表106存储到外部存储器1中。用于这样的指令可以由例如以下那样的助记符表现。
storek Ra、RK
在此,Ra是指定表示外部存储器1上的地址的寄存器的操作数,RK是指定键寄存器组内的任意的寄存器(数据键寄存器RKd1~RKdn)的操作数。
当执行该storek指令时,与由RK指定的键寄存器中存储的键ID对应的键被从键数据保持部件106b读出,存储在由外部存储器1上的被Ra指定的地址上。
在由Ra指定的寄存器上与上述耐窜改状态中的其它的存储器访问指令相同地进行键寄存器修饰。因此,加密处理部件109根据来自运算处理部件103的指令,由与存储在键寄存器的键ID对应的键将想要写出的键加密并存储到外部存储器1中,上述键寄存器与由Ra指定的寄存器对应。
另外,对于该storek指令也与上述各指令同样地进行键寄存器修饰。进行键寄存器修饰时的storek指令例如由以下那样的助记符表现。
storek/kx Ra、RK在这时,由于由执行键进行键寄存器修饰,因此在执行时由现在的执行键加密并指令的键被写出到外部寄存器1中。
该storek指令写出的不是存储在键寄存器中的键ID,而是与键ID对应的键本身。在被写出的键上由于如上所述地进行了规定的加密,不能从微处理器100外直接知道与键ID“0”对应的键的实际值。
另外,由该storek指令写出的键可以由上述的loadKd指令再次设定在键表106中。因此,由loadKd指令和storek指令可以将许多键临时地保留到外部存储器1。由此,可以在程序内适当地区分地使用许多的键。
(5)向数据键寄存器存储新的临时键在该微处理器100中为了将已经存在的键存储到键表106中,使用上述的loadKd指令。由loadKd指令读入的键也可以由程序生成。为了生成这样的键,例如生成适当的随机数,据此生成键。这样地生成了的键例如作为用于加密的临时键使用。
作为在通用的OS等中生成随机数的方法人们知道的有将某种决定性的数列作为伪随机数使用的方法、将由处理器外的定时器和中断的时刻等获得的值看作为非决定性的数列,据此生成随机数列的方法等。
但是,当将决定性数列看作伪随机数时,在初始条件相同的情况下,只能产生相同系列的随机数列,因此,存在从外部可以预测随机数列的问题。
在根据由在计时器和中断等的处理器外产生的原因获得的值生成随机数时,通过使计时器、中断等的外部的环境相同,由可能再现相同的随机数系列。
因此,为了提高耐窜改性,需要在微处理器内生成从外部不能预测的随机数列。
因此,在该微处理器100中,如上所述地设有随机数发生部104。该随机数发生部104除了如上所述地生成上下文开关时的处理器临时键Kc之外,还可以用于如上所述地从程序生成使用的键。因此,随机数发生部104所发生的随机数也供给到运算处理部件103。
运算处理部件103可以根据从随机数发生部104供给的随机数生成键。这样地生成键指令例如由以下的助记符表现。
genrndkd RKd该genrndkd指令需要一个操作数。RKd是指定数据键寄存器RKd0以外的数据键寄存器RKd1~RKdn之一的操作数。当执行该genrndkd指令时,加密处理部件109根据来自运算处理部件103的指令生成与从随机数发生部104取得的随机数对应的键。在生成的键上分配空着的适当的键ID。当分配了键ID时,加密处理部件109将上述那样地生成的键存储在与该键ID对应的键数据保持部件106b中,将该键ID存储由RKd指定的数据键寄存器中。
这样地存储着键ID的数据键寄存器以后保持着有效的密钥可以使用于上述的键寄存器修饰等。
(6)键寄存器间的键ID的操作另外,在该微处理器100中,可以进行键寄存器间的键ID的移动。用于此的指令例如由以下的助记符表现。
movekd RKd、RK该movekd指令需要两个操作数。RKd是指定RKd0以外的数据键寄存器RKd1~RKdn之一的操作数。RK是指定键寄存器组内的任意的寄存器的操作数,指定包含RKd0在内的全部的数据键寄存器或执行键寄存器RKx。当执行该movekd指令时,被存储在由RK指定的键寄存器中的键ID被复制存储到由RKd指定的键寄存器中。特别是RK指定了RKd0时,在由RKd指定的键寄存器中代入表示非加密的键ID“0”。
在RK指定了执行键寄存器RKx时,用由被RKd表示的数据键寄存器进行的修饰可以访问由与执行键相同的密钥存储在程序码中的数据。
另外,在该微处理100中,可以在键寄存器键间进行保持着的键ID的交换。用于此的指令例如由以下的助记符表现。
exchgkd RKda、RKdb该exchgkd指令需要两个操作数。RKda和RKdb是分别指定数据键寄存器RKd0以外的数据键寄存器RKd1~RKdn之一的操作数。另外,RKda和RKdb指定不同的数据键寄存器。当执行该exchgkd指令时,交换保持在由RKda指定的键寄存器中的值(键ID)和由RKdb指定的键寄存器中的值(键ID)。
4.微处理器的详细动作(1)外部存储器访问在耐窜改状态下,微处理器100在进行对外部存储器1访问时,运算处理部件103将包括想要访问的外部处理器上的地址的加密区看作为由寄存器键ID所示的键加密的区。
a.使用于外部存储器访问的键ID在该微处理器100中,在对外部存储器1访问时经常地伴随着一个键ID(访问键ID)。
在执行非耐窜改状态中的程序时,访问键ID是表示非加密的0。另外,在由中断、异常进行的上下文的保留·复位中,访问键ID是意味着处理器临时Kc的1。另外,在读出耐窜改状态中的程序时,访问键ID是存储在执行键寄存器RKx中的键ID。
如上所述,在耐窜改状态中的程序访问外部处理器1时,在进行该访问的指令中,可以进行表示使用哪个键寄存器的键寄存器修饰。在进行该键寄存器修饰时,访问键ID成为存储在该指令中指定的键寄存器中的键ID。
在没有这样的键寄存器修饰时,如上所述,存储在由寄存器访问指令及其定址模式预先决定的省略时键寄存器中的键ID成为访问键ID。
b.键ID与高速缓存存储器的关系在运算处理部件103想要访问的地址的数据未保持在高速缓存101中时(高速缓存101未找到的情况),高速缓存控制器101b确保新的高速缓存线。为了确保新的高速缓存线,有时必须释放旧的高速缓存线,但是,对于高速缓存线的释放如用别的项所述的那样。
之后,高速缓存控制器101b由加密处理部件109将用与上述的访问键ID对应的键加密的外部存储器1上的数据读入确保的高速缓存线,在标签存储区域101c中存储着用于加密的访问键ID。当这样的高速缓存动作结束时,运算处理部件103访问被高速缓存的数据。
在处理器想要访问的地址的数据保持在高速缓存101中时(找到了高速缓存101时)高速缓存控制器101b比较找到的高速缓存线的标签存储区域101c的内容与访问键ID。当它们一致时,原样不变地使用其高速缓存线的内容。
在虽然找到的高速缓存101,但标签存储区域101c的内容与访问键ID不一致时,高速缓存控制器101b释放该高速缓存线。关于高速缓存线的释放在别的项中叙述。之后,高速缓存控制器101b与未找到高速缓存的情况相同地看作为想要访问的地址的数据(加密区)未被访问键ID所示的键加密的数据,加密处理部件109由解密的数据读入高速缓存线,将访问键ID存储到标签存储区域101c。之后,运算处理部件103访问被高速缓存的数据。
这时,在进行高速缓存线的释放处理和读入处理时,即使不对外部处理器1进行实际的访问,通过只在处理器内进行处理也可以通过使外部处理器访问最小化而实现高速化。在这时,由于是标签存储区域101c的内容与访问键ID不一致的状态,因此运算处理部件103现在需要不原样不变地访问被高速缓存的数据。因此,在例如将被高速缓存的数据由标签存储区域101c的数据加密了后,将由该访问键ID解密的数据存储到该高速缓存线中。然后,运算处理部件103访问被高速缓存的数据。
在该微处理器100中,从上述键ID的一意性比较标签存储区域101c的内容与访问键ID,将实际的外部存储器1的数据的加密·解密的处理最小化,进行适当的访问限制,由此,可以使用对于高速缓存101的外部存储器1的访问高速化。
(2)键寄存器的操作a.键寄存器的值的设定在该微处理器100中,在(a)耐窜改程序的开始指令的执行时、(b)在耐窜改程序中发行的数据键的装入指令的执行时、(c)加密上下文的复位时,将值设定在键寄存器RKx、Rkdi(i=0、1、…、n)中。
在对键寄存器的值(键ID)的设定中,运算处理部件103,首先调查想要设定值的键寄存器是否保持着有效的键表上的ID。在键寄存器保持着有效的键表上的ID时,运算处理部件103使键表106所对应的键ID的寄存器参照计数器106a的值减1。即使寄存器参照计数器106a的值成为0,所对应的键ID也并不是立刻被释放。
接着,运算处理部件103调查与想要设定的键一致的键是否处于键表106中。具有一致的键时,运算处理部件103使与该键对应的寄存器参照计数器106a的值增加1,将对应的键ID存储在键寄存器中。
在一致的键未存在于键表106中时,运算处理部件103寻找键表102中的空着的键ID。在有空着的键ID时,运算处理部件103选择任意的空着的键,将键存储在与选择的键ID对应的键数据保持部件106b中,使寄存器参照计数器106a的值成为1。另外,运算处理部件103将键ID存储在键寄存器中。
在键表106中没有空着的键ID时,运算处理部件103选择寄存器参照计数器106a的值成为0的键ID。由于键表106的键ID数量比键寄存器组102b内的寄存器的数量多,因此,即使在没有空着的键ID时,也一定存在寄存器参照计数器106a的值成为0的键ID。运算处理部件103释放选择的键ID。然后,与具有空着的键ID的情况相同,存储键,设定键寄存器的值。
b.键表登记项的释放在来自键表106的键ID的释放中,运算处理部件103首先调查高速缓存存储器101,将标签存储区域101c的值与想要解放的键ID一致的高速缓存线全部释放。在为了释放高速缓存线而需要将内容扫出到外部存储器1中时,在用存储在对应的键表保持部件106b中的键使其加密后扫除到外部存储器1。
当标签存储区域101c的值与想要解放的键ID一致的高速缓存线全部被释放时,运算处理部件103确认在键寄存器102b内的任何一个寄存器中都未保持着想要解放的键ID的情况。如果在键寄存器102b内的任何一个寄存器中都未保持着想要解放的键ID时,运算处理部件103则释放该键ID。当在某一个寄存器中保持着想要解放的键ID时,由于该键ID处于被使用中,不释放该键ID。这样的确认是为了保证在某瞬间在微处理器100内被使用的全部的键ID表示着适当的键上述这样的确认是必要的。
c.键表登记项释放的最佳化为了使高速缓存的效率最佳化而提出了许多选择释放的高速缓存线的方法。这些方法也可以用于使释放的键ID的选择最佳。
(3)上下文的保留和复位a.上下文的保留图4表示上述地保留到外部存储器1时的被加密的上下文(加密上下文)的格式。
该加密上下文200如图4所示,具有表示进行上下文的保留的原因的加密上下文标记201和存储被加密的上下文等的有效载荷202。
加密上下文标记201表示进行上下文的保留的原因是通常的中断、异常处理或是上述的系统调用。
在有效载荷202中存储着上述的通常寄存器组102a的寄存器的数据203、键寄存器组102b的寄存器的数据204、用于弄混有效载荷202内的数据的随机数205、用于证明加密上下文是由微处理器100本身制作的署名206。
数据203及数据204按照随机数205被弄混,以便即使上下文相同有效载荷202数据203、204也成为不同的值。该随机数205最好使用具有加密学的充分的随机性的、每个不同的处理器不同的、每个处理器的复位不同的、从微处理器100的外部难以预测的随机数。因此,例如在每个上下文保留时由随机数发生部104发生。
另外,署名206是为了证明被弄混的数据203、204、随机数205的正当性而被附加的。该署名206用于表示例如是由微处理器100生成的。例如可以使用由散列函数是1的MD(信息摘要)5等生成的数据203~随机数205的摘要。或者,在使用着处理器临时键Kc的上下文的加密中上下文整体被形成为一个加密区、或被适当地被链接(连接)时,作为署名206可以使用随机数205本身。
在适当地链接着上下文整体时,通过使用在加密中被求得的摘要,可以省略上下文的摘要的计算,因此,可以较高速地进行上下文的保存。而且,这时,为了避免摘要的变化,在加密前不能进行使数据压缩等的上下文的数据的熵相对于上下文变化的处理。
另外,有效载荷202内的数据203~署名206其整体由处理器临时键Kc加密。这样的构成的加密上下文在上下文的保留时由加密处理部件109根据来自运算处理部件103的指令进行生成。
图5表示这样的上下文的保留处理。在接上电源时或微处理器100复位时,如上述图3所示,当设定处理器临时键Kc时,开始从图3中的步骤S11起的处理。异常检测部件108在该步骤S11中监视例如由中断、处理切换形成的上下文键的要求等的异常状态的发生。如果不发生这些异常状态,则异常检测部件108在该步骤S11中等待异常状态的发生。
当发生异常状态时,运算处理部件103首先作为上下文收集应该进行保存的信息(S12)。具体地讲,取得与耐窜改动作没有直接关系的通常寄存器组102内的寄存器的内容、保持着耐窜改动作的键ID的键寄存器组102b内的寄存器的内容(键1D)及与该键ID对应的键表106内的键、用于弄混的随机数等。
当取得这些信息时,运算处理部件103使用用于弄混的随机数弄混寄存器组102内的寄存器的值(S13)。然后,运算处理部件103生成表示弄混的寄存器的值、用于弄混的随机数的值的正当性的署名(S14)。
而且,运算处理部件103将这些信息作为有效载荷202内的规定的区域203~206的数据,指令到加密处理部件109,以使上述的数据的整体由处理器临时键Kc加密(S15),当由加密处理部件109进行的加密结束时,将表示上下文的保留的原因的信息,表示由处理器临时键Kc进行的加密的信息等以明文的状态作为加密上下文标记201附加在加密的上下文等上,并存储在外部存储器1上的规定地址(S16)。然后,再在步骤S11中等待异常状态的发生。
当上下文的保留结束时,键寄存器组102b内的全部的寄存器被清除,成为不指令有效的ID的状态。
另外,在上述的上下文的保留中,也可以同时地保留保持在键表106中的键。在也保留键时,键的数据作为例如有效载荷202中的数据被保留到外部存储器1中。当这样地保留了键表106中的键时,对应的寄存器参照计数器106a的值成为0,在其它的访问等中,可以分配对应的键ID。
这样,在上下文的保留中,(a)处理器临时键Kc由于是根据难以从外部得知的随机数生成的,因此可以使用秘密键方式的加密方法,(b)为了在每次复位时使处理器临时键Kc的值变更,即使未生成每次上下文的保留时不同的键,处理器临时键Kc被外部知道的可能性也低。因此,直到被复位之前的期间,即使在全部的上下文的保留中使用相同的键也可以维持耐窜改性的水平。
可是,在将被外部知道的可能性比该微处理器100中的处理器临时键Kc高的键用于上下文的加密的微处理器中,为了维持耐窜改性的水平,例如准备着多个键,需要使用每上下文保留时不同的键。为了实现这样的处理,需要设置表示保留到微处理器内的上下文与用于该上下文的加密的键的对应的表。上下文的保留由于是在处理间的切换时被执行,因此在这样的微处理器中,同时可以执行的处理的数量由于上述的表的容量而受到制约。或者,为了使同时执行的处理增加,由于另外需要由软件进行的键的管理等的特别的处理,因此,性能降低。
与此相反,在该微处理器100中,如上所述,由于上下文的保留使用着相同的键,因此同时可执行的处理的数量不受表的容量等制约。因此,不需要特别的处理,也不会使性能降低。
b.上下文的复位微处理器100通过执行使上述那样地进行保留了的上下文复位的指令,可以使存储在外部存储器1的任意地址的上下文复位。
该上下文复位指令通常是只在OS等的系统程序中使用的特权指令,但是在没有特权指令的要概念的微处理器等中,也有时执行OS以外的程序。
图6表示这样的上下文的复位处理。在该微处理器100中当在接通电源或复位时设定上述的处理器临时键Kc时,开始进行从图6中的步骤S21起的处理。在该步骤S21中,运算处理部件103判断是否有上下文的复位要求。若没有复位要求,则运算处理部件103在该步骤21中等待复位要求。
当有上下文的复位要求时,运算处理部件103从外部存储器1读出要求复位的加密上下文(S22)。
当读出加密上下文时,运算处理部件103调查加密上下文标记201(S23)。在表示着该标记是明文时,加密上下文202由于实际上是未加密,因此,运算处理部件103将加密上下文202的内容原样不变地作为寄存器组102内的寄存器等的值使其复位(S24),返回步骤21等待下一次的上下文的复位要求。
另一方面,在表示着加密标记602是加密时,以下的处理被原子地执行。首先,运算处理部件103读入加密上下文202,对加密处理部件109指令由处理器临时键Kc进行的加密(S25)。由此,取出随机数205、数据203(键寄存器组102b内的寄存器的数据)、数据204(通常寄存器组102a内的寄存器的数据)、署名206。
然后,运算处理部件103由署名606验证数据203、204、随机数206是否是由微处理器100正当的生成的(S26),判断是否验证成功了(S27)。
在验证失败了时,由于上下文的复位失败,运算处理部件103在消除上述那样地被加密的数据203、204、随机数205、署名206(S28)后,产生异常(S29)、返回到步骤S21而等待复位要求。
另外,当验证成功时,运算处理部件103将由随机数205弄混的数据203、204返回到原样(S30)。在一旦署名被被验证,将被弄混的数据返回到原样时,微处理器100无视随机数603。
其后,运算处理器103使键寄存器组102b内的各寄存器RKd0~RKdn的值和与保持在这些寄存器中的键ID对应的键复位(S31以后)。
具体地讲运算处理部件103首先取出返回到原样的上下文内的键寄存器内的键ID,比较与该键ID对应的键表106的对应的键和上下文内的对应的键(S31)。如果这些键一致,则将键ID原样不变地复位到对应的键寄存器中(S32)。
在键不一致时,将上下文中的键重新登记在键表106中(S33),将由登记分配的键ID作为键寄存器的值(S34)。该处理与开始上述的耐窜改程序时的执行键的登记、耐窜改程序内的数据键的登记时同样地例如通过执行上述的strtenc指令来进行。
另外,运算处理键103判定键的复位是否失败了(S35),在失败了时,不进行上下文的复位,执行上述的步骤S28、S29的处理。如果键的登记未失败,则运算处理部件103判定全部的键的复位是否结束了(S36),若未结束则执行剩余的寄存器的值的复位(S31~S36)。
只限于全部的键寄存器的值的复位结束了时使其它的通常的上下文605复位。即,在全部的键寄存器的值的复位结束了后,运算处理部件103使通常寄存器组102a内的寄存器的值复位(S37)。然后,当上下文的复位结束了时,返回到步骤S21,等待复位要求。
当上述那样地使上下文复位时,与该上下文对应的程序例如在规定的实隙间成为执行状态。
另外,在上述上下文的复位处理中,运算处理部件103由加密上下文标记201调查进行上下文保留的原因,在是由系统调用指令保留的上下文时,对于由系统调用指令指定的寄存器来说,不使上下文复位前的值复位,保持现状不变。
各加密上下文的复位以使全部的上下文复位(S31)并成功后结束、或以某理由失败全不进行寄存器的值复位使其产生异常(S29)而结束中的任何一个结果结束。因此,不会只复位一部分寄存器的内容。这是为了防止上下文复位后的耐窜改程序的动作不稳定。
5.总结在该实施例的微处理器中,通过如上所述在上下文的加密·解密中,用由接上电源或由每复位不同的随机数生成的处理器临时键Kc进行对称键密码(公用键方式密码)进行的上下文加密·解密,对上下文加密,可以有助于保留到外部存储器1中的上下文·开关的高速化。
另外,在该微处理器中,如上所述,处理器临时键Kc从微处理器的外部推断其值的可能性极低。另外,处理器临时键Kc的值只有执行加密/解密处理的加密处理部件109可以进行参照。因此,从例如由运算处理部件103执行的程序等不能参照处理器临时键Kc的值。因此,非常难以直接加密保留于外部处理器1中的上下文或对其施加恣意的改变。
另外,在该微处理器中,通过使保留的上下文含有程序执行键,即使改换例如在不同的耐窜改程序之间被保留的上下文,也不能继续所希望的动作。
另外,在该微处理器中,由于不需要在内部具有保持每上下文的键的上下文键表,因此,可以并列地执行的程序的数量不受表的容量的制约。因此,可以有助于可以并列地执行的处理的数量的增加。
另外,在该微处理器中,由于在全部的上下文解密中使用相同的处理器临时键Kc,因此不能完全地否定两次以上复位相同的上下文的可能性。但是,如上所述,由于处理器临时键Kc每复位都改变,因此在复位后不能使复位前的上下文复位。
另外,在该微处理器中,如上所述,由于根据每个处理器不同的、从外部不能预测的随机数生成处理器临时键,因此处理器临时键的值是每个微处理器都不同。因此,即使使外部环境全部一致,如果微处理器不同则处理器临时键也不同。因此,某个微处理器保留的上下文不能在微处理器中使其复位。
另外,该微处理器具有多个键寄存器,具有多个键寄存器,可以自由地选择这些键寄存器。因此,通过适当地使用这些键寄存器,可以有助于被加密的安全的程序制作的简单化。
另外,在该微处理器中,如上所述,处理器公开键、处理器秘密键每个微处理器都不同。另外如上所述,在复位后不能使复位前的上下文复位或不能使由其它的微处理器保留的上下文复位。由此,程序的提供者通过只分配对例如每个特定的微处理程序的个体专用只分配被加密的程序执行键,可以防止该程序在其它的微处理器中执行。因此可以使不正当地考贝的程序不动作。因此,可以有助于程序的保护。
另外,在该微处理器中,通过上述程序执行键·数据的复位键形成的程序和数据的保护、由保留于外部存储器1中的上下文的加密形成的执行状态的保护可以有助于含在程序、数据中的秘密的保护的强化。
在本发明中,根据随机数生成秘密键方式的密钥,临时键生成装置该随机数是根据在每次微处理器初始化时、每个微处理器都不同的微处理器内部的参数生成的。动作信息保留装置在例如中断、处理的切换等时,将表示该微处理器的动作状态的信息由临时键生成装置生成的密钥加密并存储在外部的存储装置中。在使表示这样地被保留的动作状态的信息复位时,动作信息复位装置用临时键生成装置生成的密钥使表示被加密并存储在外部在存储装置在的动作状态的信息加密。
临时键生成装置生成的密钥难以从外部推测。因此,通过用这样的密钥将该微处理器的动作状态保持在外部的记忆状态中,外部或该处理器中执行着的其它的处理等非常难以通过解密保持在存储装置中的动作状态的信息知道其内容。因此,即使不用每个动作状态的保留所不同的秘密键也可以维持耐窜改性的水平。
由此,向使用多个密钥的情况那样,不需要管理各个密钥的表等,同时被执行的处理数不会由于表的容量而受到制约。因此,可以有助于同时被执行的处理数量的增加。另外,由于同时被执行的处理数量不受制约,可以有助于同时被执行的处理数量多的程序的执行中的功能的改善。
权利要求
1.一种微处理器,其特征在于,包括临时键生成装置、动作信息保留装置、动作信息复位装置,上述临时键生成装置根据随机数生成秘密键方式的密钥,该随机数是在每次微处理器的初始化时、对于各微处理器中的每一个微处理器都不同的、根据微处理器内部的参数生成的随机数,上述动作信息保留装置将表示该微处理器的动作状态的信息由临时键生成装置生成的密钥加密并存储在外部的存储装置中,上述动作信息复位装置将被加密并存储在外部的存储装置中的表示动作状态的信息用临时键生成装置生成的密钥解密。
2.如权利要求1所述的微处理器,其特征在于,包括秘密键保持装置、执行键读出装置、执行解密装置、程序执行装置,该秘密键保持装置保持不能读出到外部的每一个微处理器都不同的公开键方式的秘密键,上述执行键读出装置从外部的存储装置读出预先由与秘密键对应的公开键加密的程序执行键,上述执行解密装置用秘密键解密由执行键读出装置读出的程序执行键,上述程序执行键由被解密的程序执行键解密外部的存储装置的规定地址的内容。
3.如权利要求2所述的微处理器,其特征在于,包括任意键保持装置、键指定装置,上述任意键保持装置用于保持多个任意的密钥,上述键指定装置在从执行中的程序指令相对于外部的记忆装置的访问时,在从程序未指定使用于访问的键时从临时键生成装置所生成的密钥、执行键读出装置所读出的程序执行键及保持在任意键保持装置中的密钥中的任何一个指定使用于该访问的键。
4.如权利要求3所述的微处理器,其特征在于,将各微处理器中的每一个微处理器不同的、根据对应于微处理器内部的参数生成的随机数生成的密钥存储在任意键保持装置中。
5.如权利要求4所述的微处理器,其特征在于,包括分配装置、高速缓存装置、管理装置,该分配装置将固有识别信息分别分配给临时键生成装置所生成的密钥、执行键读出装置所读出的程序执行键及保持在任意键保持装置中的键,上述高速缓存装置将存储在存储装置中的数据读出并保持到每个规定的区,上述管理装置使表示保持在高速缓存装置中的存储装置的数据中的至少被加密并存储在存储装置中的区的地址信息与表示使用于与地址信息对应的数据的加密的键的识别信息相对应并予以保存。
6.如权利要求5所述的微处理器,其特征在于,包括访问控制装置,该访问控制装置在对存储装置进行访问时,比较由键指定装置指定的键的识别信息和保持在管理装置中的识别信息,在一致时对保持在高速缓存装置中的数据进行访问。
全文摘要
本发明提供一种可以在维持耐窜改性、性能的同时或以容易地对应于多重处理、多用户环境等的微处理器。在接通电源时、复位时,随机数发生部104发生从微处理器100外部不能推测的随机数,根据发生的随机数生成处理器临时键Kc。该处理器临时键Kc被保持在随机数保持部件105中,当异常检测部件108检测出中断、处理的切换等的异常状态时,运算处理部件103指令在加密处理部件109保留寄存器102内的各寄存器值等的上下文。与此对应,加密处理部件109由处理器临时键Kc对上下文加密,被加密的上下文存储在外中存储器1中。
文档编号H04L9/08GK1474279SQ0212775
公开日2004年2月11日 申请日期2002年8月8日 优先权日2001年8月8日
发明者藤本谦作, 白川健治, 桥本干生, 寺本圭一, 尾崎哲, 一, 治, 生 申请人:株式会社东芝
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1