防篡改可信任虚拟机的制作方法

文档序号:6500559阅读:254来源:国知局
专利名称:防篡改可信任虚拟机的制作方法
技术领域
本发明一般地涉及在虚拟计算机上运行的应用。更具体地说,本发明 涉及在提供了用于使应用防篡改的方法的可信任环境中运行的应用。
背景技术
娱乐业正经历着数字革命。音乐、电视和电影正日益变得数字化,在 质量和灵活性方面为用户提供了新的优点。同时,由于数字数据可以被完 整并快速地复制,数字革命也包含着威胁。如果用户可以随意地复制娱乐 内容并在因特网上提供该内容,那么娱乐内容的市场就会消失。已经设计了内容保护方案来减少此威胁,例如数字权利管理(DRM) 系统、用于DVD视频的内容扰乱系统(CSS)、用于DVD音频的预记录 媒体的内容保护(CPPM)等等。这些系统都具有以下特征实现这些系 统的软件需要是"健壮的",即,所述软件可以阻挡黑客从所述软件提取 机密(密钥)或者修改所述软件的行为以获得未授权功能的攻击。阻挡此 类攻击的技术被称为防墓改软件。通常的理解是防墓改软件与"开放源代码"的概念相冲突,前提是黑 客可以更容易地危害开放源代码程序的安全。但是,开放源代码内容保护 方案提供了不容置疑的优点。开放标准可以防止市场分割并避免专有解决 方案排除竟争。此外,开放源代码内容保护方案实际上可以帮助降^f氐黑客 攻击的级别。对DVD视频CSS方案的公知破解很大一部分是通过来自内 部人员的泄漏来实现的。这些内部人员显然受到在开放源代码平台Liimx 上拥有DVD播放器的愿望的驱动。同时,对于许多应用,^¥3@语言已取代了计算机0:语言。Java语言 通过将源程序转换成被称为Java虚拟机("JVM")的假想计算机的指令(称为字节代码)来实现。
Java虚拟机并不是实际的硬件计算机,而是解释所述字节代码并在给 定的物理计算机上实现它们的功能的程序。此方法给定了 Java可移植性; 所述语言可用于所有类型的计算机甚至可用于诸如蜂窝电话、立体声系统 以及电视才球顶盒之类的嵌入式设备中。
许多公司已生产出其指令集与Java虚拟树目同的计算机。在这种情况 下,所述Java虚拟机是实际的而并非虛拟的。但是,按照惯例(将在此采 用的惯例),此类实际计算机仍被称为"Java虚拟机"。
内容保护的一种方法使用Java虚拟机来实现内容保护方案的健壮性 要求。在此方法中,所有机密数据和算法都不在Java中实现;相反,它们 被"内装"到Java虚拟机本身。此外,Java虛拟机提供了 "沙箱,,环境 以便阻止未授权的行动。例如,当Java虚拟机正在处理受保护的内容时, Java的正常文件写入机制被禁用。有利地,无需發汪Java代码自身的完 整性。
此"沙箱"通过Java代码防止了任何未授权的行为。每个内容^f呆护方 案的重要逻辑都隐藏在Java虚拟机自身内的防墓改环境中。尽管此^支术已 被证明是有用的,但是仍希望提供其中机密数据和算法无需在Java虚拟机 中被实现并且它们可以在Java中被实现的解决方案。此类解决方案具有其 可以支持"开放源代码,,概念的额外优点。
与机密算法相反,多数内容保护应用都涉及机密数据(密钥)。某些 内容保护方案(如水印方案)还涉及机密算法。对于黑客来说,从字节代 码导出原始Java程序要相对容易。传统的"字节代码困惑,,程序实际上几 乎不阻止此操作,而只是使变量、方法和类的名称变得混乱。需要一种包 括用于字节代码的强加密保护(如果必要)的解决方案。
某些内容保护方案使用"安全计数器"。例如,DVD音频用户被允许 只进行一定数量的复制。用户可以仅通过在其硬盘上保存或重新存储某些 文件来重置这些计数器。用户还可以将其受保护的文件复制给某些朋友, 并由此复制原始用户已购买的内容。需要一种解决内容保护的这些基本缺陷的解决方案。
Java语言提供了相对的"公共"和"私有"的概念。每个方法或子例 程都被声明是公共的、私有的还是两者都不是。公共方法最初旨在用于 Java应用的外部接口 。私有方法旨在用于不能被外部地调用的Java应用 内的所有函数。既不是公共也不是私有的方法旨在用在"软件包"(一组 相关的Java类)内。
但是,大型的Java应用包括许多Java "软件包",并且因此几乎每 个函数都必须是公共的。黑客可以将这些公共方法用作"后门",导致应 用以未授权的方式运行。甚至在单个软件包内,黑客也可以通过只是将其 自己的类添加到所述软件包中来简单地使软件包保护失效。应用设计者很 难验证他或她并未无意中暴露某些黑客可能利用的内部但是"公共的"接 口。需要一种防止暴露方法和函数的虚拟机语言,将安全问题从应用移至 虚拟机语言。
最近,已提出了多种硬件建议来帮助软件存储机密并IHE完整性。例 如,可信任计算机平台联盟已定义了用于此类硬件的开放标准。已经开发 了类似的专有技术。这些方法使用要么全有要么全无的方面。为了4吏应用 受到信任,操作系统需^f言任。为了使操作系统受到信任,操作内核需要 信任。为了使操作内核受到信任,原始引导代码需^f言任。即使对4壬何级 别的无危险的更改都将破坏信任链。
一种解决方案在操作系统中定义了新的权限级别。在此权限级别中驻 留了内核的子集、操作系统的子集和所有可信任的应用。但是,此专有方 法在建立可信任应用方面给予了此技术的拥有者巨大的竟争优势,4吏得"开 放源代码,,的概念变得无效。需要一种允许开发"开放源代码"应用并且 仍能够有效利用特殊安全硬件的解决方案。
许多Java设计者都表达了为特定用户或设备编写的应用不应净皮可移 植到其他用户或设备的期望。Java设计者希望将应用出售给单个用户而不 希望该用户能够将所述应用给予或出售给其他用户。需要一种防止在没有 来自应用设计者或拥有者的许可的情况下共享应用的解决方案。

