CN101939749A - 程序模糊方法和用于执行模糊程序的处理设备 - Google Patents
程序模糊方法和用于执行模糊程序的处理设备 Download PDFInfo
- Publication number
- CN101939749A CN101939749A CN200980104710.6A CN200980104710A CN101939749A CN 101939749 A CN101939749 A CN 101939749A CN 200980104710 A CN200980104710 A CN 200980104710A CN 101939749 A CN101939749 A CN 101939749A
- Authority
- CN
- China
- Prior art keywords
- address
- instruction
- scope
- destination address
- flow control
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims description 30
- 238000012545 processing Methods 0.000 title claims description 21
- 238000013507 mapping Methods 0.000 claims abstract description 58
- 230000006870 function Effects 0.000 claims description 18
- 230000008859 change Effects 0.000 claims description 11
- 230000004044 response Effects 0.000 claims description 4
- 238000012423 maintenance Methods 0.000 claims 1
- 230000008672 reprogramming Effects 0.000 claims 1
- 230000011218 segmentation Effects 0.000 description 17
- 238000004422 calculation algorithm Methods 0.000 description 16
- 230000014509 gene expression Effects 0.000 description 14
- 238000005516 engineering process Methods 0.000 description 8
- 238000006243 chemical reaction Methods 0.000 description 7
- 230000008707 rearrangement Effects 0.000 description 7
- 239000011159 matrix material Substances 0.000 description 6
- 230000000694 effects Effects 0.000 description 5
- 238000004364 calculation method Methods 0.000 description 2
- 239000002131 composite material Substances 0.000 description 2
- 238000001514 detection method Methods 0.000 description 2
- 238000002789 length control Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000011079 streamline operation Methods 0.000 description 2
- 230000009466 transformation Effects 0.000 description 2
- 235000012364 Peperomia pellucida Nutrition 0.000 description 1
- 240000007711 Peperomia pellucida Species 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000015572 biosynthetic process Effects 0.000 description 1
- 230000006835 compression Effects 0.000 description 1
- 238000007906 compression Methods 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 239000012141 concentrate Substances 0.000 description 1
- 230000006837 decompression Effects 0.000 description 1
- 230000001934 delay Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 230000002349 favourable effect Effects 0.000 description 1
- 230000003760 hair shine Effects 0.000 description 1
- 230000002452 interceptive effect Effects 0.000 description 1
- 230000001788 irregular Effects 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000007781 pre-processing Methods 0.000 description 1
- 238000004321 preservation Methods 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 238000000926 separation method Methods 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- GOLXNESZZPUPJE-UHFFFAOYSA-N spiromesifen Chemical compound CC1=CC(C)=CC(C)=C1C(C(O1)=O)=C(OC(=O)CC(C)(C)C)C11CCCC1 GOLXNESZZPUPJE-UHFFFAOYSA-N 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/10—Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
- G06F21/12—Protecting executable software
- G06F21/14—Protecting executable software against software analysis or reverse engineering, e.g. by obfuscation
Abstract
通过重新排序指令对程序进行模糊。将原始指令地址映射到目标地址。通过将指令序列的目标地址限制到目标地址的有限打乱顺序范围(33a-d)的集合,实现了缓存的有效模糊程序,所述范围至少填充了一半指令。将所映射的地址步长(34)提供在连续的原始指令地址所映射的目标地址之间。所述地址步长(34)包括相互打乱顺序的范围(33a-d)的至少第一范围内的第一地址步长。在所述第一地址步长之间,是所述相互打乱顺序范围(33a-d)的至少第二范围内的第二地址步长。因此,实现了针对逻辑连续的指令得出连续地址。在实施例中,原始指令地址到目标地址的映射可以通过沿n维阵列中的点的路径(36)来形象化,其中n大于1。将连续原始指令映射到所述路径中的位置,并且将沿所述阵列的相应行的位置映射到相互打乱顺序范围(33a-d)中的相应范围。因为使用n维路径,保留了用于提供缓存效率的本地性形式,而所述路径的多维本性使得可以将这种本地性与伪随机步长相结合。
Description
技术领域
本发明涉及一种包括可编程处理器的数据处理设备,以及一种转换可编程处理器的指令程序的方法。
背景技术
代码模糊是按照模糊其内容的方式转换计算机的指令程序的技术的统称。可以应用代码模糊以使其更加难以识别需要在未授权类型的计算机上执行程序的相关部分,或者无需保护策略。
美国专利No.6,779,114描述了一种代码模糊技术,所述代码模糊技术包含模糊程序的控制流。将分支指令按照以下方式添加到指令块中,对所述块的预期执行顺序进行了模糊。美国专利No.5,559,884描述了一种程序基本块的伪随机重排序,以创建签名,所述签名用于识别通过其分布程序的源。
许多现代处理器使用指令缓存、预取和/或流水线操作技术,其依赖于程序流的本地性。具有模糊目标的分支指令的添加减小了本地性,这可以具有防止根据这种技术所期待的执行速度增益的效果。
发明内容
其中,本发明的目的是提供一种程序模糊,其中支持高速缓存使用效率。
提出了根据权利要求1所述的转换可编程处理器的程序指令的方法。在所述方法中,将在原始地址空间内的原始指令地址的序列映射到目标地址的有限的范围集合内,用于对重排序的指令进行寻址。连续的原始指令地址的目标地址之间的地址步长包括:所述范围的第一范围内的第一地址步长;这些第一地址步长之间的、所述范围的至少第二范围内的第二地址步长。限制所述范围的个数促进了其原始指令地址彼此相邻的指令的联合缓存的可能性。通过步进至范围内的地址步长之间的不同范围,对所述范围内的指令顺序进行了模糊,使其难以重构程序。同样,这使得可以使用在范围内和或范围之间相互相反符号(方向)的地址步长。
在实施例中,在每一个范围内只使用一个指令长度的地址步长,例如,该大小的背向和正向步长。对于其他范围的中间偏移的使用使得可以在避免所述范围连续执行的指令的简单序列的同时进行寻址。通过使用一个指令长度的地址步长,甚至更加促进了缓存。
提供根据权利要求18所述的处理设备用于执行已转换的程序。该处理设备对与重排序地址一致的连续指令进行寻址。在其他实施例中,例如,通过在执行之前对本地存储器中的指令序列重新排序的处理器可以执行所述程序。在另一个示例中,可以使用包括添加的跳转指令的程序,以使得处理器能够按照正常顺序执行所述程序,或者可以将分离的信息提供用于使得处理器能够执行这种行为。
附图说明
使用以下附图,根据典型实施例的描述,这些和其他目的和有利方面将变得清楚明白。
图1示出了数据处理设备
图1a-d示出了程序流控制单元
图2示出了程序转换的流程图
图3示出了地址映射
图3a示出了空间填充路径以形象化地址映射
图4示出了程序流控制单元
图5、5a示出了程序流控制单元
具体实施方式
基本数据处理设备
图1示出了数据处理设备,例如集成电路。除了数据处理设备的程序流控制单元16之外,所述处理设备可以具有传统的结构,包括存储器10、指令发布电路12和多个功能单元14、16,所述功能单元包括程序流控制单元16。指令发布电路12具有分别与存储器10的地址输入和数据输出相连的地址输出以及指令输入。指令发布电路12具有与功能单元14、16相连的指令输出。程序流控制单元16具有与指令发布电路12相连的地址输出。
程序流控制单元16配置用于确保程序的已重新排序以便模糊程序内容的指令序列的正确执行。在实施例中,使用最小化了指令缓存有效性的减小的重新排序。
图1a示出了程序流控制单元16的第一实施例。在该实施例中,程序流控制单元16包括程序计数器160和分支执行电路162。程序计数器160具有与指令发布电路(未示出)相连的输出。分支执行电路162具有与指令发布电路(未示出)相连的输入,用于接收分支命令,以及与程序计数器160相连的输出和输入。在操作时,程序计数器对由时钟CL表示的连续指令周期求和。可选地,当没有按照恒定距离存储指令时,通过从指令解码器(未示出)接收到的指令长度代码控制增量。计数值作为提供给指令发布电路的指令的地址。在其中分支执行电路162已经接收到分支命令并且已经确定必须接受所述分支命令的指令周期内,分支执行电路162根据所述分支重写程序计数器值,典型地从所述程序计数器值中增加或减去分支距离。
图1b示出了程序流控制单元16的实施例,所述程序流控制单元16附加地包括映射电路164。程序计数器160具有通过映射电路164与指令发布电路(未示出)相连的输出。在操作时,程序计数器160对连续的指令周期求和,可选地用由指令长度控制的增量。映射电路164将计数值映射到目标地址,继而提供给指令发布电路。映射电路164可以实现为查找表电路,例如在通过计数值寻址的位置处存储目标地址的查找存储器。例如,可以使用随机分配给各个计数值的目标地址集合。作为查找电路的选项或者与这种查找电路结合,可以将算术电路用于计算地址,或者可以将特别设计的逻辑电路用于计算地址。这种电路可以配置用于将每一个计数值映射到各个伪随机选择的目标地址集合之一。在实施例中,逻辑上连续的指令之间的地址步长的符号可以具有伪随机概率,即沿一个方向地址步长可以相等地与沿其他方向的步长频率相同。即,即使只使用有线个数的步长大小,所述步长的符号可以是随机的。同样,连续步长的联合概率可以是随机的,使得沿一个方向的步长接着是同样频繁的沿相同方向的另一个方向的步长。
可选地,可以使用其他映射。在其中分支执行电路162已经接收到分支命令并且已经确定必须接受所述分支命令的指令周期中,分支执行电路162根据所述分支重写程序计数器值,典型地向程序计数器值添加或减去分支距离。
图1c示出了与连续映射的指令地址块一起使用的程序流控制单元16的可选实施例。该实施例包括连接在映射电路164和指令存储器(未示出)之间的附加目标程序计数器166和更新选择器168。更新选择器168控制程序计数器160什么时候累加,以及是否根据映射电路164累加或者更新目标程序计数器168。在操作时,程序计数器160在每一个块开始时累加,并且目标程序计数器166在块开始时复制程序计数器160的映射程序计数器值。在所述块内,目标程序计数器累加。例如,通过在所述程序中包括的信息或者当执行特定类型的指令时通过自动开始新块来控制所述块的开始。
图1d示出了具有更新单元161的程序流控制单元16的实施例。更新单元161当没有执行跳转时控制指令地址的更新。在实施例中,更新单元配置用于向程序计数器160输出地址步长,并且程序计数器160向程序计数器值增加所述步长。更新单元161依赖于程序计数器值选择地址步长,以下将描述步长值。例如,可以使用伪随机步长。在实施例中,更新单元161包括查找存储器,以查找针对各个程序计数器值的步长。可选地,可以使用设计用于产生地址步长的逻辑电路。在另一个实施例中,更新单元输出由前一个程序计数器值确定的下一个程序计数器值的一部分或全部。可以将查找存储器用于使用前一个程序计数器值来得出下一个程序计数器值。按照这种方式,无需使用程序计数器120中的增加就实现了地址步长。可选地,分支执行电路162可以包括分支目标查找存储器162a,用于按照更新指令地址的相应方式查找跳转指令的分支目标。在实施例中,分支执行电路162包括用于计算分支目标地址的计算电路(没有分离地示出)。
指令发布电路12包括指令缓存存储器120、指令缓存控制器122和指令寄存器124。指令缓存控制器122具有与程序流控制单元16的地址输出相连的输入以及与存储器10和指令缓存存储器120相连的输出。指令缓存存储器120具有与存储器10相连的输入以及与指令寄存器124相连的输出。指令寄存器124具有与功能单元14、16相连的输出。功能单元14、16可以与一个或更多寄存器文件(未示出)和/或数据存储器(未示出)相连。在另外实施例中(未示出),功能单元14、16也可以与存储器10相连。
在操作时,功能单元14、16在连续的指令周期内执行连续的指令。程序流控制单元16确定指令地址,所述指令地址必须由功能单元14、16执行,并且向指令发布电路12表示这些地址。指令缓存控制器122确定来自这些地址的指令在指令缓存存储器120中是否可用,并且从指令缓存存储器向指令寄存器124发布所述指令。如果在指令缓存存储器120中不存在指令,指令缓存控制器122使得将所述指令从存储器10带到指令缓存存储器10中(可选地,是较大指令块的一部分)。
缓存未命中数与缺少本地性有关。通常,当第一和第二指令地址非常接近以至于他们将基于它们的地址一起保存在缓存中时,当从第一指令地址进行到第二指令地址时缓存未命中数极少发生。这通常应用于相邻的地址,但是也可以应用于更大距离的地址。当基于这些地址的临近性将这些地址的内容存储在指令缓存存储器120中时,认为地址相对于彼此是本地的。典型地,可以针对缓存定义本地距离作为针对由于地址之间的类似性联合存储内容的地址之间的最大距离。在简单的示例中,其中将每一个均具有多个地址的线路的内容缓存在指令缓存存储器120中,如果他们属于相同的线路,则这些地址相对于彼此是本地的。在这种情况下,本地距离是线路长度。在另一个示例中,其中将地址的移动窗口缓存在指令缓存存储器120中,当所述窗口向前移动时,将窗口开始处的地址用窗口结尾处的地址来代替,如果它们的距离小于窗口大小,则这些地址相对于彼此是本地的。在这种情况下,本地距离是窗口大小。
当将指令缓存在缓存线中时,例如64或128个指令地址的缓存线,如果可以将程序流限制到有限个数的缓存线,可以避免缓存未命中数,所述缓存线在有限个数的地址范围内,使得可以一起缓存所述范围。
应该理解的是,可以有许多替换指令发布电路结构和管理方法。例如,可以按照压缩和/或加密形式将指令存储在存储器10中,在这种情况下可以在缓冲存储器和存储器和/或指令寄存器124之间使用解压缩和/或解密电路。在一些情况下,可以将指令缓存存储器120旁路。目前,通过说明解释简单的指令缓存存储器。
程序流控制单元16可以包括程序计数器寄存器,所述程序计数器寄存器在每一个指令周期中更新。当程序流控制单元16接收分支指令(也称作跳转指令)时,程序流控制单元16根据所述分支指令执行更新。否则,程序流控制单元16应用本地定义的更新。在实施例中,程序流控制单元16在其中不执行分支的每一个指令周期向所述程序计数器寄存器的内容中添加当前指令长度。
在另外的实施例中,可以在这样的情况下使用预取,即程序流控制单元16和或指令缓存控制器122计算期待将来被执行的指令的预测地址,并且指令缓存控制器122预取这些指令。例如,可以通过预先应用本地定义的更新来形成预测地址,即假设将不会遇到分支指令。此外,可以将诸如分支预测之类的其他技术用于计算预测地址。
在可选实施例中,程序流控制单元16可以使用数据处理设备,所述程序流控制单元16处按照惯例递增程序计数器,并且使用程序计数器寻址指令,无需映射到目标指令。在这种情况下,在一个实施例中,数据处理设备包括用于在执行之前预处理所述程序的软件和/或硬件。执行预处理,使得不会进行指令序列的重排。由于避免了缓存未命中数,可以有效地进行这种预处理。不必立刻撤销对于整个程序的重排。相反地,可以在每一次处理器开始执行程序段之前,一次性地预处理各个程序段。作为另一个实施例,可以将跳转指令添加到程序中,以使得处理器能够根据指令的重排顺序跳转。可以对跳转指令目标加密,在这种情况下数据处理设备可以包括用于对所述目标解密的软件或硬件解密器。作为另一个示例,可以将跳转列表与程序分离地提供给数据处理设备,并且在执行期间由程序流控制单元16使用所述跳转列表。该列表上的条目可以规定跳转位置和跳转目标的组合集合。
程序转换
图2示出了程序转换的流程图。在将程序的指令存储到存储器10中用于执行之前使用程序转换。可以通过程序转换设备执行程序转换,例如对其编程以执行程序转换的计算机。在第一步骤21中,程序转换设备接收必须转换的指令的程序。在第二步骤22中,所述程序转换设备在程序中检测分支指令,并且对分支指令的位置和分支目标制表。
在第三步骤23中,程序转换设备将程序分成指令块。优选地,针对每一个分支目标定义所述块,在所述分支目标处的指令时开始所述块。可选地,可以形成在分支目标处不会开始的附加块。在实施例中,块可以包含不超过一个单独的指令。每一个块延伸到下一个块的开始。向所述块给出指数,例如按照程序中出现的顺序。在第四步骤24中,程序转换设备根据映射函数映射所述指数。在第五步骤25中,程序转换设备按照出现顺序在每一个块的末端向下一个块添加分支指令。在第六步骤26中,程序转换设备通过按照它们映射的指数顺序排列所述块来形成已转换的程序。在第七步骤27中,程序转换设备根据重新排列的块的地址替换程序的分支指令中的分支目标的定义。
可选地,可以是省略第五步骤25,或者通过向表示新块开始的程序添加信息的步骤来替换第五步骤,在这种情况下,执行所述程序的处理器必须提供关于地址的未命中数信息,例如通过在本地程序存储器中重构原始块序列、通过在块的末端添加分支、或者通过在执行期间主动使指令地址跳转生效,而无需明确的分支指令。
在实施例中,每一个块包含不超过一个指令。因此,在每一个指令之后发生指令地址跳转。
指令地址映射
优选地,所述映射函数具有这样的性质:有效地使用了指令存储器,所述指令存储器保存缓存效率,并且使得指令序列的重构困难。指令存储器的有效使用意味着不会留下太多的没有映射指令的未使用地址。缓存效率的保存意味着导致缓存未命中的指令地址改变的个数应该保持在缓存能够处理的范围内。使得指令序列重构困难意味着连续执行的指令的地址之间的地址步长的统计性质应该具有某种伪随机特性。因此例如,地址步长的频率分布不应该集中于单一的步长值,应该避免连续的步长值和频繁重复的图案之间的强相关。
这些不同的性质可能会矛盾。例如,使得指令序列的重构困难最好是通过使用整个地址空间的随机地址步长来最佳服务,而缓存效率依赖于可预测的寻址步长,优选地,依赖于单位步长。
图3示意性地示出了将困难的重构与缓存效率组合的映射。在第一列30中示出了映射之前的连续原始指令地址的位置,表示逻辑上连续的指令的序列。在第二列31中示出了通过将所述映射应用于原始指令地址获得的目标地址的本地性。如可以看出的,将来自指令地址的序列32的连续原始指令地址映射到目标地址的打乱次序的范围32a-d的有限集合。序列32是由第一列30表示的序列的子序列,在这种意义上在所述列中存在其他子序列。作为示例,包含16个指令的序列32可以用于映射到四个范围33a-d中的目标地址的原始指令地址。可以使用例如64个或256个指令或者不同个数指令的较大序列。可以将序列32外边的原始指令地址映射到其他范围集合中的目标地址。这可以基于具有相同序列大小的第一列30中的其他序列来实现,每一个都映射到不同的范围集合。典型地,序列32外的一部分原始指令地址映射到范围33a-d之间的目标地址。
在作为序列32中的连续原始指令地址的映射的目标指令之间存在地址步长。作为示例,已经表示出了几个地址步长34。如从图中可以看出的,所述地址步长可以是范围33a-d内或所述范围之间的步长。原始指令地址的序列定义了作为连续成对的原始指令地址映射的目标地址之间的地址步长的序列。在该地址步长序列中将不同类型的地址步长彼此互相混合。避免了高度可预测的序列。因此例如,如果将序列32的连续部分每一个均映射到范围33a-d的相应范围内,这将是高度可预测的。这将与包含第一范围33a范围内的地址步长的地址步长的序列相对应,然后是第二范围33b内的步长之后与第二范围33b相对应的步长,以此类推。通过使用包含在第一范围33a中的步长之间的范围33b-d以及因此第一范围33a中的步长之间的范围之间的步长之内的步长的地址步长的序列,实现了几乎不可预测的序列。
优选地,在有限的范围集合33a-d中的所有目标地址是来自序列32的原始指令地址的映射的意义下,序列32到范围的映射是一对一的,但是可以使用并不密集的映射,其中例如在有限的范围集合33a-d中的一半和全部目标地址之间是来自序列32的原始指令地址的映射。可以使用任意程度的填充。使用至少一半填充确保了至少50%效率的使用。优选地,使用至少90%的填充,并且甚至更优选地,使用100%的填充。当然,也可以存在没有填满的例外范围。只要将一个或更多指令的(子)序列映射到按照所述方式至少一半填充的范围,实现了某种程度上改进的本地性,即使其他子序列没有这么多的填充范围。优选地,按照这种方式映射程序的模糊部分中的指令序列的主要部分,并且更优选地并且只是例外的,按照这种方式没有映射小于10%的序列。
当将第一列30的原始指令地址分为与图中所示序列32类似的多个序列时,可以按照这种方式将每一个序列映射到不同的范围集合,组合起来的范围集合填满了所述地址空间,使得其他序列的目标地址的多个范围位于序列32的范围33a-d之间。因此,在范围内的地址步长之间的程序地址步长中,将出现其他范围中的地址步长。
在实施例中,选择作为序列32映射的所述范围集合33的个数和大小,使得范围33a-d的大小的总和小于缓存存储器大小。这确保了可以将具有序列32中的原始指令地址的所有指令一起保持在缓存中,减小了缓存未命中数。但是即使不是所有的指令都在缓存中,由于范围内的地址步长的使用改进了本地性,改善了缓存效率。可以将范围33a-d的不同范围保持在不同的缓存线中、或缓存线组中,而不需要在缓存中保持具有范围33a-d之间的目标地址的指令。因此,最小化了缓存未命中数。另一方面,序列32的映射不局限于一个连续的范围以及互相混合不同范围中的步长的事实使其可以实现指令的重新排序,使得指令序列的重构变得困难。
有限的范围集合33a-d的使用使其可以使用有限个数的地址步长大小,同时仍然使得指令序列的重构变得困难。在实施例中,例如只使用所述大小的正向或反向地址步长,将每一个范围内的地址步长的大小限制到一个指令长度。通过使用这种正向和反向地址步长之间的其他范围中的地址步长,可以确保对不同的指令进行寻址。因为相邻指令之间的地址步长可以是正向或反向的,序列的重构变得困难。因为使用单位地址步长,由于范围内的地址步长是本地的,从而改善了所使用的缓存效率。
在实施例中,每一对范围33a-d之间的地址步长的大小也限制为针对每一对的单独大小和/或可以将所述地址步长限制为范围33a-d内选定的对之间的步长。当然,如果使用所有对的范围之间的步长,针对不同对范围的大小可以不同,因为所述对的范围可以是不同的相互距离。如果定义了等距范围的序列,并且将地址步长限制为序列中相邻范围之间的步长,甚至可以进一步减小不同步长大小的个数。有限个数的步长大小的使用简化了映射,并且可以增加缓存效率。例如通过使用具有来自当前地址相同大小的地址步长处的目标地址的指令并行预处理,也可以促进预取和流水线操作。
形象化
可以通过多维空间中的点阵来形象化所述映射,所述点阵中的点代表目标地址。每一个范围33a-d由该阵列中沿第一维度的相应行来表示。在该形象化中,一个指令长度的目标地址步长与这种空间中沿第一维度的移动相对应。沿其他维度的移动与所述范围33a-d的不同范围之间的地址步长相对应。因此,可以将连续的指令地址值的映射值的序列形象化为沿n维空间中的路径。在另外的实施例中,每一个范围可以与所述阵列中的行的相应部分相对应,使得多于一个范围与所述阵列中的行相关联,或者范围可以与所述阵列中的多个行相对应。然而,为了解释,可以紧记行和范围之间的一对一对应性。
图3a示出了具有这种路径36的二维空间,用于限定映射函数。应该强调的是示出了具体的路径36只是为了说明路径的概念:在实践中,可以使用其他更复杂的路径。示出了具有坐标位置(x,y)的行和列的二维阵列的一部分,其中x和y具有整数值。每一行与范围33a-d的不同范围相对应,即y值是范围33a-d的标签,并且所述范围占据了范围占据了所述行的一部分。在该部分内沿x方向的步长与所述范围内的步长相对应,沿y方向的步长与范围33a-d之间的步长相对应。在一个示例中,每一个点(x,y)根据A=(b(y)+x)*L定义了目标地址A,其中L是指令长度,对于不同的y值表示,范围的基本地址由b(y)来表示。作为简单的示例,可以使用函数b(y)=A0+M*y,其中M是大于范围大小的整数,A0是常数。
示出了空间填充路径36的一部分。如所注意的,示出了路径36形状的具体选择仅仅是为了说明路径的概念。该空间填充路径36可以在所示空间的一部分之外继续。空间填充路径36沿阵列的各个点连续延伸,每次从相应点移动到其相邻的点,并且实际上只访问每一个点一次。所述路径沿所有维度蜿蜒,意义在于步长的频率沿各个维度不同,如果根本上不同,则不同之处在于(远远)小于所述阵列的行中的点的个数的因子,例如不超过因子2,并且对沿不同维度的步长互相混合。
因此,空间填充路径36定义了沿路径36的位置“s”对于二维坐标(x,y)的第一函数,(x,y)=(Fx(s),Fy(s))。可以将原始指令地址、或用指令长度除以原始指令地址与基本地址的差用作位置s。因此,目标地址是(b(Fy(s)+Fx(s))*L。如果使用指令索引数,s可以表示连续的指令索引数。
因为所述路径访问了阵列的所有点,使用空间填充路径36限定映射确保了存储器的有效使用,具有使用所述范围中的所有目标地址的效果。因为将具有与沿所示路径36的s值相对应的16个地址的序列32只映射到4行,即映射在四个范围中,缓存是高效的。这是最佳情况,最差情况下将其映射到7行。因为地址步长是不规则的,使得原始序列的重构变得困难:不同范围(行)出现的地址步长沿空间填充路径36彼此相互混合。范围内的地址步长与路径36中沿一行的水平步长相对应。这种水平步长可以向左或向右,与正向和反向地址步长相对应。如可以看出的,在这些步长之间发生了到其他行的步长或其他行内的步长。
在实施例中,使用正方形阵列,并且选择二维阵列的大小足够大,以提供具有超过需要替换的指令地址个数的长度的空间填充路径36的点。可选地,可以使用具有较小大小或不同形状的阵列。在小阵列的情况下,可以将必须转换的程序分为段,每一个段具有不超过所述路径中地址的地址,将转换分离地应用于各个段。
应该注意的是,用沿n维空间的路径36实现的并且映射到范围中的复合函数保留了受限制的本地性。至少当路径36沿行移动时(例如,沿x方向),保留了本地性。因为存在有限个数的行,只有有限个数的地址范围33a-d通常一起使用。此外,如果基本地址之间的距离b(y)不超过缓存的本地性距离,当路径36沿y方向移动时,也可以保留不会引起缓存未命中的本地性。因此,通过使用具有本地步长的空间填充路径36,将缓存本地性保留为远大于针对随机地址序列的程度。
例如,可以通过存储在查找表中的路径36中的点的外在规格来实现诸如路径36之类的空间填充路径,通过用于计算路径点的算法的递归定义,通过映射值的表或者通过这些方法的混合。作为示例,图中所示的具体路径36用简单的递归定义来实现。
伪随机路径
在实施例中,可以使用伪随机路径。在这种情况下,可以通过执行伪随机发生器算法来计算阵列中沿所述路径的连续点。优选地,使用基于密钥的伪随机算法,其中所产生的路径依赖于可以存储在处理器中、或则在程序产生期间使用的密钥,否则保持所述密钥为保密的。因为用于产生路径的伪随机算法可以是公知的,这样只要保持密钥是秘密的,就不会危及处理器的安全。在不同的集成电路中可以使用不同的密钥,或者在不同组的集成电路的每一个中可以使用不同的密钥。
如果所述路径不局限于阵列中的相邻点和分离的范围之间的步长,可以通过使用任意伪随机置换算法(置换算法是这样一种算法,将来自集合的地址A映射到地址f(A),使得不会将两个地址映射到相同的地址)来实现这种映射。许多伪随机置换算法实现本质上是已知的,例如线性反馈移位寄存器(LFSR)算法、Xn+1=A*X+B等等类型的线性迭代公式、等等。在这种情况下,LFSR的发生器多项式或值A、B和/或LFSR的初始状态可以保持为集成电路中的密钥信息。在实施例中,可以将伪随机置换算法与内部范围映射g(f(A))和范围选择映射h(f(A))相结合,所述内部范围映射从所置换的地址f(A)中得出内部范围地址,所述范围选择映射从所置换的地址f(A)中得出范围选择。通过映射到由范围选择映射h没有选择的其他范围使其彼此分离的范围集合,实现了更大的模糊性。该内部范围映射可以是简单的映射,例如通过从所置换的地址中选择比特集合获得。所述范围选择映射可以是类似地简单,例如获取所置换地址的其他比特并且通过任意合适的函数从这些比特计算范围选择,或者使用查找表确定所述范围选择。
这种算法可以通过映射电路164中的算法和/或逻辑电路与密钥存储器结合来实现,所述密钥存储器用于提供计算所需的密钥。可选地,可以预先执行地址的计算,并且可以将这些地址存储在映射电路164中的查找存储器中。在后一种情况下,可以代替地存储真随机映射。
通常,伪随机数列不会必然地导致与由n维阵列中的邻居之间的步长组成的路径36相对应的地址步长。在实施例中,所述路径局限于这种步长。这种类型的路径可以通过向密钥流/秘密映射提供针对每一个地址的n比特密钥信息来定义(n是阵列维度的个数),所述n比特表示路径在每一个点移动的方向。可以预先随机地或伪随机地选择则这种密钥流/秘密映射,限制是定义了没有返送的路径。如所述的,伪随机算法可以是依赖于(较小)密钥的基于密钥的。所得到的密钥流/秘密映射可以存储在集成电路的存储器中。当更新指令地址时,在处理器中找回针对所述地址的n比特,并且将所述n比特用于确定与下一个地址值的步长。
例如,n比特的每一个可以与由所述比特选择的各个步长部分相对应,以及所述地址中的步长可以是由所述n比特表示的选定步长部分的总和。这可以使用针对每一个指令地址(或指令地址组)存储n比特密钥部分的存储器来在映射电路164、查找电路和加法器中实现,并且用于通过(一部分)当前指令地址进行寻址,所述查找电路用于查找与所述n比特相对应的查找步长部分,并且所述加法器用于彼此添加步长部分、并且添加到当前指令地址,以计算下一个指令地址。
当使用n比特密钥部分时,例如,一个步长部分可以具有可选择值加减1,并且另一个步长可以具有可选择值加减地址范围对之间的距离。可选地,通过使用所述路径不会折叠的事实,可以减小每一个点的密钥比特个数。因此,在二维示例中,每一个指令地址只需要编码三个步长值,而不是四个。因此,例如可以使用5个比特对针对三个指令地址的步长值编码。
可以使用用于伪随机地定义n维空间中路径的任意其他类型算法。
通过沿根据跳转距离(跳转原点和跳转目标之间的距离)重复的路径计算和添加连续的步长,所述程序流控制单元可以执行跳转指令。如这里所使用的,所述跳转指令包括分支指令。跳转地址计算具有以下缺点:跳转可能迟延处理器。在可选实施例中,程序流控制单元包括跳转目标存储器,其中存储了跳转指令的目标地址。例如,可以当加载程序时计算跳转指令的目标地址。在该实施例中,当程序流控制单元遇到跳转指令时,程序流控制单元存取跳转目标存储器,并且用跳转目标代替当前指令地址。
在另一个实施例中,直接使用来自跳转指令的跳转信息,例如通过向当前指令地址添加来自所述跳转指令的跳转距离,或者用来自所述跳转指令的跳转地址代替当前指令地址。在该实施例中,可以由预处理器预先处理所述程序,以便根据处理器的密钥来代替跳转指令信息。在预处理期间,所述预处理器(可以是在任意可编程计算机上执行的预处理程序)检测预处理的程序中的跳转指令,计算根据所述处理器的密钥计算所检测的指令的跳转目标,并且所述预处理器根据所计算的跳转目标代替所述跳转指令中的跳转信息。
递归定义
如所注意到的,限定路径的另一种可能方法是通过递归定义。递归定义概念上使用“单元”,即空间的一部分(下文中将单元称作“方块”,tiles)。可以定义多个不同的单元类型。单元类型的定义限定了所述类型单元的形状,而没有规定其大小,并且定义了如何将所述类型的每一个单元细分为具有更小规模的各种类型的单元,可选地,细分为这些单元的旋转或镜像版本。通过重复地应用这种细分,可以将单元分等级地细分为更多的小单元。
在递归定义中,将路径划分为各个单元中的路径部分,进而将所述路径部分按照等级细分方式划分为更小单元中的更小路径部分。将确保空间中所有点的完整或近似完整的覆盖划分为逐渐更小规模的子问题。对于可以将针对单元内路径的入口点和出口点的单元位置的每一种类型,可以按照单元相对于其角落的边界处的位置来定义。这样定义单元的细分,使得其入口点和出口点与细分单元的入口点和出口点相对应,并且可选择地在颠倒了单元中路径方向之后内部出口点和连续单元的入口点一致。当所述空间包含点阵时,按等级划细分的单元包含逐渐更小的子阵列。对于某个最小尺寸的子阵列,可以明确的定义路径,所述路径覆盖所述子阵列中的所有点。因此,通过按等级划分,定义了整个路径。尽管已经按照单元形式给出了这种定义,应该理解的是对于相同路径的定义可以采取许多形式。作为一个示例,可以使用L系统语法。
例如,可以通过正方形形状的方块类型来定义图3a的空间填充路径36。最高级别的单元(方块)包含8*8点阵。将最高级别的单元细分为四个中等级别的单元,每一个中等级别的单元包含4*4子阵列。每一个中等级别的单元进而可以细分为4个低级别的方块,每一个低级别的方块可以包含2*2子阵列。可以通过旋转、镜像和/或颠倒相同基本路径的序列来互动偶尔每一个最低单元中的路径。
可以通过递归定义来产生路径的非限制性变体,对于最小单元通过使用不同形状的单元和/或不同的细分以及不同的明确定义的路径(可以是比图3a中示例更大的单元,例如,可以针对4*4单元或8*8单元清楚地定义路径)。明确定义的路径无需局限于具有沿x方向和y方向步长的路径:也可以使用对角线步长或对于更远邻居的步长。此外,不同的明确定义的路径可以用于相同点阵中不同位置处的相同类型的单元。尽管为了说明的目的已经针对二维路径给出了示例,应该理解的是可以使用更高维度空间中的路径。
可以通过留下路径暗示的查找运算和/或计算来将点阵中的坐标确定为沿所述路径的位置的函数。根据s,可以确定在分等级细分的各种单元中确定所述点。当将每一个单元分为2的幂(例如4)个更小单元、并且针对更小的单元定义了2的幂个点的路径,s的数字表示比特的连续组识别了所述点沿位置s处的路径所定位的单元,并且它们相对于较大单元的的位置和朝向(例如在图3a中,s的数字表示具有6个比特,最高有效两个比特确定了4*4单元,中间两个比特确定了所述4*4单元内的2*2单元,最低有效两个比特确定了所述单元内的位置)。更一般的,沿所述路径在位置s处的点所归属的最高级别单元的指数s(0)是根据s/N(1)的整数部分得出的,s除以下一个较低级别单元中的点N(1)的个数。所述点所归属的下一个较低级别单元的指数s(1)是根据余数的整除R(1)/N(1)得出的,即余数R(1)=s-N(1)*s(0)除以下一个较低级别单元中的点的个数,以此类推。如上所述,当N(i)是2的幂时,这总计区来自s的数字表示的比特组。每一个单元中级别“i”的点的个数N(i)可以由细分为较低级别单元的点的个数N(i+1)的总和来确定的。
可以在查找表电路中表示所述细分的定义,所述查找表电路存储针对细分的每一个单元(由c所标记的这些单元的指数)的信息P(c),表示单元的类型、相对于进行细分的较大单元的位置、相对于该较大单元的朝向以及其中单元中的路径相对于较大单元所遵循的方向(向后或向前)。可选地,P也可以依赖于所细分的单元的类型。可以使用该单元中的指数s(0)在查找表电路中获得针对最高级别单元的信息P(s(0))。可以将下一个m比特用于查找针对细分的下一个较低级别处的单元的类似信息P(s(a))。与表示相对于最高级别单元中细分时的前一个级别单元的位置、相对朝向和路径方向的信息Q(0)相结合,可以将该信息P’用于确定信息Q(1)=f(Q(0),P(s(1))),表示下一个较低级别处的单元相对于最高级别单元的位置、朝向和路径方向,对于由“i”表示的连续级别处的信息Q(i)以此类推。函数“f”表示偏移、旋转和路径方向的合成物,并且可以通过算法计算或通过查找(可以与P的查找相结合)来确定。因此,可以从指数s(i)获得阵列中的位置,例如s的数字表示的连续比特组。
可选地,递增计算可以用于沿所述路径的连续点。如可以理解的,每次当递增s时,只有最低级别指数s(i)(例如,来来自s的数字表示的比特组)改变。当对于较高级别“i”的指数没有改变时,对于这些较高级别的信息Q(i)也不会改变。在这种情况下,对于沿路径的位置s在阵列中的位置可以通过对于位置s-1更新前一个位置由最低级别信息P确定的偏移、或者通过将来自该最低级别的偏移添加至最低级别单元的基本点来更新。只需要对值s中的选定步长更新对于其他级别的信息Q(I’)。当发生这种步长时可以预先计算对于各种级别的未来值Q(i)来使用,或者当发证这种步长时计算所述未来值。
应该强调的是,对于指令地址的映射,路径只是作为形象化而是重要的。阵列中的点的一个坐标的一部分白哦是目标地址范围中的位置,并且其余部分和其余一个或更多坐标表示范围的选择,即所述范围的基本地址。原始指令地址A与沿所述路径的位置“s”相对应,例如根据s=A-A0,其中A0是基本地址。因此,所述查找信息P和函数f定义了范围选择和范围中位置作为原始指令地址A的函数。
保密性
当定义了所述映射的相关信息已知时,当然可以重构程序序列。为了防止这种情况,优选地,通过将所述信息包括在程序流控制单元中使得不能容易地读出所述信息,将所述信息保持为秘密的。为了改善秘密的保护,可以将不同的映射以及因此不同重新排序的程序用于不同的集成电路或集成电路组。
为了实现较大范围的可能映射,可以使用具有最低级别信息P的相对较大的单元,所述最低级别信息P定义了用于不同处理器的不同基本路径。在一个实施例中,可以将整个地址空间作为一个这种最低级别单元处理,使得有效地使用了无(多级别)递归定义。
按照图3a示例的形式,例如,可以使用8*8个点的最低级别单元(方块),具有定义了沿所述单元中的路径的连续位置的查找电路。处理器的查找电路中的信息使得能够执行已经重新排序的程序。
为了进一步改善秘密性,优选地,在相同映射的不同单元中使用不同的基本路径。这与使用大量不同类型的、具有可替换的不同基本路径的单元相对应,尽管这些单元可以具有相同的形状。可选地,这可以在多个级别的单元中进行。如果在将程序分布至处理器之前根据相应的映射重新排序了处理器的程序,在细分时替换单元类型的使用以及各种基本路径的定义二者可以在处理器内保持为秘密的。
按照这种方式,可以将所述程序划分为多个指令地址的序列,在秘密信息的控制下将所述指令地址映射到目标地址。可以将秘密信息的不同部分用于相应的序列,使得针对每一个序列的秘密信息只影响所述序列。按照这种方式,一个序列的指令重构使得不能重构其他序列。
用于递归映射的硬件修改
如上所述,使用空间填充路径的模糊可以用于转换所述程序,包括从块的末端向修改的地址添加分支指令。在这种情况下,可以使用如图1a所示的程序流控制单元。在可选实施例中,数据处理设备可以适用于执行地址映射的一部分。在这种情况下,程序转换可以重新排列一部分程序,而不会包括附加信息。在这种情况下,可以使用如图1a或1b所示的程序流控制单元。
在一个实施例中,根据利用根据L算法的递归定义获得的地址映射来重新排列指令。在该实施例中,程序流控制单元16可以具有堆栈结构,配置用于根据利用所述递归定义获得的地址映射来更新用于获得连续的指令的地址。
图4示出了程序流控制单元的实施例的示例,用于使用空间填充路径执行更新。所述程序流控制单元包括第一查找表电路(LUT电路40和第二查找表电路(LUT电路42),所述第一查找表电路定义了沿通过最小尺寸方块的路径的位置,以及所述第二查找表定义了在较大方块的细分时与连续方块有关的信息。另外,程序流控制单元16包括加法器43、地址寄存器44、路径计数器45、堆栈存储器16a、堆栈更新电路47、分支指令处理器48和多路复用器49。
地址寄存器44具有与加法器43的第一输入相连的输出。加法器43具有输出,所述输出形成程序流控制单元的指令地址输出,并且与地址寄存器44的输入相连。分支指令处理器48具有用于接收分支指令的输入和与路径计数器45相连的输出。
在操作时,在连续的指令周期将指令地址连续地存储在地址寄存器44中。分支指令处理器48检测从指令发布电路(未示出)接收的指令是否包括分支命令。如果没有检测到分支,加法器43通过增加来自第一LUT电路40的增量来计算指令地址。
堆栈存储器46具有与第二LUT电路42相连的输出。第二LUT电路42和路径计数器45具有与第一LUT电路40相连的输入。第一LUT电路40具有与加法器43的第二输入以及堆栈更新电路47相连的输出。第二LUT电路具有经由堆栈更新电路47与堆栈存储器46的输入相连的输出。
第一LUT电路40根据最小尺寸的方块中的空间填充路径来存储所述地址的递增值。第一LUT电路40也在方块中存储路径末端的指示。路径计数器45表示去往第一LUT电路40的路径中的位置,以及第二LUT电路42表示路径的类型和朝向。结果,第一LUT电路40向加法器43输出增量值,其中将所述增量值增加到来自地址寄存器44的地址值。
第二LUT电路42针对每一种类型的方块,在较大方块的细分时存储与连续方块的类型、相等朝向等有关的信息P。在实施例中,堆栈存储器46中的信息可以是数据(T、A、I)的组合,其中T表示方块的类型,A表示方块的朝向,以及I表示方块的细分中的指数。可以针对连续的较大方块存储这种组合。堆栈存储器46向第二LUT电路42输出与当前方块有关的信息。
在操作期间,在每一个指令周期中递增路径计数器45。一旦来自路径计数器45的计数达到与最小尺寸方块中的路径末端相对应的计数值,第一LUT电路40向堆栈更新电路47提供该指示。作为响应,堆栈更新电路47更新堆栈存储器46中的堆栈顶部处的方块。除非第二LUT电路42表示指数值与细分中的最终方块相对应,这可以通过在细分时递增所述指数I来实现。当递增所述指数时具有以下效果:第二LUT电路42向第一LUT电路40输出下一个方块的类型和朝向。
当所述指数值与细分时的最终方块相对应时,堆栈更新电路47递归地操作。将所述顶部级别处理作第一级别,并且将堆栈的顶部级别的下一个级别处理作第二较低级别。如果可能,堆栈更新电路47在该第二较低级别处的信息中递增所述指数,并且响应于该递增指数使用第二LUT电路42来选择第一级别处的信息,将第一级别处的指数设置为器原始值。如果第二较低级别处的指数也在范围的末端,将该操作应用为第二较低级别作为第一级别,以及将下一个较低级别作为第二较低级别,并且递归地以此类推。
当分支指令处理器48检测到从指令发布电路(未示出)接收的指令包括分支命令时,所述分支指令处理器计算路径计数器45和堆栈存储器46的相应内容,并且因此当执行所述分支指令时,代替路径计数器45和堆栈存储器46中的内容。可选地,当所述分支具有较小的分支距离时,分支指令处理器48可以使与该距离相对应的一系列技术脉冲应用于路径计数器45,同时禁用相应介入指令的执行。
为了减小执行分支所需的时间,分支指令可以包括表示所述分支之后的堆栈内容和路径计数值的参数。在应用这种替代方案实施例中,分支指令处理器48可以配置用于在分支指令的控制下,将来自分支指令的数据加载到路径计数器45和堆栈存储器46中。
应该理解的是,图4的电路具有以下效果:确定下一个指令地址所需要的时间可以依赖于是否到达各个级别处的方块末端或者是否执行分支指令来变化。如果发生这种情况,堆栈更新电路47可以配置用于发布迟延信号,以迟延数据处理电路的操作。
图5示出了程序流控制单元,包括计数器50、分支执行单元52、多个查找电路54和多个组合器电路56、58。计数器50具有针对连续计数比特组的时钟输入CL和输出,与相应的查找电路54相连。分支执行单元52接收用于计算分支目标的计数比特组(为了清楚起见,没有明确示出连接)。组合器电路56的第一个具有与用于最高有效比特组的查找电路54和用于与次高有效比特组的查找电路54的输出相连的输入。另一个组合器电路46、58每一个均与计数器的比特组相关联,并且具有与用于所述比特组的查找表电路54和与所述次高有效比特组相关联的组合器电路56的输出相连的输入。与所述最低有效比特组相关联的组合器电路56向指令发布电路(未示出)输出目标地址。
在操作时,计数器50求和。可选地,指令解码器(未示出)可以用于依赖于指令长度控制计数器的递增,但是如果所有指令具有相同大小或者这如它们按照相等的距离存储,这也不是必须的。不同的查找电路54和组合器电路56、58并行地针对不同级别处的单元执行目标地址计算。查找电路54有效地实现了信息P作为路径指数的函数,以及组合器电路56、58实现了合成函数f(Q,P)的应用。可选地,查找电路54和组合器电路56、58可以折叠到一个查找电路54和组合器电路56、58中,使用用于存储针对不同级别结果的寄存器来连续的执行相应的操作。这可能产生图4的结构。
图5a示出了所述电路的管线图,在组合器56、58之间以及针对最高有效比特组的查找电路54和第一组合器电路之间具有寄存器。在这种情况下,查找电路54、组合器电路56、58可以配置用于执行针对想爱一个比特组的未来值执行查找和组合,所述寄存器响应于所述比特组与所述未来值的迫切转换的检测,当检测到迫切的转换时将新的组合器结果复制到寄存器中。
可选地,图4和图5的程序流控制单元的查找电路可以是可熔丝编程的,或者包含非易失性存储器,以定义查找函数。因此,所述处理器可以配置由定义所述映射的秘密信息。
例如,在图5的程序流控制单元中,可以对针对最低有效比特组的查找电路54编程,以定义不同类型最低级别单元的多个替代基本路径部分。因此,可以通过更高级别查找电路54实现的单元类型选择在映射时将具有使用不同路径的效果。
类似地,用于更高有效比特组的查找电路54也可以是可编程的,使得可以在不同的处理器中使用细分到单元的不同细分,以定义不同的映射。这使得更加难以重构程序。
可选地或者附加地,通过沿不同装置中的路径使用不同的起始点,可以在一个族中实现不同的装置。这可以在程序流控制单元46(例如ROM)中添加表示对于路径计数器45和堆栈存储器46中的计数的初始值的电路、使得程序流控制单元16在开始执行程序之前加载这些初始值来实现。
其他硬件修改
已经将图4和图5用于说明其中映射了所有指令的地址的实施例。作为替代实施例,可以只映射分支目标。在这种情况下,每一个分支指令可以包括目标个数。分支指令处理器48执行将该个数转换为地址的计算,如在图4的上下文中针对分支所描述的。作为另一个实施例,可以将映射只用于一部分指令地址,其余的不进行映射的来使用。在实施例中,只映射比特组(例如,16个比特),无需映射的使用程序计数器的更高有效比特。这使得可以利用有效量的电路来映射较大的地址空间,将仍然可以模糊本地程序结构。例如,可以将最低有效的n比特进行映射以使得程序极度难解,或者可以对两个有效级别之间的比特进行映射,使得将缓存本地性保留用于更低的有效比特。
可以将另外的措施用于更进一步的模糊所述程序。因此,可以在分布之前对指令进行加密,并且在执行之前在指令发布电路中进行解密。
根据对于附图、公开和所附权利要求的研究,本领域普通技术人员在实现所要求权利要求的本发明时可以理解和实现所公开实施例的变体。在权利要求中,词语“包括”不排除存在其他元件和步骤,并且不定冠词“a”或“an”不排除多个。单一的处理器或其他但愿可以满足在权利要求中引用的几个条目的功能。在相互不同的从属权利要求中引用的特定措施并不表示不能有利地使用这些措施的组合。可以将计算机程序存储/分布在合适的介质上,例如光学存储介质或与其他硬件一起或作为其他硬件一部分的固态介质,但是也可以按照其他形式分布,例如经由英特网或者其他有线或无限电信系统。权利要求中的任意参考符号不应该解释为限制范围。
Claims (26)
1.一种转换可编程处理器的程序指令的方法,所述方法包括重新排序所述指令的序列,从而将原始指令地址映射到相应的目标地址,所述序列(30)包括连续的子序列,所述方法包括:
将所述序列的每一个子序列(32)映射到相互打乱顺序的范围(33a-d)的相应集合中的地址,通过与所述子序列所映射的其他范围与所述相互打乱顺序的范围相分离;
用来自所述子序列(32)的指令填充所述相互打乱顺序的范围的相应集合中的每一个打乱顺序范围(33a-d)的至少一半;
提供针对每一个子序列(30)所映射的原始指令地址的连续地址的目标地址之间的地址步长(34),用于所述子序列的所述地址步长(34)包括所述相互打乱顺序范围(33a-d)的至少第一范围内的第一地址步长以及所述相互打乱顺序范围(33a-d)的至少第二范围内的第二地址步长。
2.根据权利要求1所述的方法,其中原始指令地址与目标地址的映射与将连续的原始指令地址映射到沿n维阵列中的路径(36)的连续位置相对应,其中n大于1,以及与将沿所述阵列的相应行、行组或行部分的位置映射到相互打乱顺序的范围(33a-d)的相应一个相对应,所述路径(36)包括阵列中相邻位置之间的步长,所述路径访问所述阵列的每一行的至少一半的点。
3.根据权利要求1所述的方法,包括在可编程计算机上执行已转换的程序,所述可编程计算机包括用于缓存指令的缓存存储器(120),所述缓存存储器(120)具有大于或等于相互打乱顺序的范围(33a-d)的大小之和的大小。
4.根据权利要求3所述的方法,包括缓存控制器(122),配置用于基于指令组来管理所述缓存存储器中指令的保持,每一组具有相同的组大小,相互打乱顺序的范围(33a-d)的大小至多等于所述组大小。
5.根据权利要求1所述的方法,其中对于两个范围(33a-d)的每一种组合,所述组合的范围(33a-d)之间的地址步长(34)具有与所述组合的范围(33a-d)之间的所有步长(34)相同的大小。
6.根据权利要求1所述的方法,其中所述范围(33a-d)内的地址步长都具有相同的大小。
7.根据权利要求1所述的方法,其中一对范围(33a-d)之间的所有地址步长将通过所述对中的第一范围(33a-d)内的地址步长相连的目标地址与通过所述对中的第二范围(33a-d)内的地址步长相连的目标地址相连接。
8.根据权利要求1所述的方法,其中利用相等的频率产生相反符号的地址步长。
9.根据权利要求1所述的方法,包括用跳转目的地的目标地址或与所述目标地址的距离来替代程序的跳转指令中的分支跳转目的地或跳转距离信息。
10.根据权利要求1所述的方法,包括:在包括程序流控制单元(16)的可编程计算机上执行已转换的程序,所述程序流控制单元配置用于确定连续原始指令地址的目标地址,并且配置用于使用所述目标地址对连续寻址的指令进行寻址。
11.根据权利要求8所述的方法,其中所述程序流控制单元(16)包括查找存储器(164),所述程序流控制单元(16)使用从查找存储器(164)查找的相应信息确定对于相应指令的目标地址。
12.根据权利要求8所述的方法,包括提供具有相同结构的处理电路族,但是所述处理电路族配置用于根据相互不同的映射来确定连续原始指令的目标地址,以及针对所述族的不同处理电路而不同地转换所述程序。
13.根据权利要求8所述的方法,其中所述程序流控制单元(16)包括分支目标查找存储器,针对相应的跳转指令存储跳转指令的目标地址和/或与跳转指令的目标地址的跳转距离,所述程序流控制单元配置用于检测跳转指令,配置用于响应于所述跳转指令,从所述分支目标查找存储器中找回跳转指令的目标地址和/或跳转距离,并且配置用于根据所找回的跳转指令的目标地址和/或跳转距离改变程序流。
14.根据权利要求1所述的方法,其中基于具有连续级别单元的等级来计算所述目标地址,每一个单元与相应的范围集合相对应,连续较低级别处的单元与作为较高级别处的单元集合子集的范围子集相对应,所述等级中的单元与指数相关联,所述方法包括:
提供细分信息,所述细分信息定义了范围集合作为所述指数值的函数;
提供路径信息,所述路径信息定义了相应的目标地址,在最低级别单元的范围集合内将所述指数的相应值映射到所述目标地址;
针对所述原始指令地址的至少一个,得出所述指数值的集合;
使用所述指数值的集合来存取所述细分信息,以对所述细分信息进行索引;
对来自不同级别的已存取细分信息进行组合,以定义对于所述至少一个原始指令地址的最低级别单元的范围集合;
使用所述指数值的集合来存取所述路径信息,以对所述路径信息进行索引;
使用所存取的路径信息,在通过组合所存取的细分信息所定义的范围集合内选择针对所述至少一个原始指令地址的目标地址。
15.根据权利要求14所述的方法,包括:
提供在所述路径信息中所包括的选项,所述选项定义了在相应的目标地址与所述指数值之间的多个相互明确的可替代关系;
对分别针对相互不同的原始指令地址而获得的相应已存取细分信息进行组合;
使用已组合的已存取细分信息控制所述选项的相应不同一选项的选择,用于确定针对原始指令地址的相互不同地址的目标地址。
16.根据权利要求14所述的方法,包括提供处理电路族,每一个处理电路包括程序流控制电路,所述程序流控制电路包括细分信息和路径信息,所述族的不同处理电路包括相互不同的路径信息。
17.一种计算机产品,包括指令程序,当可编程计算机执行所述指令程序时,使得所述可编程计算机执行根据任一前述权利要求所述的方法。
18.一种数据处理设备,包括可编程处理器,所述可编程处理器包括:
功能单元(14),用于执行来自存储器(10)的指令;
地址输出,用于向所述存储器(10)提供指令的目标地址;
程序流控制单元(16),配置用于确定用于提供给所述地址输出的目标地址,所述程序流控制单元(16)配置用于在所述程序中的逻辑上连续的位置处引入依赖于指令的目标地址之间的大小和/或方向的位置地址步长,
其中所述程序流控制单元(16)配置用于利用针对连续的原始指令地址确定的目标地址之间的连续地址步长(34),确定针对连续原始指令地址的相应目标地址集合,所述相应的目标地址集合位于多个非重叠地址范围(33a-d)中,所述相应目标地址集合用多个指令填充所述相互不重叠范围(33a-d)的每一个的至少一半,所述连续的地址步长(34)包括所述相互不重叠范围(33a-d)的至少第一范围内的第一地址步长和至少第二范围内的第二地址步长。
19.根据权利要求17所述的数据处理设备,其中原始指令地址与目标地址之间的关系与将连续的原始指令地址映射到沿n维阵列的中的点的路径(36)中的连续位置相对应,其中n大于1,以及与将沿所述阵列的相应行、行组或行部分的位置映射到相互不重叠的范围(33a-d)的相应范围相对应,所述路径包括阵列中相邻位置之间的步长,访问所述阵列的每一行的至少一半的点。
20.根据权利要求18所述的数据处理设备,其中所述程序流控制单元(16)包括用于表现可编程秘密信息的电路,所述程序流控制单元配置用于依赖于所述秘密信息来选择地址步长。
21.根据权利要求20所述的数据处理设备,其中所述连续原始指令地址的序列(32)是超级序列(30)的适当子集,所述超级序列还包括在所述秘密信息的控制下映射到目标地址的指令地址的另外序列,至少所述相互不重叠范围内的映射由不影响所述另外序列的映射的一部分秘密信息来控制。
22.根据权利要求18所述的数据处理设备,其中所述指令的序列(32)是超级序列(30)的适当子集,所述超级序列(30)还包括映射到另外地址范围中的目标地址的指令地址的另外序列,所述非重叠地址范围(33a-d)通过所述另外的地址范围相互分离。
23.根据权利要求18所述的数据处理设备,其中所述程序流控制单元(16)配置用于确定连续的原始指令地址的目标地址,并且配置用于使用所述目标地址对连续寻址的指令进行寻址。
24.根据权利要求23所述的数据处理设备,其中所述程序流控制单元(16)包括查找存储器(161、164),所述程序流控制单元(16)配置用于使用从所述查找存储器(161、164)查找的相应信息来确定针对每一个相应指令的目标地址。
25.根据权利要求18所述的数据处理设备,配置用于基于连续级别单元的等级来确定目标地址,每一个单元与相应的范围集合相对应,连续较低级别中的单元与作为较高级别处的单元集合子集的范围子集相对应,所述等级中的单元与指数相关联,所述设备包括:
程序计数器;
查找电路,提供细分信息和路径信息,所述细分信息定义了所述范围集合作为所述指数值的函数,所述路径信息定义了在最低级别单元的范围集合内将相应指数值所映射的相应目标地址,所述查找电路具有与所述程序计数器相连的输入,用于接收指数值;
组合电路,配置用于对在程序计数器的控制下已经存取的不同级别的细分信息进行组合,以定义针对至少一个所述原始指令地址的最低级别单元的范围集合,并且配置用于组合所存取的路径信息,以用于通过组合所存取的细分信息而限定的范围结合内,针对所述至少一个原始指令地址选择目标地址。
26.根据权利要求25所述的数据处理设备,其中所述查找电路配置用于提供针对路径信息的选项,所述选项定义了在相应的目标地址和指数值之间的多个相互明确可替代的关系,
所述组合电路配置用于对针对相互不同的原始指令地址获得的相应已存取细分信息进行组合,并且配置用于使用已组合的相应已存取细分信息来控制所述不同选项的选择,用于针对相互不同的原始指令地址确定目标地址。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
EP08101486.2 | 2008-02-11 | ||
EP08101486 | 2008-02-11 | ||
PCT/IB2009/050504 WO2009101562A2 (en) | 2008-02-11 | 2009-02-09 | Method of program obfuscation and processing device for executing obfuscated programs |
Publications (1)
Publication Number | Publication Date |
---|---|
CN101939749A true CN101939749A (zh) | 2011-01-05 |
Family
ID=40852259
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN200980104710.6A Pending CN101939749A (zh) | 2008-02-11 | 2009-02-09 | 程序模糊方法和用于执行模糊程序的处理设备 |
Country Status (4)
Country | Link |
---|---|
US (1) | US8621187B2 (zh) |
EP (1) | EP2243098A2 (zh) |
CN (1) | CN101939749A (zh) |
WO (1) | WO2009101562A2 (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105354009A (zh) * | 2015-10-14 | 2016-02-24 | 北京深思数盾科技有限公司 | 一种用于固件的保护方法 |
CN106529225A (zh) * | 2016-10-27 | 2017-03-22 | 努比亚技术有限公司 | 一种应用程序源代码保护装置及方法 |
CN108139975A (zh) * | 2015-05-19 | 2018-06-08 | 线性代数技术有限公司 | 用于用分割索引对高速缓存进行寻址的系统和方法 |
CN110287153A (zh) * | 2019-06-29 | 2019-09-27 | 潍柴动力股份有限公司 | 一种a2l标定量地址范围冲突的检测方法及装置 |
CN116343889A (zh) * | 2023-03-03 | 2023-06-27 | 合肥悦芯半导体科技有限公司 | 一种存储芯片置乱测试方法、装置、设备及存储介质 |
Families Citing this family (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8856500B2 (en) | 2008-02-06 | 2014-10-07 | Nxp B.V. | Obfuscating program by scattering sequential instructions into memory regions such that jumps occur with steps of both signs in equal frequency |
EP2290547B1 (en) * | 2009-08-26 | 2012-12-19 | Nxp B.V. | Method of obfuscating a code |
EP2689376B1 (en) * | 2011-03-24 | 2020-12-23 | Irdeto B.V. | System and method providing dependency networks throughout applications for attack resistance |
US8756435B2 (en) | 2012-03-02 | 2014-06-17 | Apple Inc. | Obfuscation of control flow of software |
WO2015016865A1 (en) * | 2013-07-31 | 2015-02-05 | Hewlett-Packard Development Company, L.P. | Generating a second code from a first code |
US20150134916A1 (en) * | 2013-11-12 | 2015-05-14 | Nvidia Corporation | Cache filter |
WO2017151602A1 (en) * | 2016-02-29 | 2017-09-08 | Craxel, Inc. | Efficient encrypted data management system and method |
GB2562520A (en) * | 2017-05-17 | 2018-11-21 | John Hamlin Derrick | Digital processing connectivity |
US10706746B2 (en) * | 2018-06-01 | 2020-07-07 | Polyverse Corporation | Pure binary scrambling |
CN113190237B (zh) * | 2021-05-10 | 2024-01-19 | 北京百度网讯科技有限公司 | 数据处理方法、系统和装置 |
Family Cites Families (28)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4679141A (en) * | 1985-04-29 | 1987-07-07 | International Business Machines Corporation | Pageable branch history table |
US4926323A (en) * | 1988-03-03 | 1990-05-15 | Advanced Micro Devices, Inc. | Streamlined instruction processor |
US5136697A (en) * | 1989-06-06 | 1992-08-04 | Advanced Micro Devices, Inc. | System for reducing delay for execution subsequent to correctly predicted branch instruction using fetch information stored with each block of instructions in cache |
US5559884A (en) | 1994-06-30 | 1996-09-24 | Microsoft Corporation | Method and system for generating and auditing a signature for a computer program |
WO2000077596A1 (en) | 1999-06-09 | 2000-12-21 | Cloakware Corporation | Tamper resistant software encoding |
US6594761B1 (en) | 1999-06-09 | 2003-07-15 | Cloakware Corporation | Tamper resistant software encoding |
US7430670B1 (en) * | 1999-07-29 | 2008-09-30 | Intertrust Technologies Corp. | Software self-defense systems and methods |
US6779114B1 (en) | 1999-08-19 | 2004-08-17 | Cloakware Corporation | Tamper resistant software-control flow encoding |
CA2305078A1 (en) | 2000-04-12 | 2001-10-12 | Cloakware Corporation | Tamper resistant software - mass data encoding |
US20060248311A1 (en) * | 2000-05-15 | 2006-11-02 | Jennings Earle W | Method and apparatus of dsp resource allocation and use |
CA2327911A1 (en) | 2000-12-08 | 2002-06-08 | Cloakware Corporation | Obscuring functions in computer software |
CA2348355A1 (en) | 2001-05-24 | 2002-11-24 | Cloakware Corporation | General scheme of using encodings in computations |
CA2350029A1 (en) | 2001-06-08 | 2002-12-08 | Cloakware Corporation | Sustainable digital watermarking via tamper-resistant software |
WO2003003169A2 (en) | 2001-06-28 | 2003-01-09 | Cloakware Corporation | Secure method and system for biometric verification |
US7065656B2 (en) | 2001-07-03 | 2006-06-20 | Hewlett-Packard Development Company, L.P. | Tamper-evident/tamper-resistant electronic components |
CA2354470A1 (en) | 2001-07-30 | 2003-01-30 | Cloakware Corporation | Active content for secure digital media |
CA2363795A1 (en) | 2001-11-26 | 2003-05-26 | Cloakware Corporation | Computer system protection by communication diversity |
CA2369304A1 (en) | 2002-01-30 | 2003-07-30 | Cloakware Corporation | A protocol to hide cryptographic private keys |
US7124445B2 (en) | 2002-06-21 | 2006-10-17 | Pace Anti-Piracy, Inc. | Protecting software from unauthorized use by converting source code modules to byte codes |
US7188241B2 (en) | 2002-10-16 | 2007-03-06 | Pace Antipiracy | Protecting software from unauthorized use by applying machine-dependent modifications to code modules |
US7070252B2 (en) | 2003-08-20 | 2006-07-04 | Xerox Corporation | System and method for digital watermarking in a calibrated printing path |
US20050069138A1 (en) * | 2003-09-25 | 2005-03-31 | Sun Microsystems, Inc., A Delaware Corporation | Application program obfuscation |
US7966499B2 (en) | 2004-01-28 | 2011-06-21 | Irdeto Canada Corporation | System and method for obscuring bit-wise and two's complement integer computations in software |
US8694802B2 (en) | 2004-04-30 | 2014-04-08 | Apple Inc. | System and method for creating tamper-resistant code |
US7631360B2 (en) | 2004-06-12 | 2009-12-08 | Microsoft Corporation | Hardware protection |
US7620987B2 (en) | 2005-08-12 | 2009-11-17 | Microsoft Corporation | Obfuscating computer code to prevent an attack |
WO2007091558A1 (ja) * | 2006-02-06 | 2007-08-16 | Matsushita Electric Industrial Co., Ltd. | プログラム難読化装置 |
US8856500B2 (en) * | 2008-02-06 | 2014-10-07 | Nxp B.V. | Obfuscating program by scattering sequential instructions into memory regions such that jumps occur with steps of both signs in equal frequency |
-
2009
- 2009-02-09 EP EP09711184A patent/EP2243098A2/en not_active Withdrawn
- 2009-02-09 WO PCT/IB2009/050504 patent/WO2009101562A2/en active Application Filing
- 2009-02-09 US US12/866,866 patent/US8621187B2/en not_active Expired - Fee Related
- 2009-02-09 CN CN200980104710.6A patent/CN101939749A/zh active Pending
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108139975A (zh) * | 2015-05-19 | 2018-06-08 | 线性代数技术有限公司 | 用于用分割索引对高速缓存进行寻址的系统和方法 |
CN105354009A (zh) * | 2015-10-14 | 2016-02-24 | 北京深思数盾科技有限公司 | 一种用于固件的保护方法 |
CN106529225A (zh) * | 2016-10-27 | 2017-03-22 | 努比亚技术有限公司 | 一种应用程序源代码保护装置及方法 |
CN110287153A (zh) * | 2019-06-29 | 2019-09-27 | 潍柴动力股份有限公司 | 一种a2l标定量地址范围冲突的检测方法及装置 |
CN110287153B (zh) * | 2019-06-29 | 2021-05-18 | 潍柴动力股份有限公司 | 一种a2l标定量地址范围冲突的检测方法及装置 |
CN116343889A (zh) * | 2023-03-03 | 2023-06-27 | 合肥悦芯半导体科技有限公司 | 一种存储芯片置乱测试方法、装置、设备及存储介质 |
CN116343889B (zh) * | 2023-03-03 | 2024-03-29 | 悦芯科技股份有限公司 | 一种存储芯片置乱测试方法、装置、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
WO2009101562A3 (en) | 2009-10-08 |
WO2009101562A2 (en) | 2009-08-20 |
EP2243098A2 (en) | 2010-10-27 |
US8621187B2 (en) | 2013-12-31 |
US20100332759A1 (en) | 2010-12-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101939749A (zh) | 程序模糊方法和用于执行模糊程序的处理设备 | |
ES2954562T3 (es) | Aprendizaje máquina acelerado por hardware | |
US9240237B2 (en) | Semiconductor device and method of writing/reading entry address into/from semiconductor device | |
US8935539B2 (en) | System and method for revising boolean and arithmetic operations | |
CN101939724B (zh) | 数据处理设备及用于执行混淆程序的方法 | |
CN103168289A (zh) | 转置运算装置及其集成电路、以及转置处理方法 | |
CN103999035A (zh) | 用于状态机中的数据分析的方法及系统 | |
CN101925877A (zh) | 对数据执行排列运算的装置与方法 | |
CN101432710A (zh) | 改进的可置换地址的处理器及方法 | |
US10185699B2 (en) | Reconfigurable data interface unit for compute systems | |
US11705207B2 (en) | Processor in non-volatile storage memory | |
CN109765856A (zh) | 安全逻辑系统及操作安全逻辑系统的方法 | |
CN109416655A (zh) | 陈氏框架、陈氏译码和陈氏代码 | |
CN106464484B (zh) | 预定函数的混淆执行 | |
US6694407B1 (en) | Cache memory with data transfer control and method of operating same | |
Kooli et al. | Towards a truly integrated vector processing unit for memory-bound applications based on a cost-competitive computational SRAM design solution | |
Farzaneh et al. | C4CAM: A Compiler for CAM-based In-memory Accelerators | |
US20150046416A1 (en) | Method for writing and reading data | |
Al-Haj Baddar | Finding better sorting networks | |
CN101783924B (zh) | 基于fpga平台和演化硬件的图像加解密系统及其方法 | |
US11526279B2 (en) | Technologies for performing column architecture-aware scrambling | |
CN117353923B (zh) | 轻量级哈希加密算法的演练方法及相关设备 | |
Zhang et al. | Building a faster Boolean matcher using Bloom Filter | |
Chowdhury | Non-volatile In-memory Computing for Large Scale Data-Intensive Workloads: Challenges and Opportunities | |
Kuzmenko | Query Automata Minimization |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20110105 |