首页 / 专利库 / 企业组织 / 流程图 / 实现可移植内容保护以保护机密安全

实现可移植内容保护以保护机密安全

阅读:113发布:2021-04-13

专利汇可以提供实现可移植内容保护以保护机密安全专利检索,专利查询,专利分析的服务。并且一个源级编译器(20)可以随机地选择编译协定来实现可移植的内容的保护,以及通过混排相关数据保护嵌入一个程序中的机密。所述的程序可以使用一个适用于相关数据的 源语言 开发。为了隐藏嵌入的机密,在一个 实施例 中,预编译器 软件 可以用于基于一个随机的 种子 指示和一个混排 算法 (90)来以一个随机执行顺序编译该程序,该种子指示随机地选择编译协定,在执行期间该混排算法使相关数据跨越该程序移动。,下面是实现可移植内容保护以保护机密安全专利的具体信息内容。

1.一种实现可移植内容保护以保护机密安全的方法,包括:
基于适合于相关数据的源语言而开发一个包括该相关数据和一个机密的程 序;以及
为隐藏上述的机密而以一个随机的执行顺序编译该程序。
2.如权利要求1的方法,包括:使用一个种子指示以便随机地选择编译协定。
3.如权利要求1的方法,其中,以随机的执行顺序编译该程序包括在执行期 间混排上述的相关数据。
4.如权利要求3的方法,包括:
使用源语言以便识别程序的一个或多个内存分配以及并行流对象;以及
使上述的程序的随机的执行顺序能够以上述的一个或多个内存分配以及并 行流对象为基础
5.如权利要求1的方法,包括:
嵌入上述的机密到程序的源代码中;以及
以一个抗干扰方式将程序的源代码转换为与平台无关的编译器改进源代 码。
6.如权利要求5的方法,包括:通过优化代码隐藏,在将编译器改进的源代 码重新编译为特定平台的编译器上的目标代码,从而保护上述的机密不被泄 密。
7.如权利要求2的方法,包括:
决定是否有可用的种子指示以和调试信息一起使用;以及
如果是这样的话,允许程序的重新编译以种子指示以及调试信息为基础。
8.如权利要求3的方法,包括:
为程序以及相关数据建立一个控制流程图,该控制流程图指示程序源代码 内的一个或多个数据与代码的路径;
识别相关数据中的一个或多个数据变量以便作为数组元素随机地分配;
在上述程序的上述源代码中插入代码以便沿着对于上述的一个或多个数据 变量的至少一个数据变量的上述的一个或多个数据路径的至少一个数据路径混 排数据;以及
当通过随机、唯一的数据交换顺序,代码路径汇聚达到某一排列时,产生 相同的数据排列。
9.如权利要求4的方法,包括:
在单任务语义非标准语言中使用一个适用的源语言以便获得程序的源代 码;
为堆分配对象而引入参考计数,以便帮助单任务语义非标准语言而进行实 时内存的回收;以及
以随机的执行顺序执行程序以便当重新编译时保存适用的源语言的单任务 语义非标准语言。
10.如权利要求5的方法,包括:
在编译器改进源代码中引入至少一个多余的以及辅助的计算;以及
在重新编译期间检测在至少一个多余的以及辅助的计算中是否产生一个变 化。
11.一种实现可移植内容保护以保护机密安全的方法,包括:
开发一个程序,该程序包括一个或多个数据变量,代码,跳转以及在控 制流程图中指示对于上述的一个或多个数据变量的至少一个唯一变量设计的机 密;以及
以上述的至少一个唯一变量设计为基础编译程序隐藏上述的机密,在执行 期间混排数据。
12.如权利要求11的方法,包括:识别一个或多个代码块作为节点和识别一个 或多个跳转作为控制流程图的弧线。
13.如权利要求12的方法,包括:
为控制流程图增加一个或多个伪入口以及出口节点;
标记上述的一个或多个伪入口以及出口节点为指定的;
为上述的一个或多个数据变量分配不同的数组;以及
为上述的一个或多个数据变量的不同的变量偏移量指定随机排列。
14.如权利要求13的方法,包括:
找到控制流程图上连接上述的一个或多个伪入口以及出口节点的两个标记 的节点的最短的连接途径;
遍历标记全部的弧线与节点的最短的连接途径;
判定是否全部的弧线已经被标记;以及
否则,找到另一个连接两个不同标记节点的最短的连接途径。
15.如权利要求14的方法,包括对应全部被标记的弧线,使用节点排列生成代 码以便判定在上述的一个或多个块的至少一个块中上述的不同的变量的偏移 量,以及为控制流程图的上述的一个或多个弧线的至少一个弧线产生辅助代 码。
16.一个系统包括:
用于开发程序的用户接口,该程序包括基于适合相关数据的源语言的相关 数据和一个机密;
与上述的用户接口连在一起的预编译器,用以为隐藏上述的机密而以一个 随机的执行顺序编译该程序;和
一个处理器,用以执行上述的用户接口以及上述的预编译器。
17.如权利要求16的系统,进一步的包括:
生成器,提供一个种子指示以便为程序的不同的编译随机地选择编译协 定。
18.如权利要求17的系统,进一步的包括:
一个混排装置,通过上述的预编译器在执行期间移动上述的相关数据。
19.如权利要求16的系统,其中用户接口允许在上述的预编译器以一个抗干扰 方式将程序的源代码转换成为与平台无关的编译器改进源代码之前将上述的机 密嵌入到程序的源代码中。
20.如权利要求18的系统,进一步的包括其上存储有上述的用户接口、上述的 预编译器、上述的生成器以及上述的混排算法的一个存储介质。

说明书全文

技术领域

发明通常涉及内容保护,特别涉及用于保护嵌入软件中的机密的可移植内 容保护的实现。

背景技术

