CN101939724A - 数据处理设备及用于执行混淆程序的方法 - Google Patents

数据处理设备及用于执行混淆程序的方法 Download PDF

Info

Publication number
CN101939724A
CN101939724A CN2009801041468A CN200980104146A CN101939724A CN 101939724 A CN101939724 A CN 101939724A CN 2009801041468 A CN2009801041468 A CN 2009801041468A CN 200980104146 A CN200980104146 A CN 200980104146A CN 101939724 A CN101939724 A CN 101939724A
Authority
CN
China
Prior art keywords
address
instruction
scope
path
program
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.)
Granted
Application number
CN2009801041468A
Other languages
English (en)
Other versions
CN101939724B (zh
Inventor
梅尔·沃克莱尔
彼得·J·汉森斯
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Koninklijke Philips NV
Original Assignee
Koninklijke Philips Electronics NV
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Koninklijke Philips Electronics NV filed Critical Koninklijke Philips Electronics NV
Publication of CN101939724A publication Critical patent/CN101939724A/zh
Application granted granted Critical
Publication of CN101939724B publication Critical patent/CN101939724B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/12Protecting executable software
    • G06F21/14Protecting executable software against software analysis or reverse engineering, e.g. by obfuscation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/322Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/322Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
    • G06F9/323Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address for indirect branch instructions

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Technology Law (AREA)
  • Computer Hardware Design (AREA)
  • Computer Security & Cryptography (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

通过对程序的指令重排序来混淆该程序。利用逻辑上连续指令的地址之间的位置相关地址步长,以不规则的方式将原始指令地址映射到目标地址。优选地,使用伪随机地址步长,例如,以相同频率利用彼此符号相反的地址步长。数据处理设备具有指令流控制单元,该指令流控制单元根据位置相关地址步长来更新指令地址。指令流控制单元可以包括包含秘密信息的电路,不能正常地从外部访问该信息来控制更新。例如,查找表可以与地址步长、连续地址或映射的地址值一同使用。在实施例中,可以通过沿着n维阵列中的点的路径(36)来可视化原始指令地址到目标地址的映射,其中n大于1。将连续原始指令地址映射到路径中的连续位置,并且将沿着阵列的相应行的位置映射到相应的彼此不相交的范围(33a-d)。由于使用n维路径,保持了提供高速缓存效率的局部性,而路径的多维特性使得能够将这种局部性与伪随机步长相组合。

Description

数据处理设备及用于执行混淆程序的方法
技术领域
本发明涉及一种包括可编程处理器的数据处理设备,以及一种转换用于可编程处理器的指令程序的方法。
背景技术
代码混淆(obfuscation)是用于转换针对计算机的指令程序的技术的一般名称,这种转换采用模糊指令程序内容的方式。代码混淆可以应用于使得很难识别程序的相关部分,该相关部分是在未许可类型的计算机上或者在没有保护措施的情况下执行程序所必需的。
美国专利No.6,779,114描述了一种代码混淆技术,该技术涉及程序的模糊控制流。将分支指令添加至指令块,以使得模糊指令块的预期执行顺序。美国专利No.5,559,884描述了对程序的基本块的伪随机重排序,以创建可以用于识别源的标签,通过该源来分布程序。
在这样的技术中,存在可以恢复原始程序的风险。一般地,处理器的实际程序流(即,处理器解释程序代码的方式)是公知的。因此,可以使用与目标处理器上的知识相组合的静态和动态分析技术,来研究混淆后的程序。此外,混淆可以使性能劣化。例如,混淆后的程序可以使高速缓存的效率低下。
发明内容
本发明的目的是提供了一种支持程序执行的数据处理设备,该程序以混淆的方式存储在存储器中。
提供了一种根据权利要求1所述的处理设备。因此,将程序中逻辑上连续位置的指令的存储地址进行序列改变,,即,可以按照逻辑上连续位置的顺序以临时顺序执行指令,以便正确执行程序。不执行来自于直接由传统递增产生的地址的指令,传统递增是以固定值或者在指令的大小不是常量的情况下用该大小对程序计数器进行递增,而是程序流控制单元在逻辑上连续指令的地址之间引入了可变位置相关目标地址步长,该步长与指令的大小不相对应。在执行之前,可以根据这些地址步长来对指令的顺序进行序列改变,使得正常执行程序。
在实施例中,程序流控制单元包括用于表示对程序流加以控制的可编程秘密信息的电路。如这里所使用的,“秘密”意味着正常操作下在处理设备外部不可访问该信息。用于表示可编程秘密信息的电路可以包括例如程序流控制单元可访问的查找存储器。程序计数器可以用于对查找存储器进行寻址,以获取对程序计数器的更新,除了在执行跳转指令的指令周期中以外。在后一种情况下,不同的跳转控制电路可以用于提供更新。
附图说明
使用以下附图,根据示例实施例的描述这些和其他目的以及优点方面将变得显而易见。
图1示出了数据处理设备;
图1a-d示出了程序流控制单元;
图2示出了程序转换的流程图;
图3示出了地址映射;
图3a示出了空间填充路径以可视化地址映射;
图4示出了程序流控制单元;
图5、5a示出了程序流控制单元。
具体实施方式
基本数据处理设备
图1示出了数据处理设备,例如,集成电路。除了程序流控制单元16以外,处理设备具有传统体系结构,包括:存储器10、指令发出电路12、以及多个功能单元14、16,功能单元14、16包括程序流控制单元16。指令发出电路12具有分别耦合至存储器10的地址输入和数据输出的地址输出和指令输入。指令发出电路12具有耦合至功能单元14、16的指令输出。程序流控制单元16具有耦合至指令发出电路12的地址输出。
程序流控制单元16被配置为确保程序的正确执行,该程序的指令序列已经被重排序,以便混淆程序内容。在实施例中,使用使指令高速缓存的效率的降低最小化的重排序。
图1a示出了程序流控制单元16的第一实施例。在该实施例中,程序流控制单元16包括程序计数器160和分支执行电路162。程序计数器16具有耦合至指令发出电路(未示出)的输出。分支执行电路162具有耦合至指令发出电路(未示出)以接收分支命令的输入,以及耦合至程序计数器160的输出和输入。在操作中,程序计数器160在时钟CL所指示的连续指令周期中进行计数。可选地,在没有以恒定间隔存储指令的情况下,计数器的递增可以由从指令解码器(未示出)接收到的指令长度码来控制。计数值作为提供给指令发出电路的指令的地址。在指令周期中,其中分支执行电路162已接收到分支命令并已确定必须采用该分支命令,典型地,分支执行电路162根据将分支间隔与程序计数器值相加,或者从程序计数器值中减去分支间隔来改写程序计数器值。
图1b示出了程序流控制单元16的实施例,程序流控制单元16还包括映射电路164。程序计数器160使其输出通过映射电路164耦合至指令发出电路(未示出)。在操作中,可选地,程序计数器160在连续指令周期中以受指令长度控制的递增方式进行计数。映射电路164将计数值映射到目标地址,并将计数值提供给指令发布电路。可以将映射电路164实现为查找表电路,例如,在计数值可寻址的位置处存储了目标地址的查找存储器。例如可以使用被随机分配给相应计数值的目标地址集合。作为针对查找电路或者与这种查找电路相组合的备选方案,运算电路可以用于计算地址,或者特殊设计的逻辑电路可以用于计算地址。这样的电路可以被配置为将每个计数值映射到目标地址集合中的相应的、伪随机选择的一个。在实施例中,逻辑上连续指令之间的地址步长的符号可以具有伪随机概率,即,沿一个方向的地址步长与沿另一方向的步长常常相同。因此,即使仅使用有限数目的步长大小,步长的符号也可以是随机的。同样,连续步长的联合概率也可以是随机的,因此,沿一个方向的步长之后常常使用沿另一方向的步长就好像是在相同方向的步长。
备选地,可以使用其他映射。在指令周期中,其中,分支执行电路162已接收到分支命令并已确定必须采用该分支命令。典型地,分支执行电路162根据将分支间隔与程序计数器值相加,或者从程序计数器值中减去分支间隔来改写程序计数器值。
图1c示出了程序流控制单元16的备选实施例,程序流控制单元16用于被连续映射的指令地址的块。该实施例包括耦合在映射电路164与指令存储器(未示出)之间的附加目标程序计数器166,以及更新选择器168。更新选择器168控制程序计数器160何时递增,以及根据映射电路164递增还是更新目标程序计数器166。在操作中,程序计数器160在每个块的开始处递增,并且目标程序计数器166在块的开始处拷贝程序计数器160的映射后的程序计数器值。例如,可以通过包括在程序中的信息,或者通过在执行特定类型的指令时自动开始新块,来控制块的开始。
图1d示出了具有更新单元161的程序流控制单元16的实施例。更新单元16在不执行跳转时控制指令地址的更新。在实施例中,更新单元被配置为向程序计数器160输出地址步长,并且程序计数器160将地址步长与程序计数器值相加。更新单元161根据程序计数器值来选择地址步长,以下对步长值进行描述。例如可以使用伪随机步长。在实施例中,更新单元161包括查找存储器,以查找针对相应程序计数器值的步长。备选地,可以使用被设计为产生地址步长的逻辑电路。在另一实施例中,更新单元输出根据先前程序计数器值而确定的下个程序计数器值的一部分或全部。查找存储器可以使用先前程序计数器值来获取下个程序计数器值。这样,在程序计数器120中不使用相加来获得地址步长。可选地,分支执行电路162可以包括分支目标查找存储器162a,分支目标查找存储器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执行的指令的地址,并且向指令发出电路2指示这些地址。指令高速缓存控制器122根据这些地址确定指令在指令高速缓存存储器120中是否可用,并且使得从指令高速缓存存储器120向指令寄存器124发出指令。如果在指令高速缓存存储器120中没有指令,则指令高速缓存控制器122从存储器10中取出指令(可选地作为较大指令块的一部分)放入指令高速缓存存储器1中。
高速缓存未命中与缺乏局部性有关。通常,在第一和第二指令地址非常近以致于它们基于它们的地址被一起保存在高速缓存中的情况下,在从第一指令地址到第二指令地址时不太可能发生高速缓存未命中。这通常应用于相邻地址,但是也可以应用于更大间隔处的地址。当基于地址的接近性将地址的内容存储在指令高速缓存存储器120中时,地址被称作相对于彼此是局部的。典型地,可以将为高速缓存定义的局部性间隔作为地址之间的最大间隔,这些地址的内容可以由于这些地址之间的相似性而共同存储。在简单示例中,其中将分别具有多个地址的行的内容高速缓存在指令高速缓存存储器120中,如果地址属于相同行,则这些地址相对于彼此是局部的。在这种情况下,局部性间隔是线长度。在另一示例中,其中,将地址的移动窗高速缓存在指令高速缓存存储器120中,当窗向前移动时,用在窗结束处的地址来代替窗开始处的地址,如果地址的间隔小于窗大小,则地址相对于彼此是局部的。在这种情况下,局部性间隔是窗大小。
当将指令存储在高速缓存行(例如,每行64或128个指令地址)中时,如果将程序流限制到有限数目的高速缓存行,即,限制在有限数目的地址范围,使得可以将范围高速缓存在一起,则可以避免高速缓存未命中。
应当认识到,许多备选指令发出电路体系结构和管理方法是可能的。例如,可以以压缩和/或加密的形式将指令存储在存储器10中,在这种情况下,可以在高速缓存存储器与存储器10和/或指令寄存器124之间使用解压缩器和/或解密电路。在一些情况下,可以绕过指令高速缓存存储器120。现在,作为示意,使用简单指令高速缓存存储器。
程序流控制单元16可以包括在每个指令周期内更新的程序计数器寄存器。当程序流控制单元16接收到分支指令(也被称作跳转指令)时,该程序流控制单元16根据分支指令执行更新。否则,程序流控制单元16应用局部定义的更新。在实施例中,程序流控制单元16在不执行分支的每个指令周期内,将当前指令长度与程序计数器存储器的内容相加。
在另一实施例中,可以使用预取,在这种情况下,程序流控制单元16和/或指令高速缓存控制器122计算预期在未来执行的指令的预测地址,并且指令高速缓存控制器122预取这些指令。例如,预测地址可以通过预先应用局部定义的更新(即,在假定不会遇到分支指令的情况下)来形成。此外,诸如分支预测等其他技术可以用于计算预测地址。
在备选实施例中,数据处理设备可以与程序流控制单元16一起使用,程序流控制单元16常规地递增程序计数器,并使用程序计数器对指令进行寻址,而无需映射到目标指令。在这种情况下,在一个实施例中,数据处理设备包括软件和/或硬件,以在执行程序之前对程序进行预处理。执行预处理,以便取消指令的序列的重排列。由于可以避免高速缓存未命中,因此可以高效地进行预处理。不需要立即取消针对整个程序的重排列。每次在处理器开始执行相应程序部分之前,每次对相应的程序部分进行预处理。作为另一实施例,可以将跳转指令添加至程序,以使得处理器能够根据指令的重排列的顺序跳转。可以对跳转指令目标进行加密,在这种情况下,数据处理设备可以包括用于对目标进行解密的软件或硬件解密器。作为另一实施例,可以与程序分离的形式将跳转列表提供给数据处理设备,并在执行期间由程序流控制单元16使用。该列表上的条目可以执行跳转位置和跳转目标的组合集合。
程序转换
图2示出了程序转换的流程图。在将程序的指令存储在存储器10中来执行之前使用程序转换。程序转换可以由程序转换装置来执行,例如,被编程以执行程序转换的计算机。在第一步骤21中,程序转换装置接收必须要转换的指令程序。在第二步骤22中,程序转换装置检测程序中的分支指令,并构造具有分支指令的位置和分支目标的表。
在第三步骤23中,程序转换装置将程序划分成指令块。优选地,为每个分支目标定义块,该块以分支目标处的指令开始。可选地,可以形成不以分支目标开始的附加块。在实施例中,每个块可以包含不超过单个指令。每个块延长至下个块的开始。例如,按照块在程序中出现的顺序,为该块指定索引数。在第四步骤24,程序转换装置根据映射函数映射索引数。在第五步骤25中,程序转换装置按照每个块出现的顺序在每块的结束处将分支指令添加至下个块。在第六步骤26中,程序转换装置通过按照块的映射索引数来布置块,以形成转换后的程序。在第七步骤中,程序转换装置根据重排列的块的地址,替换分支目标在程序的分支指令中的定义。
可选地,第五步骤25可以省略或用将信息添加至程序以指示新块的开始的步骤来代替,在这种情况下,执行程序的处理器必须通过以下方式来提供与地址有关的丢失信息:例如,通过重构局部程序存储器中的原始块序列、通过在块的结束处添加分支、或者在没有显式分支指令下情况下,通过在执行期间自己主动地实现指令地址跳转。
在实施例中,每个块仅包含一个指令。因此,在每个指令之后发生指令地址跳转。
指令地址映射
优选地,映射函数具有以下特性:高效利用指令存储器、保持高速缓存效率、以及使重构指令序列变得困难。指令存储器的高效使用意味着,不会剩下太多没有映射到指令的未使用地址。高速缓存效率的保持意味着,导致高速缓存未命中的指令地址数目的变化应当保持在高速缓存可以处理的范围内。使重构指令序列变得困难意味着,连续执行的指令的地址之间的地址步长的统计特性应当具有某些伪随机特征。因此,例如地址步长的频率分布不应集中于单个步长值,应当避免连续步长值与频繁重复模式之间的强相关性。
这些不同的特性会冲突。例如,最好在整个地址空间使用随机地址步长来使重构指令序列变得困难,而高速缓存效率取决于可预测的地址步长,优选地单位大小。
图3示意性示出了将困难重构与高速缓存效率相组合的映射。在第一列30中示出了映射之前连续原始指令地址的位置,表示逻辑上连续指令序列。在第二列31中示出了通过对原始指令地址应用映射而获得的目标地址的位置。如所见,将来自于指令地址序列32的连续原始指令地址映射到目标地址的不相交范围33a-d的有限集合。序列32是第一列30所表示的序列的适当子序列,意味着在该列中存在其他子序列。作为示例,包含16个指令的序列32可以与原始指令地址一起使用,该原始指令地址映射成4个范围33a-d的目标地址。可以使用例如64或256个指令的较大序列或者不同数目的指令。可以将序列32之外的原始指令地址映射到其他范围集合中的目标地址。这可以基于第一列3中具有与序列32相同大小的其他序列来进行,其中其他序列中的每一个被映射到不同的范围集合。典型地,序列32之外的原始指令地址的一部分映射到范围33a-d之间的目标地址。
在目标指令之间存在地址步长,目标指令是序列32中的连续原始指令地址的映射。作为示例,已经指示了几个地址步长34。如图所见,地址步长可以是范围33a-d之内或范围之间的步长。原始指令地址序列定义了目标地址之间的地址步长序列,目标地址是连续原始指令地址对的映射。在该地址步长序列中,不同类型的地址步长彼此混合。避免了高度可预测的序列。因此,例如,如果序列32的连续部分被分别映射到范围33a-d中相应的一个,则该序列就是高度可预测的。这应当与以下地址步长序列相对应:首先包含第一范围33a内的地址步长,然后到第二范围33b步长、接着第二范围33b内的地址步长,依此类推。通过使用地址步长序列来实现几乎不可预测的序列,该地址步长序列在第一范围33a中的步长之间包含范围33b-d的其他范围内的步长,并因此在第一范围33a中的步长之间包含范围之间的步长。
优选地,序列32到范围的映射是一对一的,意味着在范围33a-d的有限集合中的所有目标地址是来自序列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由该阵列中沿着第一维度的相应行来表示。在这种可视化中,一个指令长度的目标地址步长与该空间中沿着第一维度的运动相对应。沿着其他维度的运动与范围33a-d中不同的范围之间的地址步长相对应。因此,可以将连续指令地址值的映射值序列可视化为n维空间内的路径。在另一实施例中,每个范围可以与阵列中行的相应部分相对应,从而一个以上范围与阵列中的行相对应,或者范围可以与阵列中的多个行相对应。然而,为了说明,记住行与范围之间的一对一关系。
图3a示出了具有这种路径36以用于定义映射函数的二维空间。应当强调的是,所示的特定路径36仅用于示意路径的概念:实际上,可以使用其他更多的复杂路径。示出了具有坐标为(x,y)的位置的行和列的二维阵列的一部分,其中,x和y具有整数值。每一行与范围33a-d中不同的一个相对应,即,y值是范围33a-d的标记,并且该范围占据行的一部分。该部分内沿x方向的步长与范围内的步长相对应,沿y方向的步长与范围33a-d之间的步长相对应。在一个示例中,根据A=(b(y)+x)*L,每个点(x,y)定义目标地址A,其中L是指令长度,并且范围的基地址由针对不同y值表示的b(y)表示。作为简单示例,可以使用函数b(y)=A0+M*y,其中,M是大于范围大小的整数,A0是常数。
示出了空间填充路径36的一部分。注意,所示的路径36的形状的具体选择仅用于示意路径的概念。该空间填充路径36可以延伸至所示空间部分的外部。空间填充路径36沿着阵列的相应点连续延伸,每次从相应点移动至与该相应点相邻的点中的一个,并一次仅访问一个点。路径在所有维度中蜿蜒,在某种意义上,各个维度中步长的频率相差的倍数(远)小于阵列的行中点的数目,例如相差不超过两倍,并且不同维度中的步长是混合的。
因此,空间填充路径36将沿着路径36的位置“s”的第一函数定义为二维坐标(x,y)=(Fx(s),Fy(s))。由指令长度所划分的原始指令地址或其与基地址的差值可以用作位置s。因此,目标地址是(b(Fy(s))+Fx(s))*L。如果使用指令索引数,则s可以表示连续指令索引数。
使用空间填充路径36来定义映射确保了存储器的高效使用,这是由于该路径访问了阵列的所有点,具有使用了范围内的所有目标地址的效果。高速缓存是高效的,这是由于可以将沿着所示路径36与s值相对应的16个地址的序列32仅映射到4个行,即4个范围。这是最好的情况,最坏的情况是它被映射到7个行。使重构原始序列变得困难,这是由于地址步长是不规则的:沿着空间填充路径36不同范围(行)内的地址步长彼此发生混合。范围内的地址步长与路径26中一个行中的水平步长相对应。这种水平步长可以向左和向右,与向前和向后地址步长相对应。如所见,在这样的步长之间,出现了到其他行的步长和在其他行内的步长。
在实施例中,使用方形阵列,选择的二维阵列的尺寸足够大,以提供空间填充路径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和/或LSFR的初始状态作为集成电路中的秘密密钥信息。在实施例中,伪随机置换算法可以与范围内映射g(f(A))和范围选择映射h(f(A))相组合,范围内映射g(f(A))从置换的地址f(A)中导出范围内地址,范围选择映射h(f(A))从置换的地址f(A)中导出范围选择。通过映射到范围的集合可以实现混淆提高,该集合中的范围与其他范围彼此分离,其他范围是范围选择映射h没有选择的范围。范围内映射可以是简单映射,例如通过从置换的地址中选择比特集合而获得映射。类似地,范围选择映射可以是简单的,例如,采用置换的地址的其他比特,并通过任何适合的函数根据这些比特来计算范围选择,或者使用查找表来确定范围选择。
这样的算法可以通过映射电路164中的算术和/或逻辑电路来实现,映射电路164与密钥存储器组合以提供计算所需的密钥。备选地,可以预先执行地址的计算,并且可以将地址存储在映射电路164中的查找存储器。在后一种情况下,可以存储真随机映射。
通常,伪随机置换不一定产生与路径36相对应的地址步长,这些地址步长由n维阵列中的邻域之间的步长组成。在实施例中,路径受限于这样的步长。可以通过为每个地址提供具有密钥信息的n(n是阵列的维数)个比特的密钥流/秘密映射来定义这种类型的路径,n个比特指示路径在每个点移动的方向。可以预先随机或伪随机选择这样的密钥流/秘密映射,强制定义不具有折返的路径。如所述,伪随机算法可以是基于密钥的,取决于(较小)密钥。可以将获得的密钥流/秘密映射存储在集成电路中的存储器中。当更新指令地址时,针对该地址的n比特可以在处理器中获取到,并用于确定至下个地址值的步长。
例如,n个比特中的每一个应当与比特所选的相应步长部分相对应,并且地址的步长应当是n个比特指示的所选步长部分之和。这可以使用存储器、查找电路以及加法器在映射电路164中实现,存储器存储了针对相应指令地址(指令地址组)的n个比特密钥部分,并可以由(部分)当前指令地址来寻址,查找电路查找与n个比特相对应的步长部分,加法器用于将步长部分相加并与当前指令地址相加,以计算下个指令地址。
当使用这样的n个比特密钥部分时,例如,一个步长部分可以具有加1和减1的可选值,另一步长部分可以具有加和减地址范围对之间的间隔的可选值。可选地,可以利用路径不折返的事实来减少每点的密钥比特数目。因此,在二维示例中,针对每个指令地址,仅需要对3个可能的步长值进行编码,而不是4个。相应地,例如可以使用5个比特来对针对三个指令地址的步长值进行编码。
可以使用用于伪随机定义n维空间中的路径的任何其他类型的算法。
程序流控制单元可以通过根据跳转间隔(跳转原始与跳转目标之间的地址的数目)重复计算和求和沿着路径的连续步长,来执行跳转指令。如这里所使用的,术语跳转指令包括分支指令。跳转地址计算的缺点是,跳转可以使处理器延迟。在备选实施例中,程序流控制单元包括跳转目标存储器,其中存储了跳转指令的目标的地址。例如在加载程序时,可以对这些地址进行计算。在该实施例中,当程序流控制单元遇到跳转指令时,访问跳转目标存储器,并用跳转目标来代替当前指令地址。
在另一实施例中,例如,来自跳转指令的跳转信息可以通过以下操作来直接使用:将来自跳转指令的跳转间隔与当前指令地址相加,或者用来自跳转指令的跳转地址代替当前指令地址。在该实施例中,预处理器对程序进行预处理,以根据处理器的密钥来代替跳转指令信息。在预处理期间,预处理器可以是在任何可编程计算机上执行的预处理程序,检测预处理程序中的跳转指令、根据处理器的密钥计算检测到的指令的跳转目标,并且预处理器根据计算的跳转目标来代替跳转指令中的跳转信息。
递归定义
注意,定义路径的另一种可能的方法是通过递归定义。概念上,递归定义使用“单元”,即,空间的一部分(单元在下文中将被称作“区块”(tile))。可以定义许多不同单元类型。单元类型的定义定义了该类型单元的形状,而不指定其比例,以及如何将该类型的每个单元再划分成具有更小比例的各种类型的单元,可选地,划分成这些单元的旋转和/或镜像版本。通过重复应用这样的再划分,可以将单元分级地再划分成更多更小的单元。
在递归定义中,将路径划分成相应单元中的路径部分,然后以分级再划分方式将这些路径部分划分成更小单元中的更小路径部分。因此,确保完全或接近完全覆盖空间中的所有点被划分成更多更小比例的再划分问题。对于每种类型的单元,单元内路径的入口点和出口点的位置可以根据该路径在单元边界处的位置(相对于单元的角)来定义。定义单元的再划分,使得单元的入口和出口点与再划分单元的入口点和出口点相对应,并且可选地,在倒置单元中的路径方向之后,连续单元的内部出口点和入口点一致。当空间包含点阵列时,分级再划分的单元包含更多更小的子阵列。对于相当小尺寸的子阵列,可以显式地定义路径,该路径覆盖子阵列中的所有点。因此,通过分级定义了整个路径。尽管已经根据单元给出了该定义,但是应认识到,针对相同路径的定义可以采用任何形式。作为一个示例,可以使用L体系语法。
例如,图3a的空间填充路径36可以通过一种类型的方形区块来定义。最高级别单元(区块)包含8×8点阵列。将最高级别单元再划分成4个中间级别单元,每个中间级别单元包含4×4子阵列。然后可以将每个中间级别单元再划分成4个低级别区块,每个低级别区块包含2×2子阵列。每个最低级别单元中的路径可以通过对同一基本路径的序列进行旋转、镜像和/或倒置来获得。
可以通过使用不同形状的单元和/或不同的再划分以及针对最小单元不同的显式定义的路径(最小单元可以是比图3a的示例中的单元更大的单元,因此例如,可以针对4×4单元或8×8单元来显式定义路径),根据递归定义来产生路径的无限变化。显式定义的路径不需受限于具有沿x方向和y方向的步长:也可以使用对角线步长或者甚至其他邻域的步长。此外,不同的显式定义的路径可以用于位于相同点阵列中不同位置处的相同类型的单元。尽管为了说明的目的已经给出了针对二维路径的示例,但是应当认识到,可以使用更高维空间中的路径。
可以通过查找操作和/或计算确定阵列中点的坐标作为沿着路径的位置的函数,查找操作和/或计算是因为这种路径不明显。根据s,可以确定包含该点的分级再划分的各个单元。当将每个单元划分成2的幂(例如,4)个更小单元,并且针对更小单元定义2的幂个点的路径时,s的数字表示的连续比特组标识:沿着路径在位置s处放置点的单元,以及这些单元相对于更大单元的位置的定向(例如,在图3中,s的数字表示具有6个比特,其中两个最高有效比特确定4×4单元、中间的两个比特确定4×4单元内的2×2单元、两个最低有效比特确定单元内的位置)。更一般地,沿着路径位置s处的点所属的最高级别的单元的索引s(0)是从s/N(1)的整数部分获得的,即s除以次高级别单元中的点的数目N(1)。点所属的次高级别单元的索引s(1)是从整数相除R(1)/N(2)中获得,其中,余数R(1)=s-N(1)*s(0),即s乘以第三高级别单元中的点的数目,依此类推。如所述,当N(i)是2的幂时,该量是从s的数字表示中获得的比特组。“i”级别下每个单元中的点的数目N(i)可以根据被再划分的较低级别单元N(i+1)的点的数目之和来确定。
可以在查找表电路中表示再划分的定义,查找表电路存储了再划分的每个单元的信息P(c)(被标记为c的这些单元的索引),该信息P(c)表示:单元类型、该单元相对于被其划分的更大单元的位置、该单元相对于所述更大单元的定向,以及相对于所述更大单元该单元中的路径所遵循(向后或向前)的方向。可选地,P还取决于被再划分的单元的类型。可以使用该单元的索引s(0),利用查找表电路来获得最高级别单元的信息P(s(0))。接着的m个比特可以用于查找再划分的次高级别下的单元的类似信息P(s(1))。与信息Q(0)(表示相对于最高级别单元再划分的次高级别单元的位置、相对定向、以及路径方向)相结合,信息P’可以用于确定信息Q(1)=f(Q(0),P(s(1))),Q(1)表示相对于最高级别单元,次高级别下单元的位置、定向以及路径方向,对于“i”所指示的连续级别下的信息Q(i)依此类推。函数“f”表示偏离、旋转和路径方向的合成,并且通过算术计算或查找(可以与P的查找相组合)来确定。因此,阵列中的位置可以从索引s(i)来获得,例如s的数字表示的连续比特组。
备选地,递增计算可以用于沿着路径的连续点。如将认识到的,每次s递增时,仅最低级别索引s(i)(例如,来自s的数字表示的比特组)改变。当较高级别的索引i’不改变时,这些较高级别的信息Q(i’)也不改变。在这种情况下,针对沿着路径的位置s的阵列中的位置可以通过以下操作来确定:以根据最低级别信息P而确定的偏移量,来更新针对位置s-1的先前位置,或者通过将与该最低级别的偏移量添加至最低级别单元的基点。仅需要针对s值内的所选步长来更新其他级别的信息Q(i’)。当这样的步长出现时,可以预先计算各个级别的未来值Q(i)以供使用,或者当这样的步长出现时可以计算未来值Q(i)。
应当强调,对于指令地址的映射,仅在可视化时,路径是重要的。阵列中的点的一个坐标的一部分表示目标地址范围中的位置,剩余部分以及剩余的一个或多个坐标表示范围的选择,即范围的基地址。原始指令地址A与沿着路径的位置“s”相对应,例如根据s=A-A0,其中A0是基地址。因此,查找信息P和函数f定义范围的选择以及范围中的位置作为原始指令地址A的函数。
加密
在已知定义了映射的有关信息的情况下,当然能够重构程序序列。为了避免这一点,优选地通过将该信息包括在程序流控制单元中,保持该信息秘密,使得不能容易地读出该信息。为了提高对秘密的保护,不同的映射,并因此不同重排序的程序可以用于不同的集成电路或集成电路组。
为了实现较大范围的可能映射,可以使用具有最低级别信息P的相对较大单元,相对较大单元定义了用于不同处理器的不同的基本路径。在一个实施例中,整个地址空间可以被处理为一个这种最低级别单元,使得高效地使用非(多级别)递归定义。
根据图3a的示例,例如,8×8个点的最低级别单元(区块)可以与查找电路一起使用,查找电路定义了沿着该单元中的路径的连续位置。处理器的查找电路中的信息使得处理器能够执行已经被相应重排序的程序。
为了更多地提高秘密性,优选地,在相同映射的不同单元中使用不同的基本路径。这对应于使用具有备选、不同基本路径的更多不同类型的单元,即使这些单元具有相同的形状。在这种情况下,信息P中再划分的定义可以定义划分成不同类型单元的划分。可选地,这可以在多个级别的单元下进行。如果针对处理器的程序在被分发至处理器之前根据相应映射进行了重排序,这种使用备选的再划分单元类型以及各种基本路径的定义均在处理器内保持秘密。
这样,可以将程序划分成多个指令地址序列,多个指令地址序列在秘密信息的控制下被映射到目标地址。秘密信息的不同部分可以用于相应序列,使得针对每个序列的秘密信息仅影响该序列。这样,一个序列的指令的顺序的重构并不能使得重构其他序列。
用于递归映射的硬件适应
如上所述,使用空间填充路径的混淆可以用于转换程序,包括将分支指令添加至来自于块结束的修改后的地址。在这种情况下,可以使用如图1a所示的程序流控制单元。在备选实施例中,数据处理装置可以适用于执行地址映射的一部分。在这种情况下,程序转换可以重新排列程序的一部分,而不包括附加信息。在这种情况下,可以使用如图1a或1b所示的程序流控制单元。
在一个实施例中,可以根据地址映射来重新排列指令,地址映射是根据L语法利用递归定义而获得的。在该实施例中,程序流控制单元16可以具有栈结构,该栈结构被配置为根据利用递归定义而获得地址映射更新地址以获得连续指令。
图4示出了用于使用空间填充路径执行更新的程序流控制单元的实施例的示例。程序流控制单元包括:第一查找表电路(LUT电路40),定义了沿着通过最小尺寸区块的路径的位置;以及第二查找表电路(LUT电路42),定义与较大区块的再划分下的连续区块有关的信息。此外,程序流控制单元16包括加法器43、地址寄存器44、路径计数器45、栈存储器46、栈更新电路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输出递增值,在加法器43中将该递增值与来自于地址寄存器44的地址值相加。
第二LUT电路42针对每种类型的区块存储了信息P,信息P与较大区块的再划分下的连续区块的类型、相关定向等有关。栈存储器46被配置为存储有关连续较小区块的信息的栈。在实施例中,栈存储器46中的信息可以是数据(T,A,I)的组合,其中,T指示区块的类型,A指示区块的定向、以及I指示区块的再划分的索引。可以针对连续较大区块存储这种组合。栈存储器46向第二LUT电路42输出与当前区块有关的信息。
在操作期间,在每个指令周期内递增路径计数器45。一旦来自路径计数器45的计数达到与最小尺寸区块中的路径的结束相对应的计数值时,第一LUT电路40将该指示提供给栈更新电路47。相应地,栈更新电路47更新在栈存储器46中的栈顶部处的区块。这可以通过递增再划分的索引I来进行,除非第二LUT电路42指示该索引值与最后的再划分区块相对应。当递增索引值时,使得第二LUT电路42向第一LUT电路40输出下个区块的类型和定向。
当索引值与最后的再划分区块相对应时,栈更新电路47以递归方式进行操作。顶层被视为第一级别,顶层之下的栈层被视为较低的第二级别。如果栈更新电路47递增较低的第二级别的信息中的索引,则响应于该递增索引使用第二LUT电路42以第一级别选择新信息,将第一级别的索引设置为其初始值。如果较低的第二级别的索引同样在其范围的结束处,则应用该操作,将较低的第二级别作为第一级别,并且将下一个较低的级别作为较低的第二级别,依此类推。
当分支指令处理器48检测到从指令发出电路(未示出)接收到的指令包括分支命令时,分支指令处理器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的输出。其他组合器电路56、58分别与计数器的比特组相关联,并且其输入耦合至针对该比特组的查找电路54的输出和与次高有效比特组相关的组合器电路56的输出。与最低有效比特组相关联的组合器电路58向指令发出单元(未示出)输出目标地址。
在操作中,计数器50进行计数。可选地,指令解码器(未示出)可以用于根据指令长度来控制计数器的递增,但是如果所有指令具有相同大小或者如果它们以等间隔存储,则不必进行上述操作。不同的查找电路54和组合器电路56、58执行目标地址计算和组合器电路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也是可编程的,使得可以在不同处理器中使用再划分成单元的不同在划分。这使得更难重构程序。
备选地,或另外,族中的不同设备可以通过在不同设备中使用沿着路径的不同开始点来实现。这可以通过在程序流控制单元16(例如,ROM)中添加电路实现,该电路表示针对路径计数器45的计数和栈存储器46中的栈的初始值,并使程序流控制单元16在开始执行程序之前加载这些初始值。
其他硬件适应
已经使用图4和5示意了实施例,其中,对所有执行的地址进行映射。作为备选方案,可以仅对分支目标进行映射。在这种情况下,每个分支指令可以包括目标编号。如针对图4的上下文中的分支的描述,分支指令处理器48执行将该编号转换成地址的计算。作为另一实施例,可以仅针对指令地址的一部分使用映射,而其余部分可以在无需映射的情况下使用。在实施例中,仅映射比特组(例如,16个比特),可以在无需映射的情况下使用程序计数器的次高比特。这使得能够利用有限量的电路映射更大地址空间,并仍混淆局部程序结构。例如,可以对最低n个比特进行映射,以使程序最大程度难以理解,或者可以对两个有效级别之间的比特进行映射,使得针对次低有效比特保持高速缓存局部性。
其他手段可以用于更进一步混淆程序。因此,指令可以在分发之前进行加密,并在执行之前在指令发出电路中进行解密。
实践要求保护的本发明的本领域技术人员通过对附图、公开以及所附权利要求的研究,可以理解和实现所公开的实施例的其他变型。在权利要求中,词语“包括”不排除其他元件或步骤。单个处理器或其他单元可以实现权利要求中引述的若干项的功能。事实仅在于,在彼此不同的独立权利要求中引述的特定手段并不指示这些手段的组合是不利的。计算机程序可以存储/分布在适合的介质上,例如,与其他硬件的一部分一同提供或作为其他硬件的一部分提供的光存储介质或固态介质,但是也可以以其他形式分布,例如经由互联网或其他有线或无线电信系统。权利要求中任何参考数字不应视为对本发明范围的限制。

Claims (18)

1.一种数据处理设备,包括:
-功能单元(14),用于执行来自于存储器(10)的指令;
-地址输出,用于向存储器(10)提供指令的目标地址;
-程序流控制单元(16),被配置为确定用于提供给地址输出的目标地址,程序流控制单元(16)被配置为在程序中逻辑上连续位置处的指令的目标地址之间引入位置相关大小和/或方向的地址步长,所述地址步长的至少一部分与指令大小不相对应。
2.根据权利要求1所述的数据处理设备,其中,程序流控制单元(16)包括用于表示可编程秘密信息的电路(161、164),程序流控制单元(16)被配置为根据所述秘密信息来选择地址步长。
3.根据权利要求2所述的数据处理设备,其中,用于表示可编程秘密信息的电路(161、164)包括查找存储器,程序流控制单元(16)被配置为使用从查找存储器查找到的相应信息确定每个相应指令的目标地址。
4.根据权利要求2所述的数据处理设备,其中,程序流控制单元(16)包括:
程序计数器(160),被配置为除非执行跳转指令,否则在连续指令周期内递增程序计数器值;以及
映射电路(164),耦合在程序计数器(160)与存储器的输出之间,所述映射电路被配置为根据程序计数器值来确定目标地址。
5.根据权利要求1所述的数据处理设备,其中,程序流控制单元(16)包括:
-程序计数器(160),用于基于程序计数器值提供指令地址,以及
-更新单元(161),耦合至程序计数器,并被配置为根据先前程序计数器值确定选择的更新值,所述程序计数器(160)被配置为除非执行跳转指令,否则在更新值的控制下执行程序计数器值的更新。
6.根据权利要求1所述的数据处理设备,其中,程序流控制单元(16)被配置为将按照伪随机重置顺序的逻辑上连续指令分配给连续目标地址集合。
7.根据权利要求1所述的数据处理设备,其中,程序流控制单元(16)被配置为以相同频率在逻辑连续指令的目标地址之间产生彼此符号相反的地址步长。
8.根据权利要求1所述的数据处理设备,其中,连续原始指令地址的序列(32)被分配给相应目标地址集合,其中,连续原始指令地址被映射到目标地址之间的连续地址步长,所述集合中的目标地址处于多个非交叠地址范围(33a-d)之中,所述映射用指令填充每个范围(33a-d)的至少一半,连续地址步长包括:第一地址步长,至少在范围(33a-d)中的第一范围内;以及第二地址步长,在所述第一地址步长之间,并至少在范围(33a-d)中的第二范围内。
9.根据权利要求8所述的数据处理设备,其中,将原始指令地址分配到目标地址与将连续原始指令地址映射到沿着n维阵列中的点的路径(36)的连续位置相对应,其中,n大于1,所述路径在阵列的所有维度上蜿蜒,并且将沿着所述阵列的相应行、行组或行部分的位置映射到范围(33a-d)中的相应范围,路径由阵列中相邻位置之间的步长组成,访问阵列的每行中至少一半的点。
10.根据权利要求8所述的数据处理设备,其中,指令序列(32)是超级序列(30)的适当子集,超级序列(30)包括在秘密信息的控制下被映射到目标地址的指令地址的其他序列,在所述范围(33a-d)内的至少一个映射受到秘密信息的一部分的控制,秘密信息的所述一部分不会影响其他序列的映射。
11.根据权利要求8所述的数据处理设备,其中,指令序列(32)是超级序列(30)的适当子集,超级序列(30)包括被映射到其他地址范围中的目标地址的指令地址的其他序列,非交叠地址范围(33a-d)由所述其他地址范围彼此分离,所述其他地址范围介于非交叠地址范围(33a-d)之间。
12.根据权利要求8所述的数据处理设备,被配置为基于连续级别单元的分级来确定目标地址,每个单元与相应范围集合相对应,相继较低级别下的单元与范围的子集相对应,范围的子集是较高级别的单元集合的子集,分级的单元与索引相关联,所述设备包括:
-程序计数器;
-查找电路,提供再划分信息和路径信息,所述再划分信息定义范围集合作为索引值的函数,所述路径信息在最低级别单元的范围集合内定义相应索引值所映射到的目标地址中的相应地址,查找电路具有耦合至用于接收索引值的程序计数器的输入;
-组合电路,被配置为对在程序计数器控制下已被访问的不同级别的再划分信息进行组合,以定义针对原始指令地址中的至少一个的最低级别单元的范围集合,并且对访问的路径信息进行组合,以在通过组合访问的再划分信息而定义的范围集合内选择针对至少一个原始指令地址的目标地址。
13.根据权利要求12所述的数据处理设备,其中,查找电路被配置为,提供路径信息的备选信息,备选信息定义目标地址中的相应地址与索引值之间的多个彼此不同的可选关系,组合电路被配置为对分别针对原始指令地址中彼此不同的原始指令地址而获得的相应访问的再划分信息进行组合,并且使用组合后的相应访问的再划分信息来控制备选信息中相应不同备选信息的选择,以确定针对原始指令地址中彼此不同的原始指令地址的目标地址。
14.一种用于执行逻辑上连续位置处的指令的计算机程序的方法,所述方法包括:
-利用位置相关大小和/或方向的地址步长来确定指令的目标地址,所述地址步长在程序中逻辑上连续位置处的指令的目标地址之间,所述地址步长的至少一部分与指令大小不相对应;
-使用目标地址来从存储器中获取指令;
-执行获取的指令。
15.根据权利要求14所述的方法,其中,使用伪随机选择的地址步长。
16.根据权利要求15所述的方法,其中,以相同频率使用符号彼此相反的地址步长。
17.根据权利要求14所述的方法,其中,来自于逻辑上连续原始指令地址的序列(32)的指令是根据相应目标地址集合来获取的,其中,连续地址步长在从中获取逻辑上连续原始指令地址的目标地址之间,相应集合中的目标地址处于多个非交叠地址范围(33a-d)之中,每个范围(33a-d)的至少一半由来自序列(32)的指令填充,连续地址步长包括:第一地址步长,至少在范围(33a-d)中的第一范围内;以及第二地址步长,在所述第一地址步长之间,并至少在范围(33a-d)中的第二范围内。
18.根据权利要求17所述的方法,其中,将原始指令地址映射到目标地址与将连续原始指令地址映射到沿着n维阵列中的点的路径(36)中的连续位置相对应,其中,n大于1,所述路径在阵列的所有维度上蜿蜒,并且将沿着所述阵列的相应行、行组或行部分的位置映射到范围(33a-d)中的相应范围,路径由阵列中相邻位置之间的步长组成,访问阵列的每一行中的至少一半的点。
CN2009801041468A 2008-02-06 2009-02-02 数据处理设备及用于执行混淆程序的方法 Expired - Fee Related CN101939724B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
EP08101324.5 2008-02-06
EP08101324 2008-02-06
PCT/IB2009/050408 WO2009098630A1 (en) 2008-02-06 2009-02-02 Data processing device and method for executing obfuscated programs

Publications (2)

Publication Number Publication Date
CN101939724A true CN101939724A (zh) 2011-01-05
CN101939724B CN101939724B (zh) 2013-11-27

Family

ID=40790767

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2009801041468A Expired - Fee Related CN101939724B (zh) 2008-02-06 2009-02-02 数据处理设备及用于执行混淆程序的方法

Country Status (4)

Country Link
US (1) US8856500B2 (zh)
EP (1) EP2240849B1 (zh)
CN (1) CN101939724B (zh)
WO (1) WO2009098630A1 (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105354009A (zh) * 2015-10-14 2016-02-24 北京深思数盾科技有限公司 一种用于固件的保护方法
CN111552958A (zh) * 2020-06-18 2020-08-18 南方电网科学研究院有限责任公司 一种程序运行特征提取方法和装置
WO2022142595A1 (zh) * 2020-12-29 2022-07-07 华为技术有限公司 程序检测方法及装置

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP2243098A2 (en) * 2008-02-11 2010-10-27 Nxp B.V. Method of program obfuscation and processing device for executing obfuscated programs
EP2290547B1 (en) 2009-08-26 2012-12-19 Nxp B.V. Method of obfuscating a code
US11163572B2 (en) * 2014-02-04 2021-11-02 Micron Technology, Inc. Memory systems and memory control methods
EP3907633B1 (en) 2020-05-05 2022-12-14 Nxp B.V. System and method for obfuscating opcode commands in a semiconductor device

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2001079969A2 (en) * 2000-04-12 2001-10-25 Cloakware Corporation Tamper resistant software
US20050069138A1 (en) * 2003-09-25 2005-03-31 Sun Microsystems, Inc., A Delaware Corporation Application program obfuscation
WO2007091558A1 (ja) * 2006-02-06 2007-08-16 Matsushita Electric Industrial Co., Ltd. プログラム難読化装置

Family Cites Families (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5559884A (en) * 1994-06-30 1996-09-24 Microsoft Corporation Method and system for generating and auditing a signature for a computer program
US6594761B1 (en) * 1999-06-09 2003-07-15 Cloakware Corporation Tamper resistant software encoding
EP1192516A1 (en) 1999-06-09 2002-04-03 Cloakware Corporation Tamper resistant software encoding
US6779114B1 (en) * 1999-08-19 2004-08-17 Cloakware Corporation Tamper resistant software-control flow encoding
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
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
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
US7640592B2 (en) 2004-06-12 2009-12-29 Microsoft Corporation Installation setup
US7620987B2 (en) * 2005-08-12 2009-11-17 Microsoft Corporation Obfuscating computer code to prevent an attack
EP2243098A2 (en) 2008-02-11 2010-10-27 Nxp B.V. Method of program obfuscation and processing device for executing obfuscated programs

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2001079969A2 (en) * 2000-04-12 2001-10-25 Cloakware Corporation Tamper resistant software
US20050069138A1 (en) * 2003-09-25 2005-03-31 Sun Microsystems, Inc., A Delaware Corporation Application program obfuscation
WO2007091558A1 (ja) * 2006-02-06 2007-08-16 Matsushita Electric Industrial Co., Ltd. プログラム難読化装置

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105354009A (zh) * 2015-10-14 2016-02-24 北京深思数盾科技有限公司 一种用于固件的保护方法
CN111552958A (zh) * 2020-06-18 2020-08-18 南方电网科学研究院有限责任公司 一种程序运行特征提取方法和装置
CN111552958B (zh) * 2020-06-18 2024-01-19 南方电网科学研究院有限责任公司 一种程序运行特征提取方法和装置
WO2022142595A1 (zh) * 2020-12-29 2022-07-07 华为技术有限公司 程序检测方法及装置

Also Published As

Publication number Publication date
EP2240849A1 (en) 2010-10-20
US20100325402A1 (en) 2010-12-23
US8856500B2 (en) 2014-10-07
CN101939724B (zh) 2013-11-27
EP2240849B1 (en) 2016-01-27
WO2009098630A1 (en) 2009-08-13

Similar Documents

Publication Publication Date Title
CN101939724B (zh) 数据处理设备及用于执行混淆程序的方法
CN101939749A (zh) 程序模糊方法和用于执行模糊程序的处理设备
ES2954562T3 (es) Aprendizaje máquina acelerado por hardware
US5577217A (en) Method and apparatus for a branch target buffer with shared branch pattern tables for associated branch predictions
EP3557407B1 (en) Puf-based true random number generation system
CN101097511B (zh) 使用折叠的模归约
CN101782893A (zh) 可重构数据处理平台
US10763890B2 (en) Computational devices using thermometer coding and scaling networks on unary encoded data
US20150070957A1 (en) Semiconductor device and method of writing/reading entry address into/from semiconductor device
JP2006509306A (ja) 関係アプリケーションへのデータ処理システム相互参照用セルエンジン
US10114795B2 (en) Processor in non-volatile storage memory
JP6300796B2 (ja) 算術及び論理ユニットを伴わないコンピュータプロセッサ及びシステム
CN112639774B (zh) 具有掩蔽功能的编译器设备
US11705207B2 (en) Processor in non-volatile storage memory
CN101727406B (zh) 组相联方式的高速缓存装置、高速缓存方法及处理器系统
EP3859535B1 (en) Streaming access memory device, system and method
CN110073338A (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
Yang et al. In-place permuting and perfect shuffling using involutions
CN111801670A (zh) 操作在公共计算机上加密数据的代码的安全执行技术
Kabir et al. FPGA Processor In Memory Architectures (PIMs): Overlay or Overhaul?
Bhattacharjee et al. In-memory data compression using ReRAMs
US20240272797A1 (en) Core group memory processing with multi-precision weight packing
KR102371347B1 (ko) 한 세트의 아이템 하나씩 선택하기

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20131127