发明内容
本发明提供了 一种用于防墓改可信任Java虚拟机的模型、计算机程序 产品和关联方法(在此总称为"系统"或"本系统")。所述可信4壬Java 虛拟机提供了 一种用于支持防墓改应用的方法。本系统提供了 一种用于确 保应用及其机密的完整性,使编写开放源代码的防墓改软件的过程变得容 易的方法。
所述可信任Java虚拟机实现了防篡改。它验证所述应用的完整性、防 止调试所述应用,并允许所述应用安全地存储和检索机密。所述可信任 Java虚拟机并未开放源代码。但是,只需一个可信任Java虚拟机,该可 信任Java虛拟机可以支持多种不同的开放源代码应用。"开放源代码,,的 价值在所述应用中得以实现。
本系统需要单独的可信任Java虚拟机,并且在所述可信任Java虚拟 机中实现内容保护逻辑。传统的Java安全用于防止从因特网下载的Java 小程序或应用损坏用户的计算机。相比之下,本系统防止用户损坏应用, 即,保护应用免于修改或暴露机密。本系统提供了一种所述应用知道是可 信任的并且所述应用可以在其中运行的可信任环境。
与机密算法相反,多数内容保护应用都涉及机密数据(密钥)。本系 统提供了 一种用于使应用创建并安全地存储这些机密的方法。某些内容保 护方案(如水印方案)还涉及机密算法。本系统包括对字节代码的强加密 保护(如果必要)。
本系统允许应用访问所述应用的机密(例如密钥)。但是,所述应用 不能访问其他应用的机密,即使这两个应用正运行在同 一机器上。
此外,本系统具有一种确保应用完好的机制。完好的、未经修改的应 用可以访问其机密。如果本系统确定所述应用已被修改,则被修改的应用 不再能够访问其机密。本系统并未定义所述应用使用的机密。所述应用设 计者定义这些机密。
本系统还提供了 一种用于通过加密编程代码或虚拟机指令来保护应用的编程代码的机制。本系统在与实际代码相同的文件中具有媒体密钥块。
所述Java虚拟机具有一组可以被用来处理所述媒体密钥块以提取媒体密 钥的设备密钥。所述媒体密钥被用来解密该文件中的所述编程代码。所述 编程代码从未以可被黑客观察到的方式被暴露。所述编程代码只有在其被 加载到存储器中或由所述Java虚拟机执行时才被暴露。
某些内容保护方案需要"安全计数器"。例如,用户被允许只进行一 定数量的DVD音频的复制。用户可以仅通过在其硬盘上保存和重新存储 某些文件来尝试重置他或她的计数器。用户还可以尝试将其受保护的文件 复制给某些朋友,并由此复制原始用户已购买的内容。本系统提供了一种 用于解决对内容权利的这些基本欺骗的方法。
本系统包括可信任字典、可信任捆绑包、可选的用于加密和解密字节 代码的加密方法以及基础可信任Java虚拟机。所述可信任字典保护数据, 而所述可信任捆绑包保护编程代码。
所述可信任字典被加密,使得应用可以存储机密数据并保护计数器。 由应用使用所述可信任字典隐含地验证了所述应用正运行在可信4壬环境 中。所述可信任捆绑包允许应用设计者将包括所述应用的所有Java软件包 分组在一起,将访问只限于那些所述应用i殳计者显式导出的接口 。
当所述应用需要时,所述可信任捆绑包可以可选地被加密。例如,本 系统使用可信任字典来保护应用所使用的机密同时允许所述可信任捆绑包 中的编程代码是开放源代码的。开放源代码的代码未#>密。但是,所述 应用的开放源代码的编程代码所需的机密在所述可信任字典中被加密。
所述加密方法允许应用设计者加密那些要保持为机密的类文件(字节 代码序列)。所述加密方法还提供了一种使本系统可以解密那些正在被执 行的类文件的可更新的方法。所述可信任Java虚拟机内装到所述可4言任字 典和所述可信任捆绑包的实现中。换言之,对于给定的处理器,所迷实现 (或其重要部分)是以"固有"的代码而不是以虚拟机字节代码来实现。 所述可信任Java虚拟机由标准软件防篡改技术来保护。
所述可信任字典和所述可信任捆绑包以如以下方式相关当应用实例化可信任字典时,所述应用隐含地列出那些可以从所述可信任字典"获得" 和"itA"值的可信任捆绑包。所述应用通过列出已被用来签署那些可信 任捆绑包的公用密钥来列出那些可信任捆绑包。
可信任捆绑包可以是Java档案(JAR)文件, 一种通过其包装用于应 用的类文件的标准方法。Java语言允许通过签署Java档案清单来数字地 签署Java档案。本系统确保只有来自完好的并正确地签署的Java档案文 件的应用才能够成功地使用所述可信任字典。Java档案文件只能使用已被 标记为供它们使用的可信任字典。
本系统提供了 一种通过其应用可以获知其正在可信任环境中运行的机 制。应用设计者在已知为可信任的环境(例如其软件制造构建机器)中实 例化可信任字典。然后,应用设计者将此可信任字典与所述应用一起部署。 所述应用只有当其在可信任环境中运行时才能成功地从所述可信任字典提 取制造机密。
例如,DVD音频播放器应用可以在工厂被加载有具有一组DVD音频 设备密钥的可信任字典。能够使用这些密钥成功地播放DVD音频的DVD 播放器应用知道其正在可信任环境中运行。黑客可以尝试假装具有可信任 字典的"特洛伊木马"环境。但是,从此类"可信任字典"获得的任何设 备密钥都无法解密DVD音频。因此,如果所述应用在此虚假环境中运行, 不存在对内容保护方案的暴露。应用设计者知道如果应用处于受到危害的 环境中时,应用无法执行非法操作。
作为另 一个实例,数字权利管理应用与服务器一起使用公钥协议来接 收授权的内容。公钥协议是公知的,并且该协议本身并非机密。所述机密 是在该协议中与公钥对应的私钥。只要私钥保持隐藏,所述协议就可以被 置于公开的源代码中。如果客户机的私钥在部署客户机应用之前^L^文入可 信任字典,则所述密钥只能在可信任环境中使用。如果客户机应用和服务 器能够成功地协商公钥协议,则它们可以确信所ii^户机应用正在可信任 环境中运行。所述服务器可以安全地将授权的内容作为协议的一部分来传 送。在另一个实例中,应用设计者编写提供用于音频音乐的音频水印的程 序。此音频水印是指示各种音频播放器以特定方式执行的特殊复制控制信 号。所迷音频播放器如指示的那样响应所述音频水印以进行版权保护,防 止所述音频音乐的未授权4吏用。所述音频播放器用来检测和响应音频水印 中的指令的编程代码需要防止黑客。本系统可以加密此编程代码并提供此 编程代码可以在其中运行的安全和可信任的环境。
选择加密他们的某些或所有类文件的应用设计者具有用于验证所述应 用是否在可信任环境中运行的其他方法。这些类文件无法成功地被加载,
除非它们在可信任Java虛拟机中运行。在此情况下,如果所述应用没有加 载到可信任Java虚拟机环境中,则所述应用无法运行。
本系统可以例如被用来确保记录诸如银行大厅连同时间和日期之类的 场景的安全照相机的完整性。银行和安全公司依赖于画面上的时间和日期 的完整性。本系统可以被用来提供用于安全照相机的可信任环境,其中外 人4艮难更改时间和日期。
因此,定义了一种用于能够支持防篡改应用软件同时保持"开放源代 码"的概念的安全或可信任Java虚拟机的模型、计算机程序产品和关联方 法。


