首页 / 专利库 / 专利权 / 申请 / 国际申请 / 修改 / 通过代码转换更新签名

通过代码转换更新签名

阅读:13发布:2021-06-11

专利汇可以提供通过代码转换更新签名专利检索,专利查询,专利分析的服务。并且一种用于为计算单元生成指令序列的方法。该计算单元能由至少包括该指令序列的程序来控制,其中,在程序运行期间基于已执行的指令来计算签名值并且与参考值进行比较。该方法包括:为目标签名确定目标签名值;为通向程序点的程序段确定初始指令序列,其中从初始签名值出发执行初始指令序列会导致为目标签名计算出与目标签名值不同的初始签名值;和确定初始指令序列的 修改 ,以获得修改后的指令序列,因此执行修改后的指令序列导致对符合于目标签名值的、修改后的签名值进行计算,并且按照修改后的指令序列处理有效数据的结果符合于在程序点上按照初始指令序列处理有效数据的结果,其中修改后的指令序列的所有指令都按照同样方法参与到签名计算中。,下面是通过代码转换更新签名专利的具体信息内容。

1.一种用于为计算单元生成指令序列(404′)的方法,所述计算单元能由至少包括所述指令序列的程序控制,其中,在所述程序运行期间基于已执行的指令(I1,I2,In,I1′,I2′,In′)来计算签名值(SIGP2,SIG′P2)并且与参考值进行比较,所述方法包括:
确定目标签名值(SIGP1);
为通向程序点(P)的程序段确定初始指令序列(404),其中,从初始签名值出发执行所述初始指令序列(404)会导致为目标签名计算出与所述目标签名值(SIGP1)不同的初始签名值(SIGP2);和
确定所述初始指令序列(404)的修改,以便获得修改后的指令序列(404′),因此执行所述修改后的指令序列(404′)会导致对符合于所述目标签名值(SIGP1)的签名值(SIG′P2)进行计算,并且按照所述修改后的指令序列(404′)处理有效数据的结果符合于在所述程序点(P)上按照所述初始指令序列(404)处理所述有效数据的结果,其中,所述修改后的指令序列的所有指令都按照同样的方法参与到签名计算中。
2.根据权利要求1所述的方法,其中,所述修改的确定包括两个或者多个指令(I1,I2,In)的顺序的变化。
3.根据权利要求1或2所述的方法,其中,所述修改的确定包括插入一个指令(I1′,I2′,In′)。
4.根据权利要求1至3中任一项所述的方法,其中,所述修改的确定包括替换一个指令(I1,I2,In)。
5.根据权利要求1至4中任一项所述的方法,其中,所述修改的确定包括将一个指令(I1,I2,In)划分成两个或者多个子指令。
6.根据权利要求1至5中任一项所述的方法,其中,所述修改的确定包括将恒定值分派到计算单元的寄存器或者存储器元件上,而不在分派后将所述恒定值用于处理所述有效数据。
7.根据权利要求1至6中任一项所述的方法,其中,所述修改的确定包括:
将差值与用于至少一个修改选项的至少一个签名修改值进行比较;
选取一个修改选项;
确定一个剩余差值;并且,
如果所述剩余差值不等于零:重复比较、选取和确定所述剩余差值的这些步骤。
8.根据权利要求1至7中任一项所述的方法,其中,所述修改的确定包括从多个修改选项中选取一个被选择的修改选项,其中,根据所述被选择的修改选项修改后的所述指令序列(404′)比起其它的修改选项,相对于所述初始指令序列(404)具有更低的处理额外耗费。
9.根据权利要求8所述的方法,其中,所述被选择的修改选项的选取包括对数据库的查询,在所述数据库中存储了针对多个修改选项的修改规定,借助所述修改规定能为所述程序段查明多个修改选项。
10.根据权利要求1至9中任一项所述的方法,其中,目标指令值(SIGP1)的确定包括为相对于所述程序段可替换的、通向所述程序点(P)的程序路径(402)查明指令值。
11.根据权利要求1至10中任一项所述的方法,其中,所述修改的确定包括:在所述程序段中识别能划分的指令,将所述能划分的指令的一个参数分解成至少两个子参数,并且用具有至少两个子参数的各一个子参数的至少两个子指令替换所述能划分的指令。
12.根据权利要求1至11中任一项所述的方法,其中,在确定对所述初始指令序列(404)的修改的步骤中尝试了,确定不会使所述指令序列延长的修改,其中,如果未发现这样一种修改,则所述方法具有以下步骤中的至少一个步骤:
-确定会使所述指令序列(404)延长的修改;
-为明确的代码更新插入命令;并且
-改变所述目标签名值(SIGP1)和/或初始签名。
13.一种用于在程序控制的计算单元上执行程序的方法,其中,所述程序包括至少一个指令序列(404′),所述指令序列由根据权利要求1至12中任一项所述的方法生成。
14.一种计算机程序,具有当所述计算机程序模块在计算机上运行时用于实施根据权利要求1至12中任一项所述的方法的程序代码。
15.一种用于生成根据权利要求14所述的计算机程序模块的自动编码器
16.一种用于为计算单元生成指令序列(404′)的装置,所述计算单元能由至少包括所述指令序列(404′)的程序控制,其中,在所述程序运行期间基于已执行的指令(I1,I2,In,I1′,I2′,In′)来计算签名值并且与参考值进行比较,所述装置包括:
目标签名确定装置(102),用于确定目标签名值(SIGP1);
指令序列确定装置(104),用于为通向程序点(P)的程序段确定初始指令序列(404);
签名调查装置(106),用于基于不同于所述目标签名值(SIGP1)的所述初始指令序列(404),查明配属于所述程序点(P)的初始签名值(SIGP2);以及
修改确定装置(110),用于确定对所述初始指令序列(404)的修改,以便获得修改后的指令序列(404′),因此执行所述修改后的指令序列(404′)会导致对所述目标签名值(SIGP1)进行计算,并且按照所述修改后的指令序列(404′)处理有效数据的一个结果符合于在所述程序点(P)上按照所述初始指令序列(404)处理所述有效数据的结果,其中,所述修改后的指令序列(404′)的所有指令(I1′,I2′,In′)都按照同样的方法参与到签名计算中。

