CN110268410A - 软件完整性验证 - Google Patents

软件完整性验证 Download PDF

Info

Publication number
CN110268410A
CN110268410A CN201680092096.6A CN201680092096A CN110268410A CN 110268410 A CN110268410 A CN 110268410A CN 201680092096 A CN201680092096 A CN 201680092096A CN 110268410 A CN110268410 A CN 110268410A
Authority
CN
China
Prior art keywords
data
vector
validation code
code
software project
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
Application number
CN201680092096.6A
Other languages
English (en)
Inventor
顾元祥
H.约翰逊
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.)
Ai Dide Technology Co Ltd
Irdeto BV
Original Assignee
Ai Dide Technology Co Ltd
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 Ai Dide Technology Co Ltd filed Critical Ai Dide Technology Co Ltd
Publication of CN110268410A publication Critical patent/CN110268410A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/51Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems at application loading time, e.g. accepting, rejecting, starting or inhibiting executable software based on integrity or source reliability
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/52Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
    • G06F21/54Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow by adding security routines or objects to programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/64Protecting data integrity, e.g. using checksums, certificates or signatures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/03Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
    • G06F2221/033Test or assess software

Abstract

一种方法包括,在包括验证代码和代码中的一个或多个部分的软件项目的运行时间期间:所述验证代码使用(a)由代码的所述一个或多个部分生成的运行时间数据和(b)一个或多个预定参数来生成验证数据,所述验证数据表示数据元素的预定第一集合的元素;以及将所述验证数据提供给完整性检查器,其布置成(i)如果所述验证数据表示数据元素的预定第二集合的元素,其中所述第二集合是所述第一集合的子集,则标识与所述验证代码相关的修改尚未发生,以及(ii)如果所述验证数据没有表示所述第二集合的元素,则标识与所述验证代码相关的修改已经发生;其中在不具有对所述一个或多个预定参数或与所述一个或多个预定参数相关的数据的认识的情况下,确定所述第二集合的元素在计算上是不可实行的;以及其中,在没有与所述验证代码相关的修改的情况下,由所述验证代码对所述一个或多个预定参数的使用确保所述验证数据表示所述第二集合的元素,并且由所述验证代码对所述运行时间数据的使用控制所述第二集合的哪个元素由所生成的验证数据表示。

Description

软件完整性验证
技术领域
本发明涉及保护软件项目的方法、执行这种受保护的软件项目的方法和验证这种受保护的软件项目的方法,以及对应的装置和计算机程序。
背景技术
软件应用通常在不友好的环境中进行操作或执行。这种不友好的环境可以被形式化为白盒攻击场景-在这种场景中,攻击者被假设有能力在软件应用的执行之前及期间审查和修改软件应用的代码/指令和数据/资源以及由该软件应用生成的运行时间数据。
一个重要的保护目的是确定软件应用的操作正确性。这通常被称为完整性验证(参见例如https://en.wikipedia.org/wiki/File_verification,其整体公开通过引用结合在本文中)。IV旨在确保在运行时间执行的软件应用是由软件应用的供应商发布的版本。这有助于最终用户或服务提供商信任软件应用的原始/认证副本而非修改版本(例如,包含恶意软件的版本)正在执行。
IV的传统方法是基于软件应用的原始代码中的一些或全部来计算一个值,当此代码被读取为数据时-这个值可以例如被计算为已被读取的代码的检查和(checksum)或散列或加密的强散列。使用加密的强散列使得对于攻击者在维持原始散列值的同时修改代码变得不可行-因此,可以通过检测不正确的或非预期的散列值来标识对代码的修改。这种IV可以由IV模块来执行,所述IV模块已经被结合到例如软件应用中或者其作为单独过程来执行。这在附图的图10中示意性示出。
但是,如果攻击者能够以跳过或禁用验证步骤的方式修改IV模块,或者将IV测试改变为总是报告成功,则IV的这种方法可能会被击败。因此,IV模块通常以安全方式来实现,其中一种或多种软件保护技术被应用到所述IV模块,所述技术诸如有助于阻挠逆向工程攻击的已知白盒保护技术。因此,这种安全软件应用很难逆向工程,这提供了软件应用将提供其预期功能性的某一级别的保证。安全软件应用还可以包括普通的IV方法,以增加对软件应用的信任。
然而,WVS(Wurster,van Oorschot,Somayaji)攻击(参见G.Wurster,P.C.vanOorschot,A.Somayaji,“A generic attack on check-summing-based software tamper- resistance”,技术报告TR-04-09,Carleton大学,2004年11月)示出的,攻击这种传统IV保护是可能的。WVS攻击是基于计算机硬件经常区别代码提取和数据提取的观察。这种区别改进了处理器流水线技术、缓存和/或存储器保护。攻击涉及在低级别硬件中安装“垫片(shim)”。这个垫片引起了使用数据提取而检索的值与使用代码提取而检索的值之间的不匹配。具体而言,攻击者可以响应于数据提取而提取“正确/未修改的”代码(使得使用数据提取来读取代码而计算的散列或检查和保持相同的“正确”值),同时响应于代码提取而提取的代码可以被修改/攻击代码。类似地,在虚拟机中,如同使用Java、JavaScript、Perl、Python、Ruby等,对于攻击者有可能修改实现虚拟机的软件并实现虚拟垫片。虚拟垫片使得对执行代码的数据访问看到未改变的代码,而在执行期间使用的代码提取看到攻击者已经改变的代码。因此,即使在篡改之后,所述代码对IV模块也显示出是未改变的:IV防御已经无效。
IV的其他方法被公开在例如WO2015/149828中(其整体公开通过引用结合在本文中)。利用这种方法,安全软件应用包括断言测试,其验证预定的不变条件是否成立。这些对不变条件的检查增加了软件应用的完整性,因为攻击者修改很可能导致不变属性失败。
发明内容
如上所讨论,一些传统的完整性验证技术对于利用代码读取访问来隐藏代码修改的攻击是易受攻击的。其他代码完整性保存方法制止代码读取并且仅验证由应用所处理的数据,但依赖于代码中存在的某些不变条件。
将期望的是,提供一种用于执行完整性验证的改进方法。
本发明的实施例不依赖于代码中现存的不变条件,其也不依赖于对从存储器中已被读取的代码的计算(诸如,散列)。本发明的实施例可以将数据完整性验证代码与软件项目的正常/原始代码以使得对于攻击者很难把所述两种类型的代码区分开的方式进行混合。这种混合可以将正常数据和额外数据组合为到运行时间数据完整性验证算法的输入。运行时间数据完整性验证算法可以使用非常类似于正常软件操作的操作,并且其可以很容易地分解成用于代码混合操作的小代码片段。当攻击者修改使用本发明的某些实施例保护的软件应用的这种安全混合代码和/或数据或者由所述软件应用生成的这种安全混合代码和/或数据时,存在有很大的概率,这种修改也将会改变由运行时间数据完整性验证方法产生的数据或代码的计算行为。由于数据完整性方法优选地被设计成即使在对代码和/或数据有微小改变的情况下也能产生失败结果,所以很难做出未检测到的修改。因此,运行时间数据完整性验证的这些新行为与原始应用行为的这种混合有助于保存安全软件应用的完整性。
根据本发明的第一方面,提供了一种方法,所述方法包括,在包括验证代码和代码中的一个或多个部分的软件项目的运行时间期间:所述验证代码使用(a)由代码的所述一个或多个部分生成的运行时间数据和(b)一个或多个预定参数来生成验证数据,所述验证数据表示数据元素的预定第一集合的元素;以及将所述验证数据提供给完整性检查器,所述完整性检查器布置成(i)如果所述验证数据表示数据元素的预定第二集合的元素,其中所述第二集合是所述第一集合的子集,则标识与所述验证代码相关的修改尚未发生,以及(ii)如果所述验证数据没有表示所述第二集合的元素,则标识与所述验证代码相关的修改已经发生;其中在不具有对所述一个或多个预定参数或与所述一个或多个预定参数相关的数据的认识的情况下,确定所述第二集合的元素在计算上是不可实行的;以及其中,在没有与所述验证代码相关的修改的情况下,由所述验证代码对所述一个或多个预定参数的使用确保所述验证数据表示所述第二集合的元素,并且由所述验证代码对所述运行时间数据的使用控制所述第二集合的哪个元素由所生成的验证数据表示。
根据本发明的第二方面,提供了一种保护软件项目的方法,其中所述软件项目包括代码中的一个或多个部分,所述方法包括:修改所述软件项目,以使得所述软件项目包括验证代码,所述验证代码布置成,在所述软件项目的运行时间期间:使用(a)由代码中的所述一个或多个部分生成的运行时间数据和(b)一个或多个预定参数来生成验证数据,所述验证数据表示数据元素的预定第一集合的元素;以及将所述验证数据提供给完整性检查器,所述完整性检查器布置成(i)如果所述验证数据表示数据元素的预定第二集合的元素,其中所述第二集合是所述第一集合的子集,则标识与所述验证代码相关的修改尚未发生,以及(ii)如果所述验证数据没有表示所述第二集合的元素,则标识与所述验证代码相关的修改已经发生;其中在不具有对所述一个或多个预定参数或与所述一个或多个预定参数相关的数据的认识的情况下,确定所述第二集合的元素在计算上是不可实行的;以及其中,在没有与所述验证代码相关的修改的情况下,由所述验证代码对所述一个或多个预定参数的使用确保所述验证数据表示所述第二集合的元素,并且由所述验证代码对所述运行时间数据的使用控制所述第二集合的哪个元素由所生成的验证数据表示。
在一些实施例中,所述一个或多个预定参数中的每个是所述验证代码的一部分或者是在所述修改期间被包括在所述软件项目中的数据的一部分。
在一些实施例中,所述验证代码没有基于在所述修改之前存在于所述软件项目中的软件元素来生成所述验证数据。
根据本发明的第三方面,提供了一种验证软件项目的方法,所述软件项目包括用于生成验证数据的验证代码,所述方法包括:接收验证数据,所述验证数据表示数据元素的预定第一集合的元素;如果所述验证数据表示数据元素的预定第二集合的元素,其中所述第二集合是所述第一集合的子集,则标识与所述验证代码相关的修改尚未发生;以及如果所述验证数据没有表示所述第二集合的元素,则标识与所述验证代码相关的修改已经发生;以及其中在不具有对一个或多个预定参数或与所述一个或多个预定参数相关的数据的认识的情况下,确定所述第二集合的元素在计算上是不可实行的;其中,在没有与所述验证代码相关的修改的情况下,由所述验证代码对所述一个或多个预定参数的使用确保所述验证数据表示所述第二集合的元素,并且由所述验证代码对由所述软件项目的代码中的一个或多个部分生成的运行时间数据的使用控制所述第二集合的哪个元素由所生成的验证数据表示。
在一些实施例中,所述方法包括:标识所接收到的验证数据是否对应于先前接收到的与所述软件项目相关的验证数据;如果所接收到的验证数据没有对应于先前接收到的与所述软件项目相关的验证数据,则标识与所述验证代码相关的修改尚未发生;以及如果所接收到的验证数据对应于先前接收到的与所述软件项目相关的验证数据,则标识与所述验证代码相关的修改已经发生。
在前述第一至第三方面中任一方面的一些实施例中,所述验证代码生成所述验证数据是通过:使用所述运行时间数据来生成伪随机数据并且使用所述伪随机数据和所述一个或多个预定参数来生成所述验证数据。
在前述第一至第三方面中任一方面的一些实施例中,所述运行时间数据是伪随机的或熵的源。
在前述第一至第三方面中任一方面的一些实施例中,所述验证代码布置成生成与由所述验证代码先前生成的基本上所有验证数据不同的验证数据。
在前述第一至第三方面中任一方面的一些实施例中,所述验证代码布置成生成与由所述验证代码先前生成的基本上所有验证数据不同的验证数据,这是由于用来生成所述验证数据的所述运行时间数据与由所述验证代码先前用来生成验证数据的基本上所有运行时间数据不同。
在所述第一方面的一些实施例中,所述方法包括加密或转换所述验证数据,其中向所述完整性检查器提供所述验证数据包括向所述完整性检查器提供所加密的或所转换的验证数据。
在所述第一至第三方面中任一方面的一些实施例中:
所述一个或多个预定参数包括:
(i)密钥;
(ii)具有m比特的预定比特序列;
(iii)对于所述预定比特序列的每个比特,n比特值内的相应位置,其中m和n是在m小于n的情况下的正整数;
数据元素的所述第一集合包括所有可能的n比特值;以及
数据元素的所述第二集合包括使用所述密钥的n比特值B*的加密版本的所有可能的n比特值,所述n比特值B*包括在所述n比特值B*内它们的相应位置处的所述预定比特序列的所述m比特。
在所述第一至第三方面中任一方面的一些实施例中:
所述一个或多个预定参数包括:
(i)具有m比特的预定比特序列;
(ii)对于所述预定比特序列的每个比特,n比特值内的相应位置,其中m和n是在m小于n的情况下的正整数;
数据元素的所述第一集合包括所有可能的n比特值;以及
数据元素的所述第二集合包括有包括在所述n比特值内它们的相应位置处的所述预定比特序列的所述m比特的所有可能的n比特值。
在所述第一至第三方面中任一方面的一些实施例中:
所述一个或多个预定参数包括k个向量qi(i=1,…,k),其中:
k是大于1的正整数;
对于每个向量qi(i=1,…,k),所述向量qi是环R的元素的长度L的向量;
存在有元素R的预定L×L矩阵M和R的元素的长度L的预定向量s,使得对于每个向量qi(i=1,…,k),Mqi=s;
数据元素的所述第一集合包括R的元素的长度L的所有可能的向量;以及
数据元素的所述第二集合包括针对其有Mx=s的R的元素的长度L的所有可能的向量x。
所述验证代码根据可以生成验证数据v,其中ai(i=1,…,k)是基于所述运行时间数据所确定的R的元素,并且
所述一个或多个预定参数还包括j个向量zi(i=1,…,j),其中:
j是正整数;
对于每个向量zi(i=1,…,j),所述向量zi是R的元素的长度L的向量并且Mzi=0。
所述验证代码根据可以生成验证数据v,其中ai(i=1,…,k)是基于所述运行时间数据而确定的R的元素,,并且bi(i=1,…,j)是基于所述运行时间数据而确定的R的元素。
L可以b等于m+n,其中m和n是正整数;M可以然后基于矩阵,其中A是R中的元素的可逆m×m矩阵,并且其中0a×b表示在所有的其元素等于0的情况下的a×b矩阵;并且s可以是基于包括n个0和R中的元素的m×1向量c的向量。在这样的实施例中,以下所述任一项可以应用:
(i)M=B;s是在向其附加了所述n个0的情况下的所述向量c;并且对于每个向量qi(i=1,…,k),所述向量qi是包括向量u和向其附加了R的n个元素的向量,其中u=A-1c;
(ii)M=XB,其中X是R中的元素的可逆L×L矩阵;s是所述向量XC,其中C是在向其附加了所述n个0的情况下的所述向量c;并且对于每个向量qi(i=1,…,k),所述向量qi是包括向量u和向其附加了R的n个元素的向量,其中u=A-1c;
(iii)M=BY,其中Y是R中的元素的可逆L×L矩阵;s是在向其附加了所述n个0的情况下的所述向量c;并且对于每个向量qi (i=1,…,k),所述向量qi是包括所述向量Y-1U的向量,其中U是在向其附加了R的n个元素的情况下的向量u,其中u=A-1c;
(iv)M=XBY,其中X和Y是R中的元素的可逆L×L矩阵;s是所述向量XC,其中C是在向其附加了所述n个0的情况下的所述向量c;并且对于每个向量qi(i=1,…,k),所述向量qi是包括所述向量Y-1U的向量,其中U是在向其附加了R的n个元素的情况下的向量u,其中u=A-1c。
在所述第一至第三方面中任一方面的一些实施例中,所述验证代码与所述软件项目的其他代码交错。
在所述第一至第三方面中任一方面的一些实施例中,一种或多种白盒保护技术被应用于至少所述验证代码,以从而保护所述验证代码。
根据本发明的第四方面,提供了一种设备,所述设备布置成执行根据以上提及的方法中任一方法所述的方法。
根据本发明的第五方面,提供了一种计算机程序,当由一个或多个处理器执行时,所述计算机程序使所述一个或多个处理器执行根据以上提及的方法中任一方法所述的方法。所述计算机程序可以被存储在计算机可读介质上。
附图说明
现在将参照附图仅以示例的方式描述本发明的实施例,所述附图中:
图1示意性示出了计算机系统的示例;
图2a和2b示意性示出了根据本发明的一些实施例的示例系统;
图3a和3b示意性示出了分别供图2a和2b的系统使用的受保护的软件项目240的示例;
图4是示出根据本发明的一些实施例的操作保护系统的示例方法的流程图;
图5a示意性示出了根据本发明的一些实施例的在受保护的软件项目内验证代码的包括;
图5b示意性示出了根据本发明的一些实施例的在受保护的软件项目内数据的包含;
图6是示出根据本发明的一些实施例的图4的方法的步骤的示例实现的流程图;
图7是示出按照本发明的一些实施例的由验证代码结合完整性检查器执行的示例方法的流程图;
图8示意性示出了根据本发明的一些实施例的完整性验证通过此方式进行操作的方式;
图9示意性示出了根据本发明的一些实施例的如何保护软件项目的示例方法;以及
图10示意性示出了基于代码的完整性验证的传统方法。
具体实施方式
在下面的描述中和附图中,描述了本发明的某些实施例。然而,将领会的是,本发明不限于所描述的实施例,并且一些实施例可能不包括下面描述的所有特征。然而,显而易见的是,在不脱离所附权利要求中阐述的本发明的更广泛的精神和范围的情况下,可以在此进行各种修改和变化。
1 - 系统概述
图1示意性示出了计算机系统100的示例。系统100包括计算机102。计算机102包括:存储介质104、存储器106、处理器108、接口110、用户输出接口112、用户输入接口114和网络接口116,其可以通过一个或多个通信总线118链接在一起。
存储介质104可以是任何形式的非易失性数据存储设备,诸如以下项中的一项或多项:硬盘驱动器、磁盘、光盘、固态存储设备、ROM等。存储介质104可以存储供处理器108执行的操作系统,以便计算机102运行。存储介质104还可以存储一个或多个计算机程序(或软件)。
存储器106可以是适合于存储数据和/或计算机程序(或软件)的任何随机存取存储器(存储单元或易失性存储介质)。
处理器108可以是适合于执行一个或多个计算机程序(诸如存储在存储介质104上和/或存储器106中的那些程序)的任何数据处理单元,其中的一些可以是根据本发明的实施例的计算机程序或者是当由处理器108执行时使处理器108执行根据本发明的实施例的方法并将系统100配置成根据本发明的实施例的系统的计算机程序。处理器108可以包括单个数据处理单元或多个数据处理单元,所述数据处理单元以并行、单独或协作地与彼此进行操作。处理器108在执行针对本发明的实施例的数据处理操作时,可以向存储介质104和/或存储器106存储数据和/或从存储介质104和/或存储器106读取数据。
接口110可以是用于向外接于计算机102或从计算机102可移除的设备122提供接口的任何单元。设备122可以是数据存储设备,例如光盘、磁盘、固态存储设备等中的一个或多个。设备122可以具有处理能力-例如,设备可以是智能卡。接口110因此可以按照它从处理器108接收的一个或多个命令从设备122访问数据,或者向设备122提供数据,或者与设备122进行接口连接。
用户输入接口114布置成接收来自系统100的用户或操作者的输入。用户可以经由系统100的一个或多个输入设备来提供此输入,诸如连接到用户输入接口114或与其进行通信的鼠标(或其他定点设备)126和/或键盘124。然而,将领会的是,用户可以经由一个或多个额外或替代输入设备(诸如触摸屏)向计算机102提供输入。计算机102可以将经由用户输入接口114从输入设备接收到的输入存储在存储器106中,以供处理器108随后访问和处理,或者可以将其直接传递给处理器108,以使得处理器108可以相应地响应用户输入。
用户输出接口112布置成向系统100的用户或操作者提供图形/视觉和/或音频输出。照此,处理器108可以布置成指挥用户输出接口112形成表示所期望图形输出的图像/视频信号,并将此信号提供给连接到用户输出接口112的系统100的监视器(或屏幕或显示单元)120。额外地或替代地,处理器108可以布置成指挥用户输出接口112形成表示所期望音频输出的音频信号,并且将此信号提供给连接到用户输出接口112的系统100的一个或多个扬声器121。
最终,网络接口116为计算机102提供用于从一个或多个数据通信网络下载数据和/或向其上传数据的功能性。
将领会的是,图1中所示和以上描述的系统100的架构仅仅是示例性的,并且具有不同架构(例如具有比图1中所示更少的组件或者具有比图1中所示额外和/或替代组件)的其他计算机系统100可以用于本发明的实施例中。作为示例,计算机系统100可以包括以下一项或多项:个人计算机;服务器计算机;移动电话;平板计算机;膝上型计算机;电视机;机顶盒;游戏控制台;其他移动设备或消费电子设备;等等。
2 - 系统架构和使用
图2a示意性示出了根据本发明的一些实施例的示例系统200a。系统200a包括计算机系统(或客户系统或用户系统)210、保护系统220、验证系统230和网络270。
总之,计算机系统210布置成执行或处理软件项目240。软件项目240是受保护的软件项目-已经被应用于软件项目240(或者软件项目240并入或使用的)的“保护”的性质将在后面更详细地描述。保护系统220负责基于初始软件项目250生成受保护的软件项目240。验证系统230用于在受保护的软件项目240的执行期间检查或验证受保护的软件项目240的完整性(或者至少检查或验证受保护的软件项目240中的一些或全部的完整性)-这种完整性验证的性质将在后面更详细地描述。作为将变得显而易见的是,系统200a能够实现对初始软件项目250的保护,使得所得到的受保护的软件项目240可以在计算机系统210上执行,其中验证系统230在计算机系统210上执行受保护的软件项目240期间检查受保护的软件项目240的一些或全部的完整性。
计算机系统210、保护系统220和验证系统230可以布置成通过或经由网络270与彼此进行通信。网络270可以是适合于从计算机系统210、保护系统220和验证系统230中任一个向计算机系统210、保护系统220和验证系统230中另一个传输或传送数据的任何类型的网络。例如,网络270可以包括以下一项或多项:局域网、广域网、城域网、互联网、无线通信网络、电缆网、数字广播网络、卫星通信网络、电话网络等。计算机系统210、保护系统220和验证系统230可以经由任何合适的通信机制/协议在网络270之上通信,以便与彼此通信数据。然而,将领会的是,其他通信场景也是可能的。
虽然图2a示出了单个计算机系统210、单个保护系统220和单个验证系统230,但是将领会的是,可以存在多个计算机系统210和/或多个保护系统220和/或多个验证系统230,并且为了说明方便,图2a已经被简化。
计算机系统210、保护系统220和验证系统230可以各自是或者可以各自包括如上参考图1所述的一个或多个计算机系统100。例如,计算机系统210可以是个人计算机、服务器计算机、膝上型计算机、移动电话、平板计算机、电视机等。类似地,保护系统220和验证系统230可以例如各自包括一个或多个服务器计算机。
保护系统220和验证系统230可以由单独的实体来操作,或者可以由相同的实体来操作。保护系统220和验证系统230可以在物理上与彼此分离,或者它们可以共享一个或多个计算机系统100(例如,它们可以至少部分地使用一个或多个公共服务器来实现)。
计算机系统210的操作者可以是攻击者,因为操作者可能希望针对(或基于或使用)在计算机系统210上执行的软件项目发起攻击。例如:(a)软件项目可能包含或生成攻击者希望经由攻击来获得的秘密信息(诸如一个或多个加密密钥、一个或多个秘密密钥、其他用户的数据等);(b)攻击者可能试图使用软件项目(以由软件项目的创建者初始未意图或授权的方式)来实现攻击者无权或未授权的功能性,这诸如通过规避或阻挠安全检查;(c)攻击者可能希望实现软件项目原本未意图实现的新/替代功能性;(d)攻击者可能希望使用软件项目来试图从一个或多个服务器(例如,托管与提供或包含该软件项目的网页相关联的网站的服务器)获得对功能性或数据的未授权访问;等等。
所谓的“白盒”攻击环境是用于执行软件项目的攻击模型,在其中模型标识出攻击者具有如下面更详细描述的的各种能力(即,攻击者可以执行特定动作/操作,并且具有对特定数据的访问)。因此,如果攻击者当在具体的执行环境中(例如,使用具体的计算机/处理器等)实际执行软件项目时具有这些能力,则可以说软件项目在“白盒”环境中执行。在白盒攻击环境中,软件项目的攻击者被假定对正在操作的数据(包括中间值)、存储器内容和软件项目的执行/过程/控制流具有完全访问和可见性。此外,在白盒攻击环境中,假设攻击者能够修改正在操作的数据、存储器内容以及软件项目的执行/过程/控制流,例如通过使用调试器-以此方式,攻击者可以对软件项目进行实验并试图操纵软件项目的操作,其中目的在于规避初始意图的功能性和/或标识秘密信息和/或用于其他目标。
然而,软件项目可能需要使用或存储或生成秘密信息(例如,一个或多个加密密钥或标识符),其中此信息需要对攻击者保持隐藏或不可用/不可访问(除非作为软件项目的正确/意图功能性的一部分);软件项目可能需要基于具体决策逻辑来执行代码的不同部分,其中重要的是确保攻击者不能迫使软件执行代码的一部分而不是与决策逻辑相反的代码的另一部分;等等。计算机系统210的设置、配置和能力不一定为软件项目的提供商所知(或完全知道),和/或不由软件项目的提供商可控制(或完全可控制),因此可以假设软件项目可能最终在白盒攻击环境中被执行。由于脚本语言或解释语言的人类可读性质(例如,与编译的二进制可执行文件相反),当以脚本语言或解释语言(诸如,JavaScript)来编写软件项目时,这尤其相关-计算机系统210的用户可以查看、监视和修改这些软件项目的执行(例如,在解释期间或在准时(just-in-time)编译之后),这使得对于攻击者容易复制和修改软件项目和/或其数据或控制流,以试图对/使用软件项目发起攻击。这就是为什么不是在计算机系统210上执行初始软件项目250,而是初始软件项目250具有由保护系统220应用于它的一个或多个软件保护技术,从而产生受保护的软件项目240。在计算机系统210上执行的是这个受保护的软件项目240。为了生成受保护的软件项目240而应用的保护技术旨在使攻击者难以对受保护的软件项目240执行成功的攻击,和/或旨在降低/减轻由攻击者带来的这种攻击的后果,即,保护技术旨在使初始软件项目250相对于白盒攻击环境是安全的。
保护系统220包括保护应用222或布置成执行保护应用222。总之,保护应用222接收初始软件项目250,并将一个或多个“保护”应用于软件项目250,以从而生成并输出受保护的软件项目240。因此,保护应用222包括一个或多个保护者模块或组件224,其布置成将一个或多个“保护”应用于初始软件项目250,或者应用于已经由保护者模块224中的一个或多个应用了这些保护中的一个或多个的软件项目250的版本(如将在后面更详细描述的)。
验证系统230包括完整性检查应用232或布置成执行完整性检查应用232。因此,验证系统230可以被视为完整性检查系统230。总之,在受保护的软件项目240的执行或运行时间期间,受保护的软件项目240经由网络270生成验证数据(或完整性值/数据或验证结果)并将其提供(或传送或传输)给完整性检查应用232。完整性检查应用232接收验证数据,并基于接收到的验证数据执行完整性验证功能性(如将在后面更详细描述的)。完整性验证功能可以被视为“检查验证数据的‘正确性’”。
图2b示意性示出了根据本发明的一些实施例的另一示例系统200b。图2b的系统200b与图2a的系统200a相同,除了系统200b不使用验证系统230及其完整性检查应用232。相反,在系统200b中,受保护的软件项目240包括完整性检查模块(或组件)234。总之,在受保护的软件项目240的执行或运行时间期间,受保护的软件项目240生成验证数据(或完整性值/数据或验证结果),所述完整性检查模块234使用其以执行完整性验证功能(如稍后将更详细描述的)。同样,此完整性验证功能性可以被视为“检查验证数据的‘正确性’”。
因此,在系统200b中,完整性检查在计算机系统210本地执行,而在系统200a中,完整性检查在远离计算机系统210处被执行。与系统200a中相比,系统200b为受保护的软件项目240提供了更多独立性(例如,在系统200b中,受保护的软件项目240不要求连接到网络270以便与验证系统230通信)。然而,系统200a可以被视为比系统200b更安全,因为操作计算机系统210的攻击者将不具有对远程验证系统230的访问。
初始软件项目250和受保护的软件项目240可以各自包括一个或多个计算机程序(或软件或模块),其可以存储为一个或多个文件。每个文件可以包含或实现一个或多个功能。初始软件项目250和受保护的软件项目240可以各自是或实现一个或多个完整的软件应用,或者用于软件应用的一个或多个组件(例如库文件),或者更小的组件(例如代码片断)。初始软件项目250可以包括以一种或多种语言编写的源代码,其中的一种或多种语言可以与受保护的软件项目240的(一个或多个)语言相同,尽管这不是必需的。初始软件项目250和受保护的软件项目240可以各自包括编译/可执行代码和/或源代码(或解释代码)。初始软件项目250和受保护的软件项目240可以包括编译的代码,其用于在计算机系统210处作为本地应用(的一部分)执行。初始软件项目250和受保护的软件项目240可以包括在计算机系统210上执行的虚拟机内执行的代码。初始软件项目250和受保护的软件项目240可以包括用于在计算机系统210上执行的浏览器内执行的代码(例如,作为网页应用或网页的代码)。
本文中与软件项目相关的所使用术语“代码”指的是软件项目的指令/命令。除了代码之外,软件项目(例如,初始软件项目250和受保护的软件项目240)可以包括数据和/或其他资源,使得“代码”的执行(或软件项目的执行)包括执行这些指令/命令中的一些或全部,其中如果存在于软件项目中,则此执行可能潜在地涉及使用一些数据和/或其他资源。本文中与软件项目相关的所使用术语“软件元素”指的是软件项目的代码和/或其他组件(例如,数据和/或其他资源/资产)。因此,(用于)软件项目的软件元素可以包括(a)软件项目的一个或多个代码段(例如,一个或多个指令/命令),和/或(b)(用于)软件项目的一个或多个数据或其他资源。
图3a示意性示出了供图2a的系统200a使用的受保护的软件项目240的示例。初始软件项目250包括初始软件元素。受保护的软件项目240可以包括来自初始软件项目250的未改变的一些初始软件元素310(尽管将领会的是,受保护的软件项目240可以不包括初始软件项目250的未改变的初始软件元素310)。保护应用222,在将一个或多个保护应用于初始软件项目250时,可以修改来自初始软件项目250的初始软件元素的一个或多个部分,和/或可以引进一个或多个额外软件元素-这些修改的和/或引进的软件元素在本文中将被称为更新软件元素300。更新软件元素300中的至少一些包括(或实现)验证代码350。更新软件元素300可以另外包括供由验证代码350使用的数据352。验证代码350(以及数据352,如果存在的话)的目的将在后面更详细地描述。在一些实施例中,更新软件元素300仅由验证代码350(以及数据352,如果存在的话)形成;在其他实施例中,更新软件元素300包括不同于验证代码350(以及数据352,如果存在的话)的软件元素。验证代码350还包括接口/通信模块354(如稍后更详细讨论的)。
图3b示意性示出了供图2b的系统200b使用的受保护的软件项目240的示例。这与图3b中所示的受保护软件项目相同,除了:更新软件元素300还包括完整性检查模块234;验证代码350不需要包括接口/通信模块354。在这样的实施例中,数据352(如果存在的话)可以是供由验证代码350和/或完整性检查模块234使用的数据。
在受保护的软件项目240的执行(或在运行时间)期间,验证代码350的执行生成以上提及的验证数据。如果受保护的软件项目如图3b中所示(即,供图2b的系统200b使用),则完整性检查模块234的执行使用此验证数据-即,验证代码350使得验证数据可用于供由完整性检查模块234使用。如果受保护的软件项目如图3a中所示(即,供图2b的系统200a使用),则验证代码350的执行使得受保护的软件项目240将验证数据传输/传送到验证系统230处的完整性检查应用232,使得完整性检查应用232可以使用此验证数据-特别地,验证代码350的接口/通信模块354布置成使得验证数据被传输/传送到完整性验证系统230,并且还潜在地布置成接收来自验证系统230的响应(并且可能按照其行动)。验证代码350布置成使得基于验证数据,完整性检查模块234或完整性检查应用232可以在适当时检查验证代码350的完整性,即,检测与验证代码350相关的非预期/未授权的修改是否已经发生,例如,由于攻击者的攻击。与验证代码350“相关”(或“涉及”或“关于”或“有关” 验证代码350)的修改可以包括以下一项或多项:对验证代码350本身的修改;对由更新软件元素300中的验证代码350所使用的数据352(如果存在的话)或由验证代码350生成的运行时间数据的修改;对验证代码350的控制流的修改;对验证代码350的数据流的修改;对由验证代码350生成的验证数据本身的修改;或者影响由验证代码350生成的验证数据的值的任何其他修改。尝试实现这些的方法将在后面阐述。因此,如果攻击者,在对受保护的软件项目240执行攻击时,执行与验证代码350相关的修改,则由完整性检查模块234或完整性检查应用232可以在适当时检测到此修改。
可能期望的是,能够检测与来自初始软件项目250的其他代码相关的修改(或者与来自受保护的软件项目240的其他代码相关的修改)。如将要简要描述的,验证代码350可以与此其他代码交错,使得对于攻击者难以把其他代码和验证代码350区分开-即,对于攻击者可能难以标识验证代码350和此其他代码之间的边界,或者,换句话说,对于攻击者可能难以在还不执行与验证代码350相关的修改的情况下执行与其他代码相关的修改。以这种方式,由验证代码350供应的/向验证代码350供应的完整性验证被“扩展”或“延伸”到跨其他代码中的一些或所有-即,与其他代码相关的非预期/未经授权的修改,诸如由攻击者带来的攻击的结果,可以导致与验证代码350相关的修改,这可以由完整性检查模块234或完整性检查应用232在适当时可检测到。
类似地,可能可期望的是,能够检测与来自初始软件项目250的数据/资源相关的修改(或者与来自受保护的软件项目240的数据/资源相关的修改)。因此,在更新软件元素300包括数据352的实施例中,此数据352可以与初始软件项目250(或受保护的软件项目240)的其他数据/资源交错,使得对于攻击者难以把其他数据/资源和数据352区分开,即,对于攻击者可能难以标识数据352和这些其他数据/资源之间的边界,或者,换句话说,对于攻击者很难在还不执行与数据352相关的修改的情况下执行与其他数据/资源相关的修改。以此方式,由数据352供应的/向数据352供应的完整性验证被“扩展”或“延伸”到跨其他数据/资源的一些或所有,即,与其他数据/资源相关的非预期/未授权的修改,诸如由攻击者带来的攻击的结果,可以导致与数据352相关的修改,这可以由完整性检查模块234或完整性检查应用232在适当时可检测到。
如上所述,(一个或多个)保护者模块224的目的是保护(或使安全)初始软件项目250的功能性或数据处理和/或保护(或使安全)由初始软件项目250使用的或处理的或生成的或存储的数据。这可以通过应用各种软件保护技术(在本文中称为“保护”)来实现,所述技术诸如隐匿(cloaking)技术、同态数据转换、控制流转换、白盒加密、密钥隐藏、程序互锁和边界混合中的一种或多种。
具体而言,受保护的软件项目240(即,在由(一个或多个)保护者模块224处理之后的初始软件项目250)将提供与初始软件项目250至少相同的功能性或数据处理。然而,此功能性或数据处理通常以这样的方式在受保护的软件项目240中实现,使得执行受保护的软件项目240的计算机系统210的操作者不能(或至少发现难以)以非预期的或未授权的方式从受保护的软件项目240访问或使用此功能性或数据处理,而如果计算机系统210要执行初始软件项目250来代替(即,以未受保护的形式),则计算机系统210的操作者可能已经能够发起成功的攻击,并且从而以非预期的或未授权的方式访问或使用所述功能性或数据处理。类似地,由于受(一个或多个)保护者模块224的处理,受保护的软件项目240可以使用受保护的或使模糊的操作来生成或使用或访问或操作秘密信息(诸如加密密钥或标识符)/与所述秘密信息一起进行操作,所述秘密信息以编码(或受保护的/使模糊的)的形式来表示-这使得对于攻击者更难以(如果不是不可能的话)推断或访问该秘密信息(而这种信息可能在尚未应用保护的情况下从初始软件项目250中是可推断的或可访问的)。
例如:
· 初始软件项目250可以包括至少部分基于要由初始软件项目250处理的一个或多个数据项目的决策(或决策块或分支点)。如果初始软件项目250是以其未受保护的形式执行的,则攻击者可能能够强制初始软件项目250执行,使得在处理决策之后遵循执行路径,即使该执行路径并不意味着已经被遵循。例如,决策可以包括测试程序变量B是真还是假,并且初始软件项目250可以布置成使得,如果决定标识出B为真的话,则执行路径PT被遵循/执行,而如果决策标识出B是假的话,则执行路径PF被遵循/执行。在这种情况下,如果决策标识出B为真的话,攻击者可以(例如通过使用调试器或通过重新编写初始软件项目250)迫使初始软件项目250遵循路径PF,和/或如果决策标识出B为假的话,迫使初始软件项目250遵循路径PT。因此,在一些实施例中,保护者模块224的一个或多个旨在通过将一个或多个软件保护技术应用于初始软件项目250内的决策来防止攻击者做到这一点(或至少使攻击者更难做到这一点)。
·初始软件项目250可以包括一个或多个安全相关的功能;访问控制功能;加密功能;和权利管理功能;等等。这种功能通常涉及秘密数据的使用或生成,诸如一个或多个加密密钥。处理可以涉及对一个或多个加密密钥进行操作和/或使用或者与所述一个或多个加密密钥一起进行操作和/或使用。如果攻击者能够标识或确定秘密数据,则已发生了安全违反,受秘密数据保护的数据(诸如音频和/或视频内容)的控制或管理可能会被规避。因此,在一些实施例中,保护者模块224中的一个或多个旨在通过将一种或多种软件保护技术应用于初始软件项目250内的这些功能来防止(或至少使其更难)对于攻击者标识或确定秘密数据的一段或多段。这可能涉及安排受保护的软件项目240,使得它以使模糊的方式在受保护的软件项目240本身内表示秘密数据。额外地或可替换地,这可能涉及安排受保护的软件项目240,其具有能够以使模糊的或加密的形式向/从存储器动态读和写秘密数据的功能性。
·受保护的软件项目240可以包括额外的功能性(即,原先不在初始软件项目250中的功能性)。此额外的功能性可以被包括在初始软件项目250中,以帮助由(一个或多个)保护者模块224形成受保护的软件项目240。此额外的功能性可以包括例如验证代码350(以及可能的完整性检查模块234)。
存在有许多技术,在本文中被称为“白盒模糊技术”,以用于转换初始软件项目250,使得其抵抗白盒攻击(即,在白盒攻击环境下可以发起攻击或攻击是可用的)。这种白盒模糊技术的示例可以在“White-Box Cryptography and an AES Implementation”S.Chow等,加密中的选择区域,第九年刊国际讨论会,SAC 2002,计算机科学中的演讲笔记2595(2003),p250-270以及“A White-box DES Implementation for DRM Applications”S.Chow等,数字权利管理,ACM CCS-9讨论会,DRM 2002,计算机科学中的演讲笔记2696(2003),p1-15中被找到,其整体公开通过引用被并入到本文中。额外的示例可以在US61/055,694和WO2009/140774中被找到,其整体公开通过引用被并入到本文中。一些白盒模糊技术(诸如以上描述的那些和以下列出的其他技术)能够实现以转换/安全的方式存储和/或使用,并且可能操纵秘密/敏感数据(诸如加密密钥),对于攻击者很难/不可能从其中访问或导出底层秘密/敏感数据。一些白盒模糊技术实现数据流模糊-例如,参见US7,350,085、US7,397,916、US6,594,761和US6,842,862,其整体公开通过引用被并入到本文中。一些白盒模糊技术实现控制流模糊-例如,参见US6,779,114、US6,594,761和US6,842,862,其整体公开通过引用被并入到本文中。然而,将领会的是,存在其他白盒模糊技术,并且本发明的实施例可以使用任何白盒模糊技术。
作为另一个示例,可能的是,初始软件项目250可以意图被提供(或分发)给具体计算机系统210(或计算机系统210的具体集合)并由具体计算机系统210(或计算机系统210的具体集合)使用,因此,可期望的是,将初始软件项目250“锁定”到(一个或多个)具体计算机系统210,即,防止初始软件项目250(一旦被保护)在另一个计算机系统210上执行。因此,存在许多技术,在本文中称为“节点锁定”保护技术,用于转换初始软件项目250,使得受保护的软件项目240可以在一个或多个预定/特定的计算机系统210上执行(或由其来执行),但将不会在其他计算机系统210上被执行。这种节点锁定技术的示例可以在WO2012/126077中被找到,其整体公开通过引用被并入到本文中。然而,将领会的是,存在其他节点锁定技术,并且本发明的实施例可以使用任何节点锁定技术。
数字水印是一种众所周知的技术。具体而言,数字水印涉及修改初始数字对象以产生带水印的数字对象。做出所述修改以便将具体数据(称为有效载荷数据)嵌入或隐藏到初始数字对象中。有效载荷数据可以例如包括标识数字对象的所有权或其他权利信息的数据。有效载荷数据可以标识带水印的数字对象的(意图的)接收者,在这种情况下,有效载荷数据被称为数字指纹-这种数字水印可以用来帮助跟踪数字对象的未授权副本的来源。数字水印可以应用于软件项目。这种软件水印技术的示例可以在US7,395,433中被找到,其整体公开通过引用被并入到本文中。然而,将领会的是,存在其他软件水印技术,并且本发明的实施例可以使用任何软件水印技术。
可能可期望的是,向不同的计算机系统210(或计算机系统210的不同用户)提供初始软件项目250的不同版本或实例。初始软件项目250的不同版本提供相同的功能性-然而,初始软件项目250的不同版本被不同地编程或实现。这可以帮助限制攻击者成功攻击受保护的软件项目240的影响。具体而言,如果攻击者成功地攻击了受保护的软件项目240的他的版本,则该攻击(由该攻击发现或访问的数据,诸如加密密钥)可能不适合于供受保护的软件项目240的不同版本使用。类似地,具有初始软件项目250的不同受保护实例240有助于标识受保护的软件项目240的特定用户(例如,特定计算机系统210)。因此,存在有许多技术,在本文中称为“分集(diversity)”技术,用于转换初始软件项目250,以使得生成初始软件项目250的不同受保护的版本(即,使得“分集”被引进)。这种分集技术的示例可以在WO2011/120123中被找到,其整体公开通过引用被并入到本文中。然而,将领会的是,存在其他分集技术,并且本发明的实施例可以使用任何分集技术。
以上提及的白盒模糊技术、节点锁定技术、软件水印技术和分集技术是软件保护技术的示例。将领会的是,存在对初始软件项目250应用保护的其他方法。因此,如本文中使用的术语“软件保护技术”或“保护”应被理解为意指对初始软件项目250应用保护的任何方法(其中目的在于阻挠由攻击者带来的攻击,或者至少使攻击者更难成功地进行他的攻击),诸如任何一种或多种以上提及的白盒模糊技术(其目的在于使在白盒攻击环境中安全)和/或任何一种或多种以上提及的节点锁定技术和/或任何一种或多种以上提及的软件水印技术和/或任何一种或多种以上提及的分集技术。因此,(一个或多个)保护者模块224可以布置成将以上提及的软件保护技术或保护中的任何一项或多项应用于初始软件项目250,以生成受保护的软件项目240-这可能涉及第一保护者模块224将软件保护技术应用于初始软件项目250中的一些或全部,并且然后可能涉及一个或多个保护者模块224将软件保护技术应用于前一保护者模块224的输出中的一些或全部(例如,保护的顺序应用/分层)。因此,所得到的受保护的软件项目240可以被称为“受保护的软件”。
(一个或多个)保护者模块224可以以多种方式在初始软件项目250内实现以上提及的软件保护技术。例如,为了保护初始软件项目250,(一个或多个)保护者模块224可以修改初始软件项目250内的一个或多个软件元素,和/或可以向初始软件项目250添加或引进一个或多个新的软件元素。做出这些修改的实际方式或编写新的软件元素的实际方式当然会有变化-毕竟,存在有编写软件的无穷多种的方式以实现相同功能性。
例如,在WO2015/150391和WO2015/150376中可以找到用于实现(一个或多个)保护者模块224以致从初始软件项目250中生成受保护的软件项目240的许多示例和方法,其整体公开通过引用被并入到本文中。(一个或多个)保护者模块224可以布置成应用的保护技术的另外的示例可在WO2013/142981、WO2013/142979、WO2013/142983和WO2013/142980中找到,其整体公开通过引用被并入到本文中。
保护系统220可以包括或实现库数据库(library database)/存储(图2a或2b中未示出)。库数据库可以包括一个或多个预生成的受保护的软件模块(或功能或过程或软件片断),以及用于相同底层功能性/软件的潜在多个不同实现的/受保护的实例。在这些模块是独立于初始软件项目250并且可能在接收到初始软件项目250之前生成的范围内,所述模块是“预生成的”。因此,此库数据库可以被视为对保护应用222可用的储存库(repository),使得保护应用222(或者保护者模块或组件224中的一个或多个)可以使用存储在库数据库中的模块中的一个或多个,或者在受保护的软件项目240中包括存储在库数据库中的模块中的一个或多个。为此,保护系统220可以布置成执行生成存储在库数据库中的软件模块的库应用。WO2015/150376中描述了生成受保护的模块的这种库应用的示例,其整体公开通过引用被并入到本文中。保护应用222可以布置成直接从库数据库中获得软件模块,或者可以布置成经由库应用从库数据库中获得软件模块。将领会的是,库应用可以是不同于保护系统220的实体的一部分,并且可以由该实体来执行。类似地,将领会的是,库数据库可以是不同于保护系统220的实体的一部分,并且可以由该实体来提供。
图4是示出根据本发明的一些实施例的操作保护系统220的示例方法400的流程图。
在步骤402,保护系统220获得初始软件项目250。这可以包括保护系统220从不同实体中接收初始软件项目250。可替换的,这可以包括生成初始软件项目250的保护系统220(例如,如果保护系统220正由生成/写入和保护其自己的软件的实体所操作的话)。
在步骤404,保护系统220使用保护应用222从获得的初始软件项目250中生成受保护的软件项目240。这可以包括:(a)将一个或多个模块或软件元素(例如,来自库数据库的软件元素)包括到初始软件项目250中,和/或(b)应用以上提及的软件保护技术中的一项或多项。如提及的,这可能涉及生成初始软件项目250的多个不同的受保护的实例或版本。
在步骤406,保护系统220可以输出受保护的软件项目240。受保护的软件项目240可以存储在软件项目的数据库中,以供以后访问-该数据库可以由保护系统220或由不同实体托管。受保护的软件项目240可以被提供给初始软件项目250的供应商(例如,在由此保护系统220向外部软件开发者提供保护服务的模型中)。受保护的软件项目240可以经由网络270提供给计算机系统210(例如,在由此保护系统220从计算机系统210接收对软件项目的请求并且响应于该请求将受保护的软件项目240提供给计算机系统210的模型中-保护系统220可以响应于该请求生成受保护的软件项目240,或者可以使用已生成的受保护的软件项目240作为对该请求的响应)。
如以上参考图3a和3b所讨论的,受保护的软件项目240包括或实现验证代码350(并且潜在地也包括数据352)。因此,在本发明的实施例中,保护者模块224中的一个或多个布置成添加代码/指令(以及潜在还有数据)和/或修改现有的代码/指令(以及潜在还有数据),使得受保护的软件项目240包括或实现验证代码350(以及潜在的数据352)。如以上参考图3b所述,受保护的软件项目240可以包括或实现完整性检查模块234。因此,在本发明的一些实施例中,保护者模块224中的一个或多个布置成添加代码/指令(和潜在的其他软件元素)和/或修改现有的代码/指令(和潜在的其他软件元素),以使得受保护的软件项目240包括或实现完整性检查模块234。
图6是示出根据本发明的一些实施例的方法400的步骤404的示例实现方式的流程图。
在可选步骤600,保护者模块224中的一个或多个可以将一种或多种软件保护技术应用于初始软件项目250(或由先前保护者模块224输出的软件)。
在步骤602,保护者模块224中的一个或多个将验证代码350(以及潜在的数据352,如果使用的话)包括到初始软件项目250中(或者如果使用了步骤600的话,则包括到由先前的保护者模块224输出的软件中)。因此,步骤602(如果使用的话,还潜在地包括步骤600)导致初始软件项目250被修改,从而包括验证代码350(以及数据352,以用于使用数据352的实施例)。
在可选步骤604,保护者模块224中的一个或多个可以将一种或多种软件保护技术应用于由步骤602产生的软件项目。
在可选步骤606,如果受保护的软件项目240将是图3b中所示的形式的话,则使用该步骤,保护者模块224中的一个或多个将用于完整性检查模块234的代码(以及潜在的其他软件元素)包括到由步骤604产生的软件项目中(如果步骤604被使用了的话),或者包括到由步骤602产生的软件项目中(如果步骤604没有被使用)。
在可选步骤608,保护者模块224中一个或多个可以将一种或多种软件保护技术应用于由紧接在先前步骤(按照适当情况为步骤602、604或606)产生的软件项目。
将领会的是,步骤602和606的顺序可以改变。还将领会的是,步骤602和606可以一起执行。
优选地,用于验证代码350(以及用于完整性检查模块234,如果存在的话)的代码/指令在步骤602(以及在步骤606,如果存在的话)被包括或定位/位于受保护的软件项目240内,以作为由不用于实现验证代码350(并且不用于完整性检查模块234,如果其存在的话)的其他代码/指令分隔或与其交错的多个代码节(section of code)。这些节可以包括验证代码350的一个或多个相应指令(即,它们可以形成验证代码350的一部分或片断)。这在图5a中示意性示出,在其中验证代码350与受保护的软件项目240的其他代码/指令510交错。受保护的软件项目240当然可以包括一个或多个额外数量的代码/指令500。其他代码/指令510可以包括以下一项或多项:来自初始软件项目250的初始软件元素310的初始/未改变代码;不同于验证代码350的来自更新软件元素300的代码中的一些/所有;用于完整性检查模块234(如果存在的话)的代码中的一些/所有。这种交错或分发使得对于攻击者更难隔离验证代码350(以及完整性检查模块234,如果存在的话)。这种交错或分发也使得对于攻击者难以在还未引起与验证代码350相关的修改的情况下实现与代码/指令510相关的修改。代码/指令510可以是完整性验证针对其是期望的代码/指令,这就是为什么可以选择验证代码350与该代码/指令510交错,因为如上所述,由攻击者带来的对与这种代码/指令510相关的修改很可能引起对与验证代码350相关的修改,如以下详细讨论的,这种修改可能是由完整性检查模块234或完整性检查应用232可检测到的。优选地,验证代码350(以及用于完整性检查模块234(如果存在的话)的代码/指令)与其他代码510无法区分(例如,它们都使用相同类型的操作/变量/等),使得验证代码350看起来好像是周围代码510的自然部分,并且对于攻击者更难将验证代码350与周围代码510隔离。
如提及的,本发明的一些实施例包括并使用数据352。在这样的实施例中,数据352优选地被包括或定位/位于在步骤602(和/或潜在的在步骤606,如果存在的话)的受保护的软件项目240内,以作为由其他数据和/或资源分隔或与其交错的多个数据节(section ofdata)。这在图5b中示意性示出,在其中数据352与受保护的软件项目240的其他数据(和/或资源或资产)530交错。受保护的软件项目240当然可以包括一个或多个额外数量的数据520。其他数据530可以包括以下一项或多项:来自初始软件项目250的初始软件元素310的数据;来自不同于数据352的更新软件元素300的数据中的一些/所有。这种交错或分发使得对于攻击者更难隔离数据352。这种交错或分发也使得对于攻击者很难在还未引起与数据352相关的修改的情况下实现与数据530相关的修改。数据530可以是完整性验证针对其期望的数据,这就是为什么可以选择数据352与此数据530交错,因为如上所述,由攻击者带来的对与这种数据530相关的修改可能引起对与数据352相关的修改,如以下详细讨论的,这可能由完整性检查模块234或完整性检查应用232可检测到。优选地,数据352与其他数据530无法区分(例如,它们都使用用于数据的相同格式),使得数据352看起来好像是周围数据530的自然部分,并且对于攻击者更难将数据352与周围数据530隔离。
优选地,保护者模块224(一个或多个)布置成将一个或多个软件保护(例如,模糊)应用于被包括在受保护的软件项目240中的验证代码350(以及应用于完整性检查模块234和数据352,如果存在的话)。这可以在例如步骤604和/或步骤608发生。因此,例如,保护应用222可以使用一个或多个第一保护者模块224来将验证代码350(以及可能的完整性检查模块234和数据352)包括到初始软件项目250(或者先前保护者模块224的输出)中,并且然后使用一个或多个第二保护者模块224来将一个或多个保护(例如,旨在使在白盒攻击环境下安全的保护)应用于至少验证代码350(以及潜在地应用于完整性检查模块234和/或数据352,如果存在的话),并且优选地应用于完整性验证针对其期望的代码/指令510(以及潜在地数据530)。这使得对于攻击者更加难以隔离和攻击验证代码350(以及完整性检查模块234和/或数据352,如果存在的话)和/或代码/指令510和/或数据530,同时规避由验证代码350提供的保护。
图9示意性示出了根据本发明的一些实施例的如何保护软件项目的示例方法。具体而言,图9示意性示出了可以在步骤602(以及可能还有步骤606,如果包括的话)执行的处理。
软件项目900要在步骤602(以及可能还有步骤606,如果包括的话)受到保护。如以上阐述,此软件项目900可以是初始软件项目250,或者可以是在步骤600(如果包括的话)对其已应用了一个或多个保护之后的初始软件项目250。软件项目900可以包括各种软件元素,包括代码902和数据904。代码902布置成使用数据904来执行其意图/设计的功能性。
如上所述,本发明的实施例使用验证代码350。另外,在一些实施例中,受保护的软件项目240包括完整性检查模块234。本发明的一些实施例(如图9中所示)使用被引进到受保护的软件项目900中的额外的数据352。因此,验证代码350(以及完整性检查模块234(如果存在的话)和数据352(如果存在的话))一起可以被视为IV模块910。
如稍后更详细阐述的,在本发明的一些实施例中,IV模块910使用其自己的代码350、234和数据352来执行完整性验证处理,但是不基于或涉及软件项目900的代码902或数据904来执行计算。然而,注意的是,IV模块910可以使用由代码902生成的运行时间数据(例如,使用运行时间数据作为熵的源)-然而,由IV模块910生成的结果/输出(诸如验证数据)不直接基于软件项目900的代码902或数据904(即,与传统完整性验证不同,那些软件元素不被IV模块910读取并然后作为数据处理)。
在步骤602(和步骤606,如果使用的话),验证代码350(和完整性检查模块234和数据352,如果使用的话)被引进到软件项目900中,以生成受保护的软件项目930(即,在适当时,步骤602或606的输出)。因此,执行步骤602(以及可能的步骤606)的(一个或多个)保护者模块224可以包括混合模块920,其布置成将IV模块910与软件项目900相组合。具体而言,混合模块920可以包括代码混合模块922,其布置成将代码902与验证代码350(以及可能的完整性检查模块234的代码)组合或集成,以生成受保护的软件项目930的受保护的代码932-这可以如图5a中所示的那样来执行。类似地,混合模块920可以包括数据混合模块924,其布置成将数据904与数据352组合或集成,以生成受保护的软件项目930的受保护的数据934-这可以如图5b中所示的那样来执行。
图8示意性示出了根据本发明的一些实施例的完整性验证通过其来操作的方式。具体而言,如以上提及的,并且如以下将更详细描述的,验证代码350生成验证数据。验证数据是(或包括、或表示)数据元素的预定第一集合800的元素(即,成员)。在没有与验证代码350相关的修改的情况下,验证数据是(或包括、或表示)数据元素的预定第二集合804的元素,其中数据元素的此第二集合804是数据元素的第一集合800的子集。第一集合800具有多个数据元素(在图8中示出为数据元素802)-使第一集合800中的数据元素802的数量为N1。第二集合804具有多个数据元素(在图8中示出为数据元素806)-使第二集合804中的数据元素806的数量为N2
如将在以下更详细讨论的,在不知道某些参数(或者从这些参数导出、基于这些参数的或与这些参数相关的数据)的情况下,确定第一集合800的数据元素即还有第二集合804的数据元素806在计算上是不可实行的。例如,N2优选地比N1小得多(即N1/N2的比率相当大,或者N1优选地比N2大几个数量级,其中M的值越大,安全级别越高)。与验证代码350相关的修改可以影响验证数据的生成。例如,一个或多个参数可以是实际验证代码350本身的一部分,或者在实际验证代码350本身内被表示,并且验证代码350的修改可以改变这些参数,使得基于不正确的参数而生成验证数据-例如,参数可以是具体整数(诸如35),并且验证代码可以包括针对某一变量x的语句x=x+35。类似地,参数中的一个或多个可以是数据352(如果存在的话)的一部分或在数据352中被表示,并且数据352的修改可以改变这些参数,使得基于不正确的参数而生成验证数据-例如,参数可以是具体整数(诸如35),并且验证代码可以包括针对已经在35的参数值的情况下被定义的某一静态变量p的语句x=x+p。作为另一个示例,验证代码350基于(或使用)参数来执行各种计算(或操作),并且这可能涉及生成用于后续计算的中间数据-与验证代码350相关的修改可能改变计算是如何执行的(例如,由于控制流中的改变或对验证代码350本身的改变)或者可以改变中间数据的值(例如,由于通过验证代码350所使用的存储器内容中的改变或者数据流中的改变),使得基于不正确的计算和/或数据而生成验证数据。因此,与验证代码350相关的修改将几乎肯定会导致验证数据是(或包括、或表示)第一集合800中的数据元素802,而不是第二集合804的数据元素806。例如,如果验证代码350布置成使得验证代码350的修改导致验证数据是随机(或伪随机)值,那么在这样的修改之后,验证数据是(或包括、或表示)第二集合804的数据元素806的概率是N2/N1,如以下所述,这优选是非常低的概率。验证代码350可以被编写到“易碎”的程度,就某种意义来说,它对变化敏感。
优选地,一个或多个参数被包含在验证代码350和/或数据352中,其是在保护初始软件项目250以致生成受保护的软件项目240时所引进。在这样的实施例中,完整性验证然后不基于使用初始软件项目250的原始软件元素的计算(不同于潜在地由那些软件元素生成的运行时间数据-即,那些软件元素本身不被验证代码350作为数据读取并作为数据处理)。相反,这些实施例中的完整性验证依赖于由验证代码350使用一个或多个参数执行的数据完整性验证,其中代码510和数据530“围绕”验证代码350和/或数据352(如图5a和5b中所示),其依靠与验证代码350和/或数据352交错来继承保护。
如果使用在图2a和3a中所示的实施例,则术语“完整性检查器”将被用来指完整性检查应用232(或验证系统230),或者如果使用在图2b和3b中所示的实施例,则术语“完整性检查器”将被用来指完整性检查模块234。完整性检查器使用验证数据来确定是否已发生了与验证代码350相关的未意图/未授权的修改。具体而言,完整性检查器确定验证数据是否是(或包括、或表示)第二集合804的数据元素806-如果验证数据是(或包括、或表示)第二集合804的数据元素806,则完整性检查器断定(或标识/确定)没有发生与验证代码350相关的修改;如果验证数据不是(或不包括、或不表示)第二集合804的数据元素806,则完整性检查器断定(或标识/确定)与验证代码350相关的修改已经发生。
图7是示出根据本发明的一些实施例的由验证代码350连同相关的完整性检查器执行的示例方法700的流程图。
在步骤702,在受保护的软件项目240的运行时间,验证代码350生成验证数据。验证数据使用以下项来生成:(a)由受保护的软件项目240的代码中的一个或多个部分生成的运行时间数据;和(b)一个或多个预定参数。
在没有与验证代码350相关的修改的情况下,由验证代码350对一个或多个预定参数的使用确保验证数据是(或包括、或表示)第二集合804的数据元素806,并且由验证代码350对运行时间数据的使用控制(或确定或选择)第二集合804的哪个数据元素806是所生成的验证数据(或被包括在所生成的验证数据中或由所生成的验证数据表示)。因此,在没有由攻击者对受保护的软件项目240进行攻击的情况下,验证代码350应该执行以致产生验证数据,所述验证数据是(或包括、或表示)第二集合804的数据元素806-这意味着完整性检查器可以断定(或标识/确定)尚没有对受保护的软件项目240发起攻击。
在一些实施例中,优选地选择运行时间数据,使得如果验证代码350被多次执行,则由验证代码350在验证代码350的第i次执行时所使用的运行时间数据Ri的值不同于由验证代码350在验证代码350的第j次执行时所使用的运行时间数据Rj的值(对于正整数i和j,具有i≠j)。因此,在验证代码350的第i次执行时生成的验证数据(依赖Ri)不同于在验证代码350的第j次执行时生成的验证数据(依赖Rj)。这可以例如通过确保运行时间数据的值依赖于以下一项或多项来实现:由计算机系统210的用户提供的输入;由计算机系统210在处理的数据/内容(例如,在处理的文档;在解密的或加密的数据;在解码的多媒体数据;等等);与计算机系统210的当前执行环境相关的数据;当前日期/时间数据;任何熵的源;等等。运行时间数据优选充当(伪)随机数据或熵的源。如以下陈述,这种不重复的运行时间数据有助于防止由攻击者带来的重放(replay)攻击(即,这阻止攻击者检测有效验证数据并随后重用该有效验证数据)。
生成此运行时间数据的代码中的一个或多个部分可以是受保护的软件项目240的任何部分。代码的一个或多个部分优选地是受保护的软件项目240的代码/指令510,验证代码350与其相交错。
步骤602(在其中,验证代码350被包括在初始软件项目250中,或者被包括在由步骤600(如果使用的话)输出的软件中)可以包括标识初始软件项目250内(或者在由步骤600(如果使用的话)输出的软件中)运行时间数据的一个或多个源(或者量),以供由验证代码350所使用。如果运行时间数据的这样的源(或量)在初始软件项目250内(或在由步骤600(如果使用的话)输出的软件中)不可用的话,则步骤602可以包括在初始软件项目250内(或在由步骤600(如果使用的话)输出的软件中)包括代码,以充当运行时间数据的源(例如,包括用作随机数生成器的指令,所述随机数生成器可以基于例如计算机系统210的当前配置或操作状态而被播种(seed))。额外地或者可替换地,步骤602可以包括在初始软件项目250内(或在由步骤600(如果使用的话)输出的软件中)包括代码,以致于将运行时间数据转换(或者变换或编码)成要由验证代码350使用的转换的运行时间数据,其中转换被布置成使得转换的运行时间数据具有比未转换的运行时间数据更高的随机程度。例如,初始运行时间数据可以包括k比特数,所述k比特数在运行时间假设偏向0的值,而在转换之后,此转换的k比特数可以假设跨2k个可能值的整个范围内具有更均匀分布的值,或者至少跨2k个可能值的整个范围内分布更加多样的值。
一个或多个预定参数中的一个或多个可以被包括在验证代码350内,以供由验证代码350使用。这可以是以由验证代码350使用的数据值(例如常数)的实际量的形式;额外地或可替代地,验证代码350的指令可以依靠它们执行的操作在本质上实现一个或多个预定参数。一个或多个预定参数中的一个或多个可以被包括在数据352(如果使用的话)内。在步骤604和/或608应用的软件保护可以布置成使模糊,或者使得对于攻击者难以推断或标识或修改一个或多个预定参数(例如,通过应用旨在使相对于白盒攻击环境下安全的保护,以将一个或多个预定参数的值隐藏在受保护的软件项目240内)。步骤602可能涉及保护应用222生成一个或多个预定参数(或者与那些一个或多个预定参数相关/基于的数据)。
验证数据表示第一集合800的数据元素。在此,“表示”可以意味着验证数据仅仅是第一集合800的数据元素。例如,如果第一集合800是所有可能的2n个n比特数(对于某个正整数n)的集合,则验证数据可以仅仅是n比特数。可替换地,“表示”可以意味着验证数据可以包括第一集合800的数据元素,但是可能具有额外的数据。例如,如果第一集合800是所有可能的2n个n比特数(对于某个正整数n)的集合,则验证数据可以是m比特数(对于大于n的某个整数m),其中此m比特数的二进制表示包括n个比特,它们一起形成第一集合800的n比特数据元素。可替换地,“表示”可以意味着验证数据可以是(或者可以包括)第一集合800的数据元素的表示或转换。例如,如果第一集合800是所有可能的2n个n比特数(对于某个正整数n)的集合,则验证数据可以是m比特数(对于大于或等于n的某个整数m),其中此m比特数包括第一集合800的数据元素x的编码的或转换的版本y(例如,对于某些正整数a和b,y=ax+b)。验证数据然后可以包括所使用的具体编码或转换的指示,以从而辅助完整性检查器进行其处理,如以下陈述的那样(例如,显式地或经由参考针对a和b的值的查找表来指示a和b的哪些值被使用了)。
在步骤704,验证数据被提供给(或使可用于)完整性检查器。如果完整性检查器是完整性检查应用232(或验证系统230),则步骤704可能涉及受保护的软件项目240(或更确切地,接口/通信模块354),其经由网络270将验证数据传送或传达到完整性检查器。例如,受保护的软件项目240可以向完整性检查器发送请求,其中此请求包括验证数据,所述请求使得完整性检查器基于请求中的验证数据执行其验证处理。可替换地,如果完整性检查器是完整性检查模块234,则步骤704可能涉及将验证数据存储在计算机系统210处的存储器中,其由验证代码350和完整性检查器两者所共享,以供由完整性检查器随后使用,或者将验证数据传送或传递到完整性检查器。例如,完整性检查器可以作为与用于验证代码350的线程或过程分隔的线程或过程来运行,其中(a)完整性检查器检测对于存储在共享的存储器中的验证数据的改变(这指示出验证代码350已更新了验证数据,从而充当对完整性检查器基于验证数据来执行其验证处理的隐式请求),或者(b)完整性检查器基于当前存储在共享的存储器中的验证数据来周期性地执行其验证处理。可替换地,验证代码350可以向完整性检查器350发送消息或信号,或者可以向完整性检查器350做出功能/过程调用,其中此消息/信号/调用包括或传递验证数据,使得完整性检查器350然后可以基于此验证数据执行其验证处理。
在步骤706,完整性检查器使用在步骤704提供的或使得可用的验证数据来执行其完整性验证处理。具体而言,完整性检查器确定验证数据是否表示第二集合804的数据元素806。
如以上陈述,验证数据可以仅仅是第一集合800的元素。例如,如果第一集合800是所有可能的2n个n比特数(对于某个正整数n)的集合,则验证数据可以仅仅是n比特数。因此,步骤706可能涉及完整性检查器检查验证数据本身是否是第二集合804的数据元素806(例如,此n比特数是否是第二集合804中的值)。
如以上陈述,验证数据可以包括第一集合800的数据元素,但是可能具有额外的数据。例如,如果第一集合800是所有可能的2n个n比特数(对于某个正整数n)的集合,则验证数据可以是m比特数(对于大于n的某个整数m),其中此m比特数的二进制表示包括n个比特,它们一起形成第一集合800的n比特数据元素。因此,步骤706可能涉及完整性检查器检查不同于额外的数据的验证数据的部分是否是第二集合804的数据元素806(例如,此n比特数是否是第二集合804中的值)。
如以上陈述,验证数据可以是(或可以包括)第一集合800的数据元素的表示或转换。例如,如果第一集合800是所有可能的2n个n比特数(对于某个正整数n)的集合,则验证数据可以是m比特数(对于大于或等于n的某个整数m),其中此m比特数包括第一集合800的数据元素x的编码的或转换的版本y(例如,对于某些正整数a和b,y=ax+b)。因此,步骤706可能涉及完整性检查器对第一集合800的数据元素的编码的或转换的版本执行编码或转换的逆操作,以导出解码的值,并检查所解码的值是否是第二集合804的数据元素806(例如,所得n比特数是否是第二集合804中的值)。如提及的,验证数据可以包括由验证代码350使用的具体编码或转换的指示。例如,验证代码350可以布置成使用从完整性检查器配置成支持的T个不同编码的可能集合中的特定编码-指示可以标识出此具体编码,使得完整性检查器然后可以标识出验证代码350已经使用了哪个编码,并且因此如何执行对应的解码以确定解码的值。由验证代码350使用的特定编码可以在受保护的软件项目240的不同实例之间变化。可替换地,验证代码350可以布置成选取从完整性检查器配置成支持的T个不同编码的可能集合中的编码,使得所使用的编码可以在每次验证代码350向完整性检查器提供验证数据时改变-指示可以标识出所选取的编码,使得完整性检查器然后可以标识出验证代码350已经使用了哪种编码,以及因此如何执行对应的解码以确定解码的值。
完整性检查器基于验证数据执行一个或多个测试。每个测试的结果是与验证代码350相关的修改是否已经发生的指示。如果没有测试指示与验证代码350相关的修改已经发生,则完整性检查器断定与验证代码350相关的修改尚未发生;如果测试中的至少一个指示与验证代码350相关的修改已经发生,则完整性检查器断定与验证代码350相关的修改已经发生。
完整性检查器执行的测试中的一个如下。完整性检查器(i)如果验证数据表示第二集合804的数据元素806,则标识(或断定或确定)与验证代码350相关的修改尚未发生,并且(ii)如果验证数据不表示第二集合804的数据元素806,则标识(或断定或确定)与验证代码350相关的修改已经发生。例如,这种修改可以是由攻击者对受保护的软件项目240的攻击的结果(例如,对以下一项或多项的修改:受保护的软件项目240的代码、由受保护的软件项目240使用的数据、受保护的软件项目240的控制流、受保护的软件项目240的数据流或影响验证数据的计算/导出的结果的任何其他修改)。攻击者可能未意图做出与验证代码350本身相关的修改,而是改为可能想做出与受保护的软件项目的其他代码或数据相关的修改,所述其他代码或数据诸如验证代码350与其相交错的代码510、和/或数据352与其相交错的数据530-因此,由攻击者做出的与验证代码350相关的修改可能是非有意的。然而,交错(如果使用的话)和软件保护(如果在步骤604和/或608使用的话)意味着攻击者在试图攻击受保护的软件项目240的不同部分时很有可能引起与验证代码350相关的这种非有意修改-以此方式,由验证代码350提供的保护扩展到受保护的软件项目240的其他部分(诸如代码510和数据530)。
在一些实施例中,完整性检查器可以执行如下的额外检查。完整性检查器可以检查或标识由验证代码350提供的当前验证数据(带有其当前值)是否与由验证代码350先前提供的验证数据相同(或者由当前验证数据表示的第一集合800的当前数据元素是否与由通过验证代码350先前提供的验证数据表示的数据元素相同)。如以上提及的,运行时间数据的目的是控制(或确定或选择)第二集合804的哪个数据元素806是所生成的验证数据(或被包括在所生成的验证数据中或由所生成的验证数据表示)。如果运行时间数据被选取为基本上随机的(或伪随机),并且因此对于验证代码350的每次执行应该是不同的,那么在验证代码350的每次执行时生成的验证数据应该不同于(基本上所有的)先前生成的验证数据。换句话说,完整性检查器可以标识所接收到的验证数据是否对应于先前接收到的与受保护的软件项目240相关的验证数据,并且:(a)如果所接收到的验证数据不对应于先前接收到的与受保护的软件项目240相关的验证数据,则完整性检查器可以标识与验证代码350相关的修改尚未发生;以及(b)如果所接收到的验证数据对应于先前接收到的与受保护的软件项目240相关的验证数据,则完整性检查器可以标识与验证代码350相关的修改已经发生。因此,对于受保护的软件项目240的一个或多个实例,完整性检查器可以存储在步骤704由受保护的软件项目240的该实例提供给完整性检查器的验证数据的相应历史或日志(或者由在步骤704通过该受保护的软件项目240提供给完整性检查器的验证数据所表示的集合800的数据元素的历史或日志)并且,在步骤706,完整性检查器可以确定由受保护的软件项目240的实例所提供的当前验证数据(或由验证数据表示的第一集合800的当前数据元素)是否与用于受保护的软件项目240的该实例的日志中的任何验证数据(或第一集合800的数据元素)相同-如果不是,则此测试可以标识(或断定或确定)与验证代码350相关的修改尚未发生并且,否则的话,测试可以标识(或断定或确定)与验证代码350相关的修改已经发生(因为重复的数据元素或重复的验证数据在没有修改/攻击发生的情况下不应该发生)。
在步骤708,如果完整性检查器确定与验证代码350相关的修改尚未发生,则处理在步骤710继续。在步骤710,受保护的软件项目240的正常执行可以继续。这可能涉及完整性检查器针对验证数据的当前量不采取进一步的行动。可替换地,受保护的软件项目240可以配置成响应于在步骤704提供验证数据而期望来自完整性检查器的回复(例如,验证数据可能已经作为对完整性检查器的请求或消息的一部分被提供给完整性检查器,其中受保护的软件项目240等待对该请求/消息的响应以便继续执行)。因此,完整性检查器可以向受保护的软件项目240提供响应返回,以使得受保护的软件项目240能够继续其正常执行。例如,响应可以包括对验证代码350指示所述验证数据被成功验证的预定代码/标志。可替换地,请求或消息可以是对来自完整性检查器的具体服务的请求(例如,被准予对在线账户的访问)-因此响应可以是启用或允许或提供所请求的服务(例如,准予对在线账户的访问)。可替换地,请求或消息可以是对数据(例如解密密钥)的具体量的请求-因此响应可以是提供所请求的数据。
然而,在步骤708,如果完整性检查器确定与验证代码350相关的修改已经发生,则处理在步骤712继续。在步骤712,可以对可疑的攻击提供响应。这可能采取多种形式。例如,完整性检查器可以使得受保护的软件项目240中止执行。可替换地,受保护的软件项目240可以配置成响应于在步骤704提供验证数据而期望来自完整性检查器的回复(例如,验证数据可能已经作为对完整性检查器的请求或消息的部分被提供给完整性检查器,其中受保护的软件项目240等待对请求/消息的响应以便继续执行)。因此,完整性检查器可以向受保护的软件项目240提供响应返回,以防止受保护的软件项目240继续其正常执行。例如,响应可以包括对验证代码350指示验证数据没有被成功验证的预定代码/标志。可替换地,请求或消息可以是对来自完整性检查器的具体服务的请求(例如,被准予对在线账户的访问)-因此,响应可以是禁用或不允许或不提供所请求的服务(例如,拒绝对在线账户的访问)。可替换地,请求或消息可以是对数据(例如解密密钥)的具体量的请求-因此响应可以是提供不合适的数据(例如不正确的解密密钥)。
将领会的是,完整性检查器可以存储预定参数(或至少对应数据/参数)中的一些或所有,或者具有对其的访问,以使得完整性检查器能够在步骤706对验证数据执行其处理。如果完整性检查器是完整性检查模块234,则完整性检查器可以具有对与由验证代码350使用的相同预定参数的访问。额外地或可替换地,完整性检查器可以包括在其中存储预定参数(或至少对应数据/参数)的数据库或存储器,或者具有对所述数据库或存储器的访问,以使得完整性检查器能够在步骤706对验证数据执行其处理。如果完整性检查器是完整性检查应用232(或验证系统230),则完整性检查器可以包括在其中存储预定参数(或至少对应数据/参数)的数据库或存储器,或者具有对所述数据库或存储器的访问,以使得完整性检查器能够在步骤706对验证数据执行其处理。
完整性检查器可以由保护系统220配置成存储预定参数(或至少对应数据/参数)中的一些或所有,或具有对其的访问,以使得完整性检查器能够在步骤706对验证数据执行其处理。例如,当保护应用222将完整性检查模块234包括在受保护的软件项目240中时(在可选步骤606)或者当在步骤406提供受保护的软件项目240时(例如,由完整性检查应用232使用的数据库可以被更新以包括对应于所提供的受保护的软件项目240的预定参数(或至少对应数据/参数)),这可能会发生。
将领会的是,对于受保护的软件项目240的所有实例,预定参数可以是相同的。可替换地,在一些实施例中,预定参数中的一些或所有可以在受保护的软件项目240的不同实例之间不同(即,受保护的软件项目240的实例可以至少部分基于由验证代码350使用的预定参数而多样化)。
可以使用本发明的实施例来执行的完整性验证的多个示例在以下被陈述。
示例1
在此第一示例中:
·第一集合800是对于某个正整数n(诸如n=64)的集合n比特数。因此,第一集合的数据元素802是n比特值。
·预定参数包括:
○加密密钥K;
○包括m比特的预定比特序列B(其中m是在m<n的情况下的正整数);以及
○对于预定比特序列B的m比特中的每个,n比特值内的对应位置(即,对于B的每个比特bi,i=1,…,m,在范围1,…,n中的对应索引pi指示n比特值的二进制表示中的比特位置)。B的m比特中的每个都具有不同的相应位置。
·第二集合804是第一集合800(即,n比特数)的所有元素V的集合,对于该集合,V是n比特值B*的加密版本,其中,B*的n比特比特表示包括在B*的n比特比特表示内它们的相应预定位置处的比特序列B的m比特,其中B*的加密使用加密密钥K。
因此,在步骤702的生成验证数据可以包括:
·使用以下项来形成n比特值B*
○在B*的n比特比特表示内它们的相应预定位置处的比特序列B的m比特。
○来自在B*的n比特比特表示内剩余位置处的运行时间数据的n-m比特。因此,运行时间数据将控制或选择第二集合804的哪个数据元素806由验证数据表示。
·使用加密密钥K对n比特值B*加密,以形成验证数据D。
因此,在步骤706执行的验证可以包括:
·解密接收到的n比特验证数据D以获得n比特值W(因此,其将是第一集合800的数据元素)。
·标识出n比特值W是否具有在W的n比特比特表示内相应预定位置处的比特序列B的m比特。如果n比特值W确实具有在W的n比特比特表示内相应预定位置处的比特序列B的m比特,则验证数据D是第二集合804的数据元素806,并且完整性检查器可以断定与验证代码350相关的修改尚未发生;否则,验证数据D不是第二集合804的数据元素806,并且完整性检查器可以断定与验证代码350相关的修改已经发生。
加密密钥K可以是对称加密密钥,以使得完整性检查器将然后需要知道密钥K以执行解密,知道预定比特序列B以及针对B的比特中的每个的预定位置以便执行步骤706。加密密钥K可以是完整性检查器的公共密钥,以使得完整性检查器将然后需要知道对应于密钥K的私有密钥以执行解密,知道预定比特序列B以及针对B的比特中的每个的预定位置以便执行步骤706。
将领会的是,代替使用密钥K来执行加密操作,可以使用任何其他可逆的密钥化(keyed)/播种的操作或转换来代替。
由于加密操作旨在产生看来像是随机(或伪随机)的密文,因此将领会的是,例如,由攻击者对预定参数的修改可能会引起所生成的验证数据中的改变。对于验证数据D(例如,在由攻击者攻击后生成的验证数据D)的任意量,在解密D后生成的n比特值W包括在正确位置处的比特序列B的m比特的概率是1/(2m)-因此,m的值可以被选取为足够大,以使得此概率小于预定阈值概率T1(其中T1的值越小,完整性验证越安全和更可靠)。约定这一点以及加密算法的性质,将领会的是,对于攻击者在不知道预定参数的情况下生成第二集合804的数据元素在计算上是不可实行的。第二集合804的数据元素的数量是2(n-m)-因此,如果n充分大于m,则重复验证数据D的量的概率将非常小(假设运行时间数据足够随机)。事实上,可以选取足够大的n,以使得此概率小于预定阈值概率T2(其中T2的值越小,完整性验证越安全和更可靠)。
示例2
示例2类似于示例1,但是从不同的角度来检视。具体而言,在此第一示例中:
·第一集合800是对于某个正整数n(诸如n=64)的集合n比特数。因此,第一集合的数据元素802是n比特值。
·预定参数包括:
○包括m比特的预定比特序列B(其中m是在m<n的情况下的正整数);
○对于预定比特序列B的m比特中的每个,n比特值内的对应位置(即,对于B的每个比特bi,i=1,…,m,在范围1,…,n中的对应索引pi指示n比特值的二进制表示中的比特位置)。B的m比特中的每个都具有不同的相应位置。
·第二集合804是第一集合800(即,n比特数)的所有元素V的集合,对于该集合,V的n比特比特表示包括在V的n比特比特表示内它们的相应预定位置处的比特序列B的m比特。
因此,在步骤702,生成验证数据可以包括:
·使用以下项来形成n比特值B*
○在B*的n比特比特表示内它们的相应预定位置处的比特序列B的m比特。
○来自在B*的n比特比特表示内剩余位置处的运行时间数据的n-m比特。因此,运行时间数据将控制或选择第二集合804的哪个数据元素806由验证数据表示。
步骤704可以包括以加密形式向完整性检查器提供验证数据(其中完整性检查器然后在执行步骤706之前解密接收到的加密验证数据)。
在步骤706执行的验证可以包括:
·标识出接收到的n比特验证数据D是否具有在D的n比特比特表示内相应预定位置处的比特序列B的m比特。如果n比特值D确实具有在D的n比特比特表示内相应预定位置处的比特序列B的m比特,则验证数据D是第二集合804的数据元素806,并且完整性检查器可以断定与验证代码350相关的修改尚未发生;否则,验证数据D不是第二集合804的数据元素806,并且完整性检查器可以断定与验证代码350相关的修改已经发生。
完整性检查器将然后需要知道预定比特序列B,以及针对B的比特中的每个的预定位置以便执行步骤706。
将领会的是,例如,由攻击者对预定参数的修改可能会引起所生成的验证数据中的改变。对于验证数据D(例如,在由攻击者攻击后生成的验证数据D)的任意量,n比特值D包括在正确位置处的比特序列B的m比特的概率是1/(2m)-因此,m的值可以被选取为足够大,以使得此概率小于预定阈值概率T1(其中T1的值越小,完整性验证越安全和更可靠)。因此,将领会的是,对于攻击者在不知道预定参数的情况下生成第二集合804的数据元素在计算上是不可实行的。第二集合804的数据元素的数量是2(n-m)-因此,如果n充分大于m,则重复验证数据D的量的概率将非常小(假设运行时间数据足够随机)。事实上,可以选取足够大的n,以使得此概率小于预定阈值概率T2(其中T2的值越小,完整性验证越安全和更可靠)。
示例3
在此示例中:
·使R是整数模2w(对于某个正整数w,例如其可以是计算机系统210的字长,诸如w=32或w=64)的可换环,即,R =/(2w)。
·使m和n是正整数,并定义L=m+n。
·使第一集合800被称为V。V是具有R中的元素的长度L的所有向量的集合(即,V=RL)。V是基于环R的R模。
·使A是具有R中的元素的任意(或随机选取/生成的)m×m非奇异(即,可逆)矩阵A。如何获得这样的可逆矩阵A是众所周知的。
·使c是具有R中的元素的任意(或随机选取/生成的)m×1向量。
·定义,即,具有R中的元素的L×L矩阵,其中0a×b表示具有所有其元素等于0的a×b矩阵。因此,矩阵B的零空间是V中所有元素v的集合,对于该集合,v的前m个元素为0,并且v的剩余n个元素可以假定为R中的任何值。
·使C是在向其附加了n个0的情况下的向量C。
·使第二集合804被称为S。则S是V中作为对方程C=Bx(对于变量x)的解的所有向量的集合。如果U等于在向其附加了R的n个任意元素的情况下的R中元素的m×1向量u,其中u是对方程c=Ax的解(使得c=Au),则V中的向量U是对此方程C=Bx的解(即,使得C=BU)。例如,可以找到这样的解,因为u=A-1c。
因此,验证代码350(和/或数据352,如果存在的话)可以包括或存储来自S的多个任意向量q1,…,qk(对于大于1的某个整数k)。步骤602可能涉及生成这些向量q1,…,qk。如以上提及的,每个向量qi(i=1,…,k)可以由保护应用222通过以下方式来确定:如以上陈述的,标识对方程c=Ax的解u(使得c=Au),并且然后将qi形成为在向其附加了R的n个随机选取的元素的情况下的向量u。因此,对于i=1,…,k,Bqi=C。因此,步骤602还可能涉及生成A和c(如以上陈述的)-这些对于受保护的软件项目240的所有实例可以是相同的,或者对于受保护的软件项目240的每个单独实例可以是个别化的。
在一些实施例中,验证代码350(和/或数据352,如果存在的话)可以包括或存储多个向量z1,…,zj(对于某个正整数j),对于其,Bzj=0。步骤602可能涉及生成这些向量z1、…、zj。具体而言,每个向量zi(i=1,…,j)可以由保护应用222确定为具有其前m个元素为多个0并且剩余n元素为R的随机选取元素的向量。因此,对于i=1,…,j,Bzi=0。
预定参数然后包括:
○向量qi(i=1,…,k)以及;
○可选地,向量zi(i=1,…,j)。
然后,在步骤702,生成验证数据可以包括:
·在V中形成向量v,其中,其中系数ai和bi是基于运行时间数据而生成的R的元素(例如,每个系数ai和bi是由运行时间数据的w个相应比特所表示的R中的值)。bi(i=1,…,j)的值可以全都基于运行时间数据而随机生成,或者可以基于运行时间数据独立于彼此而生成。ai(i=1,…,k)的值应当满足。这可以以多种方式来实现,例如,通过基于运行时间数据而随机生成a1,…,ak-1(或者基于运行时间数据独立于彼此而生成它们),并且然后将ak计算为。因此,验证代码350可以包括一个或多个指令,所述指令如以上陈述的那样获得或生成系数ai和bi,并且所述指令将向量v生成为。将领会的是,v的生成可以在验证代码350内的不同位置(而不是在一个代码块中)的多个指令上被执行。
·因为每个qi(i=1,…,k)是S的元素,所以我们有Bqi=C。另外,每个zi(i=1,…,j)有Bzi=0。另外,由于,我们有Bv=C。因此,以此方式生成的向量v是S的元素。由于系数ai和bi是基于运行时间数据而确定的,所以运行时间数据确定S的哪个元素被生成为向量v
·如以上提及的,向量zi(i=1,…,j)的使用是可选的,因此它们(和系数bi)可以从以上被省略。
步骤704可以包括以加密形式向完整性检查器提供验证数据(其中完整性检查器然后在执行步骤706之前解密接收到的加密验证数据)。
在步骤706执行的验证可以包括确定验证数据D(即,V的元素)的接收到的量是否具有BD=C的属性。如果BD=C,则验证数据D是第二集合804的元素806,并且完整性检查器可以断定与验证代码350相关的修改尚未发生;否则,验证数据D不是第二集合804的元素806并且完整性检查器可以断定与验证代码350相关的修改已经发生。
完整性检查器将然后需要知道矩阵B和向量C。然而,将领会的是,在验证代码350(或数据352,如果存在的话)中既没有出现B也没有出现C,因此其对于攻击者是不可获得的。
将领会的是,例如,由攻击者对预定参数的修改可能会引起所生成的验证数据中的改变。对于验证数据D(例如,在由攻击者攻击后生成的验证数据D)的任意量,验证数据D(作为V的元素)是S的元素的概率是1/(2wm)-因此,m的值可以被选取为足够大,以使得此概率小于预定阈值概率T1(其中T1的值越小,完整性验证越安全和更可靠)。因此,将领会的是,对于攻击者在不知道预定参数(或者与一个或多个预定参数相关的数据,诸如D和C)的情况下生成第二集合804的元素在计算上是不可实行的。第二集合804的元素的数量是2nw-因此,通过将n的值设置为足够大,重复验证数据D的量的概率可以变成小于预定阈值概率T2(其中T2的值越小,完整性验证越安全和更可靠)。
将领会的是,可以对B的列进行重新排序(其中对其他矩阵和向量的元素进行对应的重新排序被相应地执行)。
示例4
示例4类似于示例3,除了不是将第二集合804 S定义为是V中对方程C=Bx的解x的所有向量的集合,而是将集合S定义为以下之一:
(a)S是V中是对方程XC=XBx的解x的所有向量的集合,其中X是R的元素的任意(或随机选取/生成的)可逆L×L矩阵。因此,S是V中对方程s=Mx的解x的所有向量的集合,其中s=XC并且M=XB。注意的是:
·如果q是使得Bq=C的V的元素,则q也是对方程s=Mx的解,因为Mq=XBq=XC=s。如以上参考示例3所讨论的,可能在V中找到这样的元素q,使得Bq=C,因此也可能在V中找到元素q,其同样是S的元素,即对s=Mx的解。
·如果z是使得Bz=0的V的元素,则同样Mz=0,因为Mz=XBz=X0=0。如以上参考示例3所讨论的,可能在V中找到这样的元素z,使得Bz=0,因此也可能在V中找到针对其有Mz=0的元素z。
·示例4(a)然后以与以上示例3相同的方式进行操作,因为作为而形成的向量v具有Mv=s,因此v是S的元素。
(b)S是V中对方程C=BYx的解x的所有向量的集合,其中Y是R的元素的任意(或随机选取/生成的)可逆L×L矩阵。因此,S是V中对方程s=Mx的解x的所有向量的集合,其中s=C并且M=BY。注意的是:
·如果q是使得Bq=C的V的元素,则q*=Y-1q也是对方程s=Mx的解,因为Mq*=M(Y-1q)=BY(Y-1)q=Bq=C=s。如以上参考示例3所讨论的,可能在V中找到这样的元素q,使得Bq=C,因此也可能在V中找到元素q*,其同样是S的元素,即对s=Mx的解。
·如果z是使得Bz=0的V的元素,则z*=Y-1z具有Mz*=0的属性,因为Mz*=M(Y-1z)=BY(Y-1z)=Bz=0。如以上参考示例3所讨论的,可能在V中找到这样的元素z,使得Bz=0,因此也可能在V中找到针对其有Mz=0的元素z*
·示例4(b)然后以与以上示例3相同的方式进行操作,除了不使用qi(i=1,…,k)和可选的zi(i=1,…,j),而是使用对应元素qi *=Y-1qi(i=1,…,k)和可选的对应元素zi *=Y-1zi(i=1,…,j),因为作为而形成的向量v具有Mv=s,因此v是S的元素。
(c)S是V中对方程XC=XBYx的解x的所有向量的集合,其中X和Y是R的元素的任意(或随机选取/生成的)可逆L×L矩阵。因此,S是V中对方程s=Mx的解x的所有向量的集合,其中s=XC并且M=XBY。注意的是:
·如果q是使得Bq=C 的V的元素,则q*=Y-1q也是对方程s=Mx的解,因为Mq*=M(Y-1q)=XBY(Y-1)q=XBq=XC=s。如以上参考示例3所讨论的,可能在V中找到这样的元素q,使得Bq=C,因此也可能在V中找到元素q*,其同样是S的元素,即对s=Mx的解。
·如果z是使得Bz=0的V的元素,则z*=Y-1z具有Mz*=0的属性,因为Mz*=M(Y-1z)=XBY(Y-1z)=XBz=X0=0。如以上参考示例3所讨论的,可能在V中找到这样的元素z,使得Bz=0,因此也可能在V中找到针对其有Mz=0的元素z*
·示例4(c)然后以与以上示例3相同的方式进行操作,除了不使用qi(i=1,…,k)和可选的zi(i=1,…,j),而是使用对应元素qi *=Y-1qi(i=1,…,k)和可选的对应元素zi *=Y-1zi(i=1,…,j),因为作为而形成的向量v具有Mv=s,因此v是S的元素。
在步骤706执行的验证可以包括确定验证数据D(即,V的元素)的接收到的量是否具有MD=s的属性。如果MD=s,则验证数据D是第二集合804的元素806,并且完整性检查器可以断定与验证代码350相关的修改尚未发生;否则,验证数据D不是第二集合804的元素806并且完整性检查器可以断定与验证代码350相关的修改已经发生。
完整性检查器将然后需要知道矩阵M和向量s。然而,将领会的是,在验证代码350(或数据352,如果存在的话)中既没有出现M也没有出现s,因此对攻击者是不可获得的。
在以上示例中使用矩阵X和/或矩阵Y可以有助于改进安全性。具体而言,在示例3中,成功空间S是V中包括R的n个任意元素和R中元素的固定m×1向量u的所有向量的集合。使用矩阵X和/或Y有助于隐蔽这一点。具体而言,使用矩阵X重新定义了“结果空间”,使得成功空间S中的向量将不再包括R的n个任意元素和R中元素的固定m×1向量u;使用矩阵Y重新定义了“未知空间”(即,对于方程s=Mx中未知x的空间)。
4 - 修改
将领会的是,所描述的方法已经被示出为以特定顺序执行的各个步骤。然而,本领域技术人员将领会的是,这些步骤可以以不同顺序来组合或执行,同时仍然获得期望的结果。
将领会的是,本发明的实施例可以使用各种不同信息处理系统来实现。具体而言,尽管附图及其讨论提供了示例性计算系统和方法,但是呈现这些仅仅是为了在讨论本发明的各方面时提供有用的参考。本发明的实施例可以在任何合适的数据处理设备上执行,其诸如个人计算机、膝上型计算机、个人数字助理、移动电话、机顶盒、电视、服务器计算机等。当然,出于讨论的目的,已经简化了系统和方法的描述,并且它们只是可以用于本发明的实施例的系统和方法的许多不同类型中的一种。将领会的是,逻辑块之间的边界仅仅是说明性的,并且替代实施例可以合并逻辑块或元素,或者可以将功能性的替代分解施加于各种逻辑块或元素上。
将领会的是,以上提及的功能性可以被实现为作为硬件和/或软件的一个或多个对应模块。例如,以上提及的功能性可以被实现为用于由系统的处理器执行的一个或多个软件组件。可替换地,以上提及的功能性可以被实现为硬件,诸如在一个或多个现场可编程门阵列(FPGA)和/或一个或多个专用集成电路(ASIC)和/或一个或多个数字信号处理器(DSP)和/或其他硬件布置上。在本文中包含的流程图中实现的或如上所述的方法步骤可以由对应的相应模块来各自实现;在本文中包含的流程图中实现的或如上所述的多个方法步骤可以由单个模块一起来实现。
将领会的是,在本发明的实施例由计算机程序来实现的范围内,存储或携带计算机程序的一个或多个存储介质和/或一个或多个传输介质形成了本发明的方面。计算机程序可以具有一个或多个程序指令或程序代码,当由一个或多个处理器(或一个或多个计算机)执行时,其执行本发明的实施例。如本文中使用的术语“程序”、“软件”或“软件项目”可以是设计用于在计算机系统上执行的指令的序列,并且可以包括子例程、函数、过程、模块、对象方法、对象实现方式、可执行应用、小应用程序、小服务程序、源代码、目标代码、字节代码、共享库、动态链接库和/或设计用于在计算机系统上潜在地利用数据和/或其他资源执行的指令的其他序列。存储介质可以是磁盘(诸如硬盘或软盘)、光盘(诸如CD-ROM、DVD-ROM或蓝光盘)、或存储器(诸如ROM、RAM、EEPROM、EPROM、闪速存储器或便携式/可移动存储设备)等。传输介质可以是通信信号、数据广播、在两个或多于两个计算机之间的通信链路等。

Claims (24)

1. 一种方法包括,在包括验证代码和代码中的一个或多个部分的软件项目的运行时间期间:
所述验证代码使用(a)由代码的所述一个或多个部分生成的运行时间数据和(b)一个或多个预定参数来生成验证数据,所述验证数据表示数据元素的预定第一集合的元素;以及
将所述验证数据提供给完整性检查器,所述完整性检查器布置成(i)如果所述验证数据表示数据元素的预定第二集合的元素,其中所述第二集合是所述第一集合的子集,则标识与所述验证代码相关的修改尚未发生,以及(ii)如果所述验证数据没有表示所述第二集合的元素,则标识与所述验证代码相关的修改已经发生;
其中在不具有对所述一个或多个预定参数或与所述一个或多个预定参数相关的数据的认识的情况下,确定所述第二集合的元素在计算上是不可实行的;以及
其中,在没有与所述验证代码相关的修改的情况下,由所述验证代码对所述一个或多个预定参数的使用确保所述验证数据表示所述第二集合的元素,并且由所述验证代码对所述运行时间数据的使用控制所述第二集合的哪个元素由所生成的验证数据表示。
2.一种保护软件项目的方法,其中所述软件项目包括代码中的一个或多个部分,所述方法包括:
修改所述软件项目,以使得所述软件项目包括验证代码,所述验证代码布置成,在所述软件项目的运行时间期间:
使用(a)由代码中的所述一个或多个部分生成的运行时间数据和(b)一个或多个预定参数来生成验证数据,所述验证数据表示数据元素的预定第一集合的元素;以及
将所述验证数据提供给完整性检查器,所述完整性检查器布置成(i)如果所述验证数据表示数据元素的预定第二集合的元素,其中所述第二集合是所述第一集合的子集,则标识与所述验证代码相关的修改尚未发生,以及(ii)如果所述验证数据没有表示所述第二集合的元素,则标识与所述验证代码相关的修改已经发生;
其中在不具有对所述一个或多个预定参数或与所述一个或多个预定参数相关的数据的认识的情况下,确定所述第二集合的元素在计算上是不可实行的;以及
其中,在没有与所述验证代码相关的修改的情况下,由所述验证代码对所述一个或多个预定参数的使用确保所述验证数据表示所述第二集合的元素,并且由所述验证代码对所述运行时间数据的使用控制所述第二集合的哪个元素由所生成的验证数据表示。
3.根据权利要求2所述的方法,其中所述一个或多个预定参数中的每个是所述验证代码的一部分或者是在所述修改期间被包括在所述软件项目中的数据的一部分。
4.根据权利要求2或3所述的方法,其中所述验证代码没有基于在所述修改之前存在于所述软件项目中的软件元素来生成所述验证数据。
5.一种验证软件项目的方法,所述软件项目包括用于生成验证数据的验证代码,所述方法包括:
接收验证数据,所述验证数据表示数据元素的预定第一集合的元素;
如果所述验证数据表示数据元素的预定第二集合的元素,其中所述第二集合是所述第一集合的子集,则标识与所述验证代码相关的修改尚未发生;以及
如果所述验证数据没有表示所述第二集合的元素,则标识与所述验证代码相关的修改已经发生;以及
其中在不具有对一个或多个预定参数或与所述一个或多个预定参数相关的数据的认识的情况下,确定所述第二集合的元素在计算上是不可实行的;
其中,在没有与所述验证代码相关的修改的情况下,由所述验证代码对所述一个或多个预定参数的使用确保所述验证数据表示所述第二集合的元素,并且由所述验证代码对由所述软件项目的代码中的一个或多个部分生成的运行时间数据的使用控制所述第二集合的哪个元素由所生成的验证数据表示。
6.根据权利要求5所述的方法,包括:
标识所接收到的验证数据是否对应于先前接收到的与所述软件项目相关的验证数据;
如果所接收到的验证数据没有对应于先前接收到的与所述软件项目相关的验证数据,则标识与所述验证代码相关的修改尚未发生;以及
如果所接收到的验证数据对应于先前接收到的与所述软件项目相关的验证数据,则标识与所述验证代码相关的修改已经发生。
7.根据前述权利要求中任一项所述的方法,其中所述验证代码生成所述验证数据是通过:使用所述运行时间数据来生成伪随机数据并且使用所述伪随机数据和所述一个或多个预定参数来生成所述验证数据。
8.根据权利要求1至6中任一项所述的方法,其中所述运行时间数据是伪随机的或熵的源。
9.根据前述权利要求中任一项所述的方法,其中所述验证代码布置成生成与由所述验证代码先前生成的基本上所有验证数据不同的验证数据。
10.根据权利要求8所述的方法,其中所述验证代码布置成生成与由所述验证代码先前生成的基本上所有验证数据不同的验证数据,这是由于用来生成所述验证数据的所述运行时间数据与由所述验证代码先前用来生成验证数据的基本上所有运行时间数据不同。
11.当依赖于权利要求1时,前述权利要求中任一项所述的方法包括加密或转换所述验证数据,其中向所述完整性检查器提供所述验证数据包括向所述完整性检查器提供所加密的或所转换的验证数据。
12.根据前述权利要求中任一项所述的方法,其中:
所述一个或多个预定参数包括:
(i)密钥;
(ii)具有m比特的预定比特序列;
(iii)对于所述预定比特序列的每个比特,n比特值内的相应位置,其中m和n是在m小于n的情况下的正整数;
数据元素的所述第一集合包括所有可能的n比特值;以及
数据元素的所述第二集合包括使用所述密钥的n比特值B*的加密版本的所有可能的n比特值,所述n比特值B*包括在所述n比特值B*内它们的相应位置处的所述预定比特序列的所述m比特。
13.根据权利要求1至11中任一项所述的方法,其中:
所述一个或多个预定参数包括:
(i)具有m比特的预定比特序列;
(ii)对于所述预定比特序列的每个比特,n比特值内的相应位置,其中m和n是在m小于n的情况下的正整数;
数据元素的所述第一集合包括所有可能的n比特值;以及
数据元素的所述第二集合包括有包括在所述n比特值内它们的相应位置处的所述预定比特序列的所述m比特的所有可能的n比特值。
14.根据权利要求1至11中任一项所述的方法,其中:
所述一个或多个预定参数包括k个向量qi(i=1,…,k),其中:
k是大于1的正整数;
对于每个向量qi(i=1,…,k),所述向量qi是环R的元素的长度L的向量;
存在有元素R的预定L×L矩阵M和R的元素的长度L的预定向量s,使得对于每个向量qi(i=1,…,k),Mqi=s;
数据元素的所述第一集合包括R的元素的长度L的所有可能的向量;以及
数据元素的所述第二集合包括针对其有Mx=s的R的元素的长度L的所有可能的向量x。
15. 根据权利要求14所述的方法,其中所述验证代码根据生成验证数据v,其中ai(i=1,…,k)是基于所述运行时间数据所确定的R的元素并且
16.根据权利要求14所述的方法,其中:
所述一个或多个预定参数还包括j个向量zi(i=1,…,j),其中:
j是正整数;
对于每个向量zi(i=1,…,j),所述向量zi是R的元素的长度L的向量并且Mzi=0。
17.根据权利要求16所述的方法,其中所述验证代码根据生成验证数据v,其中ai(i=1,…,k)是基于所述运行时间数据而确定的R的元素,,并且bi(i=1,…,j)是基于所述运行时间数据而确定的R的元素。
18.根据权利要求14至17中任一项所述的方法,其中:
L=m+n,其中m和n是正整数;
M是基于矩阵,其中A是R中元素的可逆m×m矩阵,并且其中0a×b表示在所有的其元素等于0的情况下的a×b矩阵;
s是基于包括n个0和R中元素的m×1向量c的向量。
19.根据权利要求18所述的方法,其中任一:
(i)M=B;s是在向其附加了所述n个0的情况下的所述向量c;并且对于每个向量qi(i=1,…,k),所述向量qi是包括向量u和向其附加了R的n个元素的向量,其中u=A-1c;
(ii)M=XB,其中X是R中元素的可逆L×L矩阵;s是所述向量XC,其中C是在向其附加了所述n个0的情况下的所述向量c;并且对于每个向量qi(i=1,…,k),所述向量qi是包括向量u和向其附加了R的n个元素的向量,其中u=A-1c;
(iii)M=BY,其中Y是R中元素的可逆L×L矩阵;s是在向其附加了所述n个0的情况下的所述向量c;并且对于每个向量qi (i=1,…,k),所述向量qi是包括所述向量Y-1U的向量,其中U是在向其附加了R的n个元素的情况下的向量u,其中u=A-1c;
(iv)M=XBY,其中X和Y是R中元素的可逆L×L矩阵;s是所述向量XC,其中C是在向其附加了所述n个0的情况下的所述向量c;并且对于每个向量qi(i=1,…,k),所述向量qi是包括所述向量Y-1U的向量,其中U是在向其附加了R的n个元素的情况下的向量u,其中u=A-1c。
20.根据前述权利要求中任一项所述的方法,其中所述验证代码与所述软件项目的其他代码交错。
21.根据前述权利要求中任一项所述的方法,其中一种或多种白盒保护技术被应用于至少所述验证代码,以从而保护所述验证代码。
22.一种设备,所述设备布置成执行根据权利要求1至21中任一项所述的方法。
23.一种计算机程序,当由一个或多个处理器执行时,所述计算机程序使所述一个或多个处理器执行根据权利要求1至21中任一项所述的方法。
24.一种计算机可读介质,所述计算机可读介质存储有根据权利要求23所述的计算机程序。
CN201680092096.6A 2016-12-15 2016-12-15 软件完整性验证 Pending CN110268410A (zh)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/EP2016/081164 WO2018108275A1 (en) 2016-12-15 2016-12-15 Software integrity verification

Publications (1)

Publication Number Publication Date
CN110268410A true CN110268410A (zh) 2019-09-20

Family

ID=57570076

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201680092096.6A Pending CN110268410A (zh) 2016-12-15 2016-12-15 软件完整性验证

Country Status (5)

Country Link
US (1) US11281769B2 (zh)
EP (1) EP3555785A1 (zh)
CN (1) CN110268410A (zh)
CA (1) CA3047009A1 (zh)
WO (1) WO2018108275A1 (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113722683A (zh) * 2021-08-30 2021-11-30 北京百度网讯科技有限公司 模型保护方法、装置、设备、系统以及存储介质
US11720991B2 (en) 2021-05-20 2023-08-08 International Business Machines Corporation Signing and authentication of digital images and other data arrays

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB201703864D0 (en) 2017-03-10 2017-04-26 Irdeto Bv Secured system operation
US11196539B2 (en) * 2017-06-22 2021-12-07 Microsoft Technology Licensing, Llc Multiplication operations on homomorphic encrypted data
EP3961452A1 (en) * 2018-05-04 2022-03-02 Google LLC Detecting injection vulnerabilities of client-side templating systems
US10797868B2 (en) 2018-05-31 2020-10-06 Irdeto B.V. Shared secret establishment
US11206130B2 (en) * 2018-07-31 2021-12-21 Nxp B.V. Customizing cryptographic keys between multiple hosts
US11042634B2 (en) * 2018-12-21 2021-06-22 Fujitsu Limited Determining information leakage of computer-readable programs
EP3696698A1 (en) * 2019-02-18 2020-08-19 Verimatrix Method of protecting a software program against tampering
US11409877B2 (en) 2020-03-27 2022-08-09 Intel Corporation Firmware verification mechanism
FR3118218B1 (fr) * 2020-12-21 2024-02-16 St Microelectronics Rousset Procédé pour valider un module logiciel externe en vue de son utilisation par un système sur une puce
US11880472B2 (en) * 2021-01-14 2024-01-23 Bank Of America Corporation Generating and disseminating mock data for circumventing data security breaches
US11687440B2 (en) * 2021-02-02 2023-06-27 Thales Dis Cpl Usa, Inc. Method and device of protecting a first software application to generate a protected software application
EP4068127A1 (en) 2021-03-31 2022-10-05 Irdeto B.V. Systems and methods for determining execution state
EP4339835A1 (en) 2022-09-16 2024-03-20 Irdeto B.V. Machine learning model protection

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102163268A (zh) * 2010-02-18 2011-08-24 汤姆森许可贸易公司 在执行期间验证软件代码的完整性的方法和设备
CN102222196A (zh) * 2010-04-16 2011-10-19 汤姆森特许公司 验证自修改的计算机代码校验和的方法、装置及程序载体
US9177153B1 (en) * 2005-10-07 2015-11-03 Carnegie Mellon University Verifying integrity and guaranteeing execution of code on untrusted computer platform

Family Cites Families (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6594761B1 (en) 1999-06-09 2003-07-15 Cloakware Corporation Tamper resistant software encoding
US6779114B1 (en) 1999-08-19 2004-08-17 Cloakware Corporation Tamper resistant software-control flow encoding
JP2001117823A (ja) * 1999-10-15 2001-04-27 Fuji Xerox Co Ltd アクセス資格認証機能付きデータ記憶装置
CA2305078A1 (en) 2000-04-12 2001-10-12 Cloakware Corporation Tamper resistant software - mass data encoding
CA2327911A1 (en) 2000-12-08 2002-06-08 Cloakware Corporation Obscuring functions in computer software
CA2350029A1 (en) 2001-06-08 2002-12-08 Cloakware Corporation Sustainable digital watermarking via tamper-resistant software
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
US8752032B2 (en) 2007-02-23 2014-06-10 Irdeto Canada Corporation System and method of interlocking to protect software-mediated program and device behaviours
US7904406B2 (en) * 2007-05-04 2011-03-08 Oracle International Corporation Enabling validation of data stored on a server system
CA2724793C (en) 2008-05-23 2018-01-02 Irdeto Canada Corporation System and method for generating white-box implementations of software applications
US8869103B2 (en) * 2008-10-06 2014-10-21 The Mathworks, Inc. Using intermediate representations to verify computer-executable code generated from a model
JP5453461B2 (ja) * 2009-03-05 2014-03-26 インターデイジタル パテント ホールディングス インコーポレイテッド H(e)NB完全性検証および妥当性確認のための方法および機器
JP5555803B2 (ja) 2010-03-31 2014-07-23 イルデト カナダ コーポレーション カプセル化し、ソフトウェアライブラリ中の多様化によって保護を可能にするための、システムと方法
EP2689375B1 (en) 2011-03-21 2021-09-15 Irdeto B.V. System and method for securely binding and node-locking program execution to a trusted signature authority
US8869279B2 (en) * 2011-05-13 2014-10-21 Imperva, Inc. Detecting web browser based attacks using browser response comparison tests launched from a remote source
CN104335219B (zh) 2012-03-30 2018-06-05 爱迪德技术有限公司 使用变量相关编码来保护可访问的系统
GB201405706D0 (en) 2014-03-31 2014-05-14 Irdeto Bv Software protection
GB201405755D0 (en) 2014-03-31 2014-05-14 Irdeto Bv Optimizing and protecting software
EP3127028A1 (en) 2014-03-31 2017-02-08 Irdeto B.V. Protecting an item of software
US9363087B2 (en) * 2014-10-02 2016-06-07 Microsoft Technology Licensing, Inc. End-to-end security for hardware running verified software

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9177153B1 (en) * 2005-10-07 2015-11-03 Carnegie Mellon University Verifying integrity and guaranteeing execution of code on untrusted computer platform
CN102163268A (zh) * 2010-02-18 2011-08-24 汤姆森许可贸易公司 在执行期间验证软件代码的完整性的方法和设备
CN102222196A (zh) * 2010-04-16 2011-10-19 汤姆森特许公司 验证自修改的计算机代码校验和的方法、装置及程序载体

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11720991B2 (en) 2021-05-20 2023-08-08 International Business Machines Corporation Signing and authentication of digital images and other data arrays
CN113722683A (zh) * 2021-08-30 2021-11-30 北京百度网讯科技有限公司 模型保护方法、装置、设备、系统以及存储介质
CN113722683B (zh) * 2021-08-30 2023-10-13 北京百度网讯科技有限公司 模型保护方法、装置、设备、系统以及存储介质

Also Published As

Publication number Publication date
EP3555785A1 (en) 2019-10-23
WO2018108275A1 (en) 2018-06-21
US11281769B2 (en) 2022-03-22
US20200065480A1 (en) 2020-02-27
CA3047009A1 (en) 2018-06-21

Similar Documents

Publication Publication Date Title
CN110268410A (zh) 软件完整性验证
US11675880B2 (en) Securing webpages, webapps and applications
US11606211B2 (en) Secured system operation
JP5113169B2 (ja) 暗号関数を難読化する方法およびシステム
US10797868B2 (en) Shared secret establishment
US20170116410A1 (en) Software protection
CN106415579B (zh) 保护软件项目的方法
US10546155B2 (en) Protecting an item of software
CN105978680A (zh) 在白盒实现方案中实现填充
US20170109525A1 (en) Protecting an item of software
CN108064381B (zh) 用于数据保护的方法
Schultz The many facades of DRM
Ruiz et al. Security engineering and modelling of set-top boxes
Ren A Study of Selected Issues in Android Security
AlSufaian et al. Web Application Security Using Obfuscation

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
WD01 Invention patent application deemed withdrawn after publication
WD01 Invention patent application deemed withdrawn after publication

Application publication date: 20190920