许多商业组织提供敏感的基于软件的内容给不同的用户。一个被保护的内 容的传播的情况是通过网络电子发布包括软件、书籍、音乐和视频的内容到系 统和/或装置。然而,对所发布的内容,比如软件程序很容易受到各种不同的攻 击,例如被另一个合法终端用户直接攻击,或者被一个远程黑客或一个自动的 攻击间接攻击。例如:许多软件工具可以被用来执行不同类型的自动攻击,从 被保护内容中获取机密。为了防止反向操纵及其它上述所述的攻击,公司不得不 保护软件程序代码的完整性,使其能在敌对的环境中也可以安全使用。然而,例 如未被保护的数据或者程序代码仍然可以很轻易地被拷贝并且传播到无数国际 互联网络用户,在这种状态下,版权以及公司的信息的保护仍然面临很大的挑 战。另外,用于再现内容的开放式平台的出现使得内容在恶意攻击面前更加脆 弱。
为此,可以对内容采取某种保护形式,例如为内容的使用权支付了费用并 且同意遵守使用条款的特定当事人可以拥有该内容。以这样的方式,内容保护 可以允许一个授权的查看者全权使用该内容,但是禁止盗版用户非法制造拷贝 或者从中获取嵌入的机密。内容保护可以包括产生抗干扰软件,使其很难监测 到程序代码的执行。对于机密的内容,这样保护可以结合加密技术使用,加密 技术是对抗干扰软件的补充。尽管加密技术在其中用于传输的发送和接收双方 都是可信赖的用户这样的环境中可以顺利地执行,在敌对的环境中来自恶意软 件以及具有不良企图的用户的软件攻击都是不可避免的。因此,传统的软件所 执行的密码算法是不够的,特别是在阻止包括可以访问和控制执行环境的敌对 的用户或自动攻击工具的许多复杂攻击的情况下。随着软件自动攻击工具的出 现,在公开的程序代码中静态地隐藏机密也许不再适用。
尤其是通过空间(在代码中的)和时间(更新的频率)保护例如所有权算 法和加密密钥的嵌入机密,可以使其难以对一段软件中意图的行为进行修改。 举例来说,当它需要同与需要分布在结构上不确定格式的软件相结合,所述的 需要分布在结构上不确定格式的软件包括作为原始源代码的大量相同的信息, 然而,分布式编译软件变得相对容易解码,在恶意反向操作的攻击下泄漏了机 密。此外,设计抗干扰的软件也许是困难的,该软件可能以一种非显而易见的 方式而失效,该方式不产生任何对攻击者有用的信息,因为在该软件中保持对 来自攻击者的任何不期望的更改的脆弱性的同时令软件难以被更改是两个相对 的要求。
因此,继而需要一个实现对可移植的内容进行保护的更好的方法,尤其是保 护嵌入在软件中的机密的方法。

发明内容

本发明的目的是提供实现可移植内容保护以保护机密安全的方法和系统。
本发明的一种实现可移植内容保护以保护机密安全的方法包括:
基于适合于相关数据的源语言而开发一个包括该相关数据和一个机密的程 序;以及
为隐藏上述的机密而以一个随机的执行顺序编译该程序。
该方法还包括:使用一个种子指示以便随机地选择编译协定。
该方法中,以随机的执行顺序编译该程序包括在执行期间混排上述的相关 数据。
本发明的另一种实现可移植内容保护以保护机密安全的方法包括:
开发一个程序,该程序包括一个或多个数据变量,代码,跳转以及在控 制流程图中指示对于上述的一个或多个数据变量的至少一个唯一变量设计的机 密;以及
以上述的至少一个唯一变量设计为基础编译程序隐藏上述的机密,在执行 期间混排数据。
该方法还包括:识别一个或多个代码块作为节点和识别一个或多个跳转作 为控制流程图的弧线。
本发明的实现可移植内容保护以保护机密安全的系统包括:
用于开发程序的用户接口,该程序包括基于适合相关数据的源语言的相关 数据和一个机密;
与上述的用户接口连在一起的预编译器,用以为隐藏上述的机密而以一个 随机的执行顺序编译该程序;和
一个处理器,用以执行上述的用户接口以及上述的预编译器。
本发明提供的系统进一步可以包括:生成器,提供一个种子指示以便为程 序的不同的编译随机地选择编译协定。
本发明提供的系统进一步可以包括:一个混排装置,通过上述的预编译器 在执行期间移动上述的相关数据。
在本发明提供的系统中,用户接口允许在上述的预编译器以一个抗干扰方 式将程序的源代码转换成为与平台无关的编译器改进源代码之前将上述的机密 嵌入到程序的源代码中。
附图说明
图1是与本发明的一些实施例相符合的程序编译器模块的示意图;
图2是根据本发明的一个实施例如图1中所示的以随机执行顺序经由源级 编译器编译的程序以遮掩机密的流程图;
图3是根据本发明的一个实施例的程序源代码的代码映射,其中程序代码 块用来构造如图1所示的预编译器软件的控制流程图;
图4是根据本发明的一个实施例的混排算法的流程图,该算法在如图1所 示的预编译器软件执行期间在程序间移动相关数据;
图5A是按照本发明的一个实施例的、一个通过一个网络在编译器平台和用 户平台之间的通信链路的示意图,该通信链路分布用于实现内容保护的软件, 通过图1所示的预编译器软件来实现机密的安全;
图5B是根据本发明的另一个实施例的一个无线通信链路的示意图,;
图6A是根据本发明的一个实施例的基于图5A中所示的编译器平台与图1 所示的预编译器软件相结合的基于处理器的系统;和
图6B是根据本发明的一个实施例的如图5B所示的用户平台为基础的无线装 置。

具体实施方式