说明书全文

通过代码转换更新签名

技术领域

[0001] 本发明实施例实现了一种用于为计算单元生成指令序列的方法,该计算单元能由至少包括该指令序列的程序控制。本发明的实施例还实现了一种用于在程序控制的计算单元上执行程序的方法,其中,该程序包括至少一个由前述方法生成的指令序列。本发明的其它实施例实现了一种具有执行前述方法的程序代码的计算机程序和一种用于生成计算机程序模块的自动编码器,其应用了用于生成指令序列的方法。

背景技术

[0002] 指令签名的基本原理是,在程序运行期间,将已执行的指令累加成一个校验和(签名),并且在预设的位置上相对参考值进行检查。如果在被视为程序流程的图型式图表的程序流程图中出现分支,就可以进行签名更新,从而将程序流程图的两个或者多个并行路径中的签名统一。
[0003] 如果在计算单元(硬件)上执行程序(软件),则通常期待的是,这个程序实际上也能够如自动编码器在编码时预设地那样执行。然而,实际上,程序或者代码的执行会偏离最开始计划的程序流程。应对此负责的例如有硬件中的故障、干扰信号或者有目标性的、故意的对计算单元进行操控。硬件中的故障例如可以归因于不希望的线路短路、线路中断或者停止工作的电路元件(所谓的“固定故障”),这是一些经常出现的硬件故障类型。干扰信号可以在计算单元运行期间例如通过电磁场或者也以极端温度的形式(处于为计算单元预设的温度范围之外)出现。故意操控硬件例如可以通过以下方式实现:使选取的触点短路,线路中断或者用激光照射该计算单元和/或连接在这个计算单元上的存储器。所述的故障类型例如可以在以下位置出现:计算单元本身的内部,在其中存储了程序的存储器的内部,计算单元所包括的系统的其它组件的内部,或者在计算机系统的组件之间的电连接装置中。为了检测到在执行程序期间的这类出故障,可以执行一种指令流控制。
[0004] 为了对指令流进行控制,一般在生成程序期间计算出一个校验值(签名),它由程序对计算单元的指令中得出。例如可以将指令的操作码(Opcodes)相加起来,从而以这种方式形成一个校验和。在线性程序中(它一般从程序开始直至程序结束连同所有位于其间的指令一起被执行),于是可以计算出一个唯一的校验和(例如普遍称为:校验值),可以在程序结束时或程序结束后对这个校验和进行检查。为了进行这种检查,在通过计算单元执行每个指令的同时还并行地对该指令的值(例如以作为位模型存在的操作码的形式)与特殊寄存器的内容进行清算,例如与寄存器内容相加,或者用位元的形式通过异或法(XOR)与这个寄存器内容关联。只要所有指令值都以这种方式在特定的寄存器中被考虑到了,那么该特定的寄存器的得出的值就可以被与参考校验值进行比较,从而确认这两个值之间是不是一致。如果一致,一般就可以认为程序会按规定执行,也就是说该程序实际上会像生成程序时计划的那样执行。参考校验值例如可以以恒定值方式存储在程序代码中。根据程序是通过何种方式以及利用哪种编程语言生成的,可以由自动编码器(“compiler”)计算该参考校验值,并且写入程序代码中。
[0005] 程序在程序流中经常具有分支,它们也可以被视为“有条件的转移”。在一次分支之后,程序可以在至少两条路径上被继续执行,在此,要到程序运行时才通过评估一种条件来决定选择这两条或者多条可能的路径中的哪一条。需要注意的是,带有多于两条可能的分支路径的分支点通常可以被分解为基本分支点,也就是说,可以分解为分别只具有两个可能的分支路径的分支点。对于在程序运行期间计算出的数值,这意味着,它与以何种频率经历哪条路径有关。为了例如在程序结束前后或者程序流程内的另一个时间点上可以在实时的校验值和为这个时间点定义的参考校验值之间进行比较,存在以下可能性,即,将校验值在可以经历的不同路径内互相校准。这可以以下述形式实现,即,自动编码器在一个路径中集成了一个或者多个对于程序流程本身多余的(多个)指令,它们这样改变校验值,即,使得所述路径在与另一条路径的一个结合点上具有和该另一条路径相同的校验值。通常在此设计为,借助特定的位模型识别特殊的更新并且将其从普通的指令流中过滤出来,从而以特定的方式用于进行更新。