现在将仅通过实例的方式参考附图来描述本发明的实施例,这些附图

图1是其中可以使用本发明的可信任Java虚拟机环境的示例性运行环 境的示意图2是图1的可信任Java虛拟机环境的高级体系结构的方块图3是示出了创建在图1和2的可信任Java虚拟机环境中使用的应用
的方法的过程流程图4包括图4A和4B并代表示出了在图1和2的可信任Java虚拟机
环境中运行示例性应用的方法的过程流程图。
具体实施例方式
图1描绘了其中可以使用根据本发明的用于可信任Java虚拟机的系统 和关联方法的示例性总体环境。可信任Java虚拟机10包括软件编程代码 或通常嵌入或安装在服务器15上的计算机程序产品。可替代地,可信任 Java虚拟机10可以被保存在诸如软盘、CD、硬盘驱动器之类的合适的存 储介质上。
虽然根据Java编程语言描述了可信任Java虛拟机10 ,但是本系统可 以使用任何适合类型的虛拟机或"实际"虚拟机来实现。使用Java编程语 言来描述可信任Java虚拟机10只是示例性的,并且并非将本发明的应用 限于其他的虚拟机。
用户(如远程因特网用户)由各种计算机(如计算机20、 25、 30)来 表示,并且可以通过网络35访问服务器15。计算机20、 25、 30中的每一 个计算机都包括允许所述用户安全地连接服务器15的软件。服务器15通 过诸如电话、电缆或卫星链路之类的通信链路40与网络35相连。
计算机20、 25、 30分别通过通信链路45、 50、 55与网络35相连。虽 然根据网络35描述了可信任Java虚拟机lO,但是计算机20、 25、 30也 可以本地而不是远程地访问可信任Java虚拟机lO。计算机20、 25、 30可 以通过使用应用来手动或自动地访问可信任Java虚拟机10。
图2示* 了可信任Java虚拟机10的高级层次结构。可信任Java虚拟 机或TJYM 10通常包括可信任Java虚拟机205、 Java基类210和Java 应用215。
可信任Java虚拟机205包括通常以计算机语言(如C )编写的例程, 该例程被编译成用于所述可信任Java虚拟机在其上运行的计算机的机器 指令。虽然根据c编程语言描述了可信任Java虚拟机205,但是本发明可 以使用任何类型的编程语言来实现。使用C编程语言来描述可信4壬Java 虚拟机205只是示例性的,并且并非将可信任Java虚拟机205的应用限于 其他编程语言。在标准的Java实现中,C代码实现需要与操作系统连接的字节代码解 释器220和"固有"方法225。 C代码在不同的平台上可能不同。在此实 例中,由可信任Java虛拟机205来实现所述C代码。
以Java语言来编写Java基类210并实现以下基本的Java对象字符 串、对象、1/0等。它们已由Java编译器编译成字节代码。某些Java基 类可能具有已经以"固有"代码(即,以它们在其上执行的处理器的固有 指令集)实现的方法。
Java应用215在Java基类210以上运行。Java应用215包括一个或 多个可信任捆绑包l, 230至可信任捆绑包N, 235,它们总称为可信任捆 绑包240。此外,应用215包括其他无需被信任的Java代码,例如主应用 245或初始小程序(applet init) 250。 Java应用215可选地包括一个或多 个可信任字典,例如可信任字典l, 255至可信任字典N, 260,它们被总 称为可信任字典265。
Java应用215可以包括多个可信任捆绑包240和可信任字典265。多 个可信任捆绑包240能够彼此通信。可信任捆绑包240可以分别在可信任 字典265中维护机密或共享可信任字典265中的机密。
不同的软件公司可能生产不同的Java应用215,266,这些应用通过它 们各自的可信任字典265,267通信并传递机密。例如,软件公司生产用于 将数字水印插入音频CD的Java应用215。所述数字水印软件包括可信任 捆绑包240。 CD播放器包括调用水印可信任捆绑包240来检测水印信号的 Java应用266中的软件。可信任字典265,267提供了安全路径以便所述数 字水印软件与CD播放器软件通信,安全地验证了它们是可靠版本而不是 被破解版本的软件。
某些模块在图2中被示为包封在"完整性包封"内。完整性包封提供 了验证这些模块未被修改的机制。可信任Java虚拟机205由完整性包封 270保护。Java基类210由完整性包封275保护。可信任捆绑包1,230由 完整性包封280保护。可信任捆绑包N,235由完整性包封285保护。
完整性包封270、 275、 280、 285包括检查数字签名。此外,完整性包封270、 275、 280、 285包括诸如数字印章之类的其他技术。有关数字印章 技术的更多详细信息,可以参考例如专利No. 5,978,482和6,038,316。数字 印章类似于数字签名,但在检查软件模块的完整性方面具有一定的优势。 此外,完整性包封270、 275、 280、 285包括基于硬件的完整性检查,如那 些在可信任计算平台联盟(TCPA)和Palladium芯片中找到的完整性检 查。
如图2所示,可信任Java虛拟机205的固有方法225中的机密方法 2卯可以被加密。此外,可信任字典265也可以被加密。另外,如可信任 捆绑包1,230中的类295所示出的,可信任捆绑包240中的某些或全部类 可以被加密。在最小程度上,机密方法290、可信任字典265和类295都 被加密同时被例如存储在存储器中、盘上或外部存储器中。
加密可以一直持续,甚至是在机密方法290、可信任字典265和类295 都已被加载到计算机存储器中之后。在此情况下,用于机密方法290、可 信任字典265和类295的代码可以在执行之前立即"动态地(on the fly)" 被解密。;f几密方法290、可信任字典265和类295可以在执行完成后被逻 辑地加密。
可信任Java虚拟机10使用公知的或可用的软件防篡改技术。有关密 码的详细信息,可以参考例如2000年7月3日申请的美国专利申请 No.09/609,809 (代理人案号ARC2000-0063,其在此引入作为参考)。在 一个实施例中,使用诸如数据加密标准(DES)或高级加密标准(AES) 之类的标准密码来加密可信任字典265。
如通常用在软件防篡改技术中的那样,用来加密机密方法2卯的密钥 可以是高度扰乱的全局机密。公知的或可用的广播加密技术可以被用来管 理用于加密类295的密钥。有关广播加密技术的详细信息,可以参考例如 美国专利No.6,118,813和美国专利申请No.2002/01147卯6Al。可信任Java 虚拟机10可以使用任何合适的广播加密方案来加密类295。
为了使用广播加密,可信任Java虚拟机205的设计者将媒体密钥块及 其关联的媒体密钥传送^争个应用设计者以便加密Java类(例如类295)。应用it计者使用利用媒体密钥的工具来加密指定的类295。此工具将媒体 密钥块添加到Java档案文件。
一组设备密钥292被建立在可信任Java虚拟机205中。可信任Java 虚拟机205的每个版本都具有一组不同的设备密钥。为了解密给定的加密 的类295,可信任Java虚拟机205使用其设备密钥来处理所述Java档案 文件中的媒体密钥块并提取所述媒体密钥。
如果黑客破坏了特定的可信任Java虚拟机205并且其设备密钥集也被 泄漏,则可以部署具有一组新的设备密钥的新的可信任Java虚拟机205。 这组新的设备密钥可以处理所有现有应用中的所有媒体密钥块。
此外,可以将排除了受到损害的设备密钥的新的媒体密钥块给予应用 设计者,同时允许未受损害的密钥执行其功能。应用^:计者可以在其方使, 时将他的应用更新到所述新的媒体密钥块。媒体密钥块的更新不必与新的 可信任Java虛拟机205的部署严格地同步。
可信任Java虚拟机205在其上运行的平台可以包括诸如例如TCPA 芯片或Palladium芯片之类的安全芯片。如果这样的话,这些芯片可以被 用来存储所述设备密钥。
在一个实施例中,可信任字典265包括标准Java基类字典的子类。任 何允许存储和检索数据值的合适的类都可以被用作可信任字典265。可信 任字典265的方法(例如,"获得"或"放入")被实现为可信任Java 虚拟机205中的固有方法225。
如果可信任字典265不允许复制,则其被定义为"本地化的"。如果 Java应用215指定可信任字典265是本地化的,则Java应用215无法读 取在另 一计算机系统上的可信任字典265。
包括"密钥数据库,,和密钥计算中的间接级别的公知的或可用的逻辑 技术可以被用来创建可信任字典265。有关可信任字典265的基本逻辑的 详细信息,可以参考例如2001年1月5日申请的美国专利申请 No.09〃54,396 (代理人案号AM9-99-0145,其在此引入作为参考)。
Java字典通常具有"密钥"和"值"。但是,为了避免将字典密钥与加密密钥相混淆,对于前者的概念,将使用术语"关键字"而不是"密钥"。 因此,与关键字关联地存储所述字典值,并且以后通过使用关键字来检索
所述字典值。在可信任字典265中,使用称为数据库主密钥的机密密钥来 加密所述关键字和值。所述数据库主密钥是以下类型的值的机密函数的结 果通用值、平台特定的值以及读-写值。平台特定的值可以例如是用户计 算机上的硬盘的序列号。
写区域中的值。出于完整性的目的,所述读/写值不能轻易地被最终用户保 存和恢复。在具有TCPA或Palladium芯片的平台中,平台值和读/写能力 被建立在芯片中。
作为一个实例,"密钥数据库,,可以用于可信任字典265。如果所述 密钥数据库从一台PC移至另一台PC,则程序将不再计算用于所述数据库 的正确主密钥并且所述数据库是无用的。所述密钥数据库可以包括计数器。 用户可以尝试保存和恢复密钥数据库以重置计数器。所述读/写值在保存和 恢复之间改变,改变了所述主密钥。因此,所述密钥数据库和可信^壬字典 265不再有用。Java应用215现在知道所述用户尝试绕过使用规则并可以 正确地《故出响应。
某些Java应用215无需平台绑定或保存/恢复保护。使平台绑定或保 存/恢复保护成为字典的配置参数以及根据需要忽略将平台特定的值或读/ 写值包括在机密主密钥函数中相对容易。
可信任字典265包括创建可信任字典265时提供的公钥的列表。这些 公钥限制了可信任字典265对可信任捆绑包240的访问,所述可信^f壬捆绑 包240的Java档案文件由与所述公钥之一关联的私钥来签署。
在一个实施例中,可信任字典265实现在访问可信任字典265之前代 表可信任捆绑包240检查^/H^的列表。另一个实施例利用内置的"才几密函 数"主密钥机制,将所述公钥用作输入到所述机密函数的通用值之一。然 后,所述捆绑包可以如所允许的那样成功解密可信任字典265。
如果多于一个公钥被与可信任字典265关联,则间接级别可以被添加到密钥计算。各个主密钥中的每个主密钥(对于每个公钥, 一个主密钥)
都加密共用的中间密钥。所述中间密钥加密可信任字典265中的值。
此外,所述中间密钥的不同加密版4^皮存储在可信任字典265中。当 可信任捆绑包240试图访问可信任字典265时,可信任Java虚拟机205 计算主密钥并解密所述中间密钥的这些加密版本中的每个版本。如果所述 捆绑包被允许访问此可信任字典265,则这些解密中的一个解密是真的中 间密钥。此真的中间密钥允许访问。
可信任字典中的关键字的值几乎可以是任何Java对象。在Java语言 中,例如,多数Java对象可以使用writeObject()方法被变成字节序列。此 类对象被称为"可串行化的"。该字节序列可以被看作字典关键字或值。 因此,任何可串行化的Java对象都可以被安全地存储在可信任字典265 中。
在一个实施例中,可信任捆绑包240是开放服务网关组织(OSGi)的 捆绑包类的子类。任何能够限制对应用的多数公用方法的访问的概念都可 以是可信任捆绑包240。
Java的一个功能被用来对捆绑包之外的任何人"隐藏"整个类(不只 是其私有方法)。例如,两个类(如类x和类y)由不同的类加载器(类 加栽器a和类加载器B)来加栽。类的名称和实际的类加载器两者对于将 类标识到Java虚拟机来说都很重要。
除非类加载器a和类加载器B采取特殊的措施来相互通信,否则即使 具有相同名称的类也被复制并由每个类加载器单独引入。因此,具有相同 名称的两个同样的类被可信任Java虚拟机205看作不同的类。例如,如果 类x生成窗口小部件对象并将其传递给类y的方法,则由于类x生成了 a 窗口小部件而类y期望B窗口小部件,将出现ClassCastException错误, 尽管实现窗口小部件的类文件是相同的。
在一个实施例中,此隐藏整个类的Java功能在OSGi捆绑包概念中被 实现。每个捆绑包都是由单独的类加栽器慎重地加载的单独的Java档案文 件。此类加栽器与系统中的其他类加载器通信以获得Java基类210并导出软件包(类的组),该软件包被专门设计为"导出"Java档案文件的清单 中的软件包。只有导出的类才能成功地被其他捆绑包或所述捆绑包之外的 代码所引用。
为了使OSGi捆绑包成为可信任捆绑包240,可信任Java虚拟机10 要求OSGi捆绑包的Java档案清单被签署。因此,只有由原始签署者指定 的软件包才可以被导出。
在一个实施例中,可信任Java虛拟机10使getClassLoader()成为私有 方法;这防止了黑客利用getClassLoader()来绕过应用设计者保护例如媒体 的专有权利的目的。由于OSGi捆绑包的以下特征,使方法getClassLoader() 是私有的。任何Java对象的类都可以通过在该对象上使用"getClass()" 方法来获得。结果是具有称为getClassLoader()的公共方法的类对象。 GetClassLoader()返回加载所述类的类加载器的ClassLoader对象。根据所 述ClassLoader对象,方法loadClass()可以被用来查找由所述类加栽器加 栽的任何其他类的类对象。才艮据所述类对象,可以实例化该类的新的对象。 这挫败了只允许在可信任捆绑包240之外实例化导出的类的企图。
在另 一个实施例中,"getClassLoader()"的行为被修改以便其可以识 别可信任捆绑包240。因此,getClassLoader()只向在同一可信任捆绑包240 内的方法返回有用的类加载器。另一个实施例利用Java安全管理器来限制 执行"getClassLoader()"的对象。另一个实施例修改捆绑包类加载器以便 其仅在可信任捆绑包240的外部调用时才显露导出的类。
由于Java基类210对所有可信任捆绑包240都是共用的,所以Java 基类210被封装在完整性包封中。否则,理论上可以使特洛伊木马伪装成 Java基类210。例如,如果可信任捆绑包240要将密钥转换为字符串,则 伪造的字符串类可以将结果写到硬盘上。虽然此攻击有些牵强,但是通过 检查Java基类210来消除此攻击是很简单的。
可信任Java虛拟机10利用"安全验证通道"。术语"安全發江通道" 是防篡改软件中的标准术语。它指在不允许中间人取走被传递的数据的情 况下需要相互通信的两个独立软件才莫块之间的连接。通过使可信任捆绑包240共享可信任字典265,可以方^更地在可信任 Java虛拟机10中建立所述安全验证通道。换言之,调用方可信任捆绑包 240调用被调用方可信任捆绑包240中的导出的类,传递使用来自调用方 和被调用方的可信任捆绑包240两者的公用密钥来实例化的可信^r字典 265。通过预先安排,用作到被调用方可信任捆绑包240的参数的特定命名 值被存储在可信任字典265中。同样,被调用方可信任捆绑包240通过将 值以预先安排的名称存储在可信任字典265中来返回所述值。可信l壬Java 虚拟机10以这种方式返回诸如密钥之类的机密值以防止被中间人程序观 察到或修改。
此安全验证通道方法并未向可信任捆绑包240证明它们正运行在可信 任环境中。因此,可信任捆绑包240在信任此机制之前利用上述方法来验 证它们处于可信任环境中。此外,没有实例化可信任字典265的一方mi 其公钥是所期望的。在一个实施例中,可信任字典265的类实现 getPublicKeys()方法来验证公钥。可信任Java虚拟机10可以使用多种方 法中的任意方法来验汪所述公钥。
在一个实施例中,可信任Java虛拟机环境在不影响Java应用215的 情况下使用诸如例如TCPA和Palladium芯片之类的安全芯片。可信任 Java虚拟机205通常作为开始于基本输入/输出系统(BIOS )加载器的信 任链的一部分被加载。如果信任链丢失,则可信任Java虚拟机205不再相 信操作系统是安全的。
但是,这是软件防篡改的正常状态并且存在公知的技术进行补偿。例 如,操作系统的关键部分可以具有软件完整性包封。可替代地,可以部署 与那些用在病毒检测中的技术类似的技术来检测用户已安装在其操作系统 内核中的欺骗程序。
在操作系统不可信的情况下,可信任Java虚拟机205使用标准的软件 防篡改技术来检测操作系统中的欺骗程序。可信任Java虚拟机205使用安 全芯片来存^i殳备密钥和用于计算可信任字典265的值。
在正常操作中,安全芯片中的值由Java应用215的校验和来保护。但是,这些校验和并非机密,它们由信任链中的紧邻下层来执行。 一旦信任
链被破坏,这些值就用作密钥;所述密钥不再需要是检验和。在一个实施 例中,解锁可信任Java虛拟机205的存储值的值是完整性计算(例如,数 字印章计算)的结果。
图3的过程流程图示出了用于创建使用可信任Java虛拟机10的可信 任Java应用215的方法300。在步骤305,应用设计者确定Java应用215 的哪些方面需要保护。Java应用215可以包括机密代码、机密数据或两者 的组合。例如,DVD视频内容保护方案(CSS)具有机密密钥。CSS还需 要许可证来保护加密算法。另一方面,DVD音频保护方案(CPPM)只包 括机密密钥;所述算法被公开地描述。
如果Java应用215包括机密数据,则Java应用215被设计为将所述 机密数据放置在Java字典中。所述Java字典在部署Java应用215时被实 例化为可信任字典265。
在步骤310设计Java应用215的捆绑包。在一个实施例中,这些捆绑 包被设计为公开服务网关组织捆绑包。应用设计者签署对应于所述捆绑包 的Java档案文件;这确保了所述捆绑包^L看作可信任捆绑包240。所述应 用设计者在实例化可信任字典265时提供了公钥列表。只有由关联的私钥 签署的捆绑包才被允许访问可信任字典265。
在步骤305,所述应用设计者可以确定Java应用215不包括机密。例 如,MPEG呈现程序无需机密信息来执行其功能。例如,所述应用i殳计者 可以创建被其他内容保护方案作为子例程的应用。在此情况下,所述内容 保护方案相信所述子例程只是呈现数据并且没有将数据保存在文件中。在 此情况下,所述应用设计者遵循可选步骤315,"使用其他捆绑包i殳计接 cr,,。
在步骤315,可以被从任何应用或服务(可信任的或不可信任的)调 用的公用接口可以作为具有任何适当接口的正常OSGi服务而可用。如果 所述月艮务需要具有可信任捆绑包240的接口 ,则到可信任捆绑包240的接 口需要可信任字典265。例如,到可信任捆绑包240的接口可以位于调用方和"被调用方"之 间。如果所述服务是具有可信任捆绑包240的接口中的调用方,则所述服 务使用可信任字典265。如果所述服务不是调用方,则应用设计者实例化 具有所述服务的公钥和所述被调用方的7>钥的可信任字典265。这些公钥 被保存在私有可信任字典265中以确保防墓改。
如果所述服务是被调用方,则调用方已实例化了可信任字典265。当 可信任字典265被传递给所述服务时,所述服务验证可信任字典265是否 是使用预期的公钥建立的。没有机密并且为任何调用方执行其功能的呈现 应用无需可信任字典265的确认。
机密参数和返回值通过可信任字典265被传递以防止中间人攻击。可 信任字典265可以包括任何可串行化的Java对象。"init"方法可以通过 可信任字典265将对象返回到服务调用方。正常参数和返回值然后可以被 与该初始对象中的方法一起4吏用。此初始对象可以是导出类的一个实例。 如果应用设计者正在使用此优化,则导出软件包中可以只有接口和抽象类。
在步骤320,应用设计者可选地建立可信任字典工具。应用设计者将 应用所使用的任何机密数据提供到已知的可信任环境(如在其中创建Java 应用215的环境)中的可信任字典265中。
允许最终用户在安装期间在用户的机器上实例化可信任字典265并不 能保证所需的可信任环境。所述应用设计者建立工具来实例化可信任字典 265、向该工具提供必需的机密,以及使用标准的ObjectOutputStream方 法将该工具串行化成文件。
例如,被串行化的可信任字典265可以作为Java应用215的Java档 案文件的一部分来部署。串行化的可信任字典265仅可由可信任Java虛拟 机205来读或写。
应用设计者在步骤325可选地设计用于Java应用215的注册过程。如 果Java应用215的给定实例要保持绑定到单个平台,则调用捆绑包启动器 类的start()方法将读取私有可信任字典265、在私有可信任字典265上执 行setLocal(),以及将所述私有可信任字典265写回到文件系统中。为了更多的保护,应用设计者可以将步骤325与到外部注册服务的连 接相合并。与所述应用一起部署的私有可信任字典265可以具有用于初始 连接的ID和机密。在可信任字典265已被本地化之后,后续机密可以作 为注册的一部分被传送。
所述应用设计者在步骤330可选地设计安全计数。Java应用215可以 在操作期间需要安全计数。当在硬盘上保存和恢复文件时无法轻易,皮用户 重置的安全计数3皮存储在可信任字典265中。捆绑包启动器类的start()方 法的调用将读取私有可信任字典265并在该私有可信任字典265上执行 preventNorma限estore()。 然后,所述捆绑包启动器类4吏用 ObjectOutputStream的writeObject()方法将所述私有可信任字典265写回 文件系统中。可信任字典265现在处于不可逆的状态,意味着最终用户无 法通过简单地使用旧版本替换其文件来轻易地将其更改为先前状态。
每次在可信任字典265中递增安全计数时,所述安全计数被写回文件 系统中。然后,Java应用215在可信任字典265上执行commit(),防止由 于不合适的系统崩溃而导致无意中破坏可信任字典265。没有commit(), 用户可以将可信任字典265恢复回先前的commit()点。在任何字典上的任 何提交(commit)都将提交所有字典。因此,可以使用单个调用来提交所 有字典,同时按顺序更新多个字典。但是,可信任Java虛拟机205能够恢 复可信任字典265,即使它已被标记为不可逆。
所述应用设计者在步骤335调试Java应用215。可信任字典265的调 试版本可以在任何Java虚拟机上运行。根据系统属性 trustedDictionary.keyVerify是"真"还是"假,,,所述调试类可以或可以 不实施适当的已签署的Java档案文件。可信任字典265的调试版本实施可 信任字典265的"可串行化"行为即,可信任字典265中的所有对象都 可串行化并且"get"方法返回原始对象的副本而不是原始对象本身。
可信任字典265的调试版本在可信任Java虚拟机205中不可读。可信 任Java虚拟机205不支持任何种类的调试。
所述应用设计者在步骤340完成Java应用215的建立过程。可选地,如果该设计者加密一个或多个类,则可以获得媒体密钥块。此媒体密钥块
专用于所述Java档案文件的7>钥。
Java档案签署器(jarsigner)被用来签署Java档案文件。在Java档 案文件被签署之后,不会再向所述Java档案文件添加类。但是,数据或其 他资源可以在Java档案文件被签署之后被添加到所述Java档案文件。可 信任字典265是自验证的;因此,通常不需要在Java档案文件中签署可信 任字典265。
图4 (图4A、 4B)的过程流程图的方法400示出了可信任Java虚拟 机10中的DVD播放器应用与DVD盘之间的交互。用户具有DVD驱动器 并希望使用开放源代码DVD播放器软件来操作DVD驱动器。DVD驱动 器是操作DVD盘的机械装置。所述用户在步骤405下载可信任Java虚拟 机205并将其安装在他的DVD设备上。所述DVD设备包括DVD驱动器 和充分的计算能力以操作所述可信任Java虚拟机205和所述DVD驱动器。
在步骤410,用户下载并安装DVD播放器软件。所述DVD播放器软 件包括一个或多个可信任捆绑包240中的开放源代码和一个或多个可信任 字典265中的机密(如密钥)和ID。可信任Java虛拟机205检查所述DVD 播放器软件的可信任捆绑包240的数字签名以确保可信任捆绑包240自其 被创建以来尚未被修改(步骤415)。如果所述数字签名不是完好的(决 策步骤420),则可信任Java虚拟机205在步骤425不允许对可信任字典 265的访问。
所述DVD播放器软件在步骤430访问DVD驱动器中的DVD盘。所 述DVD盘要求特定的设备密钥来授权盘播放;这些密钥被存储在可信任 字典265中。对可信任字典265的访问需要由正确密钥所签署的完好签名。 可信任Java虚拟机205在步骤435验证所述DVD播放器软件具有适当的 密钥来访问可信任字典265。如果所述DVD播放器软件没有用于访问的适 当密钥(决策步骤440),则可信任Java虚拟机205不允许对可信一f壬字典 265的访问(步骤425)。
如果所述DVD播放器在决策步骤440具有用于访问的适当密钥,则所述DVD播放器软件被验证为完好无损并且真实。所述DVD播放器软件 现在可以访问可信任字典265。可信任Java虚拟机205在步骤445解密可 信任字典265。所述DVD播放器软件在步骤450从可信任字典265获得一 个或多个密钥(例如,设备密钥)并根据需要在步骤455将密钥提供给所 述DVD驱动器。然后,所述DVD驱动器在步骤460播放所述DVD盘。 所述DVD播放器软件、DVD盘和DVD设备可以都由不同的生产商来制 造。但是,它们都协同工作以确保可信任Java虚拟机lO中的内容保护。
在以未授权的方式4吏用Java应用215的尝试中,Java应用215可以 被加栽到没有提供可信任环境的常规Java虚拟机中。在正常操作中,Java 应用215尝试访问可信任字典265,请求用于执行诸如播放DVD盘之类的 任务的密钥。但是,所述常规的Java虛拟机无法解密可信任字典265。因 此,Java应用215无法获得继续操作所需的密钥。尽管Java应用215是 在常规Java虚拟机中运行的开放源代码软件,但是没有被Java应用215 的设计者所允许的操作或信息在没有正确密钥的情况下无法出现。
应当理解,已经描述的本发明的特定实施例只是本发明的原理的特定 应用的示例。在不偏离本发明的范围的情况下,可以对防墓改可信l壬Java 虚拟机和在此描述的使用该防篡改可信任Java虚拟机的方法做出大量修 改。
权利要求
1.一种用于在可信任环境中运行防篡改应用的方法,所述方法包括定义包含用于保护数据的可信任字典的可信任虚拟机环境;验证所述应用的完整性;其中,如果所述应用被篡改,则所述可信任虚拟机环境阻止所述应用访问所述可信任字典中的机密,从而禁用所述应用的正常操作。
2.根据权利要求l的方法,其中如果所述应用的完整性被确认,则所 述可信任虚拟机环境允许所述应用访问所述可信任字典中的所述机密,从 而启用所述应用的正常操作。
3. 根据权利要求2的方法,其中定义所述可信任虚拟机环境包括定义 用于保护所述应用的编程代码的可信任捆绑包。
4. 根据权利要求3的方法,其中保护所述编程代码包括加密所述编程 代码。
5. 根据权利要求4的方法,其中所述可信任虚拟机环境使用来自与所 述应用关联的媒体密钥块的解密密钥来解密所述加密的编程代码。
6. 根据权利要求l的方法,其中定义所述可信任虚拟机环境包括使用 安全芯片。
7. 根据权利要求3的方法,其中定义所述可信任捆绑包包括限制对所 述可信4壬捆绑包的指令代码的访问。
8. 根据权利要求1的方法,还包括加密所述可信任字典。
9. 根据权利要求l的方法,其中定义所述可信任虛拟机环境包括定义 至少两个可信任捆绑包;并且其中所述可信任字典在所述至少两个可信任 捆绑包中的至少某些捆绑包之间净皮共享以维持所述至少两个可信任捆绑包 之间的通信完整性。
10. 根据权利要求1的方法,其中所述应用包括播放防复制媒体的播 放器。
11. 根据权利要求10的方法,其中所述可信任字典包含一个或多个 解密密钥以解密所述防复制媒体。
12. —种用于在可信任虚拟机环境中生成防墓改应用的方法,所述方 法包括判定所述应用的任何方面是否需要防篡改;如果所述应用的任何 方面需要防篡改,则定义一个或多个可信任捆绑包以限制对一组预定应用 功能的访问;在非可信虚拟机环境中运行所述一个或多个可信任捆绑包以 调试所述应用;以及将所述应用部署在所述可信任虛拟机环境中。
13. 根据权利要求12的方法,其中所述应用的所述方面包括以下各 项中的任意一个或多个所述应用的完整性、所述应用的机密密钥、;K密 数据以及机密代码。
14. 根据权利要求12的方法,其中判定所述应用的任何方面是否需 要防篡改包括判定所述应用是否需要访问在可信任虚拟机环境中运行的另 一个应用内的可信任捆绑包。
15. 根据权利要求14的方法,还包括定义将在来自所述应用和另一个 应用的所述可信任捆绑包之间净皮共享的可信任字典。
16. 根据权利要求13的方法,其中如果所述方面是机密密钥或机密数 据中的任何一个,则建立工具以生成至少一个具有所述机密密钥或所述机 密数据的可信任字典。
17. 根据权利要求12的方法,其中所述应用的所述方面包括阻止所述 应用被复制。
18. 根据权利要求17的方法,还包括设计注册过程以判定所述应用是 否已被复制。
19. 根据权利要求12的方法,其中所述应用的所述方面包括阻止用户 重置所述应用的活动的计数。
20. 根据权利要求19的方法,还包括设计可信任字典以包含所述活动 计数。
21. —种具有指令代码的计算^IM呈序产品,当所述指令代码被执行时, 所述指令代码用于执行以上任一权利要求的方法步骤。
全文摘要
一种可信任Java虚拟机,所述可信任Java虚拟机提供了一种用于支持防篡改应用、确保应用及其机密(例如密钥)的完整性的方法。所述可信任Java虚拟机验证所述Java应用的完整性,阻止调试所述Java应用并使得所述Java应用能够安全地存储并检索机密。可信任Java虚拟机环境包括可信任字典、可信任捆绑包、用于加密和解密字节代码的可选加密方法以及下层可信任Java虚拟机。加密的可信任字典保护数据而所述可信任捆绑包保护编程代码,允许应用存储机密数据和安全计数器。应用设计者可以将可信任捆绑包访问只限于那些所述应用设计者显式导出的接口。开放源代码可以可选地被加密。所述应用的所述开放源代码的编程代码所需的机密在可信任字典中被加密。
文档编号G06F21/00GK101305333SQ200480034386
公开日2008年11月12日 申请日期2004年11月9日 优先权日2003年11月26日
发明者D·小利克, J·罗茨皮奇, S·宁, W·普罗夫, 金红霞 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1