使用基函数编码来保护可访问的系统的制作方法

文档序号:6534096阅读:160来源:国知局
使用基函数编码来保护可访问的系统的制作方法
【专利摘要】提供了用于保护可访问的计算机可执行程序代码和系统的系统与技术。一个或多个基函数可以被生成并与现有程序代码掺合,使得潜在攻击者可能难以或者不可能从现有代码中区分基函数。还可以使用各种其他掺合和保护技术来保护所述系统和代码,所述其他掺合和保护技术诸如分式、变量相关编码、动态数据识别编码以及交叉链接,它们可以单独或组合使用,和/或可以与基函数掺合。
【专利说明】使用基函数编码来保护可访问的系统

【技术领域】
[0001] 本发明总地涉及电子计算设备和计算机系统,并且更特别地,涉及保护是可访问 的而受攻击的设备和系统上的软件和固件。

【背景技术】
[0002] 计算机、电子计算设备以及计算机软件在所有它们各种形式上的使用被认为是非 常普遍的并且日益增长。此外,随着强大通信网络的普遍,计算机软件程序和数据文件可以 被访问、交换、拷贝和分发的简便也日益增长。为了利用这些计算机和通信系统以及它们提 供的效率,存在对用于安全地存储和交换计算机软件与数据的方法的需要。
[0003] 已经证明广泛使用和接受的维持机密性或隐私的一种方法是使用秘密密码密钥 对数据加密。现有的加密系统被设计为保护它们的秘密密钥或其他秘密数据免受"黑盒攻 击"。这是这样的情形,其中攻击者具有算法的知识并且可以检查来自算法的各种输入和输 出,但是对于算法本身的执行没有可见性(诸如自适应选择的输入/输出攻击)。
[0004] 尽管依赖于黑盒模型的密码系统是非常普遍的,但是已经表明该模型并未反映现 实。通常,攻击者处于观察算法的执行的至少某个方面的位置,并且具有对目标算法的足够 访问以挂载成功的攻击(即,信道侧攻击,诸如定时分析、功率分析、高速缓存攻击、故障注 入等。)这样的攻击通常称为"灰盒"攻击,所假设的是攻击者能够观察系统执行的至少部 分。
[0005] 认识到此,已经做出努力来设计抵抗更强大的攻击模型一"白盒攻击"的加密 算法和数据信道。白盒攻击是对软件算法的攻击,其中假设攻击者对于算法的执行具有完 全可见性。迄今为止,这样的保护系统已经经历了合理的成功,但是因为这样的保护系统变 得越来越精密,所以攻击技术也越来越精密(诸如编码减少攻击、统计分桶(bucketing)攻 击以及同态映射攻击)。因此,许多现有的白盒保护系统正被表明对于抵抗联合攻击是无效 的。
[0006] 借助于简单编码的软件混淆有时已经在使用。为了是有用的,这样的编码在软件 混淆中的应用必须不会过度增加软件的时间和空间消耗,因此这样的编码典型地相对简 单。因此,尽管它们可以整体地保护软件,但是它们未提供高度的安全性。在软件中存在许 多通信边界,所述边界代表具体的脆弱性:未受保护形式的数据进或出混淆程序的通道、数 据进或出软件或硬件中的密码实现的通道等等。现有编码策略的强度典型地受它们保护的 数据大小的严重限制。对于常规编码,这样的受保护的项大约为32比特,有时为64比特, 并且有时是诸如字符或字节的更小数据段。鉴于编码和操作数大小的限制,一般无法防止 对这样的编码的相当迅速的暴力破解。
[0007] 因此,存在对更有效的秘密隐藏和防篡改技术的需要,从而提供对软件代码和数 据的总体保护以及对秘密秘密密钥、生物计量数据、加密的数据等的保护。还期望提供比常 规简单编码强得多形式的对软件边界的保护。


【发明内容】