发明内容

[0006] 根据前述内容,本文公开的技术理论涉及一种用于为指令签名法借助代码转换执行隐含的签名更新的方法。
[0007] 本文公开的技术理论的实施例实现了一种用于为计算单元生成指令序列的方法,该计算单元能由至少包括该指令序列的程序控制。其中,在程序运行期间例如通过签名模块基于由计算单元执行的指令来计算签名值并且与参考值进行比较。该方法包括:确定目标签名值;为通向程序点的程序段确定初始指令序列,其中,从初始签名值出发执行初始指令序列会导致计算出与目标签名值不同的初始签名值;和确定初始指令序列的修改,以便获得修改后的指令序列。通过确定修改后的指令序列实现了,通过执行修改后的指令序列会导致计算出目标签名值。按照修改后的指令序列处理有效数据的结果符合于在程序点上按照初始指令序列处理有效数据的结果,其中,修改后的指令序列的所有指令都按照同样的方法参与到签名计算中。
[0008] 因此,根据符合公开的技术理论的方法可以省去用于更新签名的明确的指令,这是因为会由修改后的指令序列固有地进行签名更新。于是在一个签名模块的情况下,可以省去在该签名模块的签名寄存器上的明确的写访问,这些写访问在若干指令签名方法中被用来使一个程序路径中的签名适应于一个并行程序路径中的签名。在运行期间,签名计算同时对所有指令进行处理,也就是说,所有指令都按照相同的方法或者说相同的计算规定参与到签名计算中。于是,不必在运行期间过滤出为签名更新而预设的指令。反正修改后的指令序列的至少若干指令承担双重任务,也就是处理有效数据和以预设的方式更新签名,使得对于这些指令,按照标准指令和更新指令进行区分是没有意义的。按照本文公开的理论,用于更新签名的明确的指令不是必须的,然而尽管如此其还是可以存在的。
[0009] 因此,所建议类型的签名更新方式不同于签名更新的其它方法,其中,更新命令以其它的方式参与到签名计算中,例如通过明确地加上一个特定的值到当前的签名值上。为了这个目的,那些支持签名更新的这些其它方法的签名模块典型地具有至少两个接口:通过第一接口为签名模块输送标准指令的操作码,因此这些标准指令参与到标准的签名计算中。通过第二接口将明确的更新命令传输给签名模块。这些明确的更新命令典型地不会连带算入哈希和中,即不参与标准的签名计算。根据公开的技术理论,签名模块不一定要具有第二接口。同样没必要将签名模块在“标准”指令和更新指令之间进行区分。
[0010] 根据公开的理论,例如所有指令或者值都可以在一次哈希值计算的范围内被考虑进去(“连带哈希(mitgehasht)”),或者加上一个完整的命令(代替仅仅是在一个加法命令中被详细说明的变量)。
[0011] 起始签名值配属于所述指令序列的开端或者之前的一个点。通过签名计算,这个起始签名值被转换成一个最终签名值,它配属于指令序列的末端上的一个点或者该指令序列之后的一个点。初始签名值是初始指令序列末端上的值(或者该指令序列之后的一个点上的值),这个值从初始指令序列中得出。目标签名值是修改后的指令序列末端上的值。
[0012] 对指令序列的修改例如也可以在于,改变一个命令中的未使用的位元,从而改变签名。以这种方式可以改变该签名中的目标位元。
[0013] 在实施例中,修改的确定可以包括两个或者多个指令的顺序的变化,包括插入一个指令,包括替换一个指令和/或将一个指令划分成两个或者多个子指令。
[0014] 在其它的实施例中,修改的确定可以包括将恒定值分派到计算单元的寄存器或者存储器元件(存储器地址)上,而不会在分派之后为了处理有效数据而应用恒定值。典型地,写入了该恒定值的寄存器或者存储器元件不是签名寄存器,而是为有效数据预设的寄存器或者存储器元件。
[0015] 此外,修改的确定可以包括:将差值与用于至少一个修改选项的至少一个签名修改值进行比较;选取一个修改选项;确定一个剩余差值(Restdifferenz);并且,如果剩余差值不等于零:重复比较、选取和确定剩余差值的这些步骤。通过对初始指令序列重复执行多次修改也可以为签名实现不能利用唯一一次修改生成的目标签名值。初始指令序列具有的自由度可能很小,使得也许很难发现一种合适的修改方法。
[0016] 根据其它的实施例,修改的确定可以包括:从多个修改选项中选取一个被选择的修改选项,其中,根据被选择的修改选项修改后的指令序列比起其它的修改选项,相对于初始指令序列具有更低的处理额外耗费。通过参考计算耗费进行成本评估,可以过滤出那些可以为计算单元以尽可能少的额外计算耗费实现所希望的签名更新的修改选项。
[0017] 被选择的修改选项的选取包括对数据库的查询,在数据库中存储了针对多个修改选项的修改规定,借助该修改规定能为程序段查明多个修改选项。修改规定也可以详细说明需要满足的条件,这些条件给出,是否以及可以以何种方式修改一个特定指令或者指令组。参与这次评估的尤其可以是数据关联性分析
[0018] 根据其它实施例,目标指令值的确定可以包括为相对于程序段可替换的、通向程序点的程序路径查明指令值。
[0019] 修改的确定还可以包括:在程序段中识别能划分的指令,将该能划分的指令的一个参数分解成至少两个子参数,并且用具有至少两个子参数的各一个子参数的至少两个子指令替换所述能划分的指令。
[0020] 按照其它实施例,可以在确定对初始指令序列进行修改时尝试,确定不会使指令序列延长的修改。如果无法发现这样一种修改选项(利用合理的耗费),则该方法可以具有以下步骤中的至少一个步骤:
[0021] 确定一种会使指令序列延长的修改;
[0022] 为明确的代码更新插入命令;并且
[0023] 改变目标签名值和/或初始签名。
[0024] 就选项“改变目标签名值和/或初始签名”而言指出,所希望的目标签名在某种程度上可以是在进行优化时的一个附加的边界条件。改变目标签名值和/或初始签名的可能性为进行修改提供了额外的自由度。对目标签名值和/或初始签名进行修改在某些情况下可能意味着,即也必须在一个并行的程序路径中修改指令序列。
[0025] 本发明的可替换的实施例提供了一种用于在程序控制的计算单元上执行程序的方法,其中,程序包括至少一个指令序列,该指令序列由用于为计算单元生成指令序列的方法产生。在执行该程序期间,通常为每个由计算单元执行的签名进行一次签名计算,并且在该程序的程序流中为此预设的位置上利用一个参考值对在运行期间计算出的签名值进行检查。因为不存在用于更新签名寄存器或者签名值的明确的指令,所以例如对于潜在的攻击者就更难对签名寄存器进行故意操控。
[0026] 公开的技术理论的另一个实施例提供了一种具有程序代码的计算机程序模块,当该计算机程序模块在计算机上运行时,程序代码用于实施上述的用于生成指令序列的方法。
[0027] 公开的技术理论的另一个实施例提供了一种用于生成这样一个计算机程序模块的自动编码器。
[0028] 另一个实施例提供了一种用于为计算单元生成指令序列的装置,该计算单元能由至少包括该指令序列的程序控制。在程序运行期间基于已执行的指令来计算签名值并且与参考值进行比较。该装置包括:目标签名确定装置,用于确定目标签名值;指令序列确定装置,用于为通向程序点的程序段确定初始指令序列;签名调查装置,用于基于初始指令序列,查明配属于程序点的初始签名值;以及修改确定装置,用于确定对初始指令序列的修改,以便获得修改后的指令序列。执行修改后的指令序列会导致对目标签名值进行计算,并且按照修改后的指令序列处理有效数据的一个结果符合于在程序点上按照初始指令序列处理有效数据的结果,其中,对初始指令序列进行修改会导致在程序段内以不同的时间顺序对涉及有效数据的指令进行处理。
[0029] 在迄今为止的指令签名法中,通过明确的指令或者明确的存储器访问进行签名更新或者“升级”。这会在程序完成时带来额外耗费。在某些情况下,在系统中可能也需要进行架构变化来支持明确的更新指令或者明确的寄存器。
[0030] 根据公开的技术理论,可以这样转换程序代码,即,通过一次代码转化可以对指令签名进行一次有目标性的(预设的)更新。附图说明
[0031] 下面借助附图更详尽地描述本发明的实施例。其示出:
[0032] 图1:示出了借助变换法进行代码转换;
[0033] 图2:示出了借助插入法进行代码转换;
[0034] 图3:示出了借助替换法进行代码转换;
[0035] 图4:示出了初始指令序列和可以代替初始指令序列的修改后的指令序列的示意流程图的一个截取部分;
[0036] 图5:示出了根据本文公开的技术理论的一个实施例的用于生成指令序列的方法的流程图;
[0037] 图6:示出了根据本文公开的技术理论的另一个实施例的用于生成指令序列的方法的细节的流程图;以及
[0038] 图7:示出了根据本文公开的技术理论的一个实施例的、用于为计算单元生成指令序列的装置的示意性框图
[0039] 在接下来借助附图对实施例进行阐述之前,要指出的是,相同的元件或者功能相同的元件用同样的或者类似的参考标号标识,并且免去了对这些元件的重复描述。因此,具有相同或者类似参考标号的元件的说明内容可以相互交换使用。