如图1所示的依照本发明的一个实施例的编译器模块20包括,一个接收用 于产生编译器改进的代码45的程序源代码35的源级编译器30,实现对可移植的 内容保护确保嵌入机密的安全。在本发明的一些实施例中,程序编译器模块20 可以包括用户接口50,用于根据源语言60开发程序55。用户接口50的一个例子 可以是一个语言编辑器,该语言编辑器能够提供一个适合于使用不同的非标准 语言的语言语义的程序设计环境。
在程序开发中,相应于程序55的程序源代码35可以包括相关数据65和一个 或多个嵌入机密75。源语言60对程序55中的相关数据65是可应用的。因为源语 言60在相关数据65上是适用的,源语言60可以操纵变量,比如程序55中引用的 数据变量。然而,数据变量可以根据开发程序55使用的具体源语言被初始化和/ 或改变。
在一些例子中,程序55可以包括以语言语义和非标准语言为基础的语句或 指令,包括的变量的数据可以作为相关数据65而与程序55相关。在分布之前, 程序55可以被程序编译器模块20按一个随机执行顺序编译,实质上从非故意的 公开中隐藏了嵌入的机密75。利用源级编译器30,编译器模块20可以隐藏这些 机密75,例如一些情况下在源级别嵌入在程序源代码35之内的所有权信息和程 序设计技术。
与本发明相关的一些实施例相符合,源级编译器30可以包括预编译器软件 80,该预编译器可通过一个利用了可提供伪随机种子数目的生成器85的随机数 而被播种。为了在隐藏嵌入的机密75时以随机执行的顺序编译程序,预编译器 软件80可以使用一个混排算法90。当生成器85可以提供一个种子表示,以便随 机从程序55的不同编译中选择一个或多个编译协定的时候,在预编译器软件80 执行期间,混排算法90可使相关数据65在程序55间移动。
根据本发明的一些实施例,当预编译器软件80以一个抗干扰方式转换程序 55成为与平台无关的编译器改进代码45时,混排算法90可以将所期望的机密75 嵌入到程序源代码35。这样,当在一个平台特定的编译器上重新将编译器改进 代码45编译成为对象或编译代码时,实质上源级编译器30可以实现可移植的内 容保护,以便嵌入的机密75不泄密,从而使代码隐藏优化。简而言之,源级编 译器30可以编译程序55,以便程序源代码35不能以有图谋的方式被有效地改 变,可移植地保护适当地嵌入的机密不被无意识的泄密,例如在本发明的一些 实施例中的编译器改进代码45中的所有权算法和加密密钥。
即使实现保密嵌入机密75的可移植的内容保护的逻辑被结合到预编译器软 件80内,预编译器软件80转换一个以可适用的编程源语言编写的程序,其它的 实施例也可以使用不同类型的分析和控制代码及/或数据流的程序和工具,例如 软件分析、调试测试工具来实现。然而本发明的不同实施例也可以以其它软件 开发工具的方式实现。
无论如何,与本发明的一些实施例相符合,通常用于编写或开发源级编译 器30的高级计算机程序设计语言的类型可以包括面向对象的语言和过程语言两 者。例如,为实现源级编译器30,可采用高级程序设计语言包括C语言和C++, 作为两个例子。尽管源级编译器30的一些实施例特别适合于以源语言C语言及/ 或C++开发的程序,但是在本发明的一些实施例中任意通用的可提供用于程序55 的相关数据65的源语言可以被方便地用于获得程序源代码35。
本发明的许多例子中可以使用其它的源语言,包括一个并行程序设计语 言,该语言能够通过万维网(WWW)或其它的通信媒质分布多媒体内容。举例 来说,可以使用指向于基于国际互联网络的软件内容分布的并行程序设计语言 技术标准开发程序55。这个技术标准可以用来创建程序源代码35,包括图形、 声音、文本或其它的媒体内容。根据本发明的一个实施例,程序55可以被分布, 以便用户可以通过在国际互联网络上的可利用的具体网址访问该程序55。
参照图2,依照本发明的很多实施例,图1所示源级编译器30可以实现可 移植的内容保护,其在程序源代码35中嵌入机密75,提供与平台无关的,抗干扰 编译器改进代码45。源级编译器30可以接收,例如,基于可以产生可移植的 低级的单块的代码(空心粉式代码)的结构化的可分析的高级源语言的程序代码 35,即,编译器改进代码45可以在基于一些方案中的具体应用程序的任何一个 的适当的平台特定的编译器上,被进一步的重新编译。
在块100中,在一些实施例中,可以调用用户接口50用于用源语言60开发 程序55。利用源语言60,源级编译器30可以识别程序55的一个或多个存储器分 配和并行流对象。根据可应用于相关数据65的并行程序设计源语言设计的技术 标准,根据一个或多个存储器分配和并行流对象,程序55的随机执行顺序可以 被规定在一些情况中。
根据本发明的一个实施例的一个具体的例子,当利用一个单任务语义非标 准语言时,一个适用源语言可以用来获得程序源代码35。在以一个高级源语言 编程的时候,比如C语言,内存泄漏以及当以并行程序设计源语言编程时,垃 圾收集中断有时可以引起源级编译器30的性能降低。然而,当在实时应用程序 中提供图象以及声音时,垃圾收集可以是一个重要的特性。为此,本发明的一 些实施例中利用的一个应用式语言作为源语言60,可以使得源级编译器30分析 和优化嵌入在程序源代码35中的机密75的性能以及隐藏。
为了允许垃圾收集的目的,可以引入引用的计算用于与垃圾收集相关的堆 分配对象,为了一些情况下的单任务语义非标准语言而帮助实时的内存回收。 因此,当重新编译时,可用的源语言60的单任务语义非标准语言可以通过以随 机执行顺序执行的程序55被保存,为内容供应商提供坚固的拷贝保护。换句话 说,当程序55执行时让相关数据65在程序源代码35中移动或混排,可以结合包 括与平台无关的抗干扰,为程序55产生编译器改进代码45。结果,根据本发明的 几个例子,通过源级编译器30结合使用应用的源语言以及随机的执行顺序,可 以优化隐藏嵌入的机密75,按所希望地隐藏在程序源代码35中。
在块102,程序55连同相关数据65以及嵌入机密75一起可以按所希望地开 发。为隐藏嵌入机密75以一个随机的执行顺序编译程序55,可以在块104调用预 编译器软件80,它可以依次在块106产生随机种子指示或数字,以及在块108产生 一个适当的编译协定的选择。基于在块106中选择的随机种子指示,在块108 中通过使用随机选择的替换物替换标准协定,预编译器软件80可以以随机执行顺 序执行程序55。例如:随机种子指示可以改变代码时间表、变量设计、函数调 用协定及其它协定,以便这些选择对于同样程序源代码35的每次编译是随机的 并且是不同的。然而,在理论上,编译器改进代码45的重新编译只有当存在可 用到随机种子指示时,才可以被允许使用附加的调试信息。
在本发明的一些实施例中,为在执行期间在程序55之间混排相关数据65,在 块110可以以一个传统的方式确立一个控制流程图。控制流程图可以表示程序 源代码35内的一个或多个数据与程序代码路径。根据本发明的一些实施例,使用 一个控制流分析,程序源代码35的控制流可以被分析。对于一些实施例,一个 或多个数据变量可以在相关数据65中被识别。在控制流分析期间,数据变量可 以被当做数组元素随机地分配。为特定的数据变量沿着一个数据路径混排数据, 可以根据以下的启发式方法将代码可以被插入到程序源代码35,该启发式方法 保证当在控制流程图中多条代路径汇聚时,至少两个这样的路径产生同样的数 据排列,而每个路径通过数据交换的一个随机的唯一的顺序达到该排列。在一 个例子中,数据排列的必然伴有加密编码的数据以便产生一个想要的加密。
为了在程序50之间混排相关数据65,在一些实施例中,图1所示源级编译 器30可以跟踪数据地址断点。在确定用于程序50执行的时间表之后,源级编译 器30可以压缩存储器的数量,以便通过分配同样的存储单元给不被同时需要的 不同的数据值来引入平均信息量。
经过这个压缩后,程序源代码35可以被产生,沿着程序50的每个路径唯一 地且随机地混排存储器任务,保证当两个路径汇聚时到达相同的排列。这样, 当程序代码35执行时,数组中每个数据变量的偏移量可以改变。然而,在许多 实施例中,混排的数量可以通过程序55中的代码的数量启发式地限定,而不会 显著地增加执行时间。
为在多个代码路径汇聚的地方达到相同的排列,在一些对于排列的实施例 中,可以进行一个有序集的两个元素的交换,例如在恒定的时间内。因此在这 个方案中,代价函数是交换的次数。首先,可以检查执行从一个排列到另一个 排列的必需的(两个不同的元素)交换的次数。这个次数被认为是在两个排列 之间的距离。既然交换是它们自己的反转,交换的一个例子的可以是d(p1,p2)= d(p2,p1),其三不等式为:d(p1,p3)<=d(p1,P2)+d(p2,P3)。
为了计算两个排列之间的距离,一个排列可以被用作基点,定义为“原点” 位置。当检查其他排列时,一个元素可以被确定,因此作为在基排列中在相同 位置上的元素,形成一单独的子集。然而,不需要进行交换以将其返回到它的 原点位置。
另一方面,如果一个元素不是在它的原点位置,可以确定另一个元素。通过 延续这个过程,最后返回到第一个元素,可以产生其元素不在原点位置的子集。 这个子集可以被认为是一个错位排列子集。与交换被执行的顺序无关,它可以 正好采取N-1个交换来重新排列元素以便它们在它们的原点位置。
结合这两种情况,两个排列之间的距离可以被计算,具有每个大小为Mi的N个 子集其和为(Mi-1),,其中i从1到N,而不管子集是错位排列的还是单一的。 然而,当全部的元素属于一个单一的错误排列子集时,在两个S个元素的排列 之间的最大距离是S-1。例如:一个给出的(源)排列的两个元素可以被交换以便 产生一个新的排列,也就是说更接近第二给出的(目标)排列。相反地,从新的 排列到给出的目标排列的距离可以被增加。如此,使用目标排列来定义原点位 置,源排列的全部的单个以及错误排列子集在一种情况中可以被确定。
依据控制流程图,在块112,程序55可以被以一个随机的执行顺序编译, 而根据混排算法90随着程序55的运行而混排数据(图1)。通过让数据随着程 序55的执行而移动,而不是使用数据断点,位置无关码理论上可能不能用于本发 明的一些实施例。此外,有时自修改代码可能不需要被采用,在只读存储器 (ROM)之内允许使用源级编译器30。因为源级编译器30实质上独立于特定的 指令集,它可以适当地跨平台使用。
在块114,依照本发明的一个实施例,该程序源代码35可以以一个抗干扰 方式被转换成为与平台无关的编译器改进代码45。使用由程序源代码35获得的 控制流程图,在本发明的一些例子中,当编译器改进代码45在特定平台编译器 上重新编译成为对象或编译的代码时,可以保护嵌入机密75不泄密,从而使代码 隐藏优化。随机种子指示的有效性以及适当的调试信息,可以允许在一些场合 下重新编译程序55。也就是说,首先适当的随机种子指示的有效性的确定可以 在继续进行重新编译之前进行,产生对象或编译代码,其中可移植内容保护被实 现以便保护与程序55相关的嵌入机密75。
按照本发明的一些实施例,为从划分的程序代码35a的代码映射中获得图3 所示的控制流程图120,以便为了伪装在编译器生成的代码45中的程序控制流 的转换可以被执行,用以抵御干扰攻击。例如:代码转换可以提供干扰抵抗, 用以抵御反向设计攻击及/或防止自动攻击,同时允许在一个局部环境和选择的 开放计算平台中建立以及调度应用程序时。源级编译器30可以为程序源代码35a 应用干扰抵抗,保护它不受到打算修改或绕过功能的多种的攻击,或获得可 能包括敏感数据或媒介内容的嵌入机密75。
在一个特定的例子中,在一些点,响应控制转换,该控制流程图120可以 从程序源代码35a处获得,识别源代码的一组块130(1),130(k+m),130(k), 130(k-p)和130(N)。为了根据程序源代码35a建立控制流程图120,对应 于相关块130的节点140与对应于存在于程序源代码35a的跳转150的弧线145一 起可以被识别。例如:既然节点140(1)可以对应于块130(1),则弧145(2)可以 对应于跳转150(2)。根据本发明的一些实施例,伪入口和出口节点可以被增加 到该控制流程图120,引入多余的和辅助的计算以显著地提高脆弱性,同时在程 序源代码35a可能产生改变的时候增加副作用的扩散,响应在编译器改进代码45 中引入的任一修改,作为是恶意攻击的结果。
在一个实施例中,正好一个伪出口节点和一个伪入口节点可用于试探或算 法,以指定控制流程图120中的节点的排列。通过获得全部入口节点和添加到 一个入口节点中,一个单一伪入口节点可以被形成,该伪入口节点可以表示控 制流程图120中所有可能的入口。同样地,可以通过获得全部出口节点和人工 地添加弧线到一个新的伪出口节点形成一个伪出口节点,使得控制流程图120 包括一个单一的伪出口节点。因此,在一些实施例中,在控制流程图120中, 可能有许多入口和出口,例如一个有效的流程图,在编程语言中,一个单入口- 单出口流程图可以通过组合两个伪节点获取。
如此,该控制流程图120,其中每个节点使用在开始是未指定的,一个排 列可以被指定给该单独的伪入口节点,并且指定一个最短路径给该单独的伪出 口节点,沿着该路径指定全部的排列。其后,在现在指定在该路径上全部的节 点之间的更短路径可以被确定,建议穿过控制流程图120的任一其它的短路径或 短途径应该在较长的那些路径之前被首先指定。这个过程可以重复,直到控制 流程图120中每个节点被指定为止。
一个伪入口节点160(1)和一个伪出口节点160(2)可以被利用来在程 序源代码35a中插入代码,为特定的数据变量沿着数据路径混排数据。例如:一 个数据路径可以表示在程序源代码35a之内或在它的特定的块130之内数据变量 被初始化和后来被改变的位置。同样地,一个代码路径可以表示特定的跳转 150,在控制流程图120中被表示为弧145。通过在控制流程图120中的超过一 个代码路径通过一个随机的唯一的数据交换的顺序汇聚到达排列时候产生数据 同样的排列,一个期望的内容保护可以被实现用以保密在程序55的嵌入机密75, 产生使用平台特定的商用编译器进行后来的重新编译的以编译器改进代码45的 形式的可移植代码。
在一些实施例,防止未被授权的源程序遭受恶意攻击可以产生一个对利用 在内容保护的规则坚固性的显著的改善,例如在为不同的工业技术标准发行内 容保护许可中。规则坚固性通常表示任一意图是为抑制黑客修改或者绕过内容 保护的设计要求。结果,内容供应商可以方便地提供加强它们的内容的拷贝保 护。
使用该控制流程图120,在本发明的许多实施例中,连接两个标记为已指 定的节点(以下简称“最短的连接途径”,例如,在一个第一和一个最后的节 点之间)的一个最短的途径(包括路径和循环)可以被确定,提供一个期望的 控制流转换以至足够地伪装程序控制流,抵御不同的干扰攻击。然而,未指 定的节点140可以获得已指定的排列以及弧线145获得已指定的交换。例如, 第一和第二节点可以为每个数据变量指定一个排列,比如变量位置。通过在 建立一个从第一个状态或第一个节点的排列到最后的节点的最后的排列的转换 的时候最小化交换数目,在一些实施例中,连接该两个节点的最短的途径可以 被确定。在一个例子中,通过根据试探指定最短的一个,额外的交换可以被避 免。
具体地,第一和第二最短的连接途径165(1)以及165(2)可能产生用 于伪入口节点160(1)以及伪出口节点160(2),当不引入任何系统或平台 依赖性而满足期望安全以及性能要求时优化代码隐藏或该控制流转换。第一 最短的连接途径165(1)可以包括该弧线145(1)到145(4)连接伪入口节 点160(1)到伪出口节点160(2)。同样地,第二最短的连接途径165(2) 可以包括该弧线145(5)到145(7),连接节点140(k),140(k+m),以及140 (k-p)。举例来说,在两个伪节点之间的最短的连接途径165(1),那就是说, 该伪入口节点160(1)以及该伪出口节点160(2),在控制流程图上可以建 议一个经过该剩余未指定的中间节点140(1)到140(N)的路径。
对于在最短的连接途径165(1)末端上的两个节点来讲,它们是未指定的节 点140(1)到140(N),起始端排列可以通过用仍然为随机的最小交换数目的方法 交换为结束排列。已经被指定的所述的节点140(k)和140(N)作为最短的连 接途径165(2)的端点。这个过程可以被重复直到每个从节点140(1)到140(N) 被指定,例如在仍然未指定的中间节点140(k+m)和140(k-p)用一些交换和一些 中间排列连接指定节点140(k)和140(N)。
现在转到图4,按照本发明的某一个实施例,源级编译器30(图1)可以 使用混排算法90将数据跨越程序55移动,启动预编译器软件80以随机的执行顺 序执行程序源代码35,这样,嵌入的机密75可以以优化的方式被恰当地隐藏。 在块175,开始如图3所示的程序源代码35a的控制流分析。在一个例子中,使 用程序源代码35a,如图3所示的控制流程图120可以在块177被获取。
如上所指出的,程序源代码35a的模块130可以确定为节点140,而代码35a 中的跳转150可以表示为模块179中的控制流程图120的弧线145。依赖特定的应 用程序实现对所希望的嵌入的机密75的可移植内容的保护,刚好可以产生一个 伪入口节点160(1),它的后继是流程图中的入口节点(没有前驱的节点)。同 样地,刚好可以产生一个其前驱是出口节点(没有后继的节点)的伪出口节点 160(2)。这些两个伪节点和弧线可以在模块181被加到控制流程图120中。在模 块183,当伪出口节点160(2)可以被标记为指定的时候,分配一个不同大小的 数据变量数组,伪入口节点160可以为变量偏移量指定一个随机排列。根据本 发明实施例的一个排列引用了以混排为目的的数据的加密编码,这个实施可以 包括一些数据变量的形式。
最短的途径连接已经通过未指定的节点140(1)到140(N)而指定节点160(1) 和160(2),并且通过这些仍未指定的节点在模块185确定弧线。在最短的连接 途径165(1)中的第一和最后的节点通常被标记为已指定的(意思指排列已经被 指定给这些节点(除了伪出口节点160(2)的情况下))。在这个点,在最 短的连接途径165(1)中没有中间节点是(至今)指定的排列,也没有任意弧线被 指定交换。换句话说,最短的连接途径165(1)是在指定节点开始的最短的路 线,即,伪入口节点160(1)并且遍历被指定的节点,即,通过未指定的弧线145 和节点140(1)到140(N)的伪出口节点160(2)。如果在最短的连接途径165(1)上 的第一和最后节点不同,它就是路径。如果第一和最后的节点是相同的节点, 它是一个环路。通过仅在标记为已指定的伪节点开始,而不是任意其它的节点 (并且没有弧线),最短的连接途径可以被重复地确定。然后可以将排列指定 给节点并且交换到弧线,将它们两个标记为已指定的。可以确定一个新的最短 的连接途径,重复这个过程直到没有其它的连接途径,即,没有指定的节点, 或用于构造好的程序图的弧线保持为未标记。例如,最短的连接途径165(1)连 接伪出口节点160(2)并且如图3所示的伪入口节点160(1)在某些情况下可以 被导出。最短的连接途径165(1)可以被遍历,在模块187沿着路径标记遇到的 弧线145(1)、145(2)、145(3)和145(4)和节点140(1),140(k),和140(N)。
如果在最短的连接途径165(1)的第一个节点是伪出口节点160(2),可以根 据一个实施例反向该路径,从伪入口节点160(1)开始并且以伪出口节点160(2) 结束。然而,对于每个从起始节点到结束″目标″节点的节点来讲,可以在该节 点和目标节点排列之间计算交换距离。如果沿着该路径的距离大于交换距离, 可以产生更大的交换距离的排列。这个排列可以指定给路径上的下一个节点 (即,从目标节点偏移的节点)。如果该目标节点是伪出口节点,并且因此没 有排列,可以产生从开始节点的交换距离大于当前节点(即,从起始节点偏移 的节点)的排列。
当不能增加路径距离的时候,可以交换任意两个元素来减少路径上的距 离,因为已经尽可能远地进行了遍历。如果沿着路径的距离小于或等于交换距 离,可以为到目标节点的交换距离小于当前节点来产生一个排列,同时将其指 定给下一个节点,前往目标节点。在这种情况下,在节点160(1)和160(2)之间 的弧线145可以用交换来注释,和排列可以指定给这些节点。
在一个实施例中,为了从源产生排列,源正好是一个更接近目标排列的交 换,在相同的错位排列的子集中的任意两个不同元素可以被交换,将错位排列 分成两个子集(单一或错位排列),而不考虑选择了哪两个元素。通过一个来 自目标排列的交换增加距离,来自任意两个不同子集的任意两个元素可以交换 成为它们的单一或错位排列子集。通常不考虑每个子集中选择的元素,而将 两个子集组合成一个错位排列子集。以这种方法,两个排列之间的距离可以被 测量以便产生使它们彼此分离的排列,并且使它们一起返回到交换操作的界限 数量。下表IA到IIIC示意性的说明了根据本发明的实施例的在排列之间交换距 离的概念。
表IA
排列(p1)  S   B   Z   Y   A   C   F   Q   W   T   X
表IB
排列(p2)  S   C   Y   X   F   B   A   Q   Z   T   W
在表IA和IB中,一组两个排列(例如,表IA中所示的p1和表IB中所示的p2) 可以通过比较发现元素的最小可能(最基本)的子集,这些元素被排列(在两个 排列中每个元素在相同的位置)或错位排列(在两个排列中元素的子集不在相 同的位置)。最小的排列可以包含一个元素。最小的(基本的)错位排列不能 更进一步被分成更小的错位排列。
在表IA和IB所示的实施例中,最小的错位排列具有两个元素;然而在其它 的实施例中可能已经超过了两个元素。在两个排列之间的交换距离可以是 ((D[i]-1))的和,其中Di是错位排列i中的基数(元素的数量),在全部错位排列中 改变i。例如,在表IA和IB的基本子集(不包括较小的子集)中,单一的排列:{S}, {Q},{T}(元素在相同的放置),和错位排列:{A,F},{B,C},{W,X,Y,Z}(元 素在彼此的位置)。排列p1和p2之间的交换距离是(每个基本子集的基数减1) 的和:(1-1)+(1-1)+(1-1)+(2-1)+(2-1)+(4-1)=5次交换。
表IIA
排列(p1)  S   B   Z   Y   A   C   F   Q   W   T   X
表IIB
排列(p2)   S   C   Y   X   F   B   A   Q   Z   T   W
表IIC
排列(p1′)  S   B   Z   W   A   C   F   Q   Y   T   X
如表IIA到IIC所示,对于在交换距离d的两个排列p1和p2来讲,新的排列p1′ 可以在从p2的d-1的交换距离中通过交换两个来自相同的错位排列子集的不同 的元素而被产生。当然,当没有错位排列子集时,排列p1与排列p2相同,因为 这些排列不能获得进一步的接近。
参照表IIA到IIC的一个实施例,表IIC中所示的排列p1′(比排列p1更接近排 列p2的一个交换)可以由在排列p1和p2中两个位置不同的元素的错位排列子集 的任何两个不同元素交换形成。具体地说,元素W和Y可以从排列p1的{W,X Y, Z}被交换以形成排列p1′。而对应于排列p1′到p2的错位排列包括子集{Z,Y},{W, X},{A,F},{B,C},在一个例子中,排列p1′和排列p2之间的距离是(2-1)+(2- 1)+(2-1)+(2-1)=4。
表IIIA
排列(p1)  S   B   Z   Y   A   C   F   Q   W   T   X
表IIIB
排列(p2)  S   C   Y   X   F   B   A   Q   Z   T   W
表IIIC
表(p1*)  S   Q   Z   Y   A   C   F   B   W   T   X
如表IIIA到IIIC所示,对在交换距离d的两个排列p1和p2来讲,一个新的排 列p1*可以在从排列p2的交换距离d+1通过交换两个不同基本子集(或者是单一 的排列或者是错位排列)中的排列p1的两个元素产生,除非已经到达最大的距 离。这可能发生在仅有一个错位排列子集的时候,其包括在排列中所有的元素。
根据如表IIIA到IIIC的本发明的一个实施例,排列p1*可以由排列p1形成, 排列p1是进一步由排列p2通过交换一个来自两个不同子集的每一个的元素的一 次交换。尤其是,来自{Q}的元素Q和来自{B,C}的元素B可以在排列p1被交换 以形成排列p1*。而相应于排列p1*到p2的错位排列包括子集{B,C,Q},{A,F}, {W,X,Y,Z},在一个具体例子中,排列p1*和排列p2之间的距离是(3-1)+(2- 1)+(4-1)=6。
对于控制流转换,为了混排数据,数据交换表示可以被指定给那些弧线 145,对于这些弧线,依据节点140的数量的排列距离依小于依据中间节点140 通过最短的连接途径165(1)的其余的路径距离。在图3所示的控制流程图120 中,所述的排列可以被存储在最短的连接途径165(1)的中间节点上。
在示意性的例子中,对于在中间节点140(k)的伪出口节点160(2)和伪入 口节点160(1)之间的最短连接途径165,排列可以被存储。按照本发明的某一 个实施例中的特定的例子中,所有两个的弧线,即在伪入口节点160(1)和节点 140(k)之间的弧线和进一步到伪出口节点160(2)的弧线,这两个弧线可以沿在 最短的连接途径165(1)内部的中间节点140(k)进行标记。在菱形块189进行检查 可能确定在最短的连接途径165(1)中的所有弧线145是否已经被标记。如果一 些弧线尚未被标记,流程回到模块185。否则,在模块191,为确定在每个模块 130的变量偏移量,可以根据上面提出的例子,利用存储在例如节点140(k)的中 间节点上的节点排列产生正规码。另外,数据交换代码可以在每个被标记用于 最短的连接途径165的弧上产生,在程序55执行时混排数据。用这种方法,一 个希望执行的程序源代码35a可以以随机顺序被执行,充分地隐藏了嵌入的机 密75,以可移植方式跨越不同的平台。
以一些实施例中,一个试探的例子可以涉及一个数据排列的控制流,利用 常规控制流程图确定程序55中的两个点之间的距离。不考虑弧线145的方向, 为弧线指定权(例如,作为模块130中的代码的函数),一个在任意两个点之间的 作为最短连接途径165的距离函数可以在点之间获取。所以,当将其连接到入 口节点的时候,控制流程图120可以被增加一个伪入口节点160(1)。同样地, 一个伪出口节点160(2)可以添加,将所有的出口节点连接到这个节点。
对于源级编译器30,一个函数可以仅使用一次每个弧线145将一个最短的 连接途径从一组节点140的任意元素返回到第二元素。在本发明的一些实施例 中,由于电路允许,两个元素不必不同。对这个组的伪入口节点和伪出口节 点初始化,一个最短的连接途径可以通过所述的函数被确定。
在一个大型数组中的变量偏移量的随机排列可以被指定给入口节点。通过 沿着路径从入口移动到出口,遍历离开最初的排列,排列可以被指定给节点160 (1)和160(2)并且交换到控制流程图120上的弧线145。当不能离开的时候(已经 在最大距离)而是在路径上更接近地移动。因此,沿着该路线的每个节点可 以被加到组中,形成一组具有指定排列的节点。举例来说,弧线145可以被标 记为在控制流程图120中被指定,该过程将被重复直到所有的节点140都被指定 一个排列并且所有的弧线145已经指定了交换。以这样的方式,第一个路径之 后,在目标排列中除伪出口节点160(2)外,最后的节点已经被指定了一个 排列。
根据试探的,然而,当控制流程图120上的路径距离是两倍或更长大于排 列距离的时候,通过在路径上从最初的排列移动到目标排列,产生补充的交换。 依据确定的最短的连接途径165(1),排列在代码生成期间可以通过它们模块依 赖偏移量被保存到参考变量。这些交换可以使附加码沿着弧线145被产生。
为了更快地发现如上所指出的最短的连接途径165(1),在一些实施例中, 可以使用一个递增的最短的连接途径算法。对于一个给定的控制流程图,比 如如图3所示的控制流程图120,使用了递增的最短的连接途径算法,最短的 连接途径(例如,165(1)和165(2))可以被重复从一个它自己的组件(子 集)来确定,遍历不在组件里的弧线145和节点140。
更确切地说,一个最短的连接途径可以被确定,例如,{N0,A1,N1,A2,N2,..., An,Nn},这样a)N0和Nn在组件中;b)N1.....N(n-1)不在组件中;c)A1....An 不在组件中;d)N0可以是Nn,但是全部其它的Ni(或相当于所有的Ai)是不同 的;e)每个Ai被包括而不考虑它的方向。当控制流程图120中的弧线145被指向 的时候,为了这个最短的连接途径的例子的目的,方向被忽视,因为当在该反 向弧线中添加交换代码时,理论上讲可以使它们的交换以反向的顺序插入。
根据一个实施例,在下表IV中示出了用于递增的最短连接途径算法的伪代 码,其中控制流程图120的弧线145可以使用适当的函数被增加,所述的适当的 函数包括nextOnPath弧,SPFrom节点,SPTo节点和一个整数键。然而,如果 弧是在路径的开始,弧线的列表可以利用nextOnPath获取。每个弧x被认为是 伪代码中的路径x。在操作中,1)函数SPHeap用组件C中的节点的初始列表 首先被初始化一次;2)查找下一个将被调用的最短连接途径processSPHeap; 3)对于每个在路径中的节点,将节点加到组件C中并且调用函数 shortestPathUpdateNode;4)步骤2-3被重复直到步骤2返回零,表示在控制 流程图120中没有其它的路径还需要被遍历。
表IV
void initializeSPHeap(heap H,component C) { for all nodes Nin C{ mark N visited     shortestConnectingWalkNewNode(N,nil,H,C) } }   //incrementally obtain shortest connecting walk   arc processSPHeap(heap H,component C)   {    while(H is not empty){    remove winning arc from H and call it P    ifP->SPTo has not been visited{    ifP->nextOnPath is nil{//P->SPFrom is in the component    if(P->SPTo is in component c){    returnP //trivial one-arc path    }    }    find an arc M over union of all predecessors and successors of P-   >SPTo    not in the component with minimum key,else let M be nil    if M is not nil{    let REV be the reverse of the path M//(exchange SPFrom    and SPTo,and altering nextOnPath fields)    append path REV to the end of path P    return arc P    }   } else{    mark P->SPTo as visited    shortestConnecting WalkNewNode(P->SPTo,P,H,C)    }   }   return nil } //update a previous reached node when a new path to it is found void shortestConnecting WalkUpdateNode(node N,arc I,heap H,component C) { arcM:=nil integer L:=undefined for arc A in union of predecessors and successors ofn {    if arc A is not I and arc A is not in componentC    {    //NOTE:this is an incomplete path,but the lower bound on the    length of any complete    //path that includes it is 2*sum of arc values in path so far    ifA->key>I->key+2*A->value    {    A->nextOnPath:=I//found shorter path    }    ifA->nextOnPath is I    {    A->key:=I->key+2*A->value    if arc A has already been visited    {    shortestConnectingWalkUpdateNode(A->SPto,A,    H)    }else{    H->updateEntry(A)    }    }else{//we found a complete path--set key to its true length    integer T=(incoming->key+a->key)/2    if M is nil or T<L    {    M:=A    L:=T    }    }    }    }   ifM is not nil   {    if I->key>=M->key    {    I->key:=M->key    H->updateEntry(I)    }else{    M->key:=L    M->nextOnPath:=I    H->updateEntry(M);    }   } } void shortestConnecting WalkNewNode(node N,arc I,heap H,component C) {    arc M:=nil   integer L:=undefined   for arc A in union of predecessors and successors of N   {    if A s not I and A is not in C    {    if A has not been visited    {    mark A as visited    A->key:=I->key+2*A->value    A->nextOnPath:=I    }else ifA->key>I->key+2*A->value    {    A->nextOnPath:=I    A->key:=I->key+2*A->value    if node A->SPTo has not been visited    {    shortestConnecting WalkUpdateNode(A->SPTo,A,H)}    else{    H->updateEntry(A)    }    }else if I is not nil    {    integer T=(I->key+A->key)/2    if M is nil or Tkey<=L   {    I->key:=L    H->updateEntry(I)   }else{    M->key:=L    M->nextOnPath:=I    H->updateEntry(M)    }   } }
参考图5A和5B所示,一个通信链路200和一个无线链路205可以安全地分别 将内容从一个平台分布到另一个平台。尤其是,一个可以通过通信链路200将 编译器平台215连接到用户平台220的网络210可以在用户平台220上提供内容保 护。用户平台220的例子包括基于处理器的装置,计算装置,通信装置,或从 一个内容供应商传送保护内容的用户装置。同样地,如图5B所示,通过一个 无线通信链路210a,一个无线编译器平台215a可以将内容提供给无线用户平台 215b。例如,无线用户平台215b可以是一个无线通信装置或一个便携装置,两 个都能够接收来自内容供应商的保护内容。无线用户平台215b的其它的例子 包括移动装置,例如可以包括适当的安全硬件以便适当的保护其中的内容的移 动电话。有时,如果不使用安全硬件,软件应用可以在移动电话中使用,在 某些情况下用具有可移除的软件代替安全硬件。
在本发明的一些实施例中可以通过一个基于处理器的系统220执行软件来 实现,如图6A所示的基于图5A所示的编译器平台,包括源级编译器30,用于 实现基本上可以保证程序55内部的嵌入机密75的安全的内容保护。在本发明 的许多实施例中,基于处理器的系统220可以包括一个通过接口235连接到显示 器230和一个系统存储器232的处理器225。在一个实施例中,说明性的接口235 可以是一个桥接电路,或在另一个实施例中,可以包括一个或多个总线。源 级编译器30和商用编译器238可以根据与本发明的某些实施例中相一致的操作 被加载到系统存储器232。
在基于处理器的系统220中,一个主总线240依据外设部件接口(PCI)标 准,例如,可以通过接口235连接一个网络控制器245,一个硬盘驱动器(HDD)248 和一个基本输入/输出系统(BIOS)到处理器225。以这样的方式,当提供了 外围装置的接口的时候,主总线240可以连接到接口235。对于本发明的一些 实施例,基于处理器的系统220可以负责分布编译器改进的代码60。其它的无 线系统可以在本发明的其它的实施例中实现。
如图6B所示的无线装置260示意地描述了根据如图5B所示的用户平台215b 的装置,该装置包括一个半导体非易失性存储器300,一个用户接口305,一个 无线接口310,和一个天线320。根据本发明的一个实施例,无线装置260的组 件可以是一个基于处理器的装置,该装置可以更进一步包括一个控制器275, 一个接口280,一个只读存储器(ROM)285,和一个随机存取存储器(RAM)290, 通过内部总线295连接。接口280可以通过无线接口310和天线320与例如编译 器平台215或215a(分别如图5A和5B所示)的平台通信,所述的编译器平台可以 分布例如编译器改进代码60的内容。在不同的实施例中,可以使用非无线装 置。无线装置260的例子包括移动装置和/或蜂窝式机,其目标在于通过商业 厂家或服务提供者提供不同的用户服务。在一些实施例中,为了操作这样的 服务或简单地启动或重新配置装置、内容,例如,编译器改进代码60可以在无 线电装置260中通过大气干扰以与平台无关的方式被接收。
在一些实施例中,独立于的平台编译器改进代码60可以方便地不需要独立 于位置的代码,可以不使用自修改代码(即可以在ROM 285内工作),可以独 立于指令集(跨平台),并且显著地改善性能,从而防止例如缓冲器溢出的攻 击和其它的攻击,包括调用来自未经授权的外部代码的非输出的内部函数。独 立于平台的编译器改进代码60还可以结合设计用于在机器代码级工作的不同的 特定平台抗干扰的软件一起使用。顺便提一句,为无线装置260开发程序55的 源语言60可以是应用语言,该应用语言的性能和隐藏可以很容易地被分析和优 化,而且当允许为不同的应用程序,例如实时视频及声音提供,引用计数垃圾 收集时,可以检验以证明正确性。
本发明已经针对有限的实施例进行了详细说明,本领域的普通技术人员可 以据此进行很多修改和变化。附加权利要求覆盖落在属于本发明的精神和 范围内的全部这些修改和变化。
高效检索全球专利

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

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

申请试用

分析报告

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

申请试用

QQ群二维码
意见反馈