[0008] 本发明的实施例总地旨在提供更有效的秘密隐藏和防篡改技术,从而提供对软件 代码和数据的保护,而不用担心安全性将被破坏。
[0009] 本文公开的方法和系统不限于任何特定基本程序。它们可以应用于密码系统,但 是等同地,可以应用于非密码系统。被保护的代码也不规定保护它做了写什么,所以保护技 术不受基本代码的约束。相对于可能留下或创建基于基本代码的模式的其他保护技术,这 可以提供益处。这样的模式可能提供可被攻击者利用的弱点。
[0010] 本文公开的一些实施例提供"深刻数据相关性",这可以使得难以或不可能排解或 者区分受保护的代码和正在提供保护的代码。例如,AES算法典型地始终执行相同方式,而 不管是何输入数据。这使得攻击者直接直到他在找什么以及去哪里找到它。大多数白盒保 护系统具有刚性等式结构,其未解决该类型的问题。即,攻击者可以知道找什么类型的操作 或效果,以及何时在代码或执行中进行查看以找到那些操作或效果。相对地,本文公开的实 施例可以提供非刚性的编码,诸如其中,保护算法的每次迭代导致不同的编码。因此,系统 是极其不可重复的。除了别的以外,这可以使本文公开的实施例对于"比较"类型攻击是更 有抵抗力的,在该"比较"类型攻击中,攻击者改变1比特并观察目标程序如何改变。以本 文公开的一些实施例中,如果攻击者改变1比特,则受保护的代码将看起来完全不同。
[0011] 作为概述,本文描述的工具、一系列工具以及技术的实施例可以分组如下: 1)用于模糊目标代码模块之间以及目标代码与保护代码之间的边界的系统和技术。这 例如可以通过将代码与周围代码掺合在一起以及将密码与其他代码进行交织来实现,这在 其他保护性系统中通常未完成。
[0012] 2)用于确保破裂需要人干预的系统和技术。人寻找它们之前已经看到的模式。通 过根据本文公开的实施例引入随机函数,可以移除重复性和/或常见模式,使得自动攻击 是很大程度上无效的。
[0013] 3)用于保护防范"比较攻击"的系统和技术。如上所提及的,比较攻击是其中比较 代码执行的两次迭代以参看差异的攻击,诸如改变单个输入比特以查看操作和输出如何改 变。如本文所公开的保护算法可以以受保护代码的每次迭代产生动态不同的函数,所以比 较攻击未提供任何有用信息。
[0014] 本文描述的混淆技术可以在开销可以被接纳的任何时候实现。白盒保护系统典型 地比本文描述的技术具有更大开销,并且因此处于劣势。
[0015] 一些实施例包括用于软件保护的系统和技术,其通过向目标代码应用双射"基函 数"来操作。这些基函数是互逆函数对.&//,其例如用于对操作编码,并然后在软件应用 中的稍后点处不对操作编码。编码使原始函数和其生成的数据模糊。信息没有损失,因为 不编码操作容纳编码操作,从而在经编码的应用中稍后"撤销"或"反转"其影响。可以选 择基函数对使得攻击者不能容易找到或确定逆函数。即,给定函数/*,在没有密钥K的情况 下可能不容易找到逆。密钥K可以在代码生成时使用,但是任何一旦函数I 已经生 成并应用于目标代码就被丢弃。这些基函数对也是无损的,即,数学上可逆的。受保护的软 件应用完全不需要对函数或过程进行解码以在目标代码中的其他位置使用它,因为编码和 不编码改变包括在经编码的应用内。在一些实施例中,可能优选的是,基函数是"深度非线 性的",因此使得同态攻击更加可能。在一些实施例中,基函数对可以包括置换多项式编码。 置换多项式是可逆的多项式(多项式双射)。
[0016] 一些实施例可以生成或使用基函数对,以使得它们生成"实例多样性"和"动态多 样性"。为了实现"实例多样性",每个基函数对可以创建安全"通信信道",诸如在软件应用 的部分之间、在两个软件应用或平台之间等等。动态多样性可以通过将软件的操作链接到 输入数据来创建。每当诸如针对在两个经编码的应用之间的通信执行编码时,可以在两个 应用之间生成实例和动态多样性。基函数可以是高度"文本相关的",所以它们提供良好的 对明文和扰动攻击的抵抗力。如果攻击者改变任何内容,甚至是做出诸如1比特值的非常 小的改变,则该改变将导致非常大的行为改变。该特征与常规密码代码形成鲜明对照,所述 常规密码代码典型地对于代码的每次迭代产生相同的模式和结构,而不管攻击者做出的改 变。通过做出小改变并观察影响,攻击者能够收集关于密码代码的操作的信息,但是他不能 对使用本文公开的系统和技术编码的软件进行相同操作。本文公开的实施例提供的多样性 还提供对"类攻击"的抵抗力。即,在所有情况下不可能提供这样的攻击方法,该攻击方法 可以系统地并且自动地破裂本发明的每个实施例。还注意,常规白盒实现和代码优化器将 不提供足够的多样性来获得任何有效保护。
[0017] 逆基函数的多样性和不可逆性极大地增加了攻击问题的复杂度。与常规软件代码 或代码保护系统相对地,当尝试击败本文公开的系统和技术时,攻击者必须首先算出他正 在攻击什么函数、代码部分、应用等等,然后如何对它求逆,以及然后如何利用它。
[0018] 本文公开的实施例提供的多样性可以提供可变、随机选择的结构来保护代码。生 成基函数对和编码的引擎可以依赖于随机或伪随机密钥来选择基本函数和/或密钥。然 而,根据本文公开的实施例的密钥不可以与许多常规安全系统的密钥一样大(即,64或128 比特);相反,其可以是数千或数万比特。例如,开发的原型使用2000比特。
[0019] 本文公开的基函数可以包括用于编码、解码或重编码数据的双射。这样的双射可 以包括以下特性: 1)对宽数据元素编码(典型地,四个或更多主计算机字宽)与典型标量编码(参见附录 中列出的[5,7])不同,但是与块密码类似。
[0020] 2)仅对数据编码:与典型标量编码不同,但是与密码类似,它们不需要保护除在它 们自己的对数据元素的重编码中涉及的那些以外的计算。
[0021] 3)取消数据块或流,和/或产生数据块或流的固定长度哈希以用于认证目的,类 似于块密码,但是与标量编码不同。
[0022] 4)采用从软件的操作指令系统特意选择的操作的形式,所述操作将驻留在所述软 件中并且所述操作将与所述软件互锁;即,它们被设计为类似在它们被嵌入的上下文中的 代码,但是与密码不同。
[0023] 5)与密码和标量编码二者不同,采用海量多编码。标量编码一般采用一个或者至 多几个数学构造。密码典型地采用稍大些的数量,但是该数量仍然很小。在本发明的一些 实施例中,各种编码被应用于整个函数,从而创建产生自许多形式的保护相互交互的错综 复杂交织的结构。
[0024] 6)与密码和标量编码二者不同,提供海量多样的算法结构。实施例可以没有固定 数量的轮,没有用于各种子步骤的操作数的固定宽度,没有各种子步骤的固定互连,以及没 有任何种类的预定数量的迭代。
[0025] 7)与密码和标量编码二者不同,借助于高度数据相关算法来提供海量动态多样 性:即,对于对基函数双射的任何具体采用,通过其子步骤的路径、其迭代计数等等强烈取 决于要编码、解码或重编码的实际数据输入。
[0026] 8 )与密码和标量编码二者不同,提供与它们的嵌入上下文海量互依性;S卩,它们的 行为可以强烈取决于它们被嵌入其中的软件,并且可以使它们被嵌入其中的软件强烈取决 于它们。
[0027] -些实施例可以使用大的量的实际熵(S卩,大的真随机输入)。然而,如果生成基函 数对的引擎自身未曝露于攻击者,则其可以安全地采用显著更小的密钥,该显著更小的密 钥然后借助于伪随机数生成器生成大得多的伪随机密钥,因为在该情况中,攻击者必须应 付实际密钥熵(其用于至伪随机数生成器的种子)和从该生成器的编程不可避免地产生的 随机性。
[0028] 在一些实施例中,还可以使用偏置置换。如果内部数据用于生成基函数对或其他 编码数据/函数而非随机数,则产生的编码将包含偏置。如果引入代码以创建编码可能容 易明显的未偏置置换,则导致系统中的弱点。相对地,本文公开的实施例可以生成偏置置 换,但是然后使用各种工具来使它们较少偏置。该方法已经表明比已知技术要不明显得多。
[0029] -些实施例可以包括用于以下的技术:绑定管道开始和管道结束,使得目标软件 代码在两端被系于应用或平台。例如,在对等数据传送环境或数字权利管理(DRM)环境中, 这可以是有用的。本文公开的系统和技术还可以用于将密码系于其他软件应用或平台,这 使用常规技术一般是难以完成的。
[0030] -些实施例可以使用"函数索引的交织"。该技术提供来自线性部件和非线性等式 求解的深非线性度。其可以以许多方式来使用,诸如边界保护、动态常数生成(例如,密钥到 代码)、提供动态多样性(数据相关功能性)、自组合密码、密码混合以及组合密码与非密码。 例如,其可以用于将黑盒密码与本文公开的其他保护代码进行混合,从而提供黑盒密码的 长期安全性,具有白盒安全性的其他益处。如上文所提到的,本文公开的实施例的编码可以 与运行时数据高度相关。以函数索引的交织,两种信息被使用:密钥K,其确定基函数和结 构,以及R,其确定哪些混淆要应用于"定义实现"。典型地,客户端看不到R。密钥K可以从 上下文扩充,但是在本文描述的一些示例中,仅R以该方式扩充。可选地,来自用户或他的 设备(诸如智能电话、平板计算机、PDA、服务器或台式计算机系统等等)的半一致信息或数 据(诸如IP地址)可以用于如运行时密钥那样编码和解码。
[0031] 也可以使用递归函数索引的交织。函数索引的交织典型地对任意函数进行交织。 如果这些函数中的一些是通过函数索引的交织获得的它们自身的函数,则这是函数索引的 交织的递归使用。
[0032] -些实施例可以包括随机交叉链接、交叉俘获、数据流复制、随机交叉连接以及随 机检查,与代码重定序相组合,创建全向交叉相关性以及变量相关编码。
[0033] -些实施例可以使用与分式变换(动态数据识别编码)的存储器混洗以隐藏数据 流,这也可以被采用。在动态数据识别编码中,可以使用存储器单元的阵列A,其可以视为具 有虚拟索引0,1,2. ...,M-I ,其中M是阵列的大小和在有限环ZZ(Af)上的置换多项式p的模 数(即,整数模M),如在C程序阵列中那样。然而,对于任何给定索引i,在阵列中存在其对 应于的不固定的位置,因为其被寻址为P (i),并且P采用从至程序的输入确定的系数。位置 4貞〇);Mwni…可以被认为是外延主机器的那些的"伪寄存器" ,足糾。 通过将数据移进和移出这些寄存器、对每次移动时对移动的数据重编码以及通过针对许多 不同值重用这些"伪寄存器"(例如,通过采用图着色寄存器分配),攻击者跟随程序的数据 流的难度可以大大增加。
[0034] 一些实施例可以使用"散布和掺合"编码。这是描述基函数加代码交织的使用的 另一种方式,其"涂覆"基函数的边界以使得攻击者更加难以辨别它们。一般的数据掺合可 以具有基函数的与其他代码混合的部分,使得更加难以标识和提升代码。
[0035] -些实施例提供安全生命周期管理。黑盒安全性提供良好的长期保护,但是在今 天的应用中不太有用。本文公开的实施例可以比实现在未受保护的设备上可能被破裂更快 地刷新所述实现。不同的设备和应用具有不同的需要。例如,按次计费的电视广播(诸如体 育赛事)在该赛事几天后可能具有很小的价值,所以可能仅有必要在一天左右提供足够安 全性来保护该广播数据。类似地,计算机游戏市场可能在几周之后快速变小,所以可能关键 仅在前几周或几月保护该游戏。本文公开的实施例可以允许用户应用需要的安全级别,从 而权衡安全性与性能。字面上,可调整的"混淆刻度盘"可以放置在控制台上。尽管实现的 特定定义的安全级别可能是未知的,但是混淆方法被应用的强度可以被控制。一般地,这些 设定可以在应用被创建时用其嵌入的基函数进行调整,作为软件开发过程的部分。安全性 分析可以提供对给定特定混淆级别破裂应用将有多困难的估计。基于该估计,可以做出如 何平衡性能需要与安全性需要的工程决定,并且"混淆刻度盘"可以被相应地设置。这种灵 活性是用其他保护系统无法获得的。例如,利用ASE,使用固定的密钥长度和固定的代码,它 们不能被调整。
[0036] -些实施例可以提供灵活的安全性刷新速率,允许对刷新代码的"移动目标"的复 杂度的权衡。在许多情况中,所需的是足够快地刷新以保持领先于潜在攻击者。
[0037] -些实施例可能没有在黑客曝露的环境中提供长期数据安全的主要目标。对此, 方案是不将数据曝露给黑客,而是通过例如为客户端提供用于证书保护(安全ID (TM),口 令短语等)的web呈现而仅曝露访问该数据的手段,所述客户端经由受保护的对话来访问数 据,所述对话可以至多曝露一小部分数据。在黑客曝露环境中,可以预期将部署以相同方式 对曝露的软件进行刷新的过程。例如,在卫星TV条件访问系统中,嵌入在机顶盒(STB)中 的软件中的密码密钥被定期刷新,使得任何对密钥的损害具有仅用于有限时间段的值。当 前,可以借助于软件混淆和/或白盒密码在该有限曝露时段上保护这样的密码密钥。
[0038] 然而,白盒密码已证明对于这样的攻击是脆弱的,所述攻击可能由具有分析可执 行程序的专家知识的密码学尖端攻击者非常快速地执行,因为所采用的密码算法在存在的 被最透彻地检查的算法当中,并且用于分析程序的工具也已经在近来变得非常精细。此外, 密码具有特殊的计算属性,因为它们经常在未在计算中通常使用的算术域上定义:例如, AES在伽罗瓦域上定义,RSA公钥密码系统通过在极大模数上的模算术来定义,在比特运算 上的3DES,查找表以及以复制比特外延的比特置换。
[0039] 实际上,对程序的精细分析已经创建了有时可以完全绕过密码分析的需要:代码 提升攻击,由此攻击者简单地提取密码算法并且在没有进一步分析的情况下采用它(因为 它毕竟是操作的软件段,尽管其可以被混淆)来破裂软件应用的功能性。
[0040] 一些实施例可以提供强得多的对攻击的短期抵抗。这样的保护可以适于其中需要 抵抗的时间相对短的系统,因为借助于刷新驻留在曝露平台上的软件解决了长期安全性。 这解决了特定空白的需求,其关注由以下创建的紧张点:高度精细的密码分析工具和知识、 被极好研究的密码、经由软件混淆可提供的有限保护、用于分析可执行程序的高度精细工 具,以及软件在典型商业内容分发环境中有限的曝露次数。目标是防止这些种类的攻击, 使用白盒密码的经验已经示出为在现有技术内:快速密码攻击和/或代码提升攻击如此之 快,以至于即使给出在曝露程序(诸如STB程序)的刷新之间有限的有效性生命跨度,它们也 具有值。
[0041] 在许多情况中,仅有必要抵抗在刷新周期期间的持续时间内的分析,并且将密码 替换如此紧密地系于其驻留在其中的应用,从而代码提升攻击在刷新周期的持续时间内也 是不可行的。刷新周期率由工程和成本考虑来确定,有多少带宽可以分配给刷新,我们可以 多平滑地将刷新与进行中的服务整合在一起而不损失服务质量等等:这些都是在提供条件 访问系统领域中非常好理解的问题。这些考虑粗略地指示对于分析和提升攻击我们的保护 必须坚持多久。
[0042] 一些实施例可以通过以下提供可以抵抗更长时间段内的攻击的显著更大的编码: 放弃用经编码的操作数进行计算的观念--如上使用较简单的编码所做的--并用更像 密码的事物来替换它。密码本身可以是并且确实用于该目的,但是它们常常不能容易地与 普通软件互锁,因为(1)它们的算法被密码标准刚性地固定以及(2)它们的计算典型地与 普通软件非常不同并因此既不容易在其内被隐匿也不容易与其互锁。本文描述的基函数提 供了允许隐匿和互锁的替代:它们利用常规操作,并且它们的算法与用密码的情况相比极 大地更加灵活。它们可以与密码组合来将与常规密码一样强的黑盒安全级别与显著优胜于 如上的简单编码和已知的白盒密码二者的白盒安全级别进行组合。
[0043] 在一些实施例中,可以通过以下来创建基函数:选择字大小w和矢量长度N,并生 成可逆状态矢量函数,所述可逆状态矢量函数被配置为对w元素字的N矢量进行操作,所述 可逆状态矢量函数包括多个可逆操作的组合。所述状态矢量函数可以接收至少64比特的 输入并提供至少64比特的输出。所述状态矢量函数中的步骤的第一部分在Z/(2W)上执行线 性或仿射计算。使用第一和第二编索引技术对所述状态矢量函数中的步骤的部分编索引。 然后可以修改在现有计算机程序中的至少一个操作以取代所选择的操作而执行所述状态 矢量函数。每个编索引技术可以控制不同的编索引操作,诸如if-then-else构造、switch、 元素置换选择、迭代计数、元素旋转计数、函数索引的密钥索引等等。所述状态矢量函数中 的步骤的一些可以是非T函数操作。一般地,所述状态矢量函数中的每个步骤可以可逆的, 使得整个状态矢量函数是通过对每个步骤取逆而是可逆的。在一些配置中,所述状态矢量 函数可以使用例如运行时密钥、生成时密钥或函数索引的密钥来加密钥。所述状态矢量函 数可以通过各种操作类型来实现,诸如线性操作、矩阵操作、随机交换等。各种编码方案还 可以应用于所述状态矢量函数的输入和/或输出,和/或所述状态矢量函数的操作。在一 些配置中,不同的编码可以被应用以在与所述状态矢量函数相关联的各个点处产生分式。
[0044] 在一些实施例中,本文所公开的基函数可以通过例如以下来执行:接收具有字大 小w的输入,向所述输入应用可逆状态矢量函数,所述可逆状态矢量函数被配置为对w元素 字的N矢量进行操作,其中所述可逆状态矢量函数包括多个可逆操作,并且所述状态矢量 函数中的步骤的第一部分在z/a")上执行线性或仿射计算。可以向所述可逆状态矢量函数 的输出应用额外操作,其中每一个操作是基于不同编索引技术而选择的。一般地,所述状态 矢量函数可以具有本文关于状态矢量函数和基函数公开的任何属性。
[0045] 在一些实施例中,第一操作可以通过执行第二操作来执行,例如通过以下来执行: 接收用第一编码A编码为A(X)的输入X,使用的值对所述输入执行第一多个计算机 可执行操作,其中Fi是第二编码机制B的逆,所述第二编码B不同于所述第一编码A,基于 来提供输出。这样的操作可以认为是"分式",并且可以允许操作被执行而对于外部用 户或者对于潜在攻击者是不可访问或不可见的。在一些配置中,所述第一操作的输出未被 在外部提供给可执行代码,所述第一操作与所述可执行代码被集成在一起。
[0046] 在一些实施例中,对于被配置为接收输入并提供输出的矩阵操作,在执行操作之 前,可以根据排序网络拓扑来置换所述输入。可以使用置换后的输入执行所述矩阵操作以 生成输出,并且根据所述排序网络拓扑来置换所述输出。可以将置换后的输出提供为所述 矩阵操作的输出。
[0047] 在一些实施例中,可以接收第一输入,并且向所述第一输入应用函数索引的交织 的第一函数以生成具有左部分和右部分的第一输出。可以向所述第一输出应用函数索引的 交织的第二函数以生成第二输出,其中,所述第一输出的左部分被用作所述第二函数的右 输入,并且所述第一输出的右部分被用作所述第二函数的左输入。然后可以提供所述第二 输出作为对所述第一输出的编码。
[0048] 在一些实施例中,可以生成密钥K,并且基于密钥K和随机化信息R来生成一对基 函数瓜五"。可以向通信管道的第一端应用基函数介,并且向所述通信管道的第二端应用 逆,之后可以丢弃所述密钥K。通信管道可以跨单个平台上或分离平台上的应用。
[0049] 在一些实施例中,要由计算机系统在程序执行期间执行的一个或多个操作可以被 复制以创建一个或多个操作的第一拷贝。程序任何可以被修改为执行第一操作拷贝而非第 一操作。每个操作和对应的拷贝可以使用不同编码来编码。操作对也可以用于创建检查值, 诸如其中,在操作结果的执行与拷贝的执行之间的差异被添加到操作的结果或操作拷贝的 结果。这可以允许检测攻击者在程序执行期间做出的修改。
[0050] 在一些实施例中,在包括多个操作和每个操作的拷贝的程序的执行期间,在到达 在其处应当执行多个操作中的操作的执行点时,拷贝或原始操作可以被随机选择并由程序 执行。随机选择的操作的结果可以与将在只有操作的单个拷贝被执行时获得的结果相等。
[0051] 在一些实施例中,可以从应用接收输入。可以用多个M寄存器位置tv..来定义 大小为M的阵列,w 。还可以定义置换多项式p、从输入产生z的基于输入的矢量映 射矩阵A,以及一系列常数A = ◎。然后可以执行一系列操作,每个操作提供中间结果, 所述中间结果存储在从M寄存器随机选择的M寄存器中。然后可以基于一系列中间结果将 最后结果从存储最后结果的最后M存储器提供到应用。存储在M寄存器中的每个中间结果 可以具有在将中间结果存储到对应M寄存器中之前应用于中间结果的单独编码。应用于中 间结果的不同编码可以从多个不同编码当中随机地选择。类似地,可以或可以不对应于用 于将中间结果存储在M寄存器中的编码的不同编码可以应用于存储在M寄存器中的中间结 果。新的M寄存器可以按照需要被分配,例如仅当根据图着色分配算法需要时被分配。
[0052] 在一些实施例中,产生至少第一值a作为输出的第一操作可以被执行,并且使 用a和第二值b将第一变量X编码为aX+b。可以使用aX+b作为输入来执行第二操作 ,并且可以执行使用a和b的解码操作,之后a和b可以被丢弃。值b还可以是第三操作 Afq的输出。使用Mvi和/或!的不同执行实例,不同编码可以用于编码为aX+b的多个输 入值。可以基于一个或多个常数被存储在存储器中的预期时间来从存储在计算机可读存储 器中的任何值中选择这些值。类似地,包含用于执行操作和gCK/的指令的现有计算 机可读程序代码可以被修改为将X编码为cX+d,并且当执行时g(K)至少产生第一值c。可以 针对至少一个X执行操作治,并且c和d后续被丢弃。
[0053] 在一些实施例中,至少一个基函数可以与用于现有应用的可执行程序代码掺合。 例如,可以通过用基函数替换现有程序中的至少一个操作,来将基函数与可执行程序代码 进行掺合。还可以通过应用本文所公开的技术中的一种、一些或全部来将基函数与现有应 用进行掺合,所述技术包括分式、变量相关编码、动态数据识别编码和/或交叉链接。所使 用的基函数和/或任何掺合技术可以包括或者可以排他地包括这样的操作,所述操作与它 们与之掺合的现有应用程序代码的部分中呈现的操作是类似或不可区分的。因此,攻击者 可能难以或不可能在没有基函数的情况下从将在现有可执行程序代码中呈现的那些中区 分基函数和或混合技术操作。
[0054] 在一些实施例中,可以提供一种计算机系统和/或计算机程序产品,包括处理器 和/或存储指令的计算机可读存储介质,所述指令使得所述处理器执行本文所公开的一种 或多种技术。
[0055] 此外,因为本文公开的与基函数一起使用的算法可以是相对灵活的和开放式的, 所以它们允许软件多样性的高度灵活的方案,并且改变的实例与使用白盒密码可能的情况 相比更深地不同。因此,它们远不易受自动攻击的攻击。只要可以迫使攻击需要人参与,就 是高度有利的,因为我们可以新建受保护代码的实例并且数据可以以计算机速度被自动生 成,而仅可以以人类速度来损害它们。
[0056] 在考查以下附图和详细描述后,本发明的其他系统、方法、特征和优点对于本领域 技术人员将是或者将变得清楚。意图将所有这样的附加系统、方法、特征和优点包括在本说 明书内、在本发明的范围内以及受所附权利要求的保护。