具体实施方式

[0040] 在迄今为止的指令签名法中,都通过明确的指令或者访问存储器对签名进行更新。然而也可以在不改变硬件结构的情况下有效地通过代码转换进行更新。为了在处理器上应用一定的功能,通常存在多个可能性。尤其是当准备好,和最佳代码相比允许使用至少一个附加指令(也可以是多个)时,则存在多种写代码的可能性。这些可能性可以被用来通过选择合适的程序代码来隐含地进行更新。
[0041] 通过对不会改变程序的结果的程序代码进行改变,可以使另一点处(不同于发生改变时的点)的签名成为一个所希望的目标签名值。
[0042] 对于专业技术人员来说已知的是,找到不会影响程序的逻辑功能的代码转换,并且不需要在本文中进行累述。在实施例中,在控制流签名方法中,有目标地从大量可能的转换法中选取了一种无变化的转换法,使得签名转换成一个预设值。
[0043] 最终,每个自动编码器进行不同的代码转换,其中,在最优化程度不同的情况下产生不同的、但是功能相同的代码。在本发明的实施例中,使用了其中一种转换法,它能产生一个所希望的签名。
[0044] 在本发明的实施例中,导致获得所希望的目标签名的代码的转换法取决于所选择的预设的签名算法,其中,为不同的签名算法可以有不同的转换法形成目标签名。
[0045] 在本发明的实施例中,预设了一个起始签名和一个目标签名,并且选择了一个相应的代码转换法。对于插入指令的情况,也可以有多个解决方案。然而在本发明的实施例中没有插入指令,而是将现存的指令进行交换,从而将代码经常费用保持较低。
[0046] 当转换法提供的自由度不足,使得无法发现一种符合所给定的边界条件(例如给定的代码长度)的转换法时,本发明的实施例可以对起始签名或者目标签名进行更改。
[0047] 在本发明的实施例中,尝试执行这样一种转换法,即,使得转换后的程序代码、例如对于每个基本块(basic block)不会更长,例如通过纯粹地交换指令实现。如果没发现这样一种解决方案,则在实施例中可以或者a)插入一个用于明确地更新签名的命令,b)插入一个额外的操作,例如相加两次而不是相加一次,或者c)对起始签名和/或目标签名进行更改。
[0048] 在本发明的实施例中,对初始指令序列进行的修改可以包括以下转换中的一个或者多个,其中,然而这里并不是最后完成的列表:
[0049] -改变两个或者多个指令的顺序;
[0050] -插入一个或者多个指令;
[0051] -替换一个或者多个指令;
[0052] -将一个指令划分成两个或者多个子指令;
[0053] -将恒定值分派到计算单元的寄存器或者存储器元件上,而不在分派后将恒定值用于处理有效数据;
[0054] -执行寄存器互换,例如通过交换所使用的处理器寄存器(例如从R1,R2,R3到R2,R1,R3或者R3,R2,R1)。其中必须考虑到,寄存器在依存的或者说跟随的基块中也具有正确的值,也就是说,除了基块还必须实现全局适应;
[0055] -使用自由寄存器,其中又需要除了基块还实现全局分析和适应;
[0056] -用自由选择的位元填写指令中未使用的区域;并且
[0057] -在一次相加或者相减时对操作数的符号进行更改,并且相应地交替使用加法和减法。
[0058] 然而对于专业技术人员显而易见的是,除了所述的情况之外也可以进行实现目标签名的其它修改或转换。
[0059] 图1示出了进行代码转换的第一选项,其在于,修改两个或者多个指令的顺序,也就是说,通过推移指令更改签名值。这种修改选项在本说明书的范围内被称为“变换”。图1中左边的竖列示出源代码,其中,以指令1,指令2,指令3,指令4,....指令N的顺序执行指令。这个顺序例如由自动编码器或者代码优化程序确定和实现,并且使得指令以一种预设的方式对有效数据进行处理。右边的竖列示出进行两次变换后的结果。第一次变换是将指令1和指令3交换位置。第二次变换导致指令4和指令N交换位置。一般来说,相对于对有效数据的处理,要求对程序段进行的修改要保持透明。这意味着,在执行修改后的程序段后,以和源程序段起作用相同的方式处理有效数据的结果。与之相反地,在修改后的程序段内,对有效数据的处理可能偏离源程序段范围内进行的处理。在变换时例如利用以下情况,即,可以改变特定指令的顺序,而不会改变处理有效数据的结果(也就是说,在修改后的程序段的末端上)。
[0060] 当签名计算不能交换时,可以借助变换法应用代码转换,使得交换指令的顺序得到不同的签名值,即,当签名(指令1,指令2)不等于签名(指令2,指令1)时。就有效数据而言,指令1和指令2却相反地通常可交换。以这种方式可以通过改变指令的顺序来影响签名。如果就有效数据而言可以对指令的顺序进行次数很多的互换,那么对指令的变换就有很高的自由度,使得可以让签名适应多个所希望的目标签名值。
[0061] 图2示出为了进行代码转换的第二选项,其在于,插入了一个或者多个不包含在源程序代码中的指令。在图2中,在源程序代码的指令2和指令3之间插入了一个额外的指令X。此外,紧接着在指令4上插入了另一个额外的指令Y。插入的指令X和指令Y例如可以是不会改变有效数据的指令。在这里可以考虑加上一个值零,重复一次存储器读取-或者写入过程(使得同一个值被两次读取或者写入)或者将一个特定的值装载到处理器的一个在当前时间点未使用的寄存器中。
[0062] 图3示出为了进行代码转换的第三选项,其在于,替换了一个源指令。在图3中,源指令2被两个指令(指令X和指令Y)代替。这就分解了参数,使得结果保持不变,但是签名得到所希望的目标值。正如图3的下部分所示,指令2例如可以是将恒定值2468与寄存器R3中的当前内容相加。这次相加可以划分成两个部分相加,其中,在第一部分相加的范围内(指令X)首先加上数值1330,并且在第二部分相加的范围内(指令Y)加上数值1138。因此,在结果中,寄存器R3在执行这两个指令(指令X和指令Y)后相对于它之前的内容增加了值2468。代替两次相加,也可以进行两次相减,多次部分相加,多次部分相减或者(多次)相加和(多次)相减的组合。这种进行代码转换的选项开启了多个广泛的和/或灵活的可能性,因为可以通过多次不同的相加-和相减的组合形成恒定值。例如可以通过加上一个恒定值并且紧接着减去同一个值在结果中将零值加入到寄存器,这不会影响到处理有效数据的结果。但是相反地,这种指令组合对签名计算有影响,在有目标性地选择恒定值时可以这样调整这个影响,使得可以实现签名更新,只要关于计算单元在程序运行期间没有在处理指令时出现影响签名计算的故障,这次更新就将签名在特定的程序点带到目标签名值。
[0063] 因此图3示出了代码转换的实施例,其中,不是在仅一个步骤中,而是在两个步骤中计算加法。通过选择划分这两个步骤的方式,可以这样改变(更新)指令签名,即,使得正好可以实施一个明确的签名更新指令的功能。
[0064] 代替对一个恒定值进行的处理的划分,如图3所示,也可以在两个或者多个步骤中处理寄存器值或者变量。例如当第一寄存器R1的内容应该加到第二寄存器R2的内容中时,那么首先可以将R1的最低值的位元加到R2的内容中,然后将第一寄存器R1的内容除以二(大部分情况:除以n),例如借助右移(“right shift”)并且紧接着两次(大部分情况:n次)加到第二寄存器中。
[0065] 图1至3中作为实施例给出的修改选项适于有目标性地影响签名,而不会直接影响到计算单元的签名寄存器的内容或者连接的签名模块的内容,或者说,不存在一个或者多个影响签名寄存器的内容的指令。其它实施例是将恒定值分派到至少暂时未被处理器使用的寄存器上。
[0066] 图4示出流程图的一个截取部分。在程序点P上,两条程序路径或者说指令序列402和404再次统一,它们从一个分支点(未示出)出发。在指令序列402的末端上,签名在指令执行正确的情况下的值为SIGP1。与之相反地,第二指令序列404的初始版本实现签名值SIGP2,它一般与签名值SIGP1相差一个差值ΔSIG=SIGP1-SIGP2。在这两个指令序列
402和404在点P处统一之前,通常希望的是,只要在这些指令序列中实现了无故障地执行指令,这些在不同的统一的指令序列402和404中的签名就具有相同的签名值。为了这个目标,这两个指令序列404,402的其中一个中的签名被调整使其符合另一个指令序列402,
404的签名。在图4中调整了第二指令序列404,使得由初始指令序列404中产生修改后的指令序列404′。修改后的指令序列404′在程序点P处具有修改后的签名值SIGP2′,它与第一指令序列402的签名值SIGP1一致。有效的是:SIGP2′=SIGP2+ΔSIG=SIGP1。以这种方式可以在程序点P中,在指令序列402,404′统一以后继续进行签名计算和签名检查,而且无论被计算单元处理完的是第一指令序列402还是(修改后的)第二指令序列404′,对于签名计算都不重要。
[0067] 在修改后的指令序列404′的范围内可能的是,通过一次明确的签名更新调整签名使其符合于指令序列402的签名。然而,根据本文公开的技术理论却对指令序列404进行修改,使得至少其中一些源指令I1,I2和In被修改。修改后的指令序列404′于是例如具有修改后的指令I1′,I2′和In′。对指令的修改可以是对指令的移动、删除、添加、替换或者改变。尤其是在初始指令序列404内处理数据的时间顺序与在修改后的指令序列404′内处理数据的时间顺序不同。时间顺序上有区别也是因为,例如在修改后的指令序列
404′的一个特定的位置上插入了一个零加法,因为这样一来,接下来的指令后来至少执行一次时钟循环。
[0068] 典型情况下,至少那些代表程序或者程序段的输入-、输出-或辅助变量的数据、也就是说那些影响该程序或者程序段的输出或者结果的数据属于程序或者程序段的有效数据。根据定义,那些由处理器处理的、却不影响程序或程序段的输出的数据也可以归为有效数据。后一种数据例如可以是写入计算单元的寄存器中或者从中读取的数据,然而这些数据与该程序或程序段的输入变量,辅助变量和/或输出变量不相互影响。
[0069] 图5示出一种用于为计算单元生成指令序列的方法的示意流程图,其符合本文公开的技术理论的一个实施例。
[0070] 在行为步骤502中,为程序点P确定目标签名值。该目标签名值例如可以从通向程序点P的另一条程序路径的按标准计算的参考签名中得出。
[0071] 在504中,为通向程序点P的程序段确定初始指令序列。大部分情况下,程序段通入程序点P中,尽管可能有偏差,也就是说,程序段在程序点P之前就终止。确定初始指令序列例如可以通过自动编码器实现。在本文中公开的用于生成指令序列的范围内,初始指令序列也可以例如从数据库或者数据载体中读取。
[0072] 作为可选择的行为步骤,在506中可以基于初始指令序列的指令来查明初始签名值。同样可选择的是,在508中确定目标签名值和初始签名值之间的差值。通过确定这个差值,有时可以更方便地发现可能的修改方法。这个差值例如可以作为参数引入一个函数中,利用它计算一个恒定值,这个恒定值被写入计算单元的一个当前未使用的寄存器中。然后这次寄存器写入操作就可以改变签名,改变内容正好符合该签名的所需要的差值。
[0073] 然后,在行为步骤510的范围内,确定初始指令序列404的修改,其实现修改后的指令序列404′。
[0074] 在图6中描绘了一个示意性流程图,它示出一种用于生成指令序列的方法的一个方面。从行为步骤508出发,在该行为步骤中确定目标签名值和初始签名值之间的差值,在608中将差值与至少一个用于一个修改选项的签名修改值进行比较。在610中,选择修改选项,并且对指令序列进行相应的修改。当用于所选修改方法的签名修改值与确定的差值一致时,就达到了修改的目标。这通过以下方式确定,即,在612中确定剩余差值,并且在614中将这个剩余差值与零进行比较。当剩余差值等于零时,随着输出修改后的指令序列616,方法流程结束。如果相反地,剩余差值不等于零,那么方法流程从查询614调回到行为步骤
608,在那里将剩余差值与用于一个或者多个修改选项的签名修改值进行比较。以这种方式可以进行多次重复,直到剩余差值等于零。在每次重复时执行另一个修改选项,然而其却对于处理有效数据的结果不重要,即,是“透明的”。
[0075] 通常对于方法而言追求的是,尽可能少地对初始指令序列进行修改,因为以这种方式可以为计算单元将经常由修改导致的更多耗费保持在合理范围内。在进行变换时,如图1中所示,可能完全不会增加计算耗费,而插入指令却可能增加计算耗费。不同的修改选项也就对计算耗费有不同的影响。这个信息可以连同修改选项被存储起来,使得决定选择一个特定的修改选项时可以将实际增加的计算耗费考虑在内。因此,为了选择(多个)修改选项的一个可能的策略可能是首先校验可能的指令变换法。只有当证实了仅利用变换不能达到签名的目标签名值时,才可能转移到其它的修改选项,如插入和/或替换。
[0076] 图7示出一种根据本文公开的技术理论所述的、为计算单元生成指令序列的装置100的一个示意框图。装置100例如从自动编码器接收到指令作为输入变量。这些指令在大部分情况下以初始指令序列的形式呈现。装置100包括指令序列确定装置104,它确定初始指令序列或者通过读取该装置100的数据库或类似的行为步骤提供初始指令序列。
[0077] 装置100还包括目标签名值确定装置102。这个目标签名值确定装置102例如可以设计用于定义出程序点,两条或者多条并行的程序路径在这些程序点处又结合在一起。在这些程序点通常预设的是,在其中一些程序路径中执行签名更新,于是不同签名路径中的签名在所述程序点处相互一致。这个目标签名值确定装置102可以确定其中一条可以用于确定签名的作为参考路径的程序路径。在这条参考路径中通常不会进行签名更新,尽管不完全排除这一点。相反地在另一个或其它的程序路径中通常预设一次签名更新。
[0078] 设有签名调查装置106,用于为初始指令序列并且在初始指令序列的基础上查明一个初始签名。查明的初始签名被传输给差值确定装置108,这个差值确定装置接收目标签名值作为另外的输入变量。所查明的、在目标签名值和初始签名之间的差值被转达给修改确定装置110,这个修改确定装置也从指令序列确定装置104接收到初始指令序列。修改确定装置110输出修改后的指令序列,它也是用于生成指令序列的装置的一个输出内容。
[0079] 尽管在描述装置的上下文中描述了一些方面,但是可以理解为这些方面也是对相应方法的描述,于是可以将装置的组块或者构件也理解成相应的方法步骤或者理解为方法步骤的特征。与此类似地,在描述方法步骤的上下文中描述的或者被描述为方法步骤的那些方面也是对相应组块或者细节或者相应装置的特征的描述。若干或者所有方法步骤都可以由硬件设备(或者在使用硬件设备的情况下)、例如微处理器或者由可编程的计算机或者电子线路来执行。在一些实施例中,可以由这样一种设备执行若干或者多个最重要的方法步骤。
[0080] 根据特定的实施要求,本发明的实施例可以在硬件中或者在软件中实施。这种实施可以在应用一种存储了电子可读取的控制信号的数字式存储器介质(例如软盘,DVD,蓝光光盘,CD,ROM,PROM,EPROM,EEPROM或者闪存),一种硬盘或者另一种磁性或光学存储器的情况下进行,这些控制信号与可编程的计算机系统能这样共同起作用或者共同起作用,即执行各个方法步骤。因此,数字式存储器介质可以是计算机可读取的。
[0081] 根据本发明的一些实施例于是包括数据载体,其具有电子可读取的控制信号,这些信号可以与可编程的计算机系统这样共同起作用,即执行一种本文所述的方法。
[0082] 总的来说,本发明的实施例可以作为具有程序代码的计算机程序产品实施,其中,当计算机程序产品在计算机上运行时,该程序代码使得能够执行其中一种方法。
[0083] 程序代码例如也可以存储到一个机器可读取的载体上。
[0084] 其它实施例包括用于执行其中一种本文所述方法的计算机程序模块,其中,计算机程序模块被存储到一个机器可读取的载体上。
[0085] 换句话说,因此根据本发明的方法的一个实施例是一种计算机程序模块,它具有一个当计算机程序模块在计算机上运行时,用于执行其中一种本文所述方法的程序代码。
[0086] 因此,根据本发明的另一个实施例是一种数据载体(或者一种数字式存储器介质或者一个计算机可读取的介质),在其上记录了用于执行其中一种本文所述方法的计算机程序模块。
[0087] 因此,根据本发明的方法的另一个实施例是一种数据流或者信号序列,数据流或者信号序列代表着用于执行其中一种本文所述方法的计算机程序模块。例如可以以如下方式配置该数据流或者信号序列,即,使得能够通过数据通信连接装置、例如通过网络,进行输送。
[0088] 另一个实施例包括一种处理装置、例如计算机或者可编程的逻辑构件,它以如下方式被配置或者被调整,即,使得能够执行其中一种本文所述的方法。
[0089] 根据本发明的另一个实施例包括一种装置或者一种系统,其设计用于将用于执行至少其中一个本文所述方法的计算机程序模块传输到接收器。这次传输例如可以电子地或者光学地实现。接收器例如可以是计算机、移动装置、存储器装置或者类似的装置。该装置或者该系统例如可以包括数据库服务器,用于将计算机程序模块传输到接收器。
[0090] 在一些实施例中,可以使用一种可编程的逻辑构件(例如现场可编程阵列,FPGA)来实现根据本文所述方法的一些功能或者全部功能。在一些实施例中,现场可编程门阵列可以与微处理器共同起作用,从而执行其中一种本文所述的方法。总的来说,方法在若干实施例中是在一个任意的硬件装置方面被实施。该硬件装置可以是能普遍使用的硬件、计算机处理器(CPU),或者是针对本方法的特殊的硬件、例如ASIC。
[0091] 在上述实施例中仅仅示出了本发明的原理性的描述。不言而喻地,根据本文的布置方案和细节的修改和变体会使得其他专业技术人员理解。因此目的在于,使得本发明仅受到权利要求的保护范围的限制,而不受到本文中那些借助说明书和对实施例的阐述示出的特殊的细节的限制。
相关专利内容
标题 发布/更新时间 阅读量
一种修改中性笔 2020-05-12 964
修改图表 2020-05-11 421
修改素材 2020-05-11 268
定向声音修改 2020-05-13 700
修改带 2020-05-11 58
修改对话窗口 2020-05-12 756
声学信号修改 2020-05-12 729
引导过程修改 2020-05-13 821
错字修改笔 2020-05-12 603
修改带 2020-05-11 935
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