生成软件应用程序的白盒实现的系统和方法

文档序号:6593635阅读:341来源:国知局

专利名称::生成软件应用程序的白盒实现的系统和方法
技术领域
:本发明一般涉及密码术(cryptography)。更具体地说,本发明涉及对被设计为在攻击者已完全访问并控制正在执行的软件的环境中安全操作的软件应用程序的开发。
背景技术
:白盒密码(cryptographic)软件是在白盒攻击环境中执行密码功能的软件;也就是说,在这样一种环境中,其中软件应用程序的至少部分并且有可能整个实现可能暴露给攻击者,而该攻击者至少在某种程度上控制并且可能完全控制该软件正运行于其上的平台。例如,这种环境与诸如数字版权管理(DRM)之类的密码应用程序一起出现,其中电视节目、电影、音乐等等被显示在个人计算机(PC)或其它类似的日用计算设备上,而非经由广播或经由DVD播放器显示在传统电视上。虽然这种日用设备的许多所有者会遵守版权法,但是还是有其它人企图通过制作并出售媒体内容的违法拷贝来盗取该内容而不为他们的使用向其所有者付费,从而在面向PC或类似设备的媒体上获利。PC是一个特别暴露的环境在行的攻击者可以获得对该设备的完全控制,并且可以详细监控软件运行并利用调试器控制、中止或修改其执行,以及可以重复执行相同的代码以查找可以利用的行为模式寸寸。白盒密码软件被设计为在这种环境中运行。以白盒攻击环境为目标的密码功能,虽然可以很好地实现传统密码,却是以极为非传统的方式来实现它,以便阻止攻击者获知软件运行所采用的方式。例如,通常,要么通过部分赋值将密钥嵌入在白盒密码软件的余部中,要么对密钥进行编码。此外,通常对密码的输入和输出文本进行编码,以使得攻击者拥有的密码的传统实现的知识在对白盒密码实现发动攻击方面毫无用处。在过去,会要求用户确定和指定安全参数,这些安全参数会并入用户定义的软件内,该用户定义的软件还包括用于访问白盒库工具的API调用。换句话说,在过去,通过将已构造的白盒实现包含到软件中而后可选地利用诸如CloakwareTranscoder(克劳克维尔代码转换机)之类的混淆和/或防篡改工具保护它们的接口数据(例如,对于加密,这通常包括密钥和明文输入以及密文输出)而将白盒加密运算注入到软件应用程序中。将使用密码功能的软件和实现密码功能、密钥(或在公钥密码术的情况下为多个密钥)、文本输入以及文本输出的软件正确地连接在一起的职责在于使用密码功能的程序员(程序员/用户)。因为每一步都受程序员/用户控制,因此所有问题来自于人们对完美性能的期望。当程序员/用户成功时,结果是该功能是所想要的。如果程序员/用户遗漏了一步或者错误地执行了一步,则该功能可能在总体方式上或在细微方式上与所想要的不同。后者更加危险总体错误通常在测试过程中被捕捉到;而细微的错误可能容易被遗漏。因此,明显的是,虽然白盒密码实现的出现已经使DRM内容分发系统更加可行,不过,大的问题归于我们将怎么调用该实现的周围隐含(peri-cryptic)(在未加密文本进入或离开白盒实现的情况下)和相互隐含(inter-cryptic)(在加密文本从一种形式的加密向另一种形式的加密移动的情况下)方面。我们已经确定,除了白盒密码或密码散列本身之外,还需要改进白盒密码或密码散列驻留于其中的软件的构造,以及在系统使用多种加密和散列的情况下不同密码组件中的连接的构造,所述多种加密和散列形成加密或散列内容沿其传播的信息管道的“管件(plumbing)”,其中软件的周围隐含部分和相互隐含部分从前必须由在行的用户详细地手动构造。
发明内容提供一种计算机实现的利用白盒密码术生成受保护的软件应用程序的方法,以及一种具体实现该方法的计算机程序产品。该方法包括接收包括应用程序源代码和抽象的白盒函数调用的至少一个输入源文件;并且接收包含用于每个抽象的白盒函数调用的密码域参数的参数化文件。然后,根据每个抽象的白盒函数调用的密码域参数生成用于定义每个抽象的白盒函数调用的白盒调用定义数据。然后,将诸如块密码或非对称密码之类的至少一个数据转换应用于所述输入源文件和所述白盒调用定义数据,以分别生成转换后的源文件和转换后的白盒调用定义数据。然后,根据所述白盒调用定义数据和所述转换后的白盒调用定义数据生成包含用于每个白盒函数调用的特定实例数据的数据初始化。然后,编译所述转换后的源文件、所述转换后的白盒定义数据以及所述数据初始化代码,并且将所得到的编译代码链接到白盒库以提供可执行软件应用程序。所述白盒调用定义数据以自动方式生成将白盒实现应用程序接口(API)链接到所述应用程序源代码的代码以及当白盒实现API和另一白盒实现API必须通信时将白盒实现API链接到另一白盒实现API的代码。根据这方面的实施例,所述白盒调用定义数据可以包括白盒调用定义文件和指定为每个白盒函数调用选定的参数的白盒元数据,并且将所述至少一个数据转换应用于所述转换后的白盒调用定义数据生成转换后的白盒调用定义文件和指定为所选择的参数选定的数据转换的转换元数据。生成所述数据初始化可以包括根据所述白盒元数据和所述转换元数据生成数据初始化文件。在回顾了结合附图对本发明的特定实施例的下列描述之后,本发明的其它方面和特征对于本领域普通技术人员来说将变得明显。现在将参照附图,仅仅以示例的形式描述本发明的实施例,其中图1是根据本发明实施例的白盒密码术集成的基本设计流程图;图2是根据本发明的实施例白盒密码术的扩展设计流程图。图3是根据本发明实施例的链式加密场景的图;图4是根据本发明实施例的使用链式加密API的链式加密场景的图;图5是示出本发明的实施例及其运算的示意图;以及图6是示出根据本发明实施例的用于编连健壮实现的步骤的图。具体实施例方式很明显,需要这样一种方法和系统通过它可以使构造使用白盒密码功能的应用程序的周围隐含和相互隐含部分的步骤自动操作,从而使得当前用于构建这种系统的容易出错的方法可以由相当可靠的自动化方法来代替。为了实现这一点,公开了一些实施例,在这些实施例中,应用程序的普通内部隐含(intra-cryptic)部分(实际执行白盒运算的部分)与这些部分的惯常情况相比变得更加灵活,以适应于上述自动化系统。这种系统的好处类似于通过编译代码而非写手工汇编代码所得到的好处。理论上,好的程序员应该能够以手工汇编代码的方式写应用程序。然而,实际上手工汇编代码极其容易出错,并且编译器通过将低级的、高度详细的软件构造体制(regime)用更为自动化的软件构造体制来替代,使得在汇编代码级别从未实现的复杂性的软件系统成为可能。本申请的一方面是要提供这样的系统和方法,通过它可以对白盒实现的周围隐含和相互隐含方面进行抽象并使之自动操作,使得其用户可以实现在之前通过周围隐含和相互隐含的手写编码软件要么难以实现要么不可实行的复杂性的级别上的白盒加密实现的使用,同时还通过使它们更易于为程序员/用户创建,而有益于甚至更简单地使用白盒密码术,正如非常简单的程序通过用从诸如C++之类的高级语言的源代码编译的代码取代手工汇编代码而受益。这种自动操作的一方面是对表达不同形式的密码功能所采用的方式的统一。例如,在诸如C++之类的编译语言中,相同的句法形式用于加法,无论正在被加的是两个整数、两个浮点数还是两个复数。该语言及其编译器将加法抽象为针对它所使用的每种环境适当地实现的概念,不管该实现是内置于该编译器(当它用于整数和浮点数时)还是标准库的一部分(当它用于复数时)。针对白盒密码运算,这里公开了类似的统一如果每个密码运算具有它自己唯一的接口并且需要它自己唯一的表达方式,则程度小的自动化是可能的;进行适当选择的许多职责必需属于程序员/用户。如果接口和表达方式被统一,则系统可以从特定的密码中抽象出来并且以自动化方式处理每种环境的需要。相应地,公开了使安全性相关参数与用户定义的软件分离的实施例,其中用户定义的软件包括用于访问白盒库工具的API调用。这允许简单通过改变参数而不需要改变用户定义的软件而容易地改变应用于应用程序的保护的类型和安全级别。这允许现场升级能力,其中安全实现和代码可以被改变,或者额外的工具和/或保护级别可以被使用。在黑客攻破安全性的情况下,这种系统可以进行如下响应通过改变参数并重新编译应用程序而向黑客提供新的和/或额外的挑战。当前优选的实施例提供了对许多多样安全性实现的可能使用,许多安全性措施对于每个应用程序来说是可能的。这有益于确保对一个实现的成功攻击不会变成对使用白盒密码术的给定软件应用程序的所有或许多实现的成功攻击。一般而言,所公开的实施例提供了计算机实现的用于将白盒密码术集成到软件文件中的方法和系统,其包括将API与用于加密、混淆或以其它方式保护应用程序或文件的参数分离。通过使用可以在应用程序中应用并且被白盒加密实现所理解的数据转换,这种集成的开发套件的特别的好处是对密码应用程序和周围应用程序之间的边界进行保护。在下列描述中,为了说明的目的,各种细节被阐述以便提供对本发明的充分理解。然而,对于本领域技术人员来说明显的是,为了实践本发明,并不需要这些具体细节。在其它情况下,公知的电结构和电路以框图的形式示出,从而不会使得本发明难以理解。例如,关于这里描述的本发明的实施例是实现为软件例程、硬件电路、固件还是它们的结合,并没有提供具体细节。本发明的实施例可以被表示为存储在机器可读介质(也称为计算机可读介质、处理器可读介质或者其中嵌入有计算机可读程序代码的计算机可用介质)中的软件产品。机器可读介质可以是包括磁、光或电存储介质的任何合适的有形介质,包括磁盘、只读光盘存储器(CD-ROM),存储器设备(易失性的或非易失性的),或者类似的存储机制。机器可读介质可以包含各种指令集、代码序列、配置信息或其它数据,其在被执行时使得处理器执行根据本发明的实施例的方法中的步骤。本领域技术人员会理解的是,还可以在机器可读介质上存储为实现所描述的发明所需的其它指令或运算。从机器可读介质中运行的软件可以与电路交互以执行所描述的任务。在整个该文献中,术语“白盒”频繁地用作前缀,从而创建了像“白盒调用”、“白盒库”、“白盒函数”等术语。当用作这种前缀时,术语“白盒”是“被设计为提供对抗白盒攻击者的安全性的密码实现”的简写。类似地,术语“白盒密码术”本身是“被设计为提供对抗白盒攻击者的安全性的密码实现”的简写。清楚的是,“白盒”前缀决不是指该项本身;因为所描述的实施例在软件环境中运行,所以假设这些实施例和用户的应用程序对于攻击者来说是一目了然的事;换句话说,它们是白盒。事实上,这些术语只是另一种简写。例如,“白盒库”是包含提供对抗白盒攻击者的安全性的密码函数的实现的库,或者稍微更加简便地,是包含白盒密码术的库(因此,这里我们明白“白盒库”怎么是双重简写)。“白盒函数”是白盒库中的函数之一。“白盒函数调用”或者仅仅“白盒调用”是对白盒函数的调用。其它术语应当被类似地进行解释。所描述的实施例将白盒密码术集成到软件开发套件中。参见图1,在非常高的级别处,根据本发明的将白盒密码术集成到应用程序中涉及用户对在他们的全部应用程序中的密码功能和重要安全性参数流进行功能性的和健壮性相关的若干次选择。如在100处示出的,用户将抽象的调用(示出为wbfimcC..))添加到白盒API以实现所期望的密码功能,并且还在他们的全部代码中添加命令以识别重要安全性参数所需要的保护。然后,利用若干白盒工具和库(步骤10创建健壮的代码104,健壮的代码104可以被编译并链接(步骤106)到白盒库108以创建可执行文件109,可执行文件109以安全方式执行密码运算,并且在全部应用程序的整个数据流中保护重要安全性参数。然而,在概念上,更容易将该过程理解为演化,其中用户首先对他们的应用程序中的密码功能和密钥流进行并实现最基本的选择,然后,进一步提炼这些功能参数并最终采取措施增加健壮性。在每个阶段,存在编连(build)并测试应用程序的能力,并且在最后,用户调整健壮的应用程序并且可选地使每个编连个性化。图2中示出此扩展的设计流程,并且涉及存根(stub)编连110、平滑(smooth)编连112以及健壮(robust)编连114。存根编连110和平滑编连112是可选的,并且仅仅以宽泛的术语进行描述。如本领域技术人员应当清楚的是,它们的实现是设计选择,并且在这里仅仅为了示出根据本发明的白盒应用程序开发流程的实施例的目的进行讨论。在存根编连110中,用户将白盒函数调用添加到合适的白盒密码API以添加诸如对称加密、非对称加密以及散列之类的功能,从而创建输入源文件100。用户依赖在白盒存根库118中定义的白盒调用的存根实现,对他们的程序进行编译和链接(步骤116)以生成存根可执行120,然后对存根可执行120进行测试(步骤12以检查编译和链接错误,以及密钥流中的基本错误。存根库118中实现的存根加密函数是简单的,但是以加密和解密彼此不太可能互逆除非将匹配参数传递给两个函数的这种方式进行构造。例如,动态密钥解密必须使用与动态密钥加密相同的密钥,以便恢复原始消息。如果这些密钥由于编码错误而不相同,则存根解密不太可能正确地解密存根加密的结果以产生原始消息。在平滑编连112中,用户进行一些初始的、功能性相关的选择以使每个调用参数化,并且创建详细说明那些选择的白盒参数化文件124。然后,用户应用代码生成工具(步骤126)以应用所进行的选择,并且依赖在白盒库130的平滑版本中定义的白盒调用的平滑实现来编译并链接(步骤128)他们的程序。白盒库130的平滑版本仅指实现与真的白盒库相同的API的库,但其是平滑的。然后,所得到的平滑可执行132可以被测试(步骤134)以确保基本的功能性正在正确地工作。在健壮编连114,用户在他们的受保护的应用程序中进行关于尺寸、速度和安全折衷的选择。用户应用下面详细说明的白盒加密工具(步骤136),以生成健壮的转换后的代码138。然后,该健壮的转换后的代码138被编译并链接(步骤140)以保护在白盒库144中的白盒调用的实现以生成受保护的可执行146。然后,该受保护的可执行可以被测试(步骤147)以确保功能性和安全性。然后,用户为了个别化目的利用更轻便的过程可选地生成(步骤148)数据的许多多样实例149。参见图5和图6,现在将更详细地描述健壮编连的过程和组件。图5提供健壮编连的简化概述,而图6示出下面详细描述的详细实现的实施例。图5的实施例包括三个模块,用于产生例如软件应用程序文件的受保护的文件,该三个模块即白盒代码生成工具(wbcodegen)150、数据转换引擎(xcode)152以及白盒数据生成工具(wbdatagen)154。在白盒密码术环境中,数据转换引擎152用于保护密码运算与周围代码之间的边界。具体而言,数据转换引擎152用于将数据转换应用到密码运算的输入和输出。如果用户经由白盒参数化文件1指定需要转换,则wbcodegen150将由用户指定的信息翻译成数据转换引擎152理解的形式,即作为有关数据变量和函数原型的修饰符。然后,数据转换引擎152应用所指定的转换,并且将关于选择什么转换的信息传递给wbdatagen154。用于实现这个的数据流在图5中以高的级别示出。白盒代码生成工具150接收包括应用程序源代码和抽象的白盒函数调用的至少一个输入源文件lOOOiseCode)以及包含用于每个抽象的白盒函数调用的密码域参数的参数化文件124。白盒代码生成工具150根据每个抽象的白盒函数调用的加密域参数并且以数据转换引擎152会理解的方式处理这些输入,以生成用于定义每个抽象的白盒函数调用的白盒调用定义数据156(wbglue,c)。然后,数据转换引擎152将一个或多个数据转换应用到输入源文件100以及白盒调用定义数据156,以生成转换后的源文件160和转换后的白盒调用定义数据158(wb.xwbm)。然后,数据生成工具1根据转换后的白盒调用定义数据158生成包含用于每个白盒函数调用的特定实例数据的数据初始化162(wb-glUedata)。然后,数据初始化162和转换后的源文件160可以利用本地编译器进行编译并链接到白盒库。白盒API一旦用户已识别在他们的应用程序中需要加密,针对他们将会进行的对API的每个调用,他们具有两种选择。这些选择将会确定他们的应用程序的基本密钥流。(1)待执行的密码运算是什么?可能的运算包括加密、解密、签名、签名验证、散列等等。(用于该调用的密钥将仅在运行时可用还是将在之前可用?诸如会话密钥或内容密钥之类的密钥通常要么被动态地产生,要么作为非对称解密的结果被计算出。我们宽泛地称这种密钥为动态的。在另一方面,在编连时已知的或者可以通过一些离线签约/更新过程获取的密钥被称为固定密钥。当然,所有的密钥可以被处理为动态的,但在密钥可以被处理为固定的情况下,这样做具有安全性的优点。—旦已经做出上述决定,用户应用程序代码可以被写成调用适合于该选择的API。作为输入源文件100的用户应用程序由源代码(例如用C或C++)组成,该源代码包含使用非常最小化的API对诸如密钥调度、加密、解密等等之类的密码运算进行的调用。诸如密文、明文、iv(初始化向量)等等之类的密钥用户提供数据作为参数,连同用于将相关的调用分组成单个密码域的数值常量ID参数一起,被传递给这些调用。在优选的实施例中,用户应用程序代码将需要包括包含文件170:XC/XC_wb.h,其定义白盒类型和宏。所有密码运算可以利用来自该包含文件170的宏来调用。优选地,白盒包含文件170(XC/XC_wb.h)为所有密码类型的密码运算中的每一个提供单个宏定义。这些宏将用户供应参数(通常诸如明文/密文之类的应用程序数据)的最小集、单个ID参数(用来识别运算的密码域)以及选项参数作为参数。例如,下面示出块密码加密调用。请注意,宏调用(XC_Fixed_Key_Bl0Ck_Cipher_Encrypt)是非常抽象的,并且仅仅指定密码运算所需的实际应用程序数据。#include〃xc/xcwb.h"XC_0ctetplain[16];XC_0ctetcipher[16];intcsize;intret;/*Loadplaintextintoplain*/ret=XC_Fixed_Key_Block_Cipher_Encrypt(1,plain,16,cipher,&csize,NULL,0,NULL);if(ret!=XC_0K){/tissueerror氺/}/氺Processciphertext氺/白盒包含文件170(XC/XC_wb.h)从用户的应用程序代码的角度定义整个白盒API。该API采用类似函数的宏形式,该宏对可用于应用程序代码的所有抽象密码运算进行定义。此外,该包含文件170再次以宏定义的形式描述以下描述的白盒粘合(glue)文件的内容。下列示例性代码片断示出用于固定密钥、块密码加密运算的单个抽象API的高级细节—#ifdefXC_WB_INF0//DefinitionscommontoSmoothandRobustinvocations;#defineXC_Fixed_Key_Block_Cipher_Encrypt(ID,PLAIN,PLAINSIZE,CIPHER,PCIPHERSIZE,IV,IVSIZE,OPTIONS)\<XC_Fixed_Key_Block_Cipher_Encrypt>\_XC_TCGEN(_XC_GLUE,ID,MAIN,cat(XC_Fixed_Key_Block_Cipher_Encrypt_,ID)Λ_XC_TCGEN(_XC_ASSERT,\FunctionType=BlockCipher\KeyLocation=Fixed\Operation=Encrypt\)\XC_Block_Cipher_Glue(ID,)\)#defineXC_Block_Cipher_Glue(ID,SUBOP)\XC_Block_Cipher_Externs(ID,SUBOP)\intMangledNamecat(XC_Block_Cipher_Op_Prefix(SUBOP),Prototype){\returnXC_Block_Cipher_Main_Invocation(ID,SUBOP){\cat(XC_Block_Cipher_Op_Prefix(SUBOP),Base_Params)(ID)\XC_Block_Cipher_Additional_Params(ID,SUBOP)\};\}#ifdefXC_WB_SM00TH//Definitionsofsuchsub-macrosasXC_Bl°ck_Cipher_Externsetc.//foraSmoothimplementation#else/*notXC_WB_SM00TH*///Definitionsofsuchsub-macrosasXC_Bl°ck_Cipher_Externsetc.//foraRobustimplementation//All_ParamsmacrosgeneratedbyXC_Robust*_Prefixaredefinedhere:#include〃χc_wb_bc_dk_aes_keysched_tables.h//#include"xc_wb_bc_fk_aes_tables.h"#include〃xc_wb_bc_dk_aes_tables.h"#endif/*XC_WB_SM00TH*/#endif/*XC_WB_SM00TH*/#else/*notXC_WB_INF0*///Thissectionisfornormalmacro-expansion//xcffBCodeGenisnotinplay,andthus_XC_TCGEN()operatorsmaynotappear#ifdefXC_WB_STUB//Stubbuild#defineXC_Dynamic_Key_Block_Cipher_Encrypt_Key_Schedule(ID,KEY,KEYSIZE,PRKS,OPTIONS)\XC_Dynamic_Key_Block_Cipher_Encrypt_Key_Schedule_Stub(ID,KEY,KEYSIZE,PRKS,OPTIONS)#else/*notXC_WB_STUB*///SmoothorRobustbuild(theseareidenticalatmacro-expansionlevel)#defineXC_Dynamic_Key_Block_Cipher_Encrypt_Key_Schedule(ID,KEY,KEYSIZE,PRKS,OPTIONS)\cat(XC_Dynamic_Key_Block_Cipher_Encrypt_Key_Schedule,ID)(KEY,KEYSIZE,PRKS,OPTIONS)#endif/*XC_WB_STUB*/#endif/*XC_WB_INFO*/经常在隔离时并不执行密码函数。代替地,应用程序包含一连串通常采用层次结构的密钥,并且进行链式加密运算,层次结构中最低的密钥用于保护内容,而更有价值的密钥用于保护较低级的密钥。在层次结构的顶部,会有一个或多个“可信根(rootsoftrust)”,即其公开将会暴露其它全部密钥从而导致安全性完全被攻破的密钥。层次结构的简单实例将会具有诸如音乐文件之类的内容,这些内容利用具有称为内容密钥的随机密钥的AES加密进行保护。该内容密钥本身将会利用具有客户端指定的公钥的RSA加密进行保护。然后,该可信根是(经常固定的)RSA私钥,RSA私钥为客户端应用程序的一部分。图3中示出该层次结构。一般而言,一个加密运算的输出成为随后加密运算的输入之一的任何场景被称为链式加密。另一频繁出现的链式加密的示例也被称为转换加密(transcryption)。这涉及使用一个算法和密钥对一些内容进行解密,接下来使用另一算法和密钥立即对同一内容进行重新加密。这经常在彼此通信的两个程序之间的边界处进行,或者在软件和硬件之间的边界处进行。在将链式加密运算考虑为单个运算时,存在明显的安全性好处,即从一个运算传递到下一运算的值可以被很好的隐藏,这与在这两个运算之间的边界处被暴露正好相反。虽然在运算之间的边界处转换该值当然也是可行的并且确实提供了保护,但是链式运算的真正混合(blending)在可以应用的安全性技术方面提供更大的灵活性,从而提供更好的全面保护。这里描述的白盒基础结构和API可以容易地被扩展以支持多种链式加密场景。下面给出具体示例。该示例对应于图3的客户端侧,被修改为将RSA解密和AES解密结合成单个链式解密。图4示出这个改变。请注意,被解密的内容密钥不再出现在该图中。该示例仅仅是示例性的。#include〃xc/xcwb.h"XC_0ctetekey[128];XC_0ctetcipher[65536];XC_0ctetplain[65536];intpsize;intret;/氺Loadencryptedcontentintocipher氺//*Loadencryptedcontentkeyintoekey氺/ret=XC_Fixed_Key_Chained_Cipher_Decrypt(2,cipher,65536,plain,&psize,ekey,128,NULL);if(ret!=XC_0K){/tissueerror氺/}/氺Processplaintext氺/白盒参数化一旦用户已经使他们的密钥流生效,则他们不得不进行一连串的功能选择以进一步使每个白盒加密函数调用参数化。这些问题中的大部分是密码特有的,但是一般问题中的一些示例为(1)需要什么算法?经常,使用的算法由某些相关标准指定。(2)需要什么尺寸的密钥?这里的有效选择取决于该算法。这些决定在用户提供的白盒参数化文件124中被捕获,然后,白盒参数化文件1连同用户的源代码一起被处理,以便构建可执行文件。用户对密码运算的特定方面进行选择所依据的主要机制(基础到使用哪个算法,并且详细到使用哪个密钥)是经由白盒参数化文件124。由用户写的该文件提供了关于对白盒函数的每个调用的细节。在实施例中,白盒参数化文件124的格式是面向行的文本,由密码域参数名和密码域参数值组成。这些参数名/值对(下文称为“密码域参数”或简称为“参数”)被分组以组成独立的白盒参数化记录。每个记录的开始是以标识符(ID)参数的存在来划界的,并且在标识符下一次出现(或文件结束)时结束。在参数化记录的范围内,可以列出任意数目的唯一参数(任何参数名的重复都是错误)。正如本领域技术人员将会理解的,某些参数可能被省略,并且可以具有缺省值,而其它参数是强制性的并且必须被提供。在任何情况下,独立的参数的范围仅仅在于当前的参数化记录。ID参数的值用于识别白盒调用。同样,优选的是UID是字面值整数常量,使得给定的调用一致地映射到参数化文件124中的给定记录。2、每个调用被给定唯一的ID,使得参数化文件124中的给定记录映射到唯一的调用。这个规则可以有例外a、选择用来共享数据的调用必须被给定相同的ID。b、其它的密码特有的例外。对于每个ID,白盒参数化文件1会包含一记录,该记录将会列出与该记录相关的某些参数,文件的每行列出一个参数。白盒记录的参数可以被分成三个宽的种类分类参数这些参数描述有待使用的密码算法的种类,例如,块密码或非对称密码以及固定密钥对动态密钥。这些参数用于双重目的;第一,在用户可以看见这种记录并且确切地知道相应的白盒调用的行为将会是什么的意义上,它们使参数化文件记录自包含,并且第二,当这些参数的指定准确地确定哪些用户提供的参数被期望时,它们允许进行错误检查。功能参数这些参数描述有待使用的密码算法的特定属性,例如循环(round)的次数,并且将作为参数或选项传递给白盒API(这被自动执行并且对终端用户是透明的)。请注意,算法(Algorithm)被认为是功能参数(例如Algorithm=AES对Algorithm=DES),并且不是分类参数。健壮性参数这些参数描述与白盒调用的健壮性特点相关的具体决定,例如,对所选择的参数的转换。最高级别的分类参数是FimctionType(功能类型)。其它有效分类参数以及功能和健壮性参数取决于为FimctionType指定的值。下列示例示出用于块密码的典型白盒参数化条目(entry)。所列出的参数中的大部分是密码特有的,并且它们的意义在这里没有进行描述。Identifier1FunctionTypeBlockCipherKeyLocationFixedOperationEncryptAlgorithmAESModeECBFixedKey00000000000000000000000000000000KeySize16KeyTypeStandardNumRounds10在这点上,用户必须进行若干安全性相关的选择。在可能的情况下,应当转换对白盒密码函数的调用的所有输入和输出。具体来说,对于块密码,应当转换明文、密文、密钥(用于动态密钥函数)和初始化向量(用于ECB之外的模式)。作为示例,按安全性的升序,可用转换的集合可以是权利要求1.一种计算机实现的利用白盒密码术生成受保护的软件应用程序的方法,包括接收包括应用程序源代码和抽象的白盒函数调用的至少一个输入源文件;接收包含用于每个抽象的白盒函数调用的密码域参数的参数化文件;根据每个抽象的白盒函数调用的密码域参数生成用于定义每个抽象的白盒函数调用的白盒调用定义数据;将至少一个数据转换应用于所述输入源文件和所述白盒调用定义数据,以分别生成转换后的源文件和转换后的白盒调用定义数据;以及根据所述白盒调用定义数据和所述转换后的白盒调用定义数据生成包含用于每个白盒函数调用的特定实例数据的数据初始化。2.根据权利要求1所述的方法,进一步包括编译所述转换后的源文件、所述转换后的白盒定义数据以及所述数据初始化代码,并且将所得到的编译代码链接到白盒库以提供可执行软件应用程序。3.根据权利要求1所述的方法,其中生成所述白盒调用定义数据包括生成白盒调用定义文件和指定为每个白盒函数调用选定的参数的白盒元数据。4.根据权利要求3所述的方法,其中将所述至少一个数据转换应用于所述转换后的白盒调用定义数据生成转换后的白盒调用定义文件和指定为所选择的参数选定的数据转换的转换元数据。5.根据权利要求4所述的方法,其中生成所述数据初始化包括根据所述白盒元数据和所述转换元数据生成数据初始化文件。6.根据权利要求1所述的方法,其中生成所述白盒调用定义数据包括生成包括被数据转换引擎理解的转换修饰符的至少一个白盒调用定义文件;并且生成用于描述所述密码域参数和所选定的转换的至少一个转换元数据文件。7.根据权利要求1所述的方法,其中生成所述白盒调用定义数据以自动化方式生成将白盒实现应用程序接口(API)连接到所述应用程序源代码的代码以及当白盒实现API和另一白盒实现API必须通信时将所述白盒实现API连接到所述另一白盒实现API的代码。8.根据权利要求1所述的方法,其中所述白盒函数调用对至少一个链式加密进行调用。9.根据权利要求8所述的方法,其中所述至少一个链式加密作为单个运算被执行。10.根据权利要求2所述的方法,进一步包括生成所述可执行软件应用程序的多样实例。11.根据权利要求10所述的方法,其中生成所述多样实例包括将不同的固定密钥与所述可执行软件应用程序的每个实例相关联。12.根据权利要求1所述的方法,其中所述至少一个数据转换包括块密码。13.根据权利要求1所述的方法,其中所述至少一个数据转换包括非对称密码。14.一种计算机实现的利用白盒密码术生成软件应用程序的方法,包括接收包括应用程序源代码和抽象的白盒函数调用的至少一个输入源文件;接收包含用于每个抽象的白盒函数调用的密码域参数的参数化文件;根据每个抽象的白盒函数调用的密码域参数生成用于定义每个抽象的白盒函数调用的白盒调用定义文件以及指定为每个白盒函数调用选定的参数的白盒元数据;将至少一个数据转换应用于所述输入源文件以生成转换后的源文件;将所述至少一个数据转换应用于所述白盒调用定义文件,以生成转换后的白盒调用定义文件和指定为所选择的参数选定的数据转换的转换元数据;根据所述白盒元数据和所述转换元数据生成包含用于每个白盒函数调用的特定实例数据的数据初始化文件;以及编译所述转换后的源文件、所述转换后的白盒定义文件以及所述数据初始化文件,并且将所得到的编译代码文件链接到白盒库以提供可执行软件应用程序。15.一种计算机程序产品,包括存储计算机可执行指令的计算机可读介质,所述计算机可执行指令在由处理器执行时使得所述处理器实现一种利用白盒密码术生成受保护的软件应用程序的方法,所述方法包括以下步骤接收包括应用程序源代码和抽象的白盒函数调用的至少一个输入源文件;接收包含用于每个抽象的白盒函数调用的密码域参数的参数化文件;根据每个抽象的白盒函数调用的密码域参数生成用于定义每个抽象的白盒函数调用的白盒调用定义数据;将至少一个数据转换应用于所述输入源文件和所述白盒调用定义数据,以分别生成转换后的源文件和转换后的白盒调用定义数据;以及根据所述白盒调用定义数据和所述转换后的白盒调用定义数据生成包含用于每个白盒函数调用的特定实例数据的数据初始化。16.根据权利要求15所述的计算机程序产品,其中所述方法进一步包括编译所述转换后的源文件、所述转换后的白盒定义数据和所述数据初始化代码,并且将所得到的编译代码链接到白盒库以提供可执行软件应用程序。17.根据权利要求15所述的计算机程序产品,其中生成所述白盒调用定义数据包括生成白盒调用定义文件和指定为每个白盒函数调用选定的参数的白盒元数据。18.根据权利要求17所述的计算机程序产品,其中将所述至少一个数据转换应用于所述转换后的白盒调用定义数据生成转换后的白盒调用定义文件和指定为所选择的参数选定的数据转换的转换元数据。19.根据权利要求18所述的计算机程序产品,其中生成所述数据初始化包括根据所述白盒元数据和所述转换元数据生成数据初始化文件。20.根据权利要求15所述的计算机程序产品,其中所述至少一个数据转换包括块密码或非对称密码中的至少一个。全文摘要一种开发套件,用于利用白盒密码术生成诸如DRM保护文件之类的文件。该套件由代码生成工具、数据转换引擎和白盒数据生成工具以及白盒库组成。在白盒密码术环境中,数据转换引擎用于保护密码运算和周围代码之间的边界。具体而言,数据转换引擎用于将数据转换应用于密码运算的输入和输出。如果用户经由白盒参数化文件指定需要转换,则代码生成工具将由用户指定的信息翻译成数据转换引擎理解的形式,即作为有关数据变量和函数原型的修饰符。然后,数据转换引擎应用所指定的转换,并且将关于哪些转换被选定的信息传递给数据生成工具。文档编号G06F9/45GK102047220SQ200980118647公开日2011年5月4日申请日期2009年5月25日优先权日2008年5月23日发明者丹尼尔·阿列·默多克,格兰特·斯图尔特·古德兹,菲利普·阿兰·艾森申请人:爱迪德加拿大公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1