【专利附图】

【附图说明】
[0057] 在附图中: 图1示出了根据本发明的用于加密函数的交换图表; 图2示出了根据本发明的虚拟机一般指令格式; 图3示出了根据本发明的虚拟机进入/退出指令格式; 图4示出了根据本发明的标记I "木人(Woodenman)"构建; 图5和6示出了根据本发明的标记II构建的分别的第一半和第二半; 图7示出了根据本发明的排序网络的图形表示; 图8示出了根据本发明的执行函数索引的交织的方法的流程图; 图9示出了根据本发明的执行控制流复制的方法的流程图; 图10示出了根据本发明的执行数据流复制的方法的流程图; 图11示出了根据本发明的创建/a?区段的方法的流程图; 图12给出了用于实现本发明的标记II保护系统的处理流程图; 图13示出了本发明的标记III实现的区段设计的不规则结构的图形表示; 图14示出了可以用本发明的标记III实现中的T函数划分实现的粒度的图形表示; 图15示出了本发明的标记III实现的总体结构的图形表示; 图16示出了本发明的标记III实现的防御层的图形表示; 图17示出了本发明的实现中的海量数据编码的图形表示; 图18和19示出了本发明的实现中的控制流编码的图形表示; 图20示出了本发明的实现中的动态数据识别编码(mangling)的图形表示; 图21示出了本发明的实现中的交叉链接和交叉俘获的图形表示; 图22示出了本发明的实现中的上下文相关编码的图形表示; 图23给出了用于实现本发明的标记II保护系统的处理流程图; 图24示出了在本发明的实现中的海量数据编码或动态数据识别编码的典型使用的图 形表示; 图25示出了阐述本发明的实施例寻求解决的主要问题的示例性框图; 表25给出了对软件边界问题进行分类的表; 图26示出了未受保护形式的、白盒保护的以及用本发明的系统进行保护的示例性软 件系统的框图; 图27示出了对比由黑盒安全性、白盒安全性以及在本发明的示例性实施例下的保护 所提供的保护级别的柱状图; 图28示出了对比密码、哈希以及根据本发明的示例性基函数的处理流程图; 图29示出了本发明的基函数可以如何用于提供安全通信管道的示例性框图; 图30示出了根据本发明的用于函数索引的交织的处理流程图; 图31给出了用于实现本发明的标记I保护系统的处理流程图。

【具体实施方式】
[0058] 本文公开的实施例描述了可以允许保护计算机系统的可能暴露于攻击者的方面 的系统、技术和接收机程序产品。例如,已经在供最终用户操作的商品硬件上分发的软件应 用可能遭受在执行期间具有对代码的访问的实体的攻击。
[0059] -般而言,本文公开的实施例提供用于创建基函数的集合以及以以下方式将那些 函数与现有程序代码进行集成的技术:使得对于潜在攻击者而言难以或者不可能隔离、区 分或者接近地检查基函数和/或现有的程序代码。例如,本文公开的处理可以接收现有程 序代码并将基函数与现有代码进行组合。也可以使用诸如分式、动态数据识别编码、交叉链 接和/或如本文所公开的变量相关编码的各种技术来组合基函数与现有代码,以进一步掺 合基函数与现有代码。基函数和其他技术可以使用计算上与现有程序代码使用的那些类 似、相同或不能区分的操作,这可以增加潜在攻击者区分受保护代码与应用的保护技术的 难度。如本文将描述的,这可以提供这样的最终软件产品,其与使用常规保护技术可能的情 况下相比对于各种攻击是更有弹性的。
[0060] 如在图25中所示,本文公开的实施例可以提供用于若干基本问题的解决方案,这 些基本问题在要保护软件免受攻击时出现,所示基本问题诸如软件边界保护、高级多样性 和可再生性问题以及保护可测量性问题。
[0061] 软件边界问题可以组织成五组,如表1中所示:外皮问题、数据边界、代码边界、受 保护数据与受保护代码之间的边界以及受保护软件与安全硬件之间的边界。
[0062] 表 1

【权利要求】
1. 一种方法,包括: 选择字大小W ; 选择矢量长度N ; 生成可逆状态矢量函数,所述可逆状态矢量函数被配置为对w元素字的N矢量进行 操作,所述可逆状态矢量函数包括多个可逆操作的组合,其中所述状态矢量函数接收至少 64比特的输入并提供至少64比特的输出,并且所述状态矢量函数中的步骤的第一部分在 z/(r)上执行线性或仿射计算; 使用第一编索引技术对所述状态矢量函数中的步骤的第一部分编索引; 使用第二编索引技术对所述状态矢量函数中的步骤的第二部分编索引; 在现有计算机可执行程序中选择至少一个操作以进行修改;以及 修改所述现有计算机程序以取代所选择的至少一个操作而执行所述状态矢量函数。
2. 如权利要求1所述的方法,其中,所述第一编索引技术和所述第二编索引技术中的 每一个控制从由以下构成的组独立选择的操作类型:if-then-else构造;switch构造;元 素置换选择;迭代计数;元素旋转计数;以及函数索引的密钥索引。
3. 如权利要求1或2中任意一项所述的方法,其中,所述状态矢量函数中的步骤的第三 部分中的每个步骤包括非T函数操作。
4. 如权利要求3所述的方法,其中步骤的所述第三部分中的每个步骤是从由以下构成 的组中选择的操作类型:函数索引的加密钥的按元素旋转以及函数索引的加密钥的子矢量 置换。
5. 如任何之前权利要求所述的方法,其中,所述可逆状态矢量函数包括多个可逆操作 的串接。
6. 如任何之前权利要求所述的方法,其中,w是从由以下构成的组中选择的:16比特、 32比特以及64比特。
7. 如任何之前权利要求所述的方法,其中,w被选择为主计算平台的默认整数大小。
8. 如任何之前权利要求所述的方法,其中,字大小w是N矢量的内部字大小的两倍。
9. 如任何之前权利要求所述的方法,还包括: 生成所述可逆状态示例函数的逆,所述可逆状态矢量函数的逆包括所述多个可逆操作 的每个的逆的串接。
10. 如任何之前权利要求所述的方法,还包括: 从由以下构成的组中选择用于所述可逆状态矢量函数的密钥类型:运行时密钥、生成 时密钥以及函数索引的密钥。
11. 如权利要求10所述的方法,其中,所选择的密钥类型是运行时密钥,所述方法还包 括: 修改所述状态矢量函数以接受提供密钥k的运行时输入。
12. 如权利要求10所述的方法,其中,所选择的密钥类型是生成时密钥,所述方法还包 括针对密钥K部分地评估所述状态矢量函数。
13. 如权利要求10所述的方法,其中,所选择的密钥类型是函数索引的密钥,所述方法 还包括:针对所述多个可逆操作A的每一个,提供用于可逆操作的相关联逆的密钥J?,。
14. 如任何之前权利要求所述的方法,其中,所述状态矢量函数是至少部分通过多个矩 阵操作来实现的。
15. 如任何之前权利要求所述的方法,其中,所述第一编索引技术和所述第二编索引技 术中的至少一个控制多个操作,所述多个操作包括根据排序网络拓扑执行的随机交换。
16. 如权利要求15所述的方法,其中,所述排序网络拓扑是从由以下构成的组中选择 的:Batcher网络、Banyan网络、完美混洗网络以及Omega网络。
17. 如任何之前权利要求所述的方法,还包括: 用第一编码机制对至所述状态矢量函数的输入进行编码; 其中,所述状态矢量函数中的每个操作被适配和配置为当至所述状态矢量函数的所述 输入用不同于所述第一编码机制的第二编码机制编码时操作。
18. 如权利要求17所述的方法,其中,所述第一编码机制将所述输入编码为aM+b,其中 a和b是常数。
19. 如权利要求18所述的方法,其中,M是可逆矩阵。
20. 如权利要求18或19中任意一项所述的方法,其中,所述第二编码机制当应用于所 述输入时将所述输入编码为cN+d,其中c和d分别是不同于a和b的常数。
21. 如权利要求20所述的方法,其中,N是可逆矩阵。
22. 如任何之前权利要求所述的方法,其中,在所述现有计算机可执行程序中的所述至 少一个操作和所述状态矢量函数使用计算上类似的运算。
23. 如任何之前权利要求所述的方法,其中,修改所述现有计算机程序的步骤还包括向 所述状态矢量函数和所述现有计算机程序的组合应用从由以下构成的组中选择的至少一 种技术:分式、变量相关编码、动态数据识别编码以及交叉链接。
24. 如权利要求23所述的方法,其中,所述状态矢量函数和实现所述至少一种技术代 码中的每一个使用在计算上与所述现有计算机程序中给出的那些类似的运算。
25. -种方法,包括: 接收具有子大小w的输入; 向所述输入应用可逆状态矢量函数,所述可逆状态矢量函数被配置为对w元素字的N 矢量进行操作,所述可逆状态矢量函数包括多个可逆操作的组合,其中所述状态矢量函数 中的步骤的第一部分在Z/(2W)上执行线性或仿射计算; 向所述可逆状态矢量函数的输出应用来自第一多个操作当中的第一操作,所述第一操 作是基于第一编索引技术而选择的; 向所述第一操作的输出应用来自第二多个操作当中的第二操作,所述第二操作是基于 与所述第一编索引技术不同的第二编索引技术而选择的;以及 提供所述第二操作的输出。
26. 如权利要求25所述的方法,其中,所述第二操作是基于从所述第一操作的执行得 到的索引而从所述第二多个操作选择的。
27. 如权利要求25或26中任意一项所述的方法,其中,所述第一编索引技术和所述第 二编索引技术中的每一个控制从由以下构成的组独立选择的操作类型:if-then-else构 造;switch构造;元素置换选择;迭代计数;元素旋转计数;以及函数索引的密钥索引。
28. 如权利要求25-27中任意一项所述的方法,其中,所述状态矢量函数中的步骤的第 三部分中的每个步骤包括非T函数操作。
29. 如权利要求28所述的方法,其中步骤的所述第三部分中的每个步骤是从由以下构 成的组中选择的操作类型:函数索引的加密钥的按元素旋转以及函数索引的加密钥的子矢 量置换。
30. 如权利要求25-29中任意一项所述的方法,其中,所述可逆状态矢量函数包括多个 可逆操作的串接。
31. 如权利要求25-30中任意一项所述的方法,其中,w是从由以下构成的组中选择的: 16比特、32比特以及64比特。
32. -种通过执行第二操作来执行第一操作的方法,所述方法包括: 通过以下来执行所述第二操作: 接收用第一编码A编码为A (X)的输入X ; 使用5'?的值对所述输入执行第一多个计算机可执行操作,其中反;是第二编码机制 B的逆,所述第二编码B不同于所述第一编码A ;以及 基于来提供输出。
33. 如权利要求32所述的方法,其中,所述第一操作是对If ~/!印执行的。
34. 如权利要求33所述的方法,其中,所述第一操作的输出未被在外部提供给可执行 代码,所述第一操作与所述可执行代码被集成在一起。
35. 如权利要求32-34中任意一项所述的方法,其中,所述第一编码机制将所述输入编 码为aM+b,其中a和b是常数。
36. 如权利要求35所述的方法,其中,M是可逆矩阵。
37. 如权利要求35或36中任意一项所述的方法,其中,所述第二编码机制如果应用于 所述输入则将所述输入编码为cN+d,其中c和d分别是不同于a和b的常数。
38. 如权利要求37所述的方法,其中,N是可逆矩阵。
39. 一种方法,包括: 对于被配置为接收输入并提供输出的矩阵操作,在执行操作之前,根据排序网络拓扑 来置换所述输入; 使用置换后的输入执行所述矩阵操作以生成输出; 根据所述排序网络拓扑来置换所述输出;以及 将置换后的输出提供为所述矩阵操作的输出。
40. 如权利要求39所述的方法,其中,所述排序网络拓扑是从由以下构成的组中选择 的:Batcher网络、Banyan网络、完美混洗网络以及Omega网络。
41. 如权利要求39或40中任意一项所述的方法,其中,对于多个后续操作中的每一个, 根据所述排序网络拓扑来置换针对后续操作的输入。
42. -种方法,包括: 接收第一输入; 向所述第一输入应用函数索引的交织的第一函数以生成具有左部分和右部分的第一 输出; 向所述第一输出应用函数索引的交织的第二函数以生成第二输出,其中,所述第一输 出的左部分被用作所述第二函数的右输入,并且所述第一输出的右部分被用作所述第二函 数的左输入;以及 提供所述第二输出作为对所述第一输入的编码。
43. 如权利要求42所述的方法,其中,所述第一输入用第一编码来编码,还包括: 基于不同于所述第一编码的第二编码来应用函数索引的交织的第一函数和函数索引 的交织的第二函数。
44. 如权利要求42所述的方法,还包括: 用第一编码对输入编码;以及 使用被适配和配置为当所述第一输入用不同于第一编码机制的第二编码机制来编码 时对输入进行操作的操作,来执行每个其他记载的步骤。
45. 如权利要求44所述的方法,其中,所述第一编码机制将所述第一输入编码为aM+b, 其中a和b是常数。
46. 如权利要求45所述的方法,其中,M是可逆矩阵。
47. 如权利要求45所述的方法,其中,所述第二编码机制如果应用于所述第一输入则 将输入编码为cN+d,其中c和d分别是不同于a和b的常数。
48. 如权利要求47所述的方法,其中,N是可逆矩阵。
49. 一种方法,包括: 生成密钥K ; 基于所生成的密钥K和随机化信息R来生成一对基函数瓜及"; 向通信管道的第一端应用基函数./r ; 向所述通信管道的第二端应用基函数逆;以及 丢弃所述S钥K。
50. 如权利要求50所述的方法,其中,所述密钥K是使用随机或伪随机过程生成的。
51. 如权利要求49-50中任意一项所述的方法,其中,所述通信管道的第一端通过在第 一平台上的第一应用来访问。
52. 如权利要求49-51中任意一项所述的方法,其中,所述通信管道的第二端通过在所 述第一平台上的第二应用来访问。
53. 如权利要求49-51中任意一项所述的方法,其中,所述通信管道的第二端通过在第 二平台上的第二应用来访问。
54. -种方法,包括: 接收至少一个基函数; 接收用于现有计算机程序的应用代码;以及 通过用所述至少一个基函数替换所述应用代码中的至少一个操作,来掺合所述至少一 个基函数和用于所述现有计算机程序的所述应用代码。
55. 如权利要求54所述的方法,还包括: 向所述至少一个基函数和所述应用代码应用至少一种掺合技术,所述至少一种掺合技 术选自由以下构成的组:分式、变量相关编码、动态数据识别编码以及交叉链接。
56. -种计算机系统,包括: 处理器;以及 存储指令的计算机可读存储介质,所述指令使得所述处理器执行任何之前权利要求中 所记载的方法。
【文档编号】G06F21/52GK104335218SQ201380028121
【公开日】2015年2月4日 申请日期:2013年3月28日 优先权日:2012年3月30日
【发明者】H.约翰逊, Y.X.古, M.韦纳, Y.周 申请人:爱迪德加拿大公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1