安全电子设备的制作方法

文档序号:11142319阅读:716来源:国知局
本发明涉及电子设备、生成电子设备的方法以及用于实施此类方法的装置和计算机程序。
背景技术
:“印刷电子”技术是被用来通过印刷过程或印刷技术在各种基板上产生或制造完整的电气设备或电路的众所周知的方法和过程。所述印刷可以使用许多传统的印刷技术,比如丝网印刷、苯胺印刷术(flexography)、凹版印刷、平版印刷(offsetlithography)、喷墨以及3D打印技术。具体来说,电气功能电子或光学墨水可以被沉积在基板上,从而形成有源和/或无源电子组件。这些组件例如可以包括二极管、晶体管、电线、接触件和电阻器,以及开关、传感器(比如光传感器)、输出设备、输入设备、致动器、电池、LED等等。从印刷电子过程得到的设备被称作“印刷电子设备”或“印刷电子电路”。因此,印刷电子设备的应用和可能性的范围十分广阔。很自然的是,术语“印刷电子设备”和“印刷电子电路”不应当与术语“印刷电路板”混淆,后者是支持电气组件(其实际提供功能)的板,并且使用板上的导电轨迹连接这些组件。使用印刷电子制造技术有若干好处。一项好处是产生完整的终端用户电路的能力。这样就消除了许多子组件制造步骤,从而以相当大的差额降低了成本,对于具有相对较少的晶体管(或其他有源组件)的相当简单电子电路来说尤其是如此。类似地,传统的电子制造技术需要昂贵并且复杂的无尘室生产/制作设施。此外,用于印刷电子设备的基板常常可以是柔性的,对于传统的电子制造通常则不是这种情况。此外,印刷电子技术通常被认为与传统电子制造过程相比更加环境友好。关于印刷电子技术和印刷电子设备的更多细节例如可以在http://en.wikipedia.org/wiki/Printed_electronics处找到(其全部公开内容通过引用被合并在此)。还可以使用电子束光刻(或e-beam光刻)来产生电气设备或电路。电子束光刻涉及扫描聚焦电子束,以便在覆盖有被称作抗蚀剂的电子敏感膜的表面上绘制出定制形状(这一过程被称作“曝光”)。电子束改变抗蚀剂的可溶性,从而实现通过把抗蚀剂浸渍在溶剂中选择性地移除抗蚀剂的被曝光或未曝光区段(这一过程被称作“显影”)。这实现在抗蚀剂中产生非常小的结构,该小结构随后可以常常通过蚀刻被转移到基板材料。由于电子束光刻是众所周知的,因此这里将不提供进一步的细节。但是关于电子束光刻的更多信息例如可以在http://en.wikipedia.org/wiki/Electron-beam_lighography处找到,其全部内容通过引用被合并在此。使用电子束光刻产生芯片的一个示例由MapperLithography(参见http://www.mapperlithography.com/)进行。这样的制作技术实现高效地产生分别与其他设备不同地配置的一系列设备。技术实现要素:当前的印刷电子制造技术不适合于安全性应用,这是因为所得到的印刷电子设备对于硬件攻击(其也被称作“电路攻击”或“实现方式攻击”或“逆向工程攻击”)是脆弱的。此类攻击的示例包括简单功率分析、差分功率分析、高阶差分功率分析、旁道攻击、从设备泄漏的电磁辐射的分析、定时攻击等等(例如参见http://en.wikipedia.org/wiki/Side-channel_attack,其全部内容通过引用被合并在此)。这样的传统硬件攻击涉及由攻击者使用探头、电磁辐射、化学反应等等来尝试确定硬件设备的内部工作方式或秘密信息。这例如不同于软件攻击,在软件攻击中攻击者可以使用调试器来监测和修改存储器内容、执行流程等等,这在攻击硬件设备时通常是不可能的。用以保护电子电路免于此类硬件攻击的传统技术不能很好地适合于保护印刷电子设备,这是因为这些硅硬件保护技术涉及比如添加金属丝网(使用多层金属互连)或者施加难以移除的环氧树脂层之类的技术,目的是使得攻击者更加难以使用探头、电磁辐射、化学反应等等。同样的问题也适用于使用电子束光刻产生的当前电子设备。因此,将希望能够按照更加安全的方式利用印刷电子设备或者通过电子束光刻产生的电子设备实施基于安全性的功能,从而使得即使攻击者能够在电子设备上发动硬件攻击,攻击者成功进行其攻击的可能性也会降低(例如防止攻击者访问秘密/敏感信息和/或防止攻击者使得设备按照未经授权的方式操作)。根据本发明的第一方面,提供一种包括一个或多个模块的电子设备,所述模块按照模糊化方式实施安全性相关操作,从而为安全性相关操作提供针对硬件攻击的抵抗性,其中所述电子设备是(a)印刷电子设备或者(b)使用电子束光刻产生的设备。在一些实施例中,安全性相关操作使用秘密数据,并且其中通过一个或多个模块实施安全性相关操作保护秘密数据免于硬件攻击。在一些实施例中,安全性相关操作包括以下各项当中的一项或多项:(i)密码操作;(ii)条件访问操作;(iii)数字权利管理操作;(iv)密钥管理操作。密码操作可以包括以下各项当中的一项或多项:加密操作;解密操作;数字签名生成操作;数字签名验证操作;散列生成操作;散列验证操作。在一些实施例中,安全性相关操作处理输入数据以便生成输出数据,并且所述一个或多个模块按照模糊化方式至少部分地通过被布置成接收输入数据的经过变换的版本以及通过被布置成处理输入数据的经过变换的版本以生成输出数据的经过变换的版本实施安全性相关操作。在一些实施例中,所述电子设备包括用于接收输入数据的一个或多个输入端,并且通过一个或多个模块对安全性相关操作的实施被布置成使用由所述一个或多个输入端提供的数据。在这样的实施例中,所述一个或多个输入端当中的至少一个可以被布置成形成所述一个或多个输入端当中的至少一个所接收到的输入数据的经过变换的版本,并且把所述输入数据的经过变换的版本提供到所述一个或多个模块。在一些实施例中,所述电子设备包括用于输出数据的一个或多个输出端,并且通过一个或多个模块对安全性相关操作的实施被布置成生成经过处理的数据,并且把经过处理的数据输出提供到所述一个或多个输出端当中的至少一个。在这样的实施例中,所述经过处理的数据可以包括输出数据的经过变换的版本,并且所述一个或多个输出端当中的至少一个可以被布置成从所述输出数据的经过变换的版本获得输出数据。在一些实施例中,所述电子设备包括一个或多个传感器,并且通过一个或多个模块对安全性相关操作的实施被布置成使用由所述一个或多个传感器生成的数据。在这样的实施例中,所述一个或多个传感器当中的至少一个可以被布置成形成所述一个或多个传感器当中的至少一个所生成的输入数据的经过变换的版本,并且把所述输入数据的经过变换的版本提供到所述一个或多个模块。在一些实施例中,所述电子设备包括一个或多个模块,所述一个或多个模块实施以下各项当中的至少一项:(i)完整性验证操作;(ii)篡改检测操作;(iii)对正在针对电子设备实施的攻击的检测;(iv)用以验证电子设备所连接到的物体的一项或多项预定属性的操作;(v)用以验证电子设备连接到物体的操作。根据本发明的第二方面,提供一种包括前面提到的电子设备当中的任一项的装置。所述装置可以是用于附着到物品的标识标签,其中:所述安全性相关操作包括:存储用于标识物品的标识代码;以及响应于接收到请求,生成包括标识代码的消息;并且所述装置包括被布置成实施以下操作的接口:向电子设备提供请求;从电子设备接收消息;以及输出消息。在这样的实施例中,所述请求可以包括随机数(nonce);并且所述安全性相关操作于是可以包括至少部分地基于所述随机数和秘密密钥实施密码操作,其中通过一个或多个模块对安全性相关操作的实施保护秘密密钥免于硬件攻击,并且其中所述消息至少部分地基于所述密码操作的结果。在这样的实施例中,所述电子设备可以包括被布置成生成数据的传感器;并且所述秘密密钥可以至少部分地基于由传感器生成的数据。所述传感器可以被布置成基于物品的一项或多项预定属性生成数据。在一些实施例中,所述装置是智能卡。根据本发明的第三方面,提供一种生成电子设备的方法,所述电子设备是(a)印刷电子设备或者(b)使用电子束光刻产生的设备,所述方法包括:作为电子设备的一部分包括按照模糊化方式实施安全性相关操作的一个或多个模块,从而为安全性相关操作提供针对硬件攻击的抵抗性。在一些实施例中,所述方法包括:接收用硬件描述语言编写的代码,其中所述代码表示包括安全性相关操作的电子设备的功能;对所接收到的代码应用一种或多种白盒保护技术,从而形成保护安全性相关操作免于硬件攻击的受保护的代码;以及使用受保护的代码生成电子设备。使用受保护的代码可以包括把受保护的代码转换成针对电子设备的网表(netlist),并且基于网表产生电子设备。在本发明的第三方面的一些实施例中,所述电子设备是根据本发明的第一方面(或者其实施例中任一个)的电子设备。根据本发明的第四方面,提供一种被布置成实施根据前面提到的方法当中的任一项的方法的装置。根据本发明的第五方面,提供一种计算机程序,其在由处理器执行时使得处理器实施任一项前面所提到的方法。计算机程序可以被存储在计算机可读介质上。附图说明现在将参照附图仅通过举例的方式来描述本发明的实施例,其中:图1示意性地图示了根据本发明的一个实施例的系统;图2示意性地图示了计算机系统的一个示例;图3是图示了根据本发明的一个实施例的用于操作图1的系统的方法的流程图;图4a示意性地图示了示例性印刷电子设备;图4b示意性地图示了根据本发明的一个实施例的示例性印刷电子设备;图4c示意性地图示了根据本发明的一个实施例的另一个示例性印刷电子设备;图5示意性地图示了将使用本发明的实施例模糊的示例性功能;图6a和6b示意性地图示了如何使用逻辑表达式实施查找表;图7a和7b示意性地图示了根据本发明的一个实施例的用于印刷电子设备的安全性相关功能的示例性处理;图8示意性地图示了本发明的另一个实施例;图9示意性地图示了包括优化和保护工具集A40的计算机系统的一个示例;图10更加详细地图示了图9的优化和保护工具集A40的一个示例;图11提供了一个方法示例的流程图;图12图示了可以由图10的优化和保护工具集A40实施的工作流程;图13图示了类似于图12的工作流程的工作流程,但是其中源代码表示中的输入软件项目被使用LLVM前端工具转换成LLVMIR;图14类似于图13,但是具有二进制或原生(native)代码表示中的输入软件项目;图15图示了类似于图12到14的工作流程的工作流程,但是其中LLVM编译器中间层工具被用来在第一中间表示中对软件项目实施二进制重写保护;图16示出了可以使用图10的优化和保护工具集实施的工作流程,其中输出表示是asm.js或其他可执行脚本表示;图17以另外的一些变型和细节示意性地示出了图10的优化和保护工具集;图18示出了图10的布置如何可以被扩展成使用更多数目的中间表示,以及如何在这些中间表示中的不同中间表示中应用优化和/或保护;以及图19图示了由优化和保护工具集对比如安全性库、模块和代理之类的软件项目的处理。具体实施方式在后面的描述以及附图中描述了本发明的特定实施例。但是将认识到的是,本发明不限于所描述的实施例,并且一些实施例可以不包括后面所描述的所有特征。但是将显而易见的是,在不背离所附权利要求中所阐述的本发明的更宽泛的精神和范围的情况下,可以在这里做出各种修改和改变。1—系统总览图1示意性地图示了根据本发明的一个实施例的系统100。系统100包括计算机系统110、印刷机120和网络130。网络130可以是适合于在计算机系统110与印刷机120之间传送或传输数据的任何种类的数据通信网络。因此,网络130可以包括以下各项当中的一项或多项:局域网,广域网,城域网,因特网,无线通信网络,有线或电缆通信网络,卫星通信网络,电话网络等等。计算机系统110和印刷机120可以被布置成通过网络130经由任何适当的数据通信协议彼此通信。当然将认识到的是,在计算机系统110与印刷机120之间可以是实现计算机系统110与印刷机120之间的数据通信的一台或多台中间计算机或设备——这些计算机或设备通常被示出为网络130的部分。印刷机120可以是能够通过印刷技术生成印刷电子设备140的任何印刷设备。正如前面所描述的那样,对于印刷电子设备140有许多不同的可能功能或用途或配置,并且有许多可能的印刷技术或技法(当前可用的以及仍待开发的)可以被用来生成或形成印刷电子设备140。因此,印刷机120可以是实施一种或多种此类印刷技术以生成印刷电子设备140的任何印刷设备。因为这样的印刷机120是众所周知的,并且因为这样的印刷技术是众所周知的,因此这里将不对其进行更加详细的描述。正如前面所描述的那样,印刷机120与网络130连接或者通信。因此,印刷机120被布置成通过网络130接收数据,其中该数据定义将由印刷机120印刷的印刷电子设备140。换句话说,印刷机120被布置成通过网络130接收数据,并且处理所接收到的数据,其中所接收到的数据使得印刷机120印刷出(并且从而形成或生成)印刷电子设备140。所述数据可以包括针对印刷机120的配置数据,和/或将由印刷机120印刷并输出的实际印刷电子设备140的细节,和/或一条或多条命令(比如针对印刷机120的“印刷”命令)。印刷本身可以是完全自动的过程。替换地,印刷机120可能需要来自印刷机120的操作员的某种人工输入。同样地,这方面是众所周知的,并且因此这里将不进行更加详细的描述。如图1中所示,由印刷机120生成的印刷电子设备140可以与另一个项目150(或者物品或物体)组合(或者附着到其或与之耦合)从而形成新的项目160(或者物品或物体)。这可以简单地涉及把印刷电子设备140粘附到项目150(利用粘合剂或结合剂)。项目150本身可以具有一个或多个电子组件(例如一个或多个传感器或者输入端或输出端或接口),并且印刷电子设备140因此可以与项目150组合,从而使得项目150的一个或多个电子组件和印刷电子设备140可以相互作用(例如项目150的传感器和/或输入端可以向印刷电子设备140提供数据;印刷电子设备140可以向项目150的输出端提供数据;等等)。这方面的示例将在后面更加详细地进行描述。计算机系统110可以是任何计算机系统,比如图2中示出的一个或多个示例性计算机系统200(将被简短描述)。举例来说,计算机系统110可以包括个人计算机、服务器计算机、平板设备、膝上型计算机等等当中的一项或多项。计算机系统110被布置成生成数据文件116(其在实践中可以包括一个或多个文件)以用于通过网络130发送到印刷机120。数据文件116包括数据,正如前面所描述的那样,所述数据使得印刷机120印刷出印刷电子设备140。数据文件116可以具有适合由印刷机120使用的任何格式。计算机系统110包括用于生成数据文件116的工具117。因此工具117可以包括在计算机系统117的一个或多个处理器上执行的一个或多个软件应用。在图1中所示出的示例性实施例中,工具117包括:设计模块111;保护模块113;以及输出模块115。设计模块111、保护模块113和输出模块115当中的一项或多项在实践中可以被实施成分开的独立应用,因此图1中把设计模块111、保护模块113和输出模块115示出为单个工具117的一部分的虚线纯粹是为了说明这些独立应用是一起形成工具117的更大的应用套装的部分。但是在其他实施例中,设计模块111、保护模块113和输出模块115可以形成单个软件应用(即工具117)的部分,从而使得图1中的虚线表示在计算机系统110上执行的实际应用。设计模块111可以是用于设计印刷电子设备140的任何传统模块。举例来说,设计模块111可以使得一位或多位设计者能够使用硬件描述语言(HDL)设计一些或全部印刷电子设备140,或者编写或设计针对印刷电子设备140的一些或全部功能。众所周知,HDL是可以被用来对电子电路的结构、设计和操作进行编程的计算机程序语言。HDL例如可以是VHDL或Verilog,但是将认识到的是,许多其他HDL存在并且可以替换地使用在本发明的实施例中。由于HDL(及其使用和实施方式)是众所周知的,因此这里将不对它们进行更加详细的描述,但是,更多细节例如可以在http://en.wikipedia.org/wiki/Hardware_description_language处找到,其全部公开内容通过引用被合并在此。因此,设计模块111可以被用来生成设计文件112(其在实践中可以包括一个或多个文件),设计文件112包含规定针对印刷电子设备140的一些或全部所期望的功能(即操作、功能、处理、规程、数据流等等)的数据。举例来说,设计文件112可以包括用HDL编写的代码。附加地或替换地,工具117可以被布置成从计算机系统110的另一个系统或应用(例如先前产生的设计文件112可能已经由计算机系统110存储)或者通过网络130从不同的计算机系统(图1中未示出)接收设计文件112。因此,设计模块111作为工具117的部分的存在是可选的。保护模块113被布置成接收设计文件112并且对设计文件112应用一种或多种保护技术,从而生成受保护的设计文件114(其在实践中可以包括一个或多个文件)。与设计文件112一样,受保护的设计文件114包含规定针对印刷电子设备140的功能(即操作、功能、处理、规程、数据流等等)的数据——但是通过对设计文件112应用一种或多种保护技术:(a)其中一些或全部功能被以具有针对一项或多项“白盒攻击”的抵抗性或鲁棒性(使得提供针对拥有受保护的设计文件114的攻击者的保护)的方式实施或规定在受保护的设计文件114中;以及(b)所得到的印刷电子设备140具有针对硬件攻击的增加的鲁棒性或抵抗性。白盒攻击和保护技术将在后面进行描述。受保护的设计文件114可以包括用HDL(比如与被用于设计文件112的相同HDL)编写的代码。但是不一定必须是这种情况。举例来说,保护模块113可以实施附加的处理(比如编译或合成步骤),从而产生已编译或已合成的受保护的设计文件114。输出模块115是工具117的可选模块(并且因此可以在本发明的一些实施例中被省略)。输出模块115实施把受保护的设计文件114从由保护工具113输出的格式转换到印刷机120作为其输入所需要的数据文件116的格式所需要的一个或多个处理步骤。举例来说,如果受保护的设计文件114是用HDL编写的,则数据文件116的格式可能是网表,在这种情况下,输出模块115可以实施编译和/或合成处理,以便生成将被包括在数据文件116中的网表。附加地或替换地,印刷机120可能需要数据文件116具有特定格式,在这种情况下,输出模块115可以被布置成实施从受保护的设计文件114的格式到该特定格式的格式转换操作。附加地或替换地,由受保护的设计文件114定义的功能可以仅仅是针对印刷电子设备140的全部功能的子集,在这种情况下,输出模块115可以被布置成接收一个或多个其他文件(例如具有附加的HDL代码),并且把所述一个或多个其他文件与受保护的设计文件114组合以生成针对印刷电子设备140的最终/完成设计。将认识到的是,输出模块115相应地可以附加地或替换地实施其他操作以生成数据文件116。在一些实施例中,印刷机120可以是计算机系统110的部分或者与之直接耦合,在这种情况下,网络130可以从系统100中省略。前面已经关于生成印刷电子设备140描述了图1的系统100。但是将认识到的是,取代使用印刷电子技术,系统100可以使用电子束光刻来产生电子设备140(因此设备140不再是印刷电子设备140,而是改为使用电子束光刻产生的设备)。在这种情况下,印刷机120被使用电子束光刻产生设备的设备所取代。因此,数据文件116(其在实践中可以包括一个或多个文件)包括如下数据:正如前面所描述的那样,该数据使得所述设备使用电子束光刻生成设备140。数据文件116可以具有适合由设备120使用的任何格式。因此,虽然在这里通过参照由“印刷”那些设备的“印刷机120”产生的“印刷电子设备140”描述了本发明的实施例,但是将认识到的是,本发明的其他实施例可以利用电子束光刻而不是印刷电子技术。因此,虽然在这里基于印刷电子技术阐述了本发明的实施例,但是将认识到的是,这里对于本发明的实施例的描述同样适用于这些其他“电子束”实施例,并且将认识到的是,当与这些其他“电子束”实施例相关时,(i)在这里对“印刷电子设备140”的提及将由“使用电子束光刻产生的设备140”取代;(ii)在这里对“印刷机120”的提及将由“用于使用电子束光刻产生设备140的装置/系统”取代;(iii)对“印刷”的提及将由“使用电子束光刻形成设备140”取代;(iv)印刷电子技术的其他方面将由其在电子束光刻中的相应对应方面取代。图3是图示了根据本发明的一个实施例的用于操作图1的系统100的方法300的流程图。在步骤310处,计算机系统110获得设计文件112。正如前面所提到的那样,这可以涉及一位或多位设计者使用设计工具111来实际产生设计文件112。替换地,这可以涉及计算机系统110接收或获得现有的设计文件112(例如从计算机系统110上的本地存储装置和/或通过网络130从分开的计算机系统接收或获得)。在步骤320处,计算机系统110使用保护模块113来处理设计文件112,以便生成受保护的设计文件114。在可选步骤330处,计算机系统110使用输出模块115来处理受保护的设计文件114,以便生成适合于提供到印刷机120的数据文件116。如果没有按照这种方式使用输出模块115,则数据文件116实际上与受保护的设计文件114相同。在步骤340处,计算机系统110例如通过网络130把数据文件116提供到印刷机120。在步骤350处,印刷机120从计算机系统110接收数据文件116。在步骤360处,印刷机120使用所接收到的数据文件116来印刷并且因此生成印刷电子设备140。在可选步骤370处,将印刷电子设备140与项目150组合从而生成新的项目160。图2示意性地图示了计算机系统200的一个示例。系统200包括计算机202。计算机202包括:存储介质204,存储器206,处理器208,接口210,用户输出接口212,用户输入接口214,以及网络接口216,它们全部通过一条或多条通信总线218链接在一起。存储介质204可以是任何形式的非易失性数据存储设备,比如硬盘驱动器、磁盘、光盘、ROM等等当中的一项或多项。存储介质204可以存储供处理器208执行的操作系统,以使得计算机202运转。存储介质204还可以存储一个或多个计算机程序(或者软件或指令或代码)。存储器206可以是适合于存储数据和/或计算机程序(或者软件或指令或代码)的任何随机存取存储器(存储单元或易失性存储介质)。处理器208可以是适合于执行一个或多个计算机程序(比如存储在存储介质204上和/或存储器206中的计算机程序)的任何数据处理单元,其中一些计算机程序可以是根据本发明的实施例的计算机程序,或者是在由处理器208执行时使得处理器208实施根据本发明的一个实施例的方法并且把系统200配置成根据本发明的一个实施例的系统的计算机程序。处理器208可以包括单个数据处理单元,或者并行地或彼此协作地操作的多个数据处理单元。处理器208在实施针对本发明的实施例的数据处理操作时可以向存储介质204和/或存储器206存储数据/从存储介质204和/或存储器206读取数据。接口210可以是用于提供去到处于计算机202外部或者可以从计算机202移除的设备222的接口的任何单元。设备222可以是数据存储设备,例如光盘、磁盘、固态存储设备等等当中的一项或多项。设备222可以具有处理能力——例如所述设备可以是智能卡。接口210因此可以根据其接收自处理器208的一条或多条命令从设备222访问数据、向设备222提供数据或者与设备222接口。用户输入接口214被布置成接收来自系统200的用户或操作员的输入。用户可以通过连接到用户输入接口214或者与之通信的系统200的一个或多个输入设备(比如鼠标(或其他指示设备)226和/或键盘224)来提供该输入。但是将认识到的是,用户可以通过一个或多个附加的或替换的输入设备(比如触摸屏)来向计算机202提供输入。计算机202可以把通过用户输入接口214接收自输入设备的输入存储在存储器206中以供处理器208随后访问和处理,或者可以将其直接传递到处理器208,从而使得处理器208可以相应地对用户输入做出响应。用户输出接口212被布置成向系统200的用户或操作员提供图形/视觉和/或音频输出。因此,处理器208可以被布置成指令用户输出接口212形成表示所期望的图形输出的图像/视频信号,并且将该信号提供到与用户输出接口212连接的系统200的监视器(或者屏幕或显示单元)220。附加地或替换地,处理器208可以被布置成指令用户输出接口212形成表示所期望的音频输出的音频信号,并且将该信号提供到与用户输出接口212连接的系统200的一个或多个扬声器221。最后,网络接口216为计算机202提供从一个或多个数据通信网络下载数据和/或向一个或多个数据通信网络上传数据的功能。将认识到的是,在图2中图示并且在前面描述的系统200的架构仅仅是示例性的,并且在本发明的实施例中可以使用具有不同架构(例如具有少于图2中所示出的组件或者具有图2中所示出的之外的附加和/或替换组件)的其他计算机系统200。作为示例,计算机系统200可以包括以下各项当中的一项或多项:个人计算机;服务器计算机;平板设备;膝上型计算机;等等。正如前面所提到的那样,图1的计算机系统100可以包括一个或多个图2的计算机系统200。2—保护印刷电子设备或保证其安全图4a示意性地图示了在设计文件112被直接提供到输出模块115(而不是把设计文件112传递到保护模块113,从而使得保护模块113随后可以处理设计文件以产生被提供到输出模块115的受保护的设计文件114)的情况下可以由印刷机120生成的示例性印刷电子设备140。印刷电子设备140包括实施所期望的功能(即操作、功能、处理、规程、数据流等等)的逻辑440。在一些实施例中,印刷电子设备140包括一个或多个传感器410(比如光传感器或温度传感器)——所述一个或多个传感器410可以向逻辑440提供数据数值si以供所述逻辑处理。如图4a中所示,如果印刷电子设备140包括所述一个多个传感器410,则存在由一个或多个传感器410提供到逻辑440的m1个数据数值si(i=1,…,m1,m1≥1)。在一些实施例中,印刷电子设备140包括一个或多个输入端420(比如用于从比如项目150之类的另一个实体接收数据数值的输入端,或者输入端可以是用于通过无线数据通信路径接收数据的无线数据通信输入端)——所述一个或多个输入端420可以向逻辑440提供数据数值xj以便由所述逻辑处理。如图4a中所示,如果印刷电子设备140包括一个或多个输入端420,则存在由一个或多个输入端420提供到逻辑440的m2个数据数值xj(j=1,…,m2,m2≥1)。由逻辑440实施的处理的输出或结果可以包括一个或多个数据数值。在一些实施例中,印刷电子设备140包括一个或多个传送器460(比如无线数据传送器),并且由逻辑440实施的处理的输出或结果包括将被提供到所述一个或多个传送器460的一个或多个数据数值ti。如图4a中所示,如果印刷电子设备140包括一个或多个传送器460,则存在由逻辑440输出的m3个数据数值ti(i=1,…,m3,m3≥1)。在一些实施例中,印刷电子设备140包括一个或多个输出端470(比如去到项目150的数据连接或者包括LED的输出端),并且由逻辑440实施的处理的输出或结果包括将被提供到一个或多个输出端470的一个或多个数据数值yj。如图4a中所示,如果印刷电子设备140包括一个或多个输出端470,则存在由逻辑440输出的m4个数据数值yj(j=1,…,m4,m4≥1)。在本发明的实施例中,设计文件112被编写成使得逻辑440(或者印刷电子设备140)包括实施安全性相关操作(潜在地除了一项或多项其他操作之外)的一个或多个模块。在这里,印刷电子设备140(或逻辑440)的“模块”包括提供特定功能的一个或多个硬件组件(比如门、晶体管、寄存器以及其他电子组件)的集合——因此,所述一个或多个模块包括此类硬件组件的一个或多个集合,其一起实施安全性相关操作。举例来说,安全性相关操作可以使用秘密数据(比如密码密钥)——所述秘密数据可以由逻辑440存储,或者逻辑440可以被布置成实施密码密钥。安全性相关操作可以包括以下各项当中的一项或多项:(i)密码操作(比如以下各项当中的一项或多项:加密操作;解密操作;数字签名生成操作;数字签名验证操作;散列生成操作;散列验证操作);(ii)条件访问操作;(iii)数字权利管理操作;(iv)(密码)密钥管理操作。这样的安全性相关操作是众所周知的,并且因此这里将不进行更加详细的描述。但是一般来说,安全性相关操作是针对其有以下期望的操作:(a)防止攻击者访问正被用于实施安全性相关操作的一些或全部数据(例如秘密数据);和/或(b)防止攻击者修改或改变安全性相关操作的运行或处理从而使得安全性相关操作按照未经授权的方式实施或者提供攻击者无权获得的结果。安全性相关操作可以处理数据数值si(i=1,…,m1)和/或xj(j=1,…,m2)中的一个或多个以便生成输出数据,输出数据例如可以包括数据数值ti(i=1,…,m3)和/或yj(j=1,…,m4)中的一个或多个。“白盒”环境是用于软件数据处理的执行环境,其中假设数据处理的攻击者对于软件数据处理的正被操作的数据(包括中间数值)、存储器内容以及执行/过程流程具有完全的访问权限和可见性。此外,在白盒环境中,假设攻击者能够修改软件数据处理的正被操作的数据、存储器内容以及执行/过程流程——这样,攻击者可以对数据处理进行实验并且尝试操纵数据处理的操作,目的是规避初始意图的功能和/或识别秘密信息和/或出于其他目的。实际上,人们甚至可以假设攻击者知晓正由数据处理实施的底层算法。但是数据处理可能需要使用秘密信息(例如一个或多个密码密钥),其中该信息需要对于攻击者保持隐藏。类似地,将会希望防止攻击者修改数据处理的执行/控制流,例如防止攻击者强制数据处理在判定块之后采取并非合法执行路径的一条执行路径。“白盒”攻击是当在白盒环境中实施数据处理时攻击者可以对软件数据处理实施的攻击(例如尝试确定秘密信息或修改数据处理的执行/控制流以达到所期望的目标/目的)。白盒攻击是众所周知的。白盒攻击是对软件项目(或者代码或指令)实施的攻击,这是因为攻击者可以在软件环境(比如调试器)中执行(或者运行或模拟)这样的软件项目,所述软件环境使得攻击者能够在执行期间监测和修改存储器中的数值和/或控制流——为此原因,白盒攻击被认为不适用于硬件设备。当从计算机系统110被提供到印刷机120时,数据文件116可能会被攻击者拦截,攻击者随后可能能够在仿真器/模拟器中对数据文件116进行分析并且潜在地运行它或使用它——因此数据文件116可以被视为对于白盒攻击是开放的。即使数据文件116按照已加密形式被传送到印刷机120,印刷机120仍将需要对数据文件116进行解密以便实施印刷过程从而生成印刷电子设备140——在此时,攻击者可能能够实施白盒攻击。类似地,攻击者可能拥有由印刷机生成的印刷电子设备140。正如前面所提到的那样,用以保护电子电路免于硬件攻击(与软件白盒攻击不同)的传统技术不太适合于保护印刷电子设备140,并且因此攻击者可能能够更加容易地实施针对印刷电子设备140本身的硬件攻击。因此,保护模块113的目的是基于初始设计文件112生成受保护的设计文件114。保护模块113生成受保护的设计文件114,从而使得印刷电子设备140包括按照模糊化方式实施安全性相关操作的一个或多个模块,从而为安全性相关操作提供针对硬件攻击的抵抗性。后面将更加详细地描述关于如何能够实施这一点的示例。但是,具体来说,已经被创造性地认识到的是,虽然白盒保护技术在传统上已被用来保护软件项目(因为软件项目对于白盒攻击是开放的,而白盒攻击不适合于硬件设备),并且虽然传统的电子设备已经使用了其他保护技术来抵御硬件攻击(比如使用多层金属互连来添加金属丝网或者施加难以移除的环氧树脂层),但是可以通过对印刷电子设备所实施的功能应用白盒技术来保护对于硬件攻击更加开放的印刷电子设备,从而当攻击者正在对印刷电子设备实施硬件攻击时使得更加难以理解正被实施的功能或者正被使用的数据。在一些实施例中,将使用一个或多个双射函数(或者变换或变形)。双射函数是单射(即1对1映射)并且满射(即映射到整个特定数值范围上)的函数。如果针对函数T的可能输入数值的域是域Dom,并且如果函数T是单射函数(使得当且仅当a=b时,T(a)=T(b)),则T是从Dom到范围T(Dom)={T(a):aDom}上的双射函数。初始的简单示例将帮助理解双射函数T的使用如何能够帮助提供针对攻击的保护。在该例中,双射函数T是针对某一质数和正整数n的伽罗瓦(Galois)域中的线性变换,即。举例来说,如果数据数值si(i=1,…,m1)和xj(j=1,…,m2)是Z比特的数据数值,则它们可以被视为伽罗瓦域的元素,从而=2和n=Z。考虑根据r=G(s1,s2)=s1+s2对伽罗瓦域中的元素s1和s2(但是,当然可以使用其他数据数值si或xj)进行运算的预定函数G,其中+是伽罗瓦域中的加法。在该伽罗瓦域中,加法s1+s2与异或(XOR)运算相同,因此r=G(s1,s2)=s1⊕s2。设s1*、s2*和r*是根据伽罗瓦域中的相应线性变换T1、T2和T3的s1、s2和r的经过变换的版本,因此对于伽罗瓦域中的任意非零常数a、c和e以及伽罗瓦域中的任意常数b、d和f(因此常数a、c和e可以从中随机选择,并且常数b、d和f可以从中随机选择),s1*=T1(s1)=a∙s1+b,s2*=T2(s2)=c∙s2+d以及r*=T3(r)=e∙r+f。于是r*=e∙(s1+s2)+f=e∙(a-1(s1*+b)+c-1(s2*+d))+f=g∙s1*+h∙s2*+i,其中g=e∙a-1,h=e∙c-1,并且i=e∙(a-1b+c-1d)+f。因此,给定输入s1和s2的经过变换的版本s1*=T1(s1)和s2*=T2(s2),可以计算出结果r的经过变换的版本r*=T3(r),而不必移除任何变换(也就是说不必从版本s1*和s2*导出s1和/或s2)。具体来说,在通过变换T1、T2和T3的相应参数(针对T1的a和b,针对T2的c和d,针对T3的e和f)定义了变换T1、T2和T3之后,可以根据G*(s1*,s2*)=g∙s1*+h∙s2*+i来实施函数G的经过变换的版本G*,其中g=e∙a-1,h=e∙c-1,并且i=e∙(a-1b+c-1d)+f,从而可以计算r*=G*(s1*,s2*),而无需作为处理中的中间步骤来确定/揭示s1或s2。随后可以从结果r的经过变换的版本r*=G*(s1*,s2*)获得结果r,因为r=e-1(r*+f))——因此线性变换T4(其是T3的逆)可以被用来从经过变换的版本r*获得结果r,其中r=T4(r*)=e-1r*+e-1f。替换地,结果r的经过变换的版本r*可以是去到后续函数的输入。换句话说,给定对输入s1和s2进行运算以产生结果r的函数G,如果规定了变换T1、T2和T3(例如通过随机地选择针对变换的参数而随机地规定,或者基于一些其他参数/数据来规定),则可以生成/实施函数G的经过变换的版本G*,其中函数G*对经过变换的输入s1*=T1(s1)和s2*=T2(s2)进行运算,以便根据r*=g∙s1*+h∙s2*+i来产生经过变换的结果r*=T3(r)。如果一个人在白盒环境中实施函数G*,则此人无法识别出底层函数G正在实施什么运算,并且此人也无法确定实际的结果r也无法确定输入s1和s2(因为这些数值在实施函数G*时从未被揭示)。作为另一个示例,假设函数G根据r=G(s1)=s1+k在伽罗瓦域中对元素s1(但是当然可以使用其他数据数值si或xj)进行运算,其中+是伽罗瓦域中的加法,并且k是预定的秘密数值(比如密码密钥)。在该伽罗瓦域中,加法s1+k与异或运算相同,因此r=G(s1)=s1⊕k。设s1*和r*是根据伽罗瓦域中的相应线性变换T1和T3的s1和r的经过变换的版本,因此对于伽罗瓦域中的任意非零常数a和e以及伽罗瓦域中的任意常数b和f(因此常数a和e可以从中随机选择,并且常数b和f可以从中随机选择),s1*=T1(s1)=a∙s1+b以及r*=T3(r)=e∙r+f。于是r*=e∙(s1+k)+f=e∙(a-1(s1*+b)+k)+f=g∙s1*+h,其中g=e∙a-1,并且h=e∙(a-1b+k)+f。因此,给定输入s1的经过变换的版本s1*=T1(s1),可以计算出结果r的经过变换的版本r*=T3(r),而不必移除任何变换(也就是说不必从版本s1*导出s1)。具体来说,已经通过变换T1和T3的相应参数(针对T1的a和b,针对T3的e和f)定义了变换T1和T3,可以根据G*(s1*)=g∙s1*+h来实施函数G的经过变换的版本G*,其中g=e∙a-1,h=e∙(a-1b+k)+f,从而可以计算r*=G*(s1*),而无需确定/揭示s1,并且不会使得秘密数值k可由攻击者获得。随后可以从结果r的经过变换的版本r*=G*(s1*,s2*)获得结果r,因为r=e-1(r*+f))——因此线性变换T4(其是T3的逆)可以被用来从经过变换的版本r*获得结果r,其中r=T4(r*)=e-1r*+e-1f。替换地,结果r的经过变换的版本r*可以是去到后续函数的输入。换句话说,给定对输入s1进行运算以产生结果r的函数G,如果规定了变换T1和T3(例如通过随机地选择针对变换的参数而随机地规定,或者基于一些其他参数/数据而规定),则可以生成/实施函数G的经过变换的版本G*,其中函数G*对经过变换的输入s1*=T1(s1)进行运算,以便根据r*=g∙s1*+h产生经过变换的结果r*=T3(r)。如果一个人在白盒环境中实施函数G*,则此人无法识别出底层函数G正在实施什么运算,并且此人也无法确定实际的结果r,也无法确定输入s1,也无法确定秘密密钥k(因为这些数值在实施函数G*时从未被揭示)。要提到的是,在前面的示例中,T1和T2之一或全部二者可以是恒等变换(也就是说如果对于s1的所有数值都有T1(s1)=s1,则T1是恒等变换,因此在前面的示例中a=1并且b=0,并且如果T2(s2)=s2则T2是恒等变换,因此在前面的示例中c=1并且d=0)。如果是这种情况,则实施函数G*的人可以识别出由输入s1采取的数值(如果T1是恒等变换的话)和/或由输入s2采取的数值(如果T2是恒等变换的话)。但是只要T3不是恒等变换,则此人就无法识别出底层函数G正在实施什么运算,并且此人也无法确定实际的结果r。类似地,在前面的示例中,T3可以是恒等变换(也就是说如果对于r的所有数值都有T3(r)=r则T3是恒等变换,因此在前面的示例中e=1并且f=0)。如果是这种情况,则实施函数G*的人可以识别出由输出r采取的数值。但是只要T1和T2之一或全部二者不是恒等变换,则此人就无法识别出底层函数G正在实施什么运算,并且此人也无法确定初始输入s1和s2之一或全部二者。将认识到的是,其他函数G可以被实施成对应的“经过变换的版本”G*,其中针对函数G*的(一项或多项)输入是根据相应单射(1对1)变换的针对函数G的(一项或多项)输入的经过变换的版本,并且函数G*的(一项或多项)输出是根据相应单射变换的函数G的(一项或多项)输出的经过变换的版本。所述变换不必一定是如前面所阐述的线性变换,而可以是任何其他种类的单射变换。因此,给定具有u项输入α1,…,αu和v项输出β1,…,βv的函数G,可以实施函数G的经过变换的版本G*,其中G*使输入α1,…,αu的经过变换的版本α1*,…,αu*作为其输入,并且把输出β1,…,βv的经过变换的版本β1*,…,βv*输出,其中针对单射函数T1,…,Tu+v,αi*=Ti(αi)并且βi*=Ti+u(βi)。两个或更多函数Ti可以彼此相同。后面讨论这一点可以针对任何函数G来进行的事实。正如后面所阐述的那样,异或运算连同基于常数的条件分支形成图灵完备的系统。这意味着任何数学函数都可以仅使用(a)零个或更多个异或运算以及(b)基于常数的零个或多个条件分支来实施。图灵机是根据规则表在纸带条上操纵符号的概念设备。尽管其简单,但是图灵机可以被适配成仿真任何计算机算法的逻辑。图灵机对于在纸带上进行数学运算的机器进行数学建模。在该纸带上有符号,机器可以使用纸带头读取和写入符号,每次一个。运算由基本指令(比如“在状态42中,如果所看到的符号是0,则写入1;如果所看到的符号是1,则改变到状态17;在状态17中,如果所看到的符号是0,则写入1并且改变到状态6”等等)的有限集合完全确定。更精确地说,图灵机由以下各项构成:1、被划分成一个接一个的单元格的纸带。每一个单元格包含来自某一有限字母表的符号。所述字母表包含特殊的空白符号(在这里被写成“B”)以及一个或多个其他符号。假设纸带可任意地向左和向右扩展,也就是说总是为图灵机提供对于其计算所需要的数量的纸带。假设之前没有被写入的单元格填充有空白符号。2、可以在纸带上读取和写入符号并且每次把纸带左和右移动一个(并且仅一个)单元格的头。3、存储图灵机的当前状态的状态寄存器,所述状态是有限的许多状态当中的一个。存在用来初始化状态寄存器的一个特殊的起始状态。4、由一个或多个指令(每一个指令通常被表达成相应五元组Siaj→Si1aj1dk)构成的有限表(其有时被称作动作表或转移函数),其规定:如果图灵机当前处于状态Si并且当前已经从纸带读取了符号aj(也就是说当前处于头下的符号是aj),则图灵机应当实施以下操作序列:-写入aj1以取代当前的符号aj。(符号aj1可以是空白符号)。-控制由dk描述的头的位置。dk可以具有以下数值:“L”,用于表明把头向左移动一个单元格,“R”,用于表明把头向右移动一个单元格;或者“N”,用于表明不移动头,也就是保持相同的位置。-把当前状态设定到由Si1规定的状态(Si1可以与Si相同或不同)。图灵机是众所周知的,并且因此这里将不进行更加详细的描述。如果可以表明动作表中的任何可能的5元组都可以使用异或运算和基于常数的条件分支来实施,则我们知道基于异或运算和基于常数的条件分支的处理系统是图灵完备的(这是因为任何函数或计算机程序都可以被实施或建模成图灵机,并且该图灵机的动作表中的所有5元组都可以使用异或运算和基于常数的条件分支来实施)。考虑图灵机中的元素与仅使用异或和基于常数的条件分支的系统中的元素之间的以下映射:(a)图灵机的字母表尺寸被设定到字母表的尺寸。(b)每一个状态被实施成具有标识符(其被用来跳跃)的代码块。因此,图灵机中的下一个状态可以通过以当前状态和存储器的内容为条件的GoTo语句来实现(也就是基于常数的条件分支)。(c)纸带可以被实施成保存字母表中的元素的二进制表示的存储器。因此,纸带的移动可以通过改变指向存储器的地址来实现。(d)使用被称作“地址”的全局变量来指向等效于头之下的纸带节段的存储器位置。(e)我们使用存储器内容的地址来读取存储器内容。为了写入到存储器中,我们把存储器内容与产生所期望的数值的常数进行异或。后面的伪代码示出了典型的状态实施方式(针对具有标识符“i”的状态),其中数值X1,X2,…Xq是常数,并且“Addr”是指向存储器位置的指针。下面示出的示例说明了递增、递减和不改变地址“Addr”变量的三种可能性。因此,动作表中的任何可能的5元组都可以使用异或运算和条件分支来实施。因此,基于异或运算和条件分支的系统是图灵完备的,也就是说任何图灵机都可以仅使用异或(针对前面的点(e))和条件跳跃(针对前面的点(b))来实施。正如前面所表明的那样,可以在经过变换的域中(通过函数G*)实施等效于r=s1⊕s2的运算,而从不移除对r*、s1*或s2*的变换。使用编程语言的能力实施条件跳跃。这意味着可以在经过变换的域中实施任何数学运算,而从不移除对正被处理的数据元素的变换。换句话说,给定具有u项输入α1,…,αu(u≥1)和v项输出β1,…,βv(v≥1)的任何函数G,可以实施函数G的经过变换的版本G*,其中G*是使输入α1,…,αu的经过变换的版本α1*,…,αu*作为其(一个或多个)输入并且将(一个或多个)输出β1,…,βv的经过变换的版本β1*,…,βv*输出的函数,其中针对单射函数T1,…,Tu+v,αi*=Ti(αi)和βi*=Ti+u(βi)。两个或更多函数Ti有可能可以彼此相同。正如前面所阐述的那样,单射函数T1,…,Tu+v可以被定义(例如随机生成的单射函数),并且给定所定义的特定单射函数T1,…,Tu+v,得到(或者定义/获得/实施)函数G的特定经过变换的版本G*。使用双射函数T来模糊预定函数的实施以及此类使用的各种方法在本
技术领域
内是众所周知的——例如参见“White-BoxCryptographyandanAESImplementation”,byStanleyChow,PhilipEisen,HaroldJohnson,andPaulC.VanOorschot,inSelectedAreasinCryptography:9thAnnualInternationalWorkshop,SAC2002,St.John’s,Newfoundland,Canada,August15-16,2012;“AWhite-BoxDESImplementationforDRMApplications”,byStanleyChow,PhilEisen,HaroldJohnson,andPaulC.vanOorschot,inDigitalRightsManagement:ACMCCS-9Workshop,DRM2002,Washington,DC,USA,November18,2002;US61/055,694;WO2009/140774;US6779114;US7350085;US7397916;US6594761;以及US6842862,这些文献的全部公开内容通过引用被合并在此。图4b示意性地图示了根据本发明的实施例的示例性印刷电子设备140,即当设计文件112受到保护模块113的保护或保护模块113保证设计文件112安全从而使得数据文件116基于受保护的设计文件114时印刷机120可以生成的印刷电子设备。具体来说,保护模块113被布置成基于双射变换应用前述保护技术。图4b的印刷电子设备140类似于图4a的印刷电子设备140(并且因此在适当的情况下使用相同的附图标记)。如图4b中所示,保护模块113被布置成把设计文件112转换成受保护的设计文件114,从而使得所得到的/对应的印刷电子设备140包括第一变换模块430、第二变换模块450以及取代图4a的逻辑440的经过变换的逻辑480。第一变换模块430被布置成接收数据数值si(i=1,…,m1)和/或数据数值xj(j=1,…,m2),并且应用一项或多项双射变换以便基于所接收到的数据数值生成经过变换的数据数值uk(k=1,…,m5)。在一些实施例中,每一个经过变换的数据数值uk是在相应变换Tk下的数据数值si(i=1,…,m1)和/或数据数值xj(j=1,…,m2)中对应数据数值的经过变换的版本,即,针对索引i=1,…,m1或者索引j=1,…,m2,uk=Tk(si)或uk=Tk(xj)——因此,m5=m1+m2。在这里,相应变换可以彼此相同;替换地,对于一些索引1≤k1<k2≤m5,uk1和uk2可以具有不同的相应变换Tk1和Tk2。替换地,一个或多个经过变换的数据数值uk基于来自包括数据数值si(i=1,…,m1)和/或数据数值xj(j=1,…,m2)的集合的两个或更多数据数值——举例来说,对于一些索引i和j,uk=Tk(si,xj)。第一变换模块430被布置成把经过变换的数据数值uk(k=1,…,m5)提供到经过变换的逻辑480。正如前面所描述的那样,由图4a的逻辑440实施的函数/运算可以被转换成对经过变换的数据数值uk(k=1,…,m5)而不是数据数值si(i=1,…,m1)和/或数据数值xj(j=1,…,m2)进行运算或者对其进行使用的对应函数/运算。图4b的经过变换的逻辑480实施对经过变换的数据数值uk(k=1,…,m5)进行运算或者对其进行使用的这些对应函数/运算。正如前面所描述的那样,经过变换的逻辑480可以生成并且输出一项或多项经过变换的结果(或数值)vk(k=1,…,m6)。因此,经过变换的逻辑480可以把经过变换的结果vk(k=1,…,m6)提供或输出到第二变换模块450。第二变换模块450被布置成接收经过变换的结果vk(k=1,…,m6),并且应用一项或多项双射变换以生成输出数据ti(k=1,…,m3)和/或yj(j=1,…,m4)。这是按照类似于第一变换模块430的操作方式的方式实现的。第一变换模块430和/或第二变换模块450可以使用一个或多个相应查找表来实施其相应双射中的一项或多项。作为示例,考虑如下情况:数据数值si是三比特数值,具有二进制表示(b2b1b0)(对于i=0,…,2,bi=0或1)。初始设计文件112可以被布置成使得逻辑440如图5中所示的那样对数据数值si实施函数F,也就是r=F(si),其中r的二进制表示是(r2r1r0),并且r2=s2,r1=s1⊕s2,以及r0=s0。通过T(x)=(11x+9)mod15来定义双射变换T:GF(24)→GF(24)。在该示例中,变换T将被用来把输入数据数值si转换成经过变换的数据数值T(si)以供函数F的经过变换的版本(即FT)对其进行运算,并且相同的变换T将被用来把函数FT的输出转换回到输出r。保护模块113因此将确定变换函数FT,从而使得经过变换的逻辑480实施函数FT而不是函数F。因此,我们需要FT(T(si))=T(F(si)),从而使得对于si的所有可能数值,T-1(FT(T(si)))=F(si)。下面的表1列出了针对si的可能数值的范围的r=F(si)的可能数值,连同T(si)和FT(T(si))的对应数值。sisi的二进制版本r=F(si)的二进制版本rT(si)FT(T(si))000000009910010011552010010211301101131212410011068051111117411611010040871011015114表1。在该示例中,变换T被定义在4比特数上。因此,对于除了r=T(si)的有效数值之外的所有输入(也就是对于除了前面表1的第5列中的数值之外的针对函数FT的输入,也就是数值2、3、6、10、13、14、15),函数FT可以使其对应输出被选择成任何数值,例如随机数值。因此,表2可以作为定义函数FT的示例性查找表。r=T(si)r的二进制版本FT(r)FT(r)的二进制版本000008100010001100012001050101300111311014010011101150101501016011081000701111211008100000000910019100110101020010111011401001211001211001311015010114111060110151111131101表2。将认识到的是,使得针对前面的函数F的输入是3比特数值并且变换T的输入和输出是4比特数值纯粹是示例,并且针对函数F的(一项或多项)输入可以包括任何数目M个比特,并且变换T的(一项或多项)输入和(一项或多项)输出可以类似地包括任何数目N个比特,其中N≥M。如果N>M,则(如前面当N=4和M=3时所示)可以为来自变换T的特定输出(也就是为对应于针对变换T的输入的变换T的输出,该针对变换T的输入将不会从针对函数F的有效输入出现)赋予各种数值(例如随机地赋值)。因此,通过使N>M,可以使用变换T的不同版本(并且因此可以实施印刷电子设备140的不同版本),其中所述不同版本在针对这些特定输出的数值方面彼此不同。这不会影响所述不同版本的正常/意图功能(这是因为预期在实践中将不会使用变换T的多样化输出,这是因为它们对应于将不会从针对函数F的有效输入出现的针对变换T的输入)。这例如可以被用来帮助识别特定批次的印刷电子设备140和/或帮助追踪各个个体印刷电子设备140和/或帮助追踪受保护的设计文件114的拷贝和/或数据文件116的拷贝——举例来说,被赋予这些输出(也就是对应于将不会从针对函数F的有效输入出现的针对变换T的输入的变换T的输出)的数值可以被用来编码或表示用于追踪版本的标识符或标识数值。这样的多样性还使得攻击者更加难以使用一批次的多样化印刷电子设备140来实施重复攻击。可以通过一项或多项逻辑/布尔表达式或运算来实施查找表,查找表特别适合于在硬件中实施。假设针对查找表的输入是M比特数值的输入x,其中x的第k个比特是bk,因此x的二进制表示是bMbM-1…b2b1(使得对于k=1,…,M,bk是0或1)。在后面描述的示例中,M=8,因此x的二进制表示是b8b7b6b5b4b3b2b1。还假设来自查找表的输出(也就是响应于接收到输入x所查找到的数值)是N比特数值的输出y,其中y的第k个比特是ck,因此y的二进制表示是cNcN-1…c2c1(使得对于k=1,…,N,ck是0或1)。在后面描述的示例中,N=8,因此y的二进制表示是c8c7c6c5c4c3c2c1。这在图6a中被示意性地图示。当然将认识到的是,输入x可以包括不同数目的比特,并且输出y可以包括不同数目的比特(输出y的比特数目可以不同于输入x的比特数目),因此使得x和y都为8比特数值纯粹是出于说明性目的。将认识到的是,每一个输出比特ck可以被计算或表达成被应用于输入比特bi的相应逻辑表达式Bk,也就是ck=Bk(b1,b2,…,bM)。这在图6b中关于输出比特c4被示意性地图示。函数Bk可以使用一项或多项逻辑与(AND)(与在这里由表示)、零项或更多项逻辑或(OR)(或在这里由表示)以及零项或更多项逻辑非(NOT)(非在这里由表示)来表达。具体来说,假设查找表针对n个输入数值X1,…,Xn(也就是说当x取得X1,…,Xn当中的任一个的数值时)得到取得数值1的输出比特ck,并且针对输入x的所有其他可能数值,ck取得数值0。对于每一个i=1,…,n,设Ri是由定义的对应逻辑表达式(也就是针对j=1,…,M的表达式b’j的与),其中对于j=1,…,M,如果输入数值Xi的第j个比特bj是1则b’j=bj,并且如果输入数值Xi的第j个比特bj是0则b’j=bj。举例来说,对于十进制的8比特输入数值Xi=53或者二进制的(00110101),则。因此,仅仅对于输入数值53得出数值1。于是,Bk可以被定义成,即,通过把表达式Ri(i=1,…,n)一起或(如果n=1,则不必进行或)。于是Bk仅对于取得X1,…,Xn之一的数值的输入才得出数值1。举例来说,假设n=3,并且只有在输入x取得数值31(=二进制(00011111))、53(=二进制(00110101))或149(=二进制(10010101))的情况下,c4才取得数值1。于是:因此B4可以被表达成:当然存在表达Bk的更加高效或优化的方式,即,利用更少的逻辑运算来表达。举例来说,人们可以将前面的B4表达如下:并且进一步更加优化的表达式也是可能的。实际上,一般来说预期的是,优化的表达式可以包含前面通过把子表达式Ri简单地或在一起所生成的“自然(naive)”逻辑表达式的10%到20%之间。因此,查找表可以被视为通过函数B1,…,BN实施,使得在给定输入x=bMbM-1…b2b1的情况下,对于k=1,…,N,对应输出y=cNcN-1…c2c1由ck=Bk(b1,b2,…,bM)定义。因此,保护模块113修改设计文件112中的代码或设计,从而使得受保护的设计文件114描述(或者定义或实施)经过变换的逻辑480而不是经过变换的逻辑440,并且使得受保护的设计文件114描述(或者定义或实施)第一变换模块430和第二变换模块450。图4c示意性地图示了根据本发明的实施例的另一个示例性印刷电子设备140,也就是当设计文件112受到保护模块113保护或由保护模块113保证设计文件112的安全从而使得数据文件116基于受保护的设计文件114时可以由印刷机120生成的印刷电子设备。图4c的印刷电子设备140与图4b的印刷电子设备相同,除了在图4c中,第一变换模块430可以部分地由形成一个或多个传感器410的部分的变换模块430a(并且因此变换模块430a对数据数值si(i=1,…,m1)应用一项或多项双射变换以形成一个或多个数据数值uk)和/或部分地由形成一个或多个输入端420的部分的变换模块430b(并且因此变换模块430b对数据数值xj(j=1,…,m2)应用一项或多项双射变换以形成一项或多项数据数值uk)来实施。举例来说,变换模块430a可以被实施成一个或多个传感器410的模数转换器的部分;同样地,变换模块430b可以被实施成一个或多个输入端420的模数转换器的部分。类似地,如图4c中所示,第二变换模块450可以部分地由形成一个或多个传送器460的部分的变换模块450a(并且因此变换模块450a对一个或多个数据数值vk(k=1,…,m6)应用一项或多项双射变换以得到数据数值ti(i=1,…,m3))和/或部分地由形成一个或多个输出端470的部分的变换模块450b(并且因此变换模块450b对一个或多个数据数值vk(k=1,…,m6)应用一项或多项双射变换以得到数据数值yj(j=1,…,m4))来实施。举例来说,变换模块450a可以被实施成一个或多个传送器460的数模转换器的部分;同样地,变换模块430b可以被实施成一个或多个输出端470的数模转换器的部分。通过在传感器410和/或输入端420和/或传送器460和/或输出端470内实施数据变换,总体安全性和篡改抵抗性得到提升。用于保护软件项目免于白盒攻击的各种软件保护技术是已知的,并且使用比如C++之类的各种编程语言来实施。后面的附录A讨论了这样的已知技术如何可以被应用和适配来保护设计文件112中的HDL代码以生成受保护的设计文件114(其可以包括模糊化的HDL代码和/或模糊化的网表)。3—附加的保护在本发明的一些实施例中,除了应用一种或多种保护技术以为安全性相关操作提供针对硬件攻击的抵抗性之外,保护模块113还可以修改设计文件112以形成受保护的设计文件114,从而使得所得到的印刷电子设备140包括一个或多个附加的安全性模块,正如后面所描述的那样。所述一个或多个安全性模块当中的一些或全部本身可以被实施成具有针对硬件攻击的抵抗性。举例来说,保护模块113可以向设计文件112添加实施安全性模块的功能的代码,并且随后向针对该安全性模块和安全性相关操作全部二者的代码应用一种或多种保护技术。每一个安全性模块被布置成检测可能正在发生攻击者进行的攻击(或者攻击可能正被实施或者可能已被实施)——不同的安全性模块可以检测不同类型的攻击或者对不同类型的攻击作出响应。如果该安全性模块检测到可能正在发生(或者可能已经发生)攻击,则该安全性模块可以被布置成采取一项或多项预定动作,比如使得印刷电子设备140停止运作(暂时性或永久性地停止),或者使得印刷电子设备140输出随机数据或无意义的数据等等。在一些实施例中,一个安全性模块被布置成实施测试以检查印刷电子设备140是否按照所预期的那样操作(也就是根据表明正在进行正常操作的一条或多条预定标准进行操作)。该检查(或者测试或评估)可以被周期性地实施和/或在印刷电子设备140通电时实施。该检查例如可以包括内建的自测。该检查可以包括监测针对经过变换的域中的未定义的数据数值的数据路径。举例来说,正如前面所讨论的那样,可能有针对去到经过变换的函数FT的一项或多项输入的一个或多个数值和/或针对经过变换的函数FT的一项或多项输出的一个或多个数值不应当在正常操作期间出现。举例来说,如前面在表1和2中所示,该特定的经过变换的函数FT的输入和输出绝不应当取得以下数值之一:2、3、6、7、10、13、14或15。如果输入或输出取得无效数值,则有可能攻击者正在尝试攻击印刷电子设备140。如果该安全性模块通过(一项或多项)检查检测到印刷电子设备140没有按照预期的那样操作,则该安全性模块可以认为存在正由攻击者实施的攻击——该安全性模块随后可以按照前面所讨论的那样响应于攻击进行操作。在一些实施例中,保护模块113可以被布置成使得经过变换的逻辑480包括相同计算(或者运算或函数)的多个实例或实施,从而使得当印刷电子设备140正在正常操作时,这些多个实例或实施都应当提供相应的输出。这实际上引入了冗余计算。因此,一个安全性模块可以被布置成监测所述多个实例或实施,以便检查其输出确实全部对应。如果该安全性模块检测到这些输出不全部对应,则该安全性模块可以认为存在正由攻击者实施的攻击——该安全性模块随后可以按照前面所讨论的那样响应于该攻击进行操作。因此这迫使攻击者修改该实施的多个部分,这使得攻击者更难成功。在一些实施例中,各种数据数值可以被预期满足特定标准或约束,或者可以被预期具有特定属性。举例来说,在正常操作期间,由经过变换的逻辑480实施的处理可以使得:数据数值x1应当总是大于数据数值x2;或者数据数值x1应当总是仅处于从a到b的预定范围内;或者数据数值x1应当总是负的;等等。因此,一个安全性模块可以被布置成监测这些各种数据数值及其相关联的标准/约束/属性。如果该安全性模块检测到这些各种数据数值当中的一项或多项不满足或符合其相关联的标准/约束/属性,则该安全性模块可以认为存在正由攻击者实施的攻击——该安全性模块随后可以按照前面所讨论的那样响应于攻击进行操作。在一些实施例中,一个或多个安全性模块是被布置成检测针对印刷电子设备140的一项或多项物理攻击的传感器。在一些实施例中,所述传感器在电力被供应到印刷电子设备140时检测攻击;在其他实施例中,所述传感器在印刷电子设备140处于待机/关闭模式时检测攻击,在这种情况下,印刷电子设备140可以包括用于该特定传感器的电源或电池。通过这种方式,前面提到的(一个或多个)安全性模块因此实施以下各项当中的一项或多项:(i)完整性验证操作;(ii)篡改检测操作;以及(iii)对正在针对印刷电子设备140实施攻击的检测。正如前面所提到的那样,印刷电子设备140可以连接到或者附着到另一个项目或物体150,从而生成新的项目或物体160。在一个实施例中,印刷电子设备140被生成为使得其具有覆盖印刷电子设备140的“敏感部分”的材料保护层。所述保护层可以作为印刷过程的一部分由印刷机120形成,或者可以在印刷机120印刷出印刷电子设备140之后被施加。所述“敏感部分”可以是使用对于空气和/或水分/湿气敏感的一种或多种化学品印刷的部分(或者节段或区域)——如果该敏感部分被暴露于空气和/或水分/湿气,则该敏感部分可能被损坏,从而防止印刷电子设备140操作。因此,所述材料保护层防止空气和/或水分/湿气与敏感部分发生接触,也就是说在没有保护层的情况下,印刷电子设备140的敏感部分将暴露于空气和/或水分/湿气(例如该敏感部分可以形成印刷电子设备140的表面的至少一部分)。项目150可以包括一个或多个引脚,并且印刷电子设备140可以按照使得所述引脚穿通或修补保护层的方式附着到项目150。因此,如果印刷电子设备140被从项目150移除,则由于保护层中的孔洞不再被引脚阻塞,印刷电子设备140的敏感部分可以暴露于空气和/或水分/湿气。这样,印刷电子设备140从项目150的移除可以被布置成损坏/破坏印刷电子设备140。印刷电子设备140可以使用强胶(或粘合剂)附着到项目150。胶的强度可以被选择成使得如果从项目150移除印刷电子设备140,则印刷电子设备140将破裂。前面描述的技术是用于确保印刷电子设备140保持附着到项目150的物理和化学手段。一个或多个前面提到的安全性模块也可以被布置成促进这一点。因此,一个或多个前面提到的安全性模块可以被布置成实施以下各项当中的一项或全部两项:(i)用以验证印刷电子设备140所连接到的物体/项目150的一项或多项预定属性的操作;和/或(ii)用以验证印刷电子设备140连接到物体/项目150的操作。后面将对此更加详细地进行讨论。一个或多个安全性模块可以包括用以检测项目150的存在的传感器。如果传感器没有检测到项目150的存在,则该安全性模块可以认为存在正由攻击者实施的攻击(或者已经实施了攻击)——该安全性模块随后可以按照前面所讨论的那样响应于攻击进行操作。一个或多个安全性模块可以包括检测或测量项目150的属性或特性并且随后把所检测或测量的属性或特性与参考数据进行比较的传感器——如果所测量的属性或特性与参考数据不匹配(或者不足够接近地匹配),则该安全性模块可以认为存在正由攻击者实施的攻击(或者已经实施了攻击)——该安全性模块随后可以按照前面所讨论的那样响应于攻击进行操作。举例来说,所述传感器可以测量项目150的电阻抗并且将该阻抗与预定数值进行比较。如果所测量的阻抗不足够接近所述预定数值(也就是处在围绕预定数值的阈值内),则该安全性模块可以认为存在正由攻击者实施的攻击(或者已经实施了攻击)——该安全性模块随后可以按照前面所讨论的那样响应于攻击进行操作。作为另一个示例,项目150上的印刷电子设备140与项目150发生接触的区域(其在后面被称作“接触区域”)可以包括一项或多项图样或属性。举例来说,接触区域可以包括简单地由于项目150的制造而出现的随机图样或属性,该制造导致接触区域上的随机不规则性(例如隆起和沟槽)。因此,在一些实施例中,接触区域在物理上是不可克隆的。因此,在一些实施例中,(一个或多个)安全性模块中的一个或多个可以包括用于检测接触区域上的图样或者接触区域的一项或多项属性的传感器。这可以按照许多方式来使用,例如:-在一个实施例中,当印刷电子设备140首先被附着到项目150时,安全性模块可以被初始化——这涉及安全性模块使用其传感器来读取或检测接触区域上的图样并且存储该图样的表示。当印刷电子设备140被使用时(也就是在“正常”操作期间),安全性模块可以被布置成读取或检测接触区域上的当前图样,并且把当前图样与所存储的表示进行比较。如果它们不匹配,则这表明印刷电子设备140已被从其初始项目150移除并且附着到另一个项目150——因此,该安全性模块于是可以认为存在正由攻击者实施的攻击(或者已经实施的攻击),并且该安全性模块随后可以按照前面所讨论的那样响应于攻击进行操作。-在一个实施例中,当印刷电子设备140首先被附着到项目150时,安全性模块可以使用其传感器来读取或检测接触区域上的图样,并且提供该图样的表示作为输出。该输出例如可以被提供到认证系统——认证系统随后可以存储所述表示以用于认证与印刷电子设备140的未来交互。举例来说,当印刷电子设备140被使用时(也就是在“正常”操作期间),安全性模块可以被布置成读取或检测接触区域上的当前图样,并且把当前图样(或者当前图样的表示)用作针对安全性相关功能的输入si。举例来说,当前图样(或者其表示)可以至少部分地被用来帮助确定用于实施密码操作(比如加密由认证系统提供的随机数或者生成其散列)的密码密钥。所述密码操作的输出可以被提供到认证系统。由于认证系统存储原始表示,于是认证系统可以被布置成基于所存储的表示来实施与由印刷电子设备140实施的相同的密码操作,并且把由认证系统实施的密码操作的输出与由印刷电子设备140实施的密码操作的输出进行比较。如果印刷电子设备140尚未被从原始项目150移除,则两项输出应当匹配。因此,如果两项输出匹配,则认证系统可以验证印刷电子设备140被附着到“正确的”项目150;如果两项输出不匹配,则认证系统可以确定印刷电子设备140没有被附着到“正确的”项目150。4—示例性使用在一个实施例中,印刷电子设备140被用来形成智能卡(例如供数字广播机顶盒使用的智能卡)。由印刷机120产生的印刷电子设备140可以是最终的智能卡本身;替换地,印刷电子设备140可以被附着到塑料卡(项目150),从而得到智能卡(即项目160)。如已知的,智能卡实施各种安全性相关操作(比如用于控制针对数字内容的访问的条件访问或数字权利管理功能),安全性相关操作可以如前面所描述的那样被保护以免于硬件攻击。在一个实施例中,印刷电子设备140(或者包括印刷电子设备140的项目160)可以被用作所谓的“智能标签”。智能标签是被布置成存储和提供/输出关于该智能标签所附着到的物体(或产品)的信息的设备或装置。所述信息可以是任何种类的信息,比如针对该特定物体的标识代码,关于物体来源(例如产生/制造的位置和/或日期)的信息,提供关于物体的细节(例如元数据或描述)的信息等等。印刷电子设备140可以例如通过传送器460(比如无线传送器)输出所述信息。在一些实施例中,针对智能标签的安全性相关功能可以包括对信息进行加密和/或数字签名,从而使得智能标签可以按照保护信息的完整性和/或实现对信息来源的认证的方式输出该信息。这例如在信息包括物体的标识符(例如唯一标识代码)时是特别有用的。具体来说,用户的设备(比如移动电话、计算机、销售终端等等)可以接收来自印刷电子设备140的标识符,并且实施验证操作。对于验证操作,用户的设备例如可以向认证系统发送认证请求(例如通过因特网或某种其他网络),其中认证请求包括标识符,并且响应于所接收到的请求,认证系统确定请求中的标识符是否对应于可信的物体(例如通过把所接收到的标识符与存储在认证系统的数据库中的可信标识符进行比较)并且相应地发送报告回到用户的设备。在一些实施例中,认证请求可以包括附加的数据以便促进认证系统进行认证处理。举例来说,例如如果认证请求包括如前面所描述的接触区域的图样的表示,则安全性可以得到提高——如果由认证系统使用的数据库与图样的表示相关联地存储标识符,则认证系统可以检查认证请求是否包括针对有效图样的有效标识符。类似地,例如如果认证请求包括用户的设备的位置或者印刷电子设备140的位置,则安全性可以得到提高。认证系统于是可以被布置成确定当前认证请求和与该认证请求中的标识符相关联的先前认证请求之间的时间差异T(例如通过把所接收到的认证请求的日期/时间存储在数据库中),并且认证系统还可以被布置成确定针对当前认证请求的位置与针对先前认证请求的位置之间的距离或差异D(例如通过把所接收到的认证请求的位置存储在数据库中)。如果所述距离或差异超出基于时间差异的阈值(例如如果D/T大于预定阈值),则认证系统可以确定印刷电子设备140已被克隆,并且因此可以用“认证失败”消息对认证请求作出响应。将认识到的是,本发明的实施例可以按照其他方式利用提供在认证请求中的位置数据和/或其他环境数据。在一些实施例中,认证系统可以与印刷电子设备140的标识符相关联地存储也由印刷电子设备140存储(并且如前面所描述的那样受到保护以免于攻击)的秘密数据(比如密码密钥,例如对称密钥)。因此,由认证系统实施的认证处理可以涉及认证系统向印刷电子设备140提供挑战——所述挑战可以包括随机数、随机数据或者任何其他不可预测的数据,或者先前在针对印刷电子设备140的先前挑战中尚未被使用过的任何数据。印刷电子设备140可以被布置成使用或基于秘密数据对挑战实施密码操作(比如加密操作或生成散列),并且响应于挑战向认证系统提供包括标识符和密码操作的结果全部二者的消息。认证系统在接收到消息时可以对消息进行认证——认证系统知晓挑战和秘密数据全部二者,并且因此可以自身使用或基于由认证系统存储的秘密数据对挑战实施密码操作。如果认证系统所实施的密码操作的结果与包含在消息中的结果相匹配,则认证系统认为消息是可信的,并且可以返回“认证成功”消息;否则,认证系统认为消息不是可信的,并且可以返回“认证失败”消息。对于该实施例,由于重放攻击(replayattack)不再可能,因此设备的克隆更加困难。图7a示意性地图示了根据前面的实施例的用于印刷电子设备140的处理。该实施例可以如下被进一步扩展。具体来说,除了使用或者基于秘密数据之外,密码操作还可以使用或者基于来自印刷电子设备140的一个或多个传感器410的输出。举例来说,密码操作可以附加地基于项目150上的接触区域的图样。认证系统可以被布置成存储针对来自一个或多个传感器410的输出的有效数值(即预期数值),从而使得认证系统仍然可以实施与由印刷电子设备140所实施的相同的密码操作。举例来说,可以基于秘密数据以及来自一个或多个传感器410的输出形成用于密码操作的密钥——如果印刷电子设备140未被篡改,则印刷电子设备140和认证系统因为他们将使用相同的密钥而都将从密码操作生成相同的结果;如果印刷电子设备140已被篡改,则印刷电子设备140和认证系统将因为他们将使用不同的密钥而从密码操作生成不同的结果。在该实施例中,其输出被用于密码操作的一个或多个传感器410可以包括检测或确定智能标签所附着到的物体的一项或多项属性的传感器410。举例来说,传感器410的输出可以标识物体的一个或多个重要方面或属性(比如影响物体的价值的方面,比如包装的物体是否已被打开或者物体是否已被使用)或者与之相关。图7b示意性地图示了根据前面的实施例的用于印刷电子设备140的处理。智能标签例如可以被附着到药物包装,并且因此可以被布置成安全地存储针对药物的剂量/处方/使用指示。同样地,前面提到的功能还可以被用来确保智能标签将只有在它被附着到正确的/初始的药物包装的情况下才会正确地操作,从而帮助防止药物的误用。在一个实施例中,印刷电子设备140(或者包括印刷电子设备140的项目160)可以被用作所谓的“智能传感器”。智能传感器包括一个或多个传感器410,其例如测量印刷电子设备140所处的环境的一项或多项属性,比如温度、环境光水平、音量、人的存在、电能消耗、打碎玻璃的声音等等。安全性相关操作可以被布置成保证由一个或多个传感器410提供的测量结果的安全,例如通过对表示所述测量结果的数据进行加密或数字签名,从而使得印刷电子设备140可以输出安全的测量数据。这帮助防止攻击者访问或使用或修改从智能传感器输出或者由智能传感器传送的测量数据。图8示意性地图示了本发明的另一个实施例。具体来说,移动设备800(诸如移动电话、平板计算机、一副“智能眼镜”、“智能手表”等等)的用户希望把移动设备800与来自该移动设备800的位置处的电子设备810的集合当中的特定电子设备810*连接(也就是说将在移动设备800与特定电子设备810*之间产生无线数据通信链接)。电子设备810(包括特定电子设备810*)可以是如前面所讨论的安全印刷电子设备,但是不必一定是这种情况。如果电子设备810是如前面所讨论的安全印刷电子设备,则其例如可以是智能传感器或智能标签。移动设备800可以包括实施后面所描述的移动设备800的一些或全部功能的(如前面所描述的)安全印刷电子设备。移动设备800包括摄影机803,用于显示或输出由摄影机802捕获的一幅或多幅图像的视觉表示(或图像)的屏幕(或显示器)803,以及无线通信接口804(比如射频网络接口)。通信接口804例如可以是WiFi或蓝牙通信接口804。通信接口804是适合于与一个或多个电子设备810(包括特定电子设备810*)进行通信的无线通信接口——因此,这些电子设备810也包括对应的无线通信接口(图8中未示出)。移动设备800包括处理器。所述处理器被布置成执行软件应用以便实施如在后面所阐述的功能,从而控制摄影机802和通信接口804。但是将认识到的是,替代地,可以用硬件实施该功能的一些或全部以作为移动设备800的部分。使用软件应用的移动设备800被布置成:(a)控制摄影机802以捕获图像。图8图示了摄影机802的光学视场840。因此,由摄影机802捕获的图像可以包括一个或多个电子设备810(包括特定电子设备810*),或者至少包括电子设备810(包括特定电子设备810*)的表示。在一些实施例中,响应于来自移动设备800的用户的命令或输入(比如通过用户按下移动设备800上的按钮或者通过经由由软件应用提供的接口向软件应用提供某种输入),软件应用使用摄影机802来捕获图像。(b)允许用户选择所捕获图像的一部分。这例如可以包括用户选择所捕获图像上的点(例如通过按下屏幕803上的点),或者用户定义或绘制或表明图像的一个区域(例如通过绘制该区域的周界)。因此,屏幕803可以是触敏的,以便使得用户能够提供这样的输入。替代地,移动设备800可以被布置成通过其他手段接收来自用户的输入,比如通过一个或多个按钮或控件,或者用以检测用户的操作或输入或动作(比如监测用户的一只或全部两只眼睛以便检测用户正在观看的所捕获图像上的位置)的一个或多个传感器。将认识到的是,选择机制并不是本发明的该实施例的重要方面,因此可以使用任何选择机制。用户选择的所捕获图像的部分是表示或描绘或对应于特定电子设备810*的部分。(c)基于所选择的部分,控制无线通信接口804与对应于所捕获图像的所选择部分的电子设备810建立无线数据通信链接。无线通信接口804可以被布置成输出如图8中所示的定向RF射束830,并且软件应用因此可以控制或指令无线通信接口804导引RF射束830,从而使得RF射束830被导向对应于所捕获图像的所选择部分的电子设备810(即特定电子设备810*)。移动设备800与特定电子设备810*之间的无线数据通信链接的建立于是可以根据任何传统的无线通信协议来进行。在一些实施例(特别适合于其无线通信接口804无法导引RF射束830的移动设备800)中,软件应用可以被布置成顺序地对一个或多个电子设备810进行轮询。举例来说,无线通信接口804可能已经检测到一个或多个电子设备810的存在,并且随后可以遍及所检测到的各个电子设备810循环。具体来说,软件应用可以被布置成依次请求每一个所检测到的电子设备810向移动设备800提供输出或反馈信号(例如通过激活光源),移动设备800(例如通过摄影机802或无线通信接口804)可以接收所述输出或反馈信号。软件应用随后可以确定接收自电子设备810的输出/信号是否对应于所捕获图像的所选择部分。举例来说,软件应用可以被布置成:(a)在被轮询的电子设备810激活(或者预期已激活)其光源的时间点捕获一幅或多幅图像;(b)检测这个所捕获的图像是否具有对应于初始捕获的图像的所选择部分的一部分;(c)如果是,则检测该部分是否描绘所激活的光源(例如通过把初始捕获的图像与一幅或多幅新捕获的图像进行比较以寻找亮点);以及(d)如果是,则该被轮询的电子设备810是应当与之建立无线数据通信链接的特定电子设备810*。5—修改将认识到的是,所描述的方法被示为按照特定顺序实施的个体步骤。但是技术人员将认识到,这些步骤可以被组合或者按照不同的顺序来实施,同时仍然实现所期望的结果。将认识到的是,可以使用各种不同的信息处理系统来实施本发明的实施例。具体来说,虽然附图及其讨论提供了示例性的计算系统和方法,但是这些仅仅是为了在讨论本发明的各个方面时提供有用的参考而呈现的。本发明的实施例可以被实施在任何适当的数据处理设备(比如个人计算机、膝上型计算机、服务器计算机等等)上。当然,对于所述系统和方法的描述出于讨论的目的而被简化,并且其仅仅是可以被用于本发明的实施例的许多不同类型的系统和方法之一。将认识到的是,逻辑块之间的边界仅仅是说明性的,并且替换的实施例可以合并逻辑块或元素,或者可以对各个逻辑块或元素施加替换的功能分解。将认识到的是,前面提到的功能可以被实施为硬件和/或软件的一个或多个对应模块。举例来说,前面提到的功能可以被实施成一个或多个软件组件以供系统的处理器执行。替换地,前面提到的功能可以被实施成硬件,比如一个或多个现场可编程门阵列(FPGA),和/或一个或多个专用集成电路(ASIC),和/或一个或多个数字信号处理器(DSP),和/或其他硬件布置。在这里所包含的流程图中实施或者如前面所描述的方法步骤可以各自由对应的相应模块实施;在这里所包含的流程图中实施或者如前面所描述的多个方法步骤可以一起由单个模块实施。将认识到的是,如果本发明的实施例是通过计算机程序实施的,则承载计算机程序的存储介质和传送介质形成本发明的各方面。计算机程序可以具有一条或多条程序指令或程序代码,其在由计算机执行时实施本发明的实施例。这里所使用的术语“程序”可以是被设计用于在计算机系统上执行的指令序列,并且可以包括子例程、函数、规程、模块、对象方法、对象实施、可执行应用、小应用程序、小服务程序、源代码、对象代码、共享库、动态链接库和/或被设计用于在计算机系统上执行的其他指令序列。存储介质可以是磁盘(比如硬盘驱动器或软盘)、光盘(比如CD-ROM、DVD-ROM或BluRay盘)、或者存储器(比如ROM、RAM、EEPROM、EPROM、闪存或者便携式/可移除存储器设备)等等。传送介质可以是通信信号、数据广播、两台或更多台计算机之间的通信链接等等。附录A近年来,编程人员为之提供软件的终端用户计算机设备的数目已大大增加,这一增加的大部分是在用于移动电话和移动计算的设备(包括智能电话、平板计算机等等)的领域中,但是也在更加传统风格的台式计算机以及嵌入在例如汽车、电视等之类的其他制造商品中的计算机的领域内。提供给此类设备的软件的一大部分具有通常被称作“app”的应用的形式,并且该软件通常可以采用原生代码、比如JavaScript之类的脚本化语言以及诸如Java之类的其他语言的形式来提供。如果没有使用各种软件保护技术适当地保护软件,则此类软件以及所述软件被用来向用户居间传递的数据或内容常常存在被危害的风险。举例来说,此类技术可以被用来使得攻击者非常难以提取可以被用来获得对于比如视频、音频或其他数据类型之类的内容的未经授权的访问的加密密钥,并且可以被用来使得攻击者非常难以复制软件以用于其他设备上的未经授权的使用。但是使用此类软件保护技术可能导致软件性能的降低,例如降低执行速度,增加在用户设备上存储软件所需的存储器数量,或者增加执行所需的存储器。此类软件保护技术还可能难以跨广泛的各种不同软件类型(例如用不同的源代码语言编写的先前存在的软件或者以特定原生代码格式存在的软件)应用。将希望能够对于软件项目提供针对攻击的保护,并且跨诸如不同源代码语言和原生代码类型的各种软件表示提供此类保护,同时还保持软件在终端用户设备上的良好性能水平。还将希望递送按照这种方式适当地保护的软件,以供使用在多种不同的平台类型上。因此,我们描述一种统一的安全性框架,其中把被用于各表示之间的转换、用于优化、编译等等的第一集合中的软件工具的优点与被用于软件保护的第二集合中的软件工具的优点相组合。在一个示例中,第一集合中的软件工具可以是LLVM项目的工具,该工具通常使用LLVM中间表示进行操作。但是来自使用其他中间归纳进行操作的其他集合的工具可以被使用,例如来自Microsoft公共语言基础结构的工具,该工具通常使用共同中间语言CIL。后面将把由第一集合中的软件工具使用的中间表示标示成第一中间归纳。注意,第一集合中的软件工具也可以包括用于软件保护的工具,比如二进制重写保护工具。中间表示是既非原始意图在终端用户设备上执行也非原始意图由软件工程师使用来构造原始源代码(尽管任一种此类活动当然在原理上是可能的)的软件表示。在后面的描述中,针对统一安全性框架的原始软件输入和用于在终端用户设备上使用的经过变换的软件输出都没有被投放(cast)在中间表示中。第二工具集合中的软件工具使用不同的中间归纳,该中间归纳通常更适合于由如下软件工具使用或者原始意图由如下软件工具使用:该软件工具对由统一安全性框架所处理的软件项目应用安全性保护变换。该中间表示在后面通常被标示成第二中间表示,并且不同于第一中间表示。第二中间表示可以按照如此方式被设计:使得诸如C和C++之类的语言的源代码可以容易地被转换成第二中间表示,并且可以容易地通过适当的转换工具从所述第二中间表示重建相同或类似的语言的源代码。更一般来说,描述了统一安全性框架,其中提供用于对软件项目应用安全性变换的软件工具,从而使得例如可以在多项不同的中间表示中对软件项目相继地实施多个安全性变换步骤。统一安全性框架还可以提供用于对软件项目应用优化变换的软件工具,从而使得例如可以在多项不同的中间表示中对软件项目相继地实施多个优化变换步骤。所描述的布置可以被用来:接受任何输入语言或原生代码/二进制表示的输入软件项目以进行优化和保护;并且通过各种形式(包括任何所期望的原生代码/二进制表示、JavaScript或者JavaScript的子集等等)输出受保护和优化的软件项目。在一些示例中,输入表示(例如特定二进制代码)可以与输出表示相同,从而对现有二进制代码软件项目实施优化和保护。为此目的,我们描述一种方法,包括:在第一中间表示中实施软件项目的优化,并且在不同于第一中间表示的第二中间表示中实施软件项目的保护。第一中间表示中的优化既可以在实施第二中间表示中的保护之前实施也可以在其后实施,并且因此所述方法可以包括:在第一次实施优化之后并且在随后实施保护之前把软件项目从第一中间表示转换到第二中间表示,以及在实施保护之后并且在随后第二次实施优化之前从第二中间表示转换到第一中间表示。类似地,第二中间表示中的保护既可以在实施第一中间表示中的优化之前实施也可以在其后实施,并且因此所述方法可以包括:在第一次实施保护之后并且在随后实施优化之前把软件项目从第二中间表示转换到第一中间表示,以及在实施优化之后并且在随后第二次实施保护之前从第一中间表示转换到第二中间表示。相关中间表示中的保护和优化的步骤可以被交替实施任意次数,以保护或优化开始,并且按照交替方式继续一个或多个另外的步骤。正如前面所提到的那样,第一中间表示可以是LLVM中间表示LLVMIR,但是可以使用其他中间表示,比如MicrosoftCIL。更一般来说,我们描述一种方法,用于:使用在一项或多项中间表示中实施的优化步骤来实施软件项目的优化;以及使用一项或多项中间表示中的保护步骤来实施软件项目的保护,一些或全部中间表示可以与被用于实施优化的中间表示相同或不同。所述优化可以包括各种类型的优化,例如针对软件项目的尺寸、运行时间速度和运行时间存储器需求当中的一项或多项。用以实现此类优化的技术可以包括向量化、空闲时间、常数传播、无用赋值消除、内联展开、可到达性分析、保护中断正常(protectionbreaknormal)以及其他优化。在第二中间表示中对软件项目的保护包括:对软件项目应用一种或多种保护技术,特别是保护软件的程序和/或数据方面免于攻击的安全性保护技术。这样的技术例如可以包括白盒保护技术、节点锁定技术、数据流模糊化、控制流模糊化和变换、同态数据变换、密钥隐藏、程序互锁、边界混合以及其他技术。可以通过各种方式把所使用的技术组合在一起从而形成一种或多种工具,例如作为被实施成优化和保护工具集的部分的隐蔽引擎(cloakingengine)。软件项目被提供在通常不同于第一中间表示和第二中间表示二者的输入表示中。因此所述方法可以涉及:在实施优化之前并且通常也在实施前面所提到的保护之前把软件项目从输入表示转换到第一中间表示。在一些示例中,输入表示中的软件项目被转换到第二中间表示并且随后在第一优化之前并且可选地也在实施保护之前被从第二中间表示转换。输入表示可以是源代码表示,比如C、C++、Objective-C、Java、JavaScript、C#、Ada、Fortran、ActionScript、GLSL、Haskell、Julia、Python、Ruby和Rust。但是输入表示可以替换地是原生代码表示,例如针对特定处理器系列(比如x86、x86-64、ARM、SPARC、PowerPC、MIPS以及m68k处理器系列当中的任一种)的原生代码(即二进制代码)表示。输入表示还可以是硬件描述语言(HDL)。众所周知,HDL是可以被用来对电子电路的结构、设计和操作进行编程的计算机程序语言。HDL例如可以是VHDL或Verilog,但是将认识到的是,存在许多其他HDL并且可以替换地使用在各示例中。由于HDL(及其使用和实施)是众所周知的,因此这里将不对它们进行更加详细的描述,但是更多细节例如可以在http://en.wikipedia.org/wiki/Hardware_description_language处找到,其全部公开内容通过引用被合并在此。当已经实施了前面的优化和保护过程时,可以把软件项目转换到输出表示。这一处理阶段还可以包括另外的优化和/或保护阶段。在一些示例中,把软件项目转换到输出表示包括把软件项目编译(并且通常还链接)到输出表示中,例如编译到原生代码表示中。随后在编译和链接之后还可以对软件项目应用另外的二进制保护技术。在编译之前,可以首先把软件项目从第一中间表示转换到第二中间表示并且继续转换到源代码表示,源代码表示被传递到编译器,或者可以在第一中间表示中把软件项目直接传递到编译器。在第一种情况下,可以使用对源代码表示进行操作的编译器,比如C/C++编译器。在第二种情况下,如果第一中间表示是LLVMIR,则可以使用LLVM编译器。在任何情况下,所述编译器可以是优化编译器,以便为受保护的软件项目提供另一级优化。把软件项目转换到输出表示还可以包括:在编译之前对第一中间表示中的软件项目应用二进制重写保护工具,和/或可以在过程中的其他时间应用这样的工具。替代把软件项目编译到原生代码表示中,可以改为把软件项目转换到脚本表示中,并且特别是转换到可以在终端用户设备上执行的脚本表示中。很方便的是,可以为此目的使用JavaScript表示,因为这样的脚本可以由终端用户设备上的web浏览器直接执行。更具体来说,可以使用作为JavaScript的子集的asm.js表示,这是因为asm.js适合于在终端用户设备上特别高效地执行。举例来说,如果第一中间表示是LLVMIR,则可以使用Emscripten工具来把软件项目从第一中间表示转换到asm.js表示。如果输入表示是硬件描述语言,则输出表示通常可以处于能够在更加面向硬件的层级(比如在网表中)描述电子电路的相应表示中。在这里描述了比如编译和链接之类的处理方面的情况下,本领域技术人员将认识到,当使用具有HDL输入表示的所描述的布置时,可以使用诸如使用适当工具的合成之类的等效步骤,并且对于所描述的布置的保护和优化方面可以使用适用于HDL工作的适当的软件工具。于是输出软件项目是对于应用了适当的模糊化/保护和优化步骤的电子系统的描述。所述软件项目可以是各种软件项目(比如用于在用户设备上执行的应用、库、模块、代理等等)中的任一种。具体来说,所述软件项目可以是安全性软件项目,比如包含用于实施比如加密/解密和数字权利管理功能之类的安全性功能的软件的库、模块或代理。所述方法可以被应用于两个这样的软件项目,并且这些软件项目当中的一个可以例如通过规程调用或其他参考而使用另一个软件项目中的功能。类似地,根据所描述的示例所优化和保护的软件项目可以利用或调用更低层(比如系统层或硬件层)中的安全性相关或受保护的功能。类似地,软件项目可以描述电子系统,并且被提供用于针对HDL中的示例性布置的输入。我们还描述一种保护软件项目的方法,其包括:对软件项目应用一种或多种保护技术,并且使用一个或多个LLVM工具对软件项目进行优化,并且这一方面可以与本文中其他地方所提到的各种选项相组合。举例来说,可以使用保护组件来对软件项目应用一种或多种保护技术,所保护组件被布置成使用不同于LLVM中间表示的中间表示来进行操作,并且所述方法还可以包括:使用LLVM工具在一项或多项表示与和LLVM中间表示之间转换软件项目。所述方法可以被用来在asm.js或原生代码表示之一中输出受保护和优化的软件项目。在如前面所讨论的那样对软件项目进行处理之后,可以把软件项目递送到一个或多个用户设备以供执行。可以通过各种方式(比如通过有线、光学或无线网络,使用计算机可读介质,以及通过其他方式)把软件项目递送到用户设备。用于提供所讨论的方法和装置的软件可以被提供在一个或多个计算机可读介质上、通过网络提供或者通过其他方式提供,以便在适当的计算机装置上执行,计算机装置例如是包括存储器和一个或多个处理器的计算机设备或者多个此类设备,其与适当的输入和输出设施(比如键盘、鼠标和屏幕)相组合以使得操作员能够控制所述装置,其还连同用于存储计算机程序代码以用于在所述装置上实现所描述的布置的永久性存储装置。因此,我们还描述了用于保护软件项目的计算机装置,其包括:被布置成在第一中间表示(比如LLVMIR)中实施软件项目的优化的优化器组件,以及被布置成在第二中间归纳中实施软件项目的保护的保护器组件。所述装置可以被布置成使得优化器组件在软件项目的第一中间表示中实施优化,这既可以在保护器组件在软件项目的第二中间表示中实施保护之前也可以在其之后进行。优化组件可以包括一个或多个LLVM优化工具。保护组件可以被布置成对软件项目应用一种或多种保护技术,该保护技术包括以下各项中的一项或多项:白盒保护技术、节点锁定技术、数据流模糊化、控制流模糊化和变换、同态数据变换、密钥隐藏、程序互锁以及边界混合。所述装置还可以包括被布置成把软件项目从输入表示转换到LLVMIR的输入转换器,并且所述输入表示可以是以下各项之一:二进制或原生代码表示、字节代码表示以及源代码表示。所述装置还可以包括:编译器和链接器,被布置成输出作为二进制代码的经过优化和受保护的软件项目,以及输出转换器,被布置成输出作为asm.js代码的经过优化和受保护的软件项目。我们还描述一种统一隐蔽工具集,包括保护组件、优化器组件以及一个或多个转换器,该转换器用于在由保护组件和优化器组件使用的各项中间表示之间进行转换。优化器组件可以包括一个或多个LLVM优化器工具,并且所述统一隐蔽工具集可以包括一个或多个LLVM前端工具,用于从输入表示转换到LLVM中间表示中。所述统一隐蔽工具集、保护组件和/或优化器组件可以被提供以在多于一项中间表示中对软件项目应用变换。所述统一隐蔽工具集还可以实施如这里所阐述的所述示例的各个其他方面,例如其中保护组件实施以下技术当中的一种或多种:白盒保护技术,节点锁定技术,数据流模糊化,控制流模糊化和变换,同态数据变换,密钥隐藏,程序互锁,以及边界混合;所述统一隐蔽工具集还包括被布置成编译并且链接到原生代码表示中的编译器和链接器;并且所述统一隐蔽工具集还包括输出转换器,用于转换到作为JavaScript的子集的输出表示。该描述还涵盖已使用所描述的方法和/或装置被优化和保护的一个或多个软件项目,并且这样的软件项目可以在计算机存储器中、在计算机可读介质上、通过电信或计算机网络以及通过其他方式被提供、存储或传输。现在将参照图9-18来描述各个示例。在后面的描述中和在附图中描述了特定示例。但是将认识到的是,本讨论中的构思不限于所描述的示例,并且所述构思的一些实施可以不包括后面所描述的全部特征。现在参照图9,其中示出了示例性计算机系统。例如由服务器A14提供软件项目A12,所述软件项目A12先前已被存储在该服务器中。软件项目A12可以意图用于不同的目的,但是在图9的系统中,其是意图在多台用户计算机A20当中的一台或多台上执行和使用的应用(有时被称作app,这取决于比如该应用如何被递送以及其如何在用户设备的情境中和更广泛的操作环境中被使用之类的方面)。用户计算机A20可以是个人计算机、智能电话、平板计算机或者任何其他适当的用户设备。这样的用户设备A20通常将包括操作系统A24,所述操作系统为运行在用户设备上的诸如web浏览器A22之类的其他软件实体提供服务。软件项目A12可以通过各种形式被递送给用户设备,但是通常可以采用如下形式:原生可执行代码、比如Java字节代码之类的通用低层级代码或者比如Java脚本之类的脚本化语言。通常,通用低层级代码或脚本化语言软件项目A12将在web浏览器A22内或者在其直接控制下执行。原生可执行代码中的软件项目A12更有可能在操作系统A24的直接控制下执行,但是某些类型的原生代码(比如谷歌NaCl和PNaCl)则在web浏览器环境内执行。图9的软件项目A12通常可以由远程web服务器A30通过比如因特网之类的数据网络A28递送到一个或多个用户设备,但是可以使用其他递送和安装布置。所图示的web服务器或者一台或多台其他服务器还可以为用户设备A20并且特别是为在用户设备A20上执行的软件项目A12提供数据、支持、数字权利管理和/或其他服务A32。不管是在用户设备A20上的执行之前、期间还是之后,软件项目A12在这些设备A20上对于通过多种方式的攻击和危害可能是脆弱的。举例来说,软件项目可以实施数字权利管理技术,攻击者可以例如通过提取算法的加密密钥或细节来尝试危害该数字权利管理技术,这可以实现在将来规避针对该特定软件项目、针对特定数字内容等等的数字权利管理技术。因此,系统A10还提供优化和保护工具集A40,其被用来在递送到用户设备A20之前对软件项目A12进行优化和保护。在图9中,优化和保护工具集A40在软件项目A12被递送到web服务器A32之前对软件项目A12实施动作,但是其可以在服务器A14、web服务器A30中、在开发环境中(未示出)中或者在别处被实施。图9中的优化和保护工具集A40被示出为在操作系统A43的控制下在适当的计算机装置A42上执行。计算机装置A42通常将包括一个或多个处理器A44,其在用户通过输入/输出设施A50的控制下使用存储器A46执行优化和保护工具集A42的软件代码。计算机装置A42以及优化和保护工具集A40的功能可以跨由适当的数据网络连接连接的多个计算机单元分布。被用来提供优化和保护工具集A40的全部软件的部分可以被存储在非易失性存储装置A48中,和/或存储在一个或多个计算机可读介质中,和/或可以通过数据网络被传送到计算机装置A42。要提到的是,将被优化和保护的软件项目A12还可以是用于在比如应用之类的另一个软件项目中使用或者由其该另一个软件项目使用的组件。为此目的,软件项目A12例如可以是库、模块、代理或类似项目。在图10中示意性地示出了优化和保护工具集A40的示例性实施方式。优化和保护工具集A40包括优化器组件A100和保护器组件A110。优化器组件A100被适配成对软件项目A12实施优化技术。优化器组件A100被配置成在第一中间表示IR1中实施此类技术,从而使得在优化器组件A100实施软件项目的优化之前需要把软件项目A12转译到该第一中间表示IR1中。保护器组件A110被适配成对软件项目A12实施保护技术。保护组件被配置成在第二中间表示IR2中实施此类技术,从而使得在保护器组件A110实施软件项目A12的保护之前需要把软件项目A12转译到该第二中间表示中。第一和第二中间表示是彼此不同的中间表示。通常来说,保护器组件A110无法对处于第一中间表示中的软件项目进行操作,并且优化器组件无法对处于第二中间表示中的软件项目进行操作。优化器组件A100和保护组件A110当中的每一个可以被实施成优化和保护工具集A40中的多个子组件A102、A112。特定组件的子组件可以关于彼此提供不同的和/或重复的功能,例如使得组件的总体角色可以通过各种方式被分布在优化和保护工具集A40的软件内。优化和保护工具集A40还提供多个转换器,其被适配成把软件项目A12从一种表示转换到另一种。这些转换器包括:第一转换器组件A120,被布置成把软件项目从由优化器组件A100所使用的第一中间表示IR1转换到由保护器组件A110所使用的第二中间表示IR2;以及第二转换器组件A122,被布置成把软件项目从由保护器组件A100所使用的第二中间表示IR2转换到由优化器组件110所使用第一中间表示IR1。当然,第一和第二转换器组件A120、A122可以被组合在单个功能软件单元(比如单个模块、可执行或者面向对象的方法(如果希望的话))中。软件项目A12在输入表示Ri中被提供到优化和保护工具集40。该输入表示可以是任意数目的不同表示当中的一种,例如第一或第二中间表示IR1、IR2,或者是另一种表示,比如源代码表示、二进制代码表示等等。类似地,软件项目A12在输出表示Ro中被从优化和保护工具集40输出。该输出表示也可以是任意数目的不同表示当中的一种,例如第一或第二中间表示IR1、IR2或者是另一种表示(比如源代码表示、二进制代码表示等等)中的任一种。优化和保护工具集A40还可以包括一个或多个另外的组件,每一个组件被布置成对处于特定表示中的软件项目A12进行操作。这样的组件例如可以包括:二进制保护组件A130,提供被布置成对处于二进制表示Rb中的软件项目A12进行操作的二进制保护工具;二进制重写保护组件A135,提供被布置成对处于二进制表示或某种其他表示(比如第一中间表示等等)中的软件项目A12进行操作的二进制重写保护工具。因此,除了第一转换器组件A120和第二转换器组件A122之外,优化和保护工具集A40还被提供有在图10中还被示出为X3…Xn的其他转换器组件A124、A126,它们被用于按照需要在各种表示之间转换软件项目A12。举例来说,一个这样的转换器组件A124、A126可以从C/C++源代码表示转换到第二中间表示IR2,并且另一个这样的转换器组件可以从第二中间表示IR2转换回到C/C++源代码表示。图10还示出了作为优化和保护工具集A40的部分的一个或多个编译器或编译器和链接器组件A140,它们可以被用来对软件项目A12进行编译和链接,以便例如通常把软件项目A12转换到原生或二进制代码表示或者另一种适当的目标表示中。可以被用于输入表示Ri以及优化和保护工具集A40内的其他表示的源代码表示的示例包括C、C++、Objective-C、C#、Java、JavaScript、Ada、Fortran、ActionScript、GLSL、Haskell、Julia、Python、Ruby和Rust,但是技术人员将会知晓许多其他表示。输入表示Ri可以替换地是原生或二进制代码、字节代码等等,或者可能是第一和第二中间表示之一。可以被用于输出表示Ro的表示的示例包括:用于直接在用户设备上执行的原生代码表示,包括适于在web浏览器的控制下执行的比如PNaCl和NaCl之类的原生代码表示;比如Java字节代码之类的字节代码表示;比如Java源代码之类的适于解译后执行或运行时间编译的表示;比如JavaScript和JavaScript的子集(比如asm.js)之类的脚本表示;以及可能的第一或第二中间表示。第一中间表示IR1通常可以被选择成便于、适于或者按照其他方式被选择用于实施优化技术的中间表示。具体来说,第一中间表示可以是LLVMIR(LLVM中间表示)。技术人员已知并且例如在LLVM网站“http://llvm.org”讨论的LLVM项目提供模块化并且可重复使用的编译器和工具链技术的集合,这些技术:(i)引入支持与语言无关的指令集和类型系统的明确规定的通用中间表示(LLVMIR);(ii)提供完整编译器系统和基础结构的中间层,该中间层取得LLVMIR中的软件项目并且发出LLVMIR中的软件项目的高度优化的版本,该高度优化的版本做好准备进行在多种源代码表示中编写的程序的编译时间、链接时间、运行时间和“空闲时间”优化;(iii)支持用于源代码和其他表示的丰富LLVM前端工具,所述表示不仅包括C和C++,而且还包括其他受欢迎的编程语言,比如前面提到的源代码语言以及Java字节代码等等;(iv)通过LLVM后端工具的集合,目前支持许多其他受欢迎的平台和系统,并且在不远的将来将支持更多移动平台;以及(v)与OpenGL以及低端和高端GPU一起工作。适合于用作第一中间表示的其他表示包括Microsoft共同中间语言(CIL)。第二中间表示IR2通常可以被选择成便于、适于或者按照其他方式被选择用于实施保护技术的中间表示。第二中间表示例如可以按照如下这样的方式被设计和实施:特定语言(例如C和C++)中的源代码可以容易地被转换到第二中间表示中,并且使得相同或类似语言中的源代码可以容易地从第二中间表示构造。由优化器实施的优化技术可以包括用以提高软件项目的执行速度、减少执行空闲时间、减少对于软件项目的存储和/或执行所需的存储器、提高核心或GPU的使用率等等的技术。方便的是,这些和其他优化功能由LLVM项目提供。用以实现此类优化的技术可以包括向量化、空闲时间、常数传播、无用赋值消除、内联展开、可到达性分析、保护中断正常以及其他优化。保护器组件的目的是保护软件项目的功能或数据处理,和/或保护由软件项目使用或处理的数据。这可以通过应用隐蔽技术(比如同态数据变换、控制流变换、白盒加密术、密钥隐藏、程序互锁以及边界混合)来实现。具体来说,由保护器组件处理之后的软件项目将提供与这样的处理之前相同的功能或数据处理——但是该功能或数据处理通常以一种方式被实施在受保护的软件项目中,从而使得用户设备的操作员无法通过非意图的或未经授权的方式访问或使用来自软件项目的该功能或数据处理(然而如果按照未受保护的形式向用户设备提供软件项目,则用户设备的操作员可能能够按照非意图的或者未经授权的方式访问或使用所述功能或数据处理)。类似地,在由保护器组件处理之后,软件项目可以按照受保护的或者模糊化的方式存储秘密信息(比如密码密钥),从而使得攻击者更加难以(如果不是不可能的话)推断出或访问该秘密信息(然而如果按照未受保护的形式向用户设备提供了软件项目,则用户设备的操作员可能能够推断出或访问该秘密信息)。例如:-软件项目可以包括至少部分地基于将由该软件项目处理的一个或多个数据项目的判定(或者判定块或分支点)。如果软件项目按照未受保护的形式被提供到用户设备A20,则攻击者可能能够强制软件项目执行,从而使得在处理判定之后遵循一执行路径,即使该执行路径原本不应当被遵循。举例来说,所述判定可以包括测试程序变量B是真(TRUE)还是假(FALSE),并且软件项目可以被布置成使得如果判定识别出B为真,则执行路径PT被遵循/执行,而如果判定识别出B为假,则执行路径PF被遵循/执行。在这种情况下,攻击者可以(例如通过使用调试器)在所述判定识别出B为真的情况下强制软件项目遵循路径PF,和/或在所述判定识别出B为假的情况下强制软件项目遵循路径PT。因此,在一些实施例中,保护器组件A110旨在通过对软件项目内的所述判定应用一种或多种软件保护技术来防止攻击者这样做(或者至少使其更加困难)。-软件项目可以包括以下各项当中的一项或多项:安全性相关功能;访问控制功能;密码功能;以及权利管理功能。这样的功能常常涉及使用秘密数据,比如一个或多个密码密钥。所述处理可以涉及使用一个或多个密码密钥和/或对一个或多个密码密钥进行操作或者利用一个或多个密码密钥进行操作。如果攻击者能够识别或确定秘密数据,则已经发生安全漏洞,并且对于受到秘密数据保护的数据(比如音频和/或视频内容)的控制或管理可能被规避。因此,在一些示例中,保护器组件A110旨在通过对软件项目内的此类功能应用一种或多种软件保护技术来防止攻击者识别或确定一项或多项秘密数据(或者至少使其更加困难)。“白盒(white-box)”环境是用于软件项目的执行环境,其中假设软件项目的攻击者对于软件项目的正被操作的数据(包括中间数值)、存储器内容以及执行/过程流程具有完全的访问权限和可见性。此外,在白盒环境中,假设攻击者能够例如通过使用调试器修改软件项目的正被操作的数据、存储器内容以及执行/过程流程——这样,攻击者可以对软件项目的操作进行实验并且尝试操纵软件项目的操作,其目的是规避初始意图的功能和/或识别秘密信息和/或出于其他目的。实际上,人们甚至可以假设攻击者知晓正由软件项目实施的底层算法。但是软件项目可能需要使用秘密信息(例如一个或多个密码密钥),其中该信息需要对于攻击者保持隐藏。类似地,将会希望防止攻击者修改软件项目的执行/控制流,例如防止攻击者强制软件项目在判定块之后采取并非合法执行路径的一条执行路径。有许多技术(其在这里被称作“白盒模糊化技术”)用于变换软件项目,从而使得它抵抗白盒攻击。这样的白盒模糊化技术的示例可以被发现,这样的白盒模糊化技术的示例中可以在如下文献中找到:“White-BoxCryptographyandanAESImplementation”S.Chowetal,SelectedAreasinCryptography,9thAnnualInternationalWorkshop,SAC2002,LectureNotesinComputerScience2595(2003),p250-270)以及“AWhite-boxDESImplementationforDRMApplications”,S.Chowetal,DigitalRightsManagement,ACMCCS-9Workshop,DRM2002,LectureNotesinComputerScience2696(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,其全部公开内容通过引用被合并在此。但是将认识到,存在其他白盒模糊化技术,并且各示例可以使用任何白盒模糊化技术。作为另一个示例,有可能的情况是软件项目可能意图被提供(或者分发)到特定用户设备A20(或者用户设备A20的特定集合)并且由其使用,并且因此希望把软件项目“锁定”到(一个或多个)特定用户设备A20,也就是说防止软件项目在另一个用户设备A20上执行。因此,有许多技术(在这里被称作“节点锁定”保护技术)用于变换软件项目,使得受保护的软件项目可以在一个或多个预定/特定用户设备A20上执行(或者由其执行)但是将不会在其他用户设备上执行。这样的节点锁定技术的示例可以在WO2012/126077中找到,其全部公开内容通过引用被合并在此。但是将认识到的是,存在其他节点锁定技术,并且各个示例可以使用任何节点锁定技术。数字加水印是一种众所周知的技术。具体来说,数字加水印涉及修改初始数字对象以产生加有水印的数字对象。做出修改以把特定数据(其被称作有效载荷数据)嵌入或隐藏到初始数字对象中。所述有效载荷数据例如可以包括标识数字对象的所有权或其他权利信息的数据。有效载荷数据可以标识加有水印的数字对象的(预期)接收者,在这种情况下,有效载荷数据被称作数字指纹——这样的数字加水印可以被用来帮助追踪数字对象的未经授权的拷贝的起源。数字加水印可以被应用于软件项目。这样的软件加水印技术的示例可以在US7,395,433中找到,该文献的全部公开内容通过引用被合并在此。但是将认识到,存在其他软件加水印技术,并且各示例可以使用任何软件加水印技术。可能希望把软件项目的不同版本提供到不同的用户设备A20。软件项目的不同版本为不同的用户设备A20提供相同的功能——但是受保护的软件项目的不同版本被不同地编程或实施。这样有助于限制攻击者成功地攻击受保护的软件项目的影响。具体来说,如果攻击者成功地攻击了他的受保护的软件项目的版本,则该攻击(或者通过该攻击发现或访问的比如密码密钥之类的数据)可能不适合于供受保护的软件项目的不同版本使用。因此,有许多技术(在这里被称作“多样性(diversity)”技术)用于对软件项目进行变换,从而使得生成软件项目的不同的受保护的版本(也就是说从而使得引入“多样性”)。这样的多样性技术的示例可以在WO2011/120123中找到,其全部公开内容通过引用被合并在此。但是将认识到的是,存在其他多样性技术,并且各个示例可以使用任何多样性技术。前面提到的白盒模糊化技术、节点锁定技术、软件加水印技术和多样性技术是软件保护技术的示例。将认识到的是,存在对软件项目应用保护的其他方法。因此,这里所使用的术语“软件保护技术”应当被理解成意味着对软件项目应用保护的任何方法(目的是挫败攻击者的攻击,或者至少使得攻击者更加难以成功进行其攻击),比如任一种前面提到的白盒模糊化技术和/或任一种前面提到的节点锁定技术和/或任一种前面提到的软件加水印技术和/或任一种前面提到的多样性技术。存在许多方式可以由保护器组件A110用来在软件项目A260内实施前面提到的软件保护技术。举例来说,为了保护软件项目,保护器模块A110可以修改软件项目内的一个或多个代码部分,和/或可以将一个或多个新的代码部分添加或引入到软件项目A220中。作出这些修改的实际方式或者编写新的代码部分的实际方式当然可以变化——毕竟有许多编写软件以实现相同功能的方式。二进制保护组件A130用于接受在由编译器和链接器A140进行编译之后具有原生或二进制代码或字节代码形式的软件项目,并且应用二进制保护技术,比如完整性验证、反调试(anti-debugging)、代码加密、安全加载以及安全存储。二进制保护组件随后通常把软件项目重新包装到具有必要的安全性数据的完全受保护的二进制代码中,所述安全性数据可以在其在用户设备A20上加载和执行期间被访问和使用。因此,对于开发人员可以访问其中所有源代码的软件项目,优化和保护工具集A40可以被用来:使用保护组件A112首先在第二中间表示中对应用的源代码应用源代码保护工具,并且随后通过使用源代码保护技术对已经受到保护的二进制代码应用二进制保护。在源代码和二进制代码域二者中都对软件项目应用这样的保护得到更加有效地受到保护的软件项目。图11图示了可以使用优化和保护工具集A40实施的工作流程A200中的一些。软件项目在输入表示Ri中被提供到工具集。该表示通常可以是如前面所讨论的源代码或二进制代码表示。软件项目在步骤A205处被转换到第一中间表示。这可以涉及使用单个转换器组件A120-A128,或者两个或更多个转换器组件。通常来说,软件项目可以从输入表示Ri直接被转换到第一中间表示中,或者从输入表示Ri通过另一表示(比如第二中间表示)被转换到第一中间表示中。随后在步骤A210处使用图10的优化器组件A100对第一中间表示IR1中的软件项目进行优化,并且随后在步骤A215处使用图2的第一转换器A120将第一中间表示IR1中的软件项转换到第二中间表示IR2。随后在步骤A220处使用图10的保护器组件A110对第二中间表示IR2中的软件项目进行保护,并且随后在步骤A225处使用图10的第二转换器A122将第二中间表示IR2中的软件项目转换回到第一中间表示IR1。随后第一中间表示IR1中的软件项目在步骤A230处使用图10的优化器组件A100再次被优化。其随后在输出表示Ro中被输出之前可以在步骤235处经历另外的处理的各个方面。另外的处理的各个方面可以包括编译和链接、二进制保护、转换到其他表示等等当中的一项或多项。图中的虚线流程箭头表明在第二优化步骤A230之后,工作流程A200可以返回到用于转换回到第二中间表示的步骤A215,以及一个或多个另外的保护和优化步骤。图11的工作流程A200可以按照不同方式被改变。举例来说,软件项目可以在保护步骤A220之前或者之后仅被优化一次,并且进一步处理的步骤A235可以被省略或者包括多个步骤。保护或优化可以在另一项之前被实施,并且可以实施任意数目的另外的优化和保护步骤。从输入表示Ri到针对优化所使用的表示IR1的转换可以包括多个转换步骤,例如从Ri到IR2的转换,之后是从IR2到IR1的转换。另外的处理步骤A235可以包括其他优化和/或保护步骤,例如二进制重写保护步骤。现在将描述如何可以实施图10的优化和保护工具集A40以及比如图11的工作流程之类的工作流程的更加具体的示例。在这些具体示例中,第一中间表示通常是前面所讨论的LLVMIR。这实现了原生应用保护的范围的扩展以获得更好的性能和安全性,并且还针对优化和保护工具集A40的大得多的操作范围开放了新的安全性可能性。对发明人已经变得显而易见的是,在准备用于分发到多个用户设备A20的软件项目时,存在安全性与性能之间的冲突问题。一般来说,受保护的软件会引入必要的冗余性和开销,这将使得具有受保护的形式并且特别是具有隐蔽的形式的软件的性能变慢。被应用于软件项目的保护技术越多,对于性能的影响就越显著。因此,需要在性能与安全性之间取得平衡。典型的保护技术可以把静态程序相关性转换成部分静态并且部分动态相关性。这防止通常比动态攻击更容易实施的完全静态的攻击。但是这还引入了限制,该限制是:这些保护技术可能会破坏依赖于对静态相关性的属性的分析的特定优化能力。由于这一限制,保护和优化策略需要在较低安全性/保护但是例如在执行速度和/或更小程序尺寸方面的更好优化与较高安全性/保护但是更少优化之间作出选择。图12图示了可以使用优化和保护工具集A40实施的工作流程。软件项目在作为C/C++源代码表示Rc的输入表示Ri中被提供到优化和保护工具集A40。软件项目被传递到由以下各项构成的工具集组件分组A300:从表示Rc转换到第二中间表示IR2的转换器X3,保护器组件A110,以及从第二中间表示IR2转换回到源代码表示Rc的转换器X4。如果将不会发生第一中间表示中的LLVM优化,则软件项目可以在被传递到编译器、优化器和链接器A140之前被顺序地传递经过这些功能当中的每一项以对软件项目进行保护,并且随后继续传递到二进制保护组件A130以便在作为原生/二进制代码表示Rb的输出表示中输出软件项目。还提供安全库和代理的集合A145以用于编译/链接软件项目1A2,并且如果需要的话还被提供用于由二进制保护组件A130使用。工具集组件分组A300由优化器组件A100补充,优化器组件A100在这里出于清楚起见被示出为实施一个或多个LLVM优化工具的单个子组件A102,但是例如可以使用多个子组件A102,其中在每一个优化阶段使用不同的子组件、多个子组件或者子组件的不同组合。图10的X1和X2转换器随后被用来把软件项目从使用X3转换器124形成的和/或由工具集组件分组A300中的保护器组件A112输出的第二中间表示转换到第一中间表示以供LLVM优化工具使用,并且在由LLVM优化工具进行的优化之后对软件项目进行转换,以便由保护器组件A110进行保护和/或用于由X4转换器转换回到Rc表示。在图12中使用虚线图示了一些替换的工作流程路径。举例来说,在由保护器组件A110进行处理并且转换到IR1表示之后,软件项目可以被直接发送到编译器、优化器和链接器A140,而没有由优化器组件A100进行第二处理步骤。类似地,如果编译器、优化器和链接器A140能够应对第一中间表示中的输入,则在优化器组件A100进行第二处理步骤之后,软件项目可以被直接发送到编译器、优化器和链接器A140,而没有由X1和X4转换器进行的转换。因此,X1和X2转换器在由保护器组件在第二中间表示中提供的保护技术的域与由LLVM优化工具在第一中间表示中提供的优化技术的域之间提供桥梁,从而整合了优化和保护工具集A40的这两个操作领域。这种方法还有助于解决前面所讨论的保护与优化之间的冲突,因为优化和保护工具集A40可以利用可用的LLVM优化工具和技术的能力,以便在由保护组件A110应用保护技术之前和之后都提供优化。通过在多个层级实现优化,有可能移除安全性与性能之间的限制,从而可以针对相同的软件项目A12都获得更好的安全性和改进的性能两者。图13图示了可以使用优化和保护工具集A40实施的另一个工作流程。在该图中,软件项目在作为源代码表示Rs的输入表示Ri中被提供到优化和保护工具集40。源代码表示Rs例如可以是Objective-C、Java、JavaScript、C#、Ada、Fortran、ActionScript、GLSL、Haskell、Julia、Python、Ruby或Rust。软件项目被传递到转换器X5,转换器X5把源代码表示Rs转换到第一中间表示中。转换器X5可以被提供作为LLVM前端工具A320的集合的一部分,所述LLVM前端工具A320提供从各种各样的源代码表示到LLVMIR的转换。现在处于LLVMIR中的软件项目可以被传递到优化器组件A100以用于由LLVM优化器工具实施第一优化步骤,或者被直接传递到X1转换器(如虚线所示)以便在被传递到优化器组件A100之前转换到第二中间表示。图13的其余部分对应于图12。要注意,图13的工具集组件分组300没有被示出为包括X3转换器,这是因为其在图13的工作流程中不是必要的,但是如果希望的话仍然可以将其包括在该分组中。由于非常丰富的可用LLVM前端工具A320的集合可以把许多不同的语言转换到LLVMIR中,并且由此利用LLVM编译设施来获得精密的分析和更好的性能,因此如图13中所示,这些LLVM前端工具可以被用来扩展优化和保护工具集A40的前端能力,以便把较大的编程语言集合中的程序源代码经由可以在其中应用保护器组件A110的保护技术的第一中间表示转换到第二中间表示中。图14图示了可以使用优化和保护工具集A40实施的另一个工作流程。在该图中,软件项目在作为原生/二进制表示Rb的输入表示Ri中被提供到优化和保护工具集A40,以供在用户设备A20的特定平台或类别上执行。二进制表示Rb例如可以是x86、x86-64、ARM、SPARC、PowerPC、MIPS和m68k二进制表示当中的任一种。软件项目被传递到转换器X6,转换器X6把二进制表示Rb转换到第一中间表示中。转换器X6可以被提供作为LLVM二进制工具A330的集合的部分,所述LLVM二进制工具A330提供从各种各样的二进制表示到LLVMIR的转换。图14的其余部分对应于图12和13。通过以这种方式使用LLVM二进制工具,在被转换到第二中间表示中以供输入到保护器组件A300以便应用比如隐蔽之类的保护技术之前,原生/二进制代码中的软件项目可以被转换到LLVMIR形式中。如果输出表示Ro是针对与输入表示二进制代码的目标平台不同的目标平台的二进制代码,则通过适当地配置编译器、优化器和链接器A140,优化和保护工具集A40可以容易地被用来达到这个目标:在应用所需的保护技术时一个输出同时用于不同的目标平台。LLVM编译器中间层工具包括精密的程序分析能力,比如更加精确的别名(alias)分析、指针逃逸(pointerescape)分析以及相关性分析,这些可以提供丰富的程序属性和相关性,它们可以被用来出于不同目的对程序进行变换。图10中图示的二进制重写保护组件A135提供一个或多个二进制重写保护工具,二进制重写保护工具接受LLVMIR形式的软件项目,通过利用LLVM的程序分析功能进行模糊化变换,并且得到LLVMIR中的软件项目的更加安全的版本。二进制重写保护组件A135可以通过多种不同方式(包括独立二进制重写保护、利用二进制保护工具的二进制重写保护以及利用源隐蔽工具和二进制保护工具二者的二进制重写保护)增强软件项目的保护。独立二进制重写保护——通常来说,二进制保护对处于二进制形式中的二进制代码进行保护,并且一些这样的保护技术需要对二进制表示进行作用,例如完整性验证、安全加载以及动态代码加密。此外,如果所需的程序信息变为可用,则二进制保护可以应用特定种类的变换。但是现有的二进制保护工具往往对分析能力的支持有限,从而使得非常有限的二进制变换能够直接以二进制形式进行。替代地,二进制重写保护工具可以被适配成在比如LLVMIR之类的中间表示中作用于软件项目,在中间表示中精密得多的程序分析支持可以被利用,从而应用无法容易地被直接应用于二进制表示中的软件的许多变换技术。在独立模式下,使用一个或多个LLVM二进制工具A330把处于未受保护的二进制代码表示中的软件项目转换到LLVMIR中,并且随后二进制重写保护组件A135被用来通过与LLVM程序分析工具进行交互来对软件项目应用特定程序变换。然后通过使用LLVMIR到二进制转换器、编译器、优化器和链接器或者通过其他方式把LLVMIR中的重写软件项目转换到受保护的二进制代码表示中。利用二进制保护工具的二进制重写保护——在此模式下,可以通过使用二进制重写保护组件A135把处于二进制代码表示中的、被提供到优化和保护工具集A40的软件项目模糊化到受保护的二进制表示中。然后可以通过使用比如由图10的二进制保护组件A130提供的通用二进制保护工具进一步保护软件项目。以这种方式通过使用二进制重写保护和二进制保护二者把不同的保护层组合在一起得到更加安全的软件项目A12。利用源层级保护和二进制保护的二进制重写保护——一般来说,对比如前面所讨论的第二中间表示之类的源代码类型表示的保护处理可以提供更加全面和更深层次的数据流和控制流保护。图15使用类似于图14的工作流程的工作流程图示了这一点,其中LLVM二进制工具被用来把在二进制表示中提供到优化和保护工具集A40的软件项目A12转换到第一中间表示。此外在图15中,在保护器组件A112的动作之后从优化器组件A102或者替换地直接从转换器X2输出的软件项目被导向二进制重写保护工具A135。在二进制重写保护工具A135的操作之后,软件项目随后被继续传递到先前所描述的编译器、优化器和链接器A140。二进制重写保护工具A135是可以被使用在这种布置中的LLVM编译器中间层工具A345的示例。如由图15中的虚线所示,软件项目可以替换地在第一优化之后被直接导向二进制重写保护工具而没有由保护器组件A112进行处理或第二优化阶段,或者可以按照省略第一或第二优化步骤的方式被处理。web应用是使用web浏览器作为客户端环境的应用。web应用通常是用浏览器支持的编程语言(比如JavaScript)与浏览器渲染的标记语言(比如HTML)相组合来编码的,并且依赖于其主控web浏览器来使其可执行。“asm.js”是JavaScript的有限子集,并且例如在网站http://asmjs.org处进行了讨论。“asm.js”支持C类计算,但是由于其是JavaScript的子集,因此其在支持JavaScript的任何web浏览器中正确地运行,而不需要任何进一步的特殊支持。由asm.js使用的子集使得容易使用类型推断的普通方法辨识出低层级操作。“asm.js”确实依赖于支持WebGL所需要的扩展(比如UInt32、INt16等等之类的缓冲器和类型数组)以便支持低层级结构、数组等等,但是这些通常在主控web服务器中可用。可以使用“useasm”指令在JavaScript文件中标记JavaScript程序遵循“asm.js”表示。主控web浏览器随后可以在没有针对“asm.js”的显式支持的情况下忽略该指令,或者可以在支持可用的情况下检查程序是否符合“asm.js”表示。如果在web浏览器中支持可用,则与通常的JavaScript相比,asm.js代码能够以大大提高的速度和效率运行,这通常是通过把asm.js代码编译到原生二进制代码表示中而实现的。在现有技术中提供了用于把比如C和C++之类的源代码表示转换到asm.js表示中的工具。一个这样的工具链将由如下各项构成:把C和C++表示转换到LLVRIR中的Clang工具(参见http://clang.llvm.org)以及把LLVMIR转换到asm.js表示中的Emscripten工具(参见https://github.com/kripken/emscripten)。LLVM优化工具可以作为该工具链的部分被应用,以便在应用Emscripten工具之前实施优化。图16图示了优化和保护工具集A40如何可以被用来优化和保护在C/C++源表示Rc中提供的软件项目,并且在asm.js表示Ra中输出软件项目。图16的工作流程遵循与图12到15的方案类似的方案。根据用粗虚线示出的第一工作流程路线,在C/C++表示Rc中输入的软件项目被传递到工具集组件分组A300,在工具集组件分组A300处,软件项目由转换器X3转换到第二中间表示,随后由保护组件A112保护,并且随后被转换回到C/C++表示Rc。受保护的软件项目随后被传递到被标示成X7的Clang组件A350,Clang组件A350把C/C++源代码表示Rc转换到通常是LLVMIR的第一中间表示IR1。该表示被传递到形成优化器组件A102的部分的LLVM优化器A310,并且随后被传递到被标示成X8的Emscripten组件A360,Emscripten组件A360把第一中间表示转换到asm.js表示Ra以供输出。根据用实线总体上示出的第二工作流程路线,在C/C++表示Rc中输入的软件项目首先被传递到被标示成X7的Clang组件A350,Clang组件A350把C/C++源代码表示Rc转换到通常是LLVMIR的第一中间表示IR1。该表示被传递到形成优化器组件A102的部分的LLVM优化器A310,并且随后被传递到被标示成X1的第一转换器A122,以便转换到第二中间表示以用于传递到保护器组件A112。在由保护器组件A112处理之后,软件项目被传递到被标示成X2的第二转换器A120以便转换回到第一中间表示,并且随后被传递到优化器组件A102以用于第二优化阶段。最后,软件项目被传递到被标示成X8的Emscripten组件A360,Emscripten组件A360把第一中间表示转换到asm.js表示Ra以供输出。该工作流程内的一些替换方案以细虚线示出,按照细虚线,第一或第二优化步骤可以被省略。通过使用优化和保护工具集A40来实施包括保护和优化的C/C++到asm.js转换,有可能既开发出比如C/C++中的webapp(web应用)之类的新的软件项目以用于在asm.js中递送到用户设备,又把C/C++中的现有软件项目移植到受保护和优化的asm.js表示中。由于asm.js使能的浏览器可以实施比使用一般的JavaScript的情况强得多的运行时间优化,因此经过优化和受保护的asm.js软件项目可以高速运行。实际上,发明人进行的测试已表明,用C/C++编写并且使用前面所讨论的优化和保护工具集A40处理以形成经过优化和受保护的asm.js代码的软件项目可以比最初用原生代码编写的对应软件项目的性能更好。这表明了在优化和保护工具集A40中使用的优化器的优越性能。虽然图16示出了使用优化和保护工具集A40来接受在C/C++中输入的软件项目,但是通过使用不同的LLVM前端工具取代图16中示出的Clang工具A350,利用如已经讨论的后续优化和保护步骤以及到asm.js表示Ra的最终转换,其他源代码表示(比如Object-C、Java、JavaScript、C#等等)可以用于输入表示Ri。这样就开放了许多新的机会以把除了C/C++之外的其他语言中的现有应用移植到web应用中,或者在这些语言中开发可供使用在浏览器环境中的新的web应用。类似地,通过用一个或多个LLVM二进制工具A330(例如已经结合图15讨论的)取代Clang工具A350,图16中所示的工作流程可以被改变成接受原生/二进制表示Rb中的输入软件项目。这样的工作流程的显著优点在于,可以把原生代码表示中的现有软件项目移植到webapp中以用于利用由保护组件A112提供的增强的安全性在浏览器环境(例如HTML5)中运行,同时保持例如执行速度方面的性能。图17再次图示了已经在图10中示出的优化和保护工具集A40,但是现在具有反映结合图11-16讨论的工作流程的一些其他具体细节和方面。举例来说,图17中图示的优化和保护工具集A40特别提到使用LLVMIR作为第一中间表示。采用比如LLVM之类的技术框架可以帮助把面向C/C++源代码结构和类似结构或者最初针对C/C++源代码结构和类似结构编写的软件保护能力应用于在其他源代码表示、二进制代码表示和类似代码表示中提供的软件项目的保护。因此,图17示出了针对到优化和保护工具集A40的输入的软件项目可以处于C/C++源代码(表示Rc)、另一种源代码(表示Rs)或者原生/二进制代码(表示Rb)中。如果输入软件项目处于C/C++源代码表示中,则其可以使用X3转换器被转换到由保护组件A112使用的第二中间表示。使用LLVM前端/二进制工具A320、A330,输入软件项目的所有不同表示都可以被转换到第一中间表示。然后可以按照各种方式由统一工具集分组A400的各个元素对输入软件项目进行处理。这些组件包括:对在第二中间表示中的软件项目进行操作的保护组件A110,对在LLVM中间表示中的软件项目进行操作的二进制重写保护组件A135,以及对在LLVM中间表示中的软件项目进行操作的优化器组件A102。统一工具集分组A400还包括至少第一和第二X1、X2转换器A122、A120,它们在LLVM中间表示与第二中间表示之间进行转换,从而使得统一工具集分组A400的任何组件都可以对软件项目A12起作用。在由统一工具集分组A400的组件处理之后,软件项目可以被传递到各种组件以用于进一步处理,以便形成处于相关输出表示中的软件项目。如果在第二中间表示中从统一工具集分组A400被传递,则可以使用转换器X4A126把软件项目转换回到C/C++源代码表示Rc,以便由C/C++编译器和链接器组件A140-1进行编译和链接。如果在LLVM中间表示中从统一工具集分组A400被传递,则可以由LLVM编译器和链接器A140-2对软件项目进行编译和链接。在全部两种情况下,来自优化和保护工具集A40的输出于是是处于原生/二进制代码表示Rb中的软件项目。替换地,软件项目可以在LLVM中间表示中被从统一工具集分组A400传递到由Emscripten工具A360提供的转换器X8,从而使得来自优化和保护工具集A40的输出是处于asm.js表示Ra中的软件项目。使用图17的优化和保护工具集A40,比如应用或软件模块或库之类的软件项目,不管使用什么语言实施它,都可以使用相同的保护组件A110以及可以由该组件A110实施的隐蔽和其他技术的工具集来得到保护。如果软件项目是在原生/二进制代码中从优化和保护工具集A40输出,则其可以在原生执行环境(包括PNaCl)中运行,或者如果是在JavaScript或asm.js中输出,则其可以在web浏览器环境中运行。这在图17的优化和保护工具集A40中通过在两种不同的中间表示中操作统一工具集分组A400的组件来实现,其中保护组件A110对第二中间表示中的软件项目进行操作,并且至少优化器组件A100对在LLVM中间表示中的软件项目进行操作。图10-17中图示的布置主要利用第一中间表示来实施软件项目的优化,并且利用第二中间表示来实施软件项目的保护。但是参照图18,有可能使用第一表示来实施软件项目的保护,和/或使用第二表示来实施软件项目的优化。此外,虽然图10-17的布置利用了两种中间表示,但是将认识到的是,有可能使用三种或更多种中间表示,其中每一种中间表示被用于软件项目的优化和保护的其中之一或全部二者。图18类似于图10,但是示出了如何可以由优化和保护工具集A40使用任意数目的中间表示IR1…IRN,其中每一种中间表示被用于保护和优化的其中之一或全部二者。举例来说,在图18的布置中,第一中间表示IR1被优化器组件A100-1和保护器组件A110-1二者使用,第二中间表示被优化器组件A100-2使用但是不被任何保护器组件使用,并且第三中间表示被保护器组件A110-3使用但是不被任何优化器组件使用。至于图10,每一个优化器组件可以包括一个或多个优化器子组件(图18中未示出),并且每一个保护器组件可以包括一个或多个保护器子组件(图18中也未示出)。这些子组件可以实施前面已经讨论过的任何优化和保护功能,但是在适当的中间表示的限制内。要注意,虽然图18示出了供每一种不同的中间表示使用的不同保护器和/或优化器组件,但还有可能使得一个或多个保护器和/或优化器组件在中间表示的多种不同中间表示内工作。虽然关于每一种中间表示在图18中示出的组件是优化器和/或保护器组件,但是可以提供用于对软件项目实施其他任务和变换的组件,以便在一种或多种中间表示中使用。各种中间表示IR1…IRN可以包括LLVMIR以及例如前面已经讨论过的各种其他表示。为了在各种中间表示IR1…IRN之间转换软件项目(通常在使用工具集时的保护和/或优化的各种状态中),适当的转换器功能A125被提供。转换器功能A125可以例如被实施成单个库类、工具或其他元件,或者被实施成多个此类元件,其中每一个这样的元件实施一种或多种所需的转换类型。并不总是必须提供各种中间表示之间的所有可能转换,并且类似地,例如通过比如LLVMIR之类的更加常用的中间表示,一些转换可以被提供为两项或更多项其他转换的组合。在图18中作为优化和保护工具集A40的部分还示出了一个或多个二进制重写工具A135,一个或多个二进制保护工具A130,以及一个或多个编译器和/或链接器工具A140。根据工具集A40的需求,这些工具当中的每一个可以使用一种或多种中间表示IR1…IRN或者其他表示来操作。前面所讨论并且在图10和17中图示的优化和保护工具集A40可以被用来保护比如库、模块和代理以及应用之类的软件组件,并且所有这样的软件组件都落在所描述的软件项目A12的范围内。这在图19中图示,其中可以是安全性库、模块、代理和类似项目的各种软件项目被输入到优化和保护工具集A40,优化和保护工具集A40按照受保护和优化的形式输出这些软件项目。根据需求,任何此类软件项目可以在原生/二进制代码表示Rb和/或asm.js表示Ra中被输出。把asm.js表示中的一个或多个经过优化和受保护的软件项目与原生/二进制代码表示中的一个或多个经过优化和受保护的软件项目相连,并且把这些软件项目当中的每一个与底层系统层A430和更底层硬件层A440相连的箭头A420表示:asm.js、原生和系统层当中的每一项都可以访问和使用分级结构中的每一个更低层级的比如安全性特征之类的特征。一般来说,比如安全性库、模块和代理之类的软件组件具有其自身的安全性能力和特征,并且这些软件组件的鲁棒性和安全性在确保应用的安全性方面可能是关键的,该软件组件被用在所述应用内或者由所述应用参考或调用该软件组件。因此,优化和保护工具集A40以及这里所描述的工作流程可以被用来改进此类软件组件的安全性,并且因此也改进此类组件被使用在其中的应用的安全性。使用所描述的布置的各个方面,可以为用户设备A20提供多层安全性,包括硬件层级安全性特征、系统或操作系统层级安全性特征、原生层安全性特征以及web层安全性特征。使用优化和保护工具集A40保护的比如库、模块和代理之类的软件组件可以提供对于硬件和系统层级安全性特征的访问,所述硬件和系统层级安全性特征对于web应用层不应当是可见的。由于优化和保护工具集A40可以被用来在原生代码和JavaScript(包括asm.js)全部二者中产生受保护的软件组件,因此其可以被用来构造和支持从JavaScript/asm.js中的受保护的软件组件到原生代码中的受保护的软件组件的调用相关性。当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1