可移动介质上的软件安装转让专利

申请号 : CN200580013720.0

文献号 : CN1950798B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 科琳娜·迪夫-勒克吕

申请人 : 西姆毕恩软件有限公司

摘要 :

本发明涉及一种操作计算装置的方法,包括以下步骤:使用以预先安装方式提供在可移动介质上的包括元数据和数据文件的软件包,所述元数据包括用于安装的软件包中的每个数据文件的各自散列,并且所述元数据具有由数字签名保护的完整性;使用所述元数据来确定所述以预先安装方式提供的所述软件包的数据文件的真实性和完整性;以及,仅当所述数据文件的真实性和完整性得到所述元数据的验证时,允许所述计算装置运行以预先安装方式提供在所述可移动介质上的数据文件。还涉及一种计算装置,配置成根据上述方法运行。

权利要求 :

1.一种操作计算装置的方法,包括以下步骤:使用以预先安装方式提供在可移动介质上的包括元数据和数据文件的软件包,所述元数据包括用于安装的所述软件包中的每个数据文件的各自散列,并且所述元数据具有由数字签名保护的完整性;使用所述元数据来确定所述以预先安装方式提供的所述软件包的数据文件的真实性和完整性;以及,仅当所述数据文件的真实性和完整性得到所述元数据的验证时,允许所述计算装置运行以预先安装方式提供在所述可移动介质上的数据文件。

2.根据权利要求1所述的方法,其中,当允许运行所述数据文件时,在数据文件的安装期间对所述元数据的数字签名以及所述数据文件的散列再次进行验证,并且/或者在数据文件安装到装置上之后对所述元数据的数字签名以及所述数据文件的散列重新进行验证。

3.根据权利要求1或2所述的方法,其中,所述元数据还包括程序依存关系、软件模块和硬件版本支持、文件位置、设计者信息或卖方信息的信息,其中,当决定是否安装所述软件包时,除了验证所述文件的真实性和完整性以外,至少使用该信息的一部分。

4.根据权利要求1所述的方法,其中,所述软件包包括用于保持所述元数据的控制器部分以及用于保持所述数据文件的数据部分,所述控制器部分中的每个字段具有特定的长度从而使得当所述控制器部分被读取以验证所述数据文件的真实性和完整性时,类型未知的字段可以被跳过。

5.根据权利要求4所述的方法,其中,所述元数据包括一种文件格式,所述文件格式没有需要改变的偏移量,从而有利于将新签名和证书链包括到所述元数据的末端。

6.根据权利要求4或5所述的方法,其中,所述元数据包括用于安装的软件包中的每个数据文件的各自散列。

7.根据权利要求1或2所述的方法,其中,将所述计算装置选取成包括移动电话或PDA。

8.根据权利要求1或2所述的方法,其中,将所述可移动介质选取成包括紧凑式闪存卡或多媒体卡或记忆棒或任何其他类型可写且可移动介质。

9.一种计算装置,其包括以下装置:

第一装置,所述第一装置使用以预先安装方式提供在可移动介质上的包括元数据和数据文件的软件包,所述元数据包括用于安装的所述软件包中的每个数据文件的各自散列,并且所述元数据具有由数字签名保护的完整性;

第二装置,所述第二装置使用所述元数据来确定所述以预先安装方式提供的所述软件包的数据文件的真实性和完整性;以及第三装置,仅当所述数据文件的真实性和完整性得到所述元数据的验证时,所述第三装置允许所述计算装置运行以预先安装方式提供在所述可移动介质上的数据文件。

说明书 :

本发明涉及安装软件的方法,尤其涉及在可移动介质上安装软件的方法。

在本发明的上下文中,术语计算装置应该解释为覆盖任何形式的电气装置,并且包括任一形式因子(form factor)的数据记录装置(例如,数字照相机和电影摄影机)、任一类型或形式的计算机(包括手持计算机和个人计算机)、以及任一形式因子的通信装置(包括移动电话、智能电话、以及将通信、图像记录和/或重放、以及计算功能结合在单个装置中的发报机、以及其他形式的无线和有线信息装置)。

在计算装置操作系统中,通过特定的安装包来处理软件安装已经成为一般惯例。最初,这些包是使用了诸如.zip或.tar的标准存档压缩格式的简单的文件存档,但是随着时间的推移,这些包变得非常复杂。现在这些包提供的优势在于:

●安装时压缩文件的透明解压缩

●确保文件安装在计算装置中正确的位置中

●检查包括软件版本和模块依存关系的系统需求

●鉴别和验证软件的完整性以及软件制造商的身份

通常使用的用于安装软件包的系统的实例包括:

●对于微软所有的操作系统Windows,连同诸如Wise(http://www.wise.com)和InstallShield(http://www.installshield.com)的第三方解决方案,虽然该后面的包现在是多平台的。

●各种Linux发行版使用诸如最初来自Red Hat的.rpm(http://www.rpm.org)包系统以及由Debian开发的dkpg和.deb系统(http://www.debian.org/doc/debian-policy/ch-binary.html)。

●由Symbian软件有限公司开发的Symbian OS操作系统.sis文件(http://www.symbian.com/developer/techlib/v70docs/SDL_v7.0/doc_source/ToolsAndUtilities/Installing-ref/MakesisToolReference.guide.html)

●Java系统使用.jar Java存档文件

(http://java.sun.com/docs/books/tutorial/post1.0/whatsnew/jar.html),而J2ME midlet附加使用.jad java应用程序描述文件(http://java.sun.com/j2me/docs/wtk2.1/user_html/deploy-midlets.html#wp20998)。

所有上述的安装包允许包含将要被安装的文件以及涉及其大小、目标位置、版本、依存关系、认证和鉴别中的任何一个或全部的基本元数据。

上述的包将软件传送机制和软件安装机制与软件鉴别机制集成在一起。虽然这很大程度上是历史的原因,因为包系统开始作为传送机制,该传送机制随后被集成更多功能(首先安装然后鉴别),在计算资源丰富的情况下,结合功能的这三个领域不存在真正的问题。其最典型的实例是在CD ROM上为桌面型个人计算机提供软件包,其中,持久的内部存储器存储(例如,在硬盘上)的数量通常不是问题,主电源实际上是用不完的,并且CD本身的成本是可以忽略的。

然而,某些种类的计算装置是受到资源限制的,并且通常在更大压力且注重节省成本的资源环境下操作。这类装置包括使用蜂窝无线技术的个人数字助理(PDA)和移动电话。这些移动计算装置具有更有限的CPU带宽,通常在电池电源而不是在主电源上运行,并且与PC装置相比,具有相对有限数量的内存储器。此外,由这些资源受限装置使用的诸如多媒体卡(MMC)、紧凑式闪存(CF)卡和记忆棒的可移动存储介质的成本与CD ROM很不同,这是因为对于用户来说,它们十分昂贵,由于成本限制了它们的消费。

对于任何大小的软件产品,使用标准PC包机制的软件的发行版被看作不适合这些资源受限制装置,因为无论在包中使用什么压缩和解压缩机制,很可能存在一些相同文件的压缩和未压缩版本需要同时呈现在计算装置上的点。此外,这些移动装置不同于PC,因为它们缺少硬盘驱动存储器,只具有可用的内部RAM和“flash”磁盘。发现在移动电话上的可移动介质存储器具有比内部装置存储器大得多的存储容量是很寻常的,在这种情况下,首先很明显没有在可移动介质上以压缩格式提供软件的点。

简单地提供预安装在可移动介质上的软件不是对该问题的好的解决方案,这是因为软件用户实际上需要遵循安装过程以确保将被安装的软件是可信的(authentic),并且没有被病毒篡改或感染(通过这样的方式损坏用户数据的安全性或装置的操作)。特别地对于这些移动计算装置,用户数据的安全性是极为重要的,这是因为如果获取了数据,根本上可以将其用来偷窃用户的钱。

这些移动装置的资源限制对于发行软件、特别是通过互联网的传送软件的可选方法也是有问题的。虽然固定PC可以使用宽带互联网连接,其中,具有零边际成本的高带宽使得下载速度很快并且几乎免费,但是无线装置使用的基于蜂窝的互联网连接至少减慢一个数量级,而且并不总是可靠的,并且许多用户感觉相对昂贵。虽然诸如在数据被接收到时实时地解压缩的技术能够有助于避免一些上面提及的存储限制,但是涉及在线软件传送的不便和可察觉的费用使得该方法对于任何相当大的软件的安装而言是不切实际的。

当前唯一的用于通过无线连接向资源受限制的装置(例如,PDA和移动电话)传送软件的方法(其不涉及上面概述的不便和费用)是通过PC连接套件(suite)。这是一类在非移动PC上运行的软件,但是该类软件通常是为移动装置配备的,并且当装置连接至PC时允许软件安全廉价方便地安装在装置上。然而该软件传送方法具有许多缺陷。最明显的是:

●移动装置的拥有者需要访问兼容的PC,不一定满足这种情况。

●PC的拥有者会发现为移动装置配备的连接软件与其个人计算机不兼容。

●当移动装置实际上移动时,不能安装软件,而是需要固定位置。

从而,当前没有令人满意的在资源受限制的移动装置上安装软件的将方便、有效性、可靠性、快速和安全性需求结合的方法。

因此,本发明的目的是提供一种用于将软件安装到计算装置上的改进方法。

根据本发明的第一方面,提供了一种操作计算装置的方法,包括以下步骤:使用以预先安装方式提供在可移动介质上的包括元数据和数据文件的软件包,所述元数据包括用于安装的软件包中的每个数据文件的各自散列,并且所述元数据具有由数字签名保护的完整性;使用所述元数据来确定所述以预先安装方式提供的所述软件包的数据文件的真实性和完整性;以及,仅当所述数据文件的真实性和完整性得到所述元数据的验证时,允许所述计算装置运行以预先安装方式提供在所述可移动介质上的数据文件。

根据本发明的第二方面,提供了一种配置成根据第一方面的方法运行的计算装置。

现在,将参照附图只通过进一步的实例描述本发明的实施例,其中:

图1示意性地示出了软件安装过程,其中,安装过程和安装文件均被分成两个独立的阶段;

图2示意性地示出了软件安装文件格式,其中,新签名和证书链已经被插入文件中元数据信息的末端;

图3示意性地示出了将软件安装文件插入到另一个中的方法;

图4示意性地示出了设计成支持使用多证书链标记的软件安装文件格式,具有多个每个链所支持的签名;以及

图5示意性地示出了具有一个嵌入在另一个数据文件中的数据文件的软件安装文件。

本发明基于这种认识:当软件在用于无线装置的可移动介质上传送时,使得提供未压缩的软件和已经放置在正确位置的文件以及能够提供用于确保软件安全操作的功能的包系统更有意义。特别地,通过本发明可以检查系统需求和依存关系,以及可以鉴别和验证软件的完整性和软件开发者的身份,不必解压缩和安装包含在包中的所有文件。

下面,参照可从英格兰伦敦的Symbian软件有限公司得到的Symbian OSTM操作系统(其包括软件安装包)的SIS文件来描述本发明的优选实施例。然而,应该强调本发明的方法能够用于产生与其他形式软件安装包相同的优势,不管这些是孤立类型包还是结合到其他类型的操作系统中。

Symbian OSTM操作系统的Symbian SIS文件已经历史地用于将任何数量或类型的用于安装在运行该操作系统的移动计算装置上的文件打包。该操作系统配备有称为“makesis”的应用软件程序(负责生成SIS文件)、用于执行实际软件安装的分开的软件安装程序(这里称作软件安装)。在下面描述的实例中,为了实施本发明,修改了这些SIS文件的格式和安装过程。该新的格式在下面的实例中称作SISX(扩展SIS)。

对于本发明,安装过程和安装文件均被分成两个独立的阶段。安装过程阶段指的是决策阶段和安装阶段。为了支持每个阶段,SISX文件设置为两部分:SISSignedController部分和SISData部分,如图1所示。

SISSIgnedController是完成决策阶段所需的唯一部分。这是SISX文件的相对小的部分(通常<10kb),以便它能在存储器中被完整读取。该部分包含需要将所需要的软件文件安装在计算装置上的元数据,例如,鉴别、权能(capability)等等。然而,对于本发明,元数据被配置成也包含SISData部分中的每个文件的各自散列,并且必须使用标准认证(例如,符合x.509 v.3公共密钥基础设施(infrastructure),其为在安装时或运行时可验证的)来进行数字签名。

SISData部分包含所有在决策阶段不需要的数据。这主要包括将被安装在计算装置上的实际文件以及非常有限数量的控制信息。

该格式有两个非常有意义的关键商业优势:

a)当将文件“无线”地安装到移动智能电话时,可以首先下载相对小的SISSignedController部分,因此决策部分几乎可以立即进行。万一在该阶段发生任何故障,为用户节省与下载整个安装文件相关的大量额外时间和费用,这是因为相对时间消耗及因此的更多花费的安装阶段只在决策阶段已经成功完成后进行。

b)对于出现在MMC卡上且不需要安装的数据,只有SISSignedController部分需要设置在具有预安装软件的卡上,使得标准鉴别和其他安全措施正常进行,即使正常安装过程不是必须的。

这些优势中的第一个由Java包系统共享,其中,JAD文件包含用于安装的决策阶段的元数据并且JAR文件包含包数据的剩余部分。与本发明的SISX文件一样,使用Java JAD/JAR包系统传送的软件只需要下载JAD文件,以分辨软件是否能够被安全地安装。然而,与本发明严格地比较,对于Java系统,需要确保将被安装的软件文件的完整性的散列包括有JAR文件中的内容。因此,不同于本发明,使用Java JAD/JAR包系统确保用于安装的软件(其通过为JAD文件提供预安装的软件而设置在可移动介质上)的可靠性是不大可能的。

现在,将参照运行Symbian OSTM操作系统的装置描述SISX文件格式。毫无疑问,很明显对于本领域技术人员而言许多其他实施方式是可能的,并且描述中哪一部分不是本发明实施所必须的也很明显。例如,在所描述的实施例中的SISX文件格式指定所有元数据应该以低位在前(little-endian)格式存储,但是这样做是为了方便,并且没有原因为何可以提供本发明的高位在前(big-endian)或混合(agnostic-endian)实施。类似地,SISX格式指定CRC-32进行验证完整性的检查的事实并不排除实现相同结果的其他方法。

SISX文件中的信息被分成两个分开的部分。第一部分是描述需要被安装文件的元数据。SISX文件的第二部分包含所有实际文件数据。这使得软件安装被分成上面提到的决策阶段和安装阶段。在决策阶段,为了验证安装,检查SISX文件并且执行安全性检查。安装阶段只在验证成功时进行,并且实际上是将需要的文件复制到装置的过程。

SISX文件格式支持签名和认证,使得包被标记。在安装过程中验证这些签名,也可以在包安装在装置中之后被重新验证。为了支持在两个阶段SISX文件的处理,只标记SISX文件的元数据。然而,对于本发明,为了确保在每个这种文件中数据的完整性,元数据也包含用于安装的包中的每个文件的各自散列。以此方式,整个SISX文件的完整性由标记的元数据保护。这意味着在安装阶段,软件安装过程能够基于包括在标记的元数据中的“保护的”散列来验证每个被安装的文件、每个文件的各自散列,同时使用非置信部分执行安装解压缩。

每个元数据和文件数据的单独的检查和也可以出现在SISX文件中,使得在安装过程开始检测任何可能被破坏的SISX文件。

由于涉及改变文件格式的努力,SISX文件格式被设计成可扩展的,并且使用类型-长度-值格式。在SISX文件(SISField)中的每个字段具有指定的长度。这样,当读取SISX文件时,可以跳过类型未知的字段。

与其他类型的安装包一样,在Symbian OSTM操作系统的SIS文件格式中使用的压缩方案是压缩整个SIS文件,并且在安装时解压缩成单独的文件并且从解压缩的文件中安装。这是很浪费的,特别是在大的文件可被作为可选项安装时,这是因为为了解压缩包括可选文件的整个原始SIS包,需要在存储器中留有空间。

本发明的SISX文件格式支持在SISX文件中的每个文件的单独压缩,并且SISController也能够被压缩。这减小了需要执行文件安装的存储空间。通过使用SISCompressed SISField(其能够包含另一个完整压缩的SISField)支持压缩。

在本发明的该实施例中,SISX文件格式设计成支持几乎所有SIS文件格式的原始特征。唯一强加的限制是应该不超过8级的嵌入的SISX文件。应该理解这不是SISX文件格式本身的限制,而是被强加的用于限制安装过程的总复杂性的限制。

如图2所示,由于SISX文件格式没有需要被改变的偏移量(offset),因此很容易将新签名和证书链添加到SISX文件的元数据的末端,即使它们可以定位在文件的中部。在这种情况下,SISignature SISField将被新签名和证书链延长,并且在这些添加之后的SISField将被移动到文件中后面的位置。

SISX文件格式设计成每种类型的SISField可以用一个C++类表示。这使得由SISField构造C++类实例很容易,并且由于不存在文件格式中所使用的偏移量,有可能只由SISField的数据构造C++类。

因为SISX文件可能很大,可能不会立即将整个文件内容加载到存储器中。由于文件格式的结构,能够读取每个SISField的元数据信息而不读取所有包含在SISField中的数据。

存在各种需要获得表格形(flat view)的SISX文件格式数据的操作,例如执行CRC检查、以及验证元数据签名。因此,优选地将格式设计成连续存储每个SISField中的所有数据。

SISX格式也支持将一个SISX文件嵌入到另一个中。提供MakeSIS工具,其能够取出已经生成的SISX文件并将其嵌入到它正在创建的SISX文件中。加载现存的SISX文件,并且必要时解压缩SISController,并将其插入到文件内的SISInstallBlock的嵌入的SISX文件字段中。包含安装所需的文件的SISDataUnit被添加到SISData SISField的数据单元数组的末端。SISController具有数据索引字段,其指示包含它们所需文件的SISDataUnit的索引。因此,要求MakeSIS工具通过添加的SISController进行迭代,并且将这些改变成正确的索引值。在图3中示出了这种用于将一个或多个SISX文件嵌入到另一个中的过程。

以低位在前字节排序格式存储所有的元数据。此外,为了简化从SIS文件到SISX文件格式的升级,后者被配置成只支持一个文本字符集,例如,统一代码UCS-2编码字符串。

在本发明的该实施例中,将SISX文件嵌入级的数量限制成八个,虽然可以理解这并不是对文件格式的限制,而是为了限制安装的可能的复杂性而强加于软件安装的限制。

现在,将提供示例性SISX文件结构的概述。

SISX文件格式由使用类型-长度-值(TLV)编码的SISField组成。所有SISField以这种格式存储,例外情况是存储在SISArray内的任何SISField。这是因为数组存储相同类型的SISField,并且因此存储数组中的每个条目的类型值是不必要的并且是效率低的。这样,仅将SISField的长度和值存储在SISArray中。

类型字段表示SISField的类型。每种类型的SISField具有唯一的标识(ID),长度是4字节。

长度字段表示在值字段中的数据的长度,并且不包括其他包含在SISField中的其他字段的大小。根据将要存储的长度值,长度字段的长度是4字节或8字节。这是因为一些字段必须支持64位长度,而大多数字段只需要较小的位长。因此,对于所有字段以64位长度存储,将使用装置中不必要的存储空间。

长度总是用无符号值表示。如果长度值小于231,则使用32位(4字节)存储值。如果长度值大于或等于231,则使用64位(8字节)存储值。最高有效位设置为1,意味着能够代表的最大可能的数据长度是263-1。为了读入长度值,首先读入前面的32位。如果最高有效位是0,那么低32位代表值。如果最高有效位是1,那么读入下面32位,并且由两部分构成63位值。

值字段包含SISField的数据。它的格式取决于字段ID。使用该格式依存关系是因为这使得由SISField构造C++类实例非常容易。也可能仅仅通过使用在SISField中的数据而没有SISX文件的其他部分,来构造该实例。

在必要的情况下,也优选地填充SISX文件,使得每个SISField以32位字边界开始。这能够通过只允许32位对齐访问的处理器有效地分析来自存储器的格式。

以下的符号(notation)用于描述由SISX文件格式使用的数据结构:

结构名称:

字段1名称    字段类型    字段大小

…           …          …

字段N名称    字段类型    字段大小

结构名称是结构的名称,它确定了存储在类型字段中的ID。长度由所有指定的字段的长度确定。字段1到N指定应该出现在结构的值部分中的数据。

SISX文件包含能够被分为“通用SISField”和“元数据SISField”的字段。现在将解释这两个字段分类(categorisation)的内容。

通用SISField

SISString

该SISField字段包含UCS-2统一代码字符串。

SISString    长度

字符串

字符串

该字段包含统一代码UCS-2编码字符串。它在字节中的长度由长度字段指定,并且由于每个字符使用16位进行编码,因此字符串中存在该长度中一半的字符。

SISArray

该SISArray SISField保留(hold)一种SISField类型的数组。在从数据创建以及附加每个新的SISField时检查所包含的SISField字段的类型。符号SISArray用于表示SISString的数组。在没有其类型作为优化的情况下,存储数组中的所有SISField,所以只存储TLV格式的长度和值部分。

SISArray      长度

SISField类型  TUnit32    4字节

SISField 1    SISField

…            …

SISField N    SISField

SISField类型

该字段表示在数组中SISField的类型。所有字段是相同的类型,并且在从数据创建SISField以及附加每个新SISField时对此进行检查。

SISField

这是SISField的序列,其类型等于SISField类型字段的值。因为能够由SISArray的SISField类型字段确定省略的类型,因此只部分存储SISField类型,省略的类型作为优化。通过读入所有字段来确定字段数量,直到读入由SISArray SISField的长度指定的所有数据。在SISX文件格式中几个位置需要SISField的数组,所以为了减少代码复制,也提供了SISArray类型。

SISCompressed

该SISField是在另一个SISField周围的包装器(wrapper),其中,能够选择地压缩包装的SISField。这允许容易地将压缩集成为SISX文件格式。符号SISCompressed可以用于表示压缩的SISString。

SISCompressed     长度

压缩算法          TUnit8    1字节

压缩数据                    压缩数据

长度字节

压缩算法

该SISfield包含用于压缩该文件数据的算法。

enum TCompressionAlgorithm

{

ECompressNone=0,//数据未压缩

ECompressDeflate//根据RFC1951压缩数据

};

压缩数据

该SISField包含压缩数据。可以由长度字段确定长度。

SIS Version

该SISField使用主(major)、次(minor)、和编译(build)部分为版本号的存储提供数据结构。

SISVersion     长度

主             TInt32   4字节

次             TInt32   4字节

编译T          Int32    4字节

只有正值或零用于表示特定的版本。然而,在可应用的情况下,为了表示任何版本,可将SISVersion的主、次、和编译部分设置成-1。

SISVersion范围

该SISField指定版本的范围。它用于表示哪个版本能够满足一定的依存关系。如果范围只是一个特定的版本,那么所设置的“从版本”和“到版本”字段都应该被设置为相同的特定值。如果指定的升级可应用于任何版本,那么“从版本”和“到版本”字段应该使主、次、和编译部分设置成-1。

SISVersionRange   长度

从版本            SISVersion

到版本            SISVersion

当检查依存关系时,分别地根据“从版本”和“到版本”字段,检查包的安装版本。为了检查“从版本”字段,首先根据已经安装的版本的主版本检查安装的包的主版本。如果安装的主版本较低,那么该依存关系检查失败。如果安装的主版本较高,那么该依存关系检查通过。如果两个版本相同,那么以相同的方式检查次版本。如果主版本和次版本的所有部分相同,那么依存关系检查通过。以此方式执行版本的字典式(lexicographical)比较。在主、次、和编译部分中的任何值-1被作为特殊情况处理。如果出现使用“从版本”为-1的字段进行比较的情况,那么依存关系检查通过。以类似的方式检查“到版本”。

下面的实例示出了典型的比较检查结果:

          主   次    编译

从版本    3    -1    -1

到版本4   5    -1

该检查结果将任何版本从3.x.x升级到4.5.x,其中x是任一值。

          主   次   编译

从版本    1    3    4

到版本    1    3    5

该检查结果将升级版本1.3.4或1.3.5。

SISDate

该SISDate包含日期。根据阳历(Gregorian calendar)存储日期,年部分全部存储,并且必须是有效日期。

SISDate   长度

年        TUint16   2字节

月        TUint8    1字节

日        TUint8    1字节

SISTime

该SISField包含时间。时间必须以UTC表示,而且为有效时间。

SISTime 长度

小时    TUint8    1字节

分钟    TUint8    1字节

秒      TUint8    1字节

SISDateTime

该SISField包含日期和时间SISField。

SISDateTime   长度

日期          SISDate

时间          SISTime

SISUid

该字段包含三个唯一标识符(UID)。

SISUid    长度

UID1      TInt32    4字节

UID2      TInt32    4字节

UID3      TInt32    4字节

SISVendorID

该SISField包含卖方ID。该ID对于特定的卖方是唯一的。

SISVendorID    长度

卖方ID         TInt32    4字节

VendorID

该SISField表示卖方。每个卖方具有其自身的唯一ID。

SISLanguage

该SISField标识语言。

SISLanguage    长度

语言           TUint32    4字节

语言

该字段的值对应于TLanguage枚举(enumeration),但是被作为TUint32存储在SISX文件中。

SISX文件元数据SISField

SISContent

该SISField包含SISX文件的整个内容。内容被分成SIScontroller(其包含元数据)和SISData(其包含实际文件数据)。

SISContent    长度

控制器检查和  SISControllerChecksum

数据检查和    SISDataChecksum

控制器        SISCompressed

数据          SISData

控制器检查和

该检查和是整个控制器字段内容的CRC-32检查和。该检查和覆盖整个SISCompressed,所以如果SIScontroller被压缩,则它不必被解压缩以验证该检查和。这样,可以检查控制器的完整性,而不用检查整个文件。

数据检查和

该检查和是整个数据字段内容的CRC-32检查和。这能够检查数据的完整性而无需检查整个文件。

控制器

该控制器包含SISX文件的所有元数据。其可以被可选地压缩。

数据

数据字段包含SISX文件中的实际文件。根据出现在控制器字段中的元数据,这些被不同地处理。

SISControllerChecksum

该SISField包含可能压缩的SISController的检查和。

SISControllerChecksum    长度

检查和                   TUint32

检查和

该字段包含CRC-32检查和,该检查和在整个SISCompressed字段上被计算出。

SISDataChecksum

该SISField包含SISX文件的SISData部分的检查和。

SISDataChecksum    长度

检查和             TUnit32

检查和

该字段包含CRC-32检查和,该检查和在整个SISData SISField上被计算出。

SISController

该SISField包含SISX文件的元数据。

SISController     长度

信息              SISInfo

选项              SISSupportedOptions

语言              SISSupportedLanguages

先决条件          SISPrerequisites

属性              SISProperties

标志              SISLogo

安装块            SISInstallBlock

签名              SISSignatures

数据索引          TUInt16                        2字节

SISX文件的元数据内容如下:

信息

该字段包含关于SISX文件的信息。

选项

该字段包含当安装文件时要求用户选择的选项。这些选项用于确定要安装哪些文件。

语言

该字段包含SISX文件支持的语言。

先决条件

该字段包含为了安装SISX文件所需要的先决条件。

属性

该字段包含属性,其为整数的密钥对、值对。

标志

该字段是可选的,并且如果出现的话则包含在开始安装时显示的标志。

签名

该字段包含已经标记了SISX文件的签名以及需要对其进行验证的证书链。

数据索引

该字段是SISDataSISField的数据单元字段的数组的索引。每个SISController均具有一个SISDataUnit。

SISInfo

该字段包含以下关于SISX文件的信息。

SISInfo   长度

UID       SISUid

卖方ID    SISVendor ID

名称      SISArray

卖方名称          SISArray

版本              SISVersion

创建时间          SISDateTime

安装类型TUnit8    1字节

UID

该字段包含SISX文件的UID。该UID应该对于将特定应用程序打包的SISX文件是唯一的,但是可能该包的多个不同版本具有相同的UID。

卖方ID

该字段包含创建包的卖方的ID。

名称

该字段包含SISX文件的名称的数组。所支持的每种语言均具有一个名称,并且在数组中相同的位置,每个名称与在SISController的SISSupportedLanguages字段中标识的相应语言相匹配。

卖方名称

该字段包含SISX文件卖方的名称的数组。所支持的每种语言均具有一个名称,并且在数组中相同的位置,每个名称与在SISController的SISSupportedLanguages字段中标识的相应语言相匹配。

版本

该字段包含SISX文件的版本。

创建时间

该字段包含SISX文件的创建时间和日期。然而,这不是安全的时间信息(timestamp),因此能够在创建SISX文件之前由改变其PC时钟的用户很容易地改变。

安装类型

该字段包含SISX文件的安装类型。根据该值,安装软件将使用不同的方式安装包。将该值作为TUnint8进行存储,但是对应于下面的枚举:

enum TInstallType

              {

              EInstApplication

              };

EInstApplication

SISX文件包含能够被安装在装置上的应用程序。一旦安装了应用程序,它出现在安装的SISX文件的列表中,使得用户能够将其除去。如果用户想要在已经安装有UID和类型EInstApplication的SISX文件的装置上安装具有相同的UID和类型EInstApplication的SISX安装文件,那么这被认为是升级。如果出现这种情况,从装置中除去当前版本,安装新版本。

SISSupportedLanguage

该SISField包含SISX文件支持的语言的数组。

SISSupportedLanguage    长度

语言                    SISArray

SISSupportedOption

该SISField包含SISX文件支持的选项。在安装过程中要求用户从这些选项中进行选择。

SISSupportedOption  长度

选项                SISArray

选项

该字段是SISX文件支持的选项的数组。在SISX文件支持的每个选项的数组中均具有一个条目,并且其大小可以为零或更大。

SISSupportedOption

该字段包含SISX文件支持的选项的名字。在SISX文件中每种支持的语言的数组中均具有一个名字,与在SISSupportedLanguagesSISField中指定的顺序相同。

SISSupportedOption    长度

名称                  SISArray

SISPrerequisite

该SISField表示在安装软件将安装SISX文件之前必须满足的先决条件。在该实施例中所支持的先决条件类型是:

i.已经安装在装置上的SISX包及其版本。

ii.装置必须为装置列表中的一个,由预先安装在装置上的SISX文件进行标识。

SISPrerequisite   长度

目标装置          SISArray

依存关系          SISArray

目标装置

该字段是指示该SISX文件能够安装在哪个装置上的SISDependency SISField的数组。每个装置均具有预先安装的特定于那个装置的SISX文件。如果目标装置SISArray包含任何SISDependencies,那么为了将SISX文件安装在装置上,必须出现这些依存关系中的至少一个。如果目标装置SISArray没有条目,那么可以将SISX文件安装在任何类型的装置上。

依存关系

该字段是SISDependencies的数组,用于指示为了使这个字段可安装,需要安装哪些SISX包。可以有零个或多个依存关系。为了继续安装,所有出现在该SISArray中的SISX文件必须存在于装置上。

SISDependancy

该SISField指定必须安装在装置上的SISX包。

SISDependancy    长度

UID              SISUid

版本范围         SISVersionRange

依存关系名称     SISArray

UID

该字段指示为了满足该依存关系而需要安装在装置上的SISX包的UID。

版本范围

该字段指示需要安装在装置上的SISX包的版本范围。

依存关系名称

该数组包含由SISX文件支持的每种语言中依存关系的名称列表。SISX文件支持的每种语言中必须正好只有一个SISString。

SISProperties

SISProperties块包含SISX包的属性。

SISProperties    长度

属性             SISArray

SISProperty

该SISField包含属性,其为与SISX包相关的密钥对、值对。

SISProperty    长度

密钥对         TInt32           4字节

值             TInt32           4字节

SISLogo

该SISField可以包含在安装过程中显示的标志。

SISLogo     长度

标志文件    SISFileDescription

Logo文件

该字段包含在安装开始时显示的标志文件的SISFileDescription。使用SISFileDescription的MIME类型字段来确定标志的格式。如果SISFileDescription的目标字段不是空字符串,那么也将标志安装在装置上。

SISFileDescription

该SISField给出关于存储在SISData部分的文件的信息。

SISFileDescription    长度

目标                  SISString

MIME类型              SISString

操作                  TUint8        1字节

操作选项              TUint32       4字节

散列                  SISHash

长度                  TUint64       8字节

未压缩长度      TUint64    8字节

文件索引        TUint32    4字节

目标

该字段是将文件安装到的位置。这只用于实际上将要复制文件在装置上某处的指令,该字段可能为指示文件将不会被安装的空字符串,例如当需要运行文件或将其显示为标志而实际上没有将其安装在装置上时。

MIME类型

该字段是所描述的文件的MIME类型。当运行MIME类型的文件时以及在安装过程中显示图像文件时使用该字段,以选择使用的图像解码器类型。

操作

该字段用于指示在安装过程中怎样处理该文件。

enum TSISFileOperation

     {

      EOpInstall=1,    //安装文件

      EOpRun=2,        //运行文件

      EOpText=4         //将文件显示为文本

      };

操作选项

该字段指示在安装过程中哪些选项可应用于处理该文件。所执行的操作确定哪些选项是有效的。

对EOpInstall有效的选项

enum TInstInstallOption

     {

     EInstVerifyOnRestore  =1<<15    //验证恢复

     };

EInstOptionReadOnly

该选项用于安全备份和恢复,以表示该文件在安装后已经被写入,所以其内容将保持与安装时相同。这允许在从备份恢复文件时,通过检查散列进行验证。

对EOpRun有效的选项

    enum TInstFileRunOption

         {

         EInstFileRunOptionInstall     =1<<1,  //安装时运行

         EInstFileRunOptionUnInstall  =1<<2,//卸载时运行

         EInstFileRunOptionByMimeType  =1<<3,//使用MIME类

型运行

         EInstFileRunOptionWaitEnd=1<<4,//在继续前等待结束

         };

EInstFileRunOptionInstall

该选项表示将在安装时运行指定的文件。如果目标字段有效,那么将该文件安装到那个位置,否则不将该文件复制到装置。

EInstFileRunOptionUnInstall

该选项表示将在卸载时运行指定的文件。目标字段必须有效,这是因为安装软件将该文件复制到装置,从而能够在包被卸载时运行该文件。

EInstFileRunOptionByMimeType

该选项表示通过MIME类型,将在安装时或在卸载时运行该文件。如果没有设置该选项,那么指定的文件将被作为可执行文件运行。

EInstFileRunOptionWaitEnd

如果设置了该选项,在继续前,安装软件等待直到运行的应用程序完成。然而,安装软件应该执行合理的超时,否则恶意的或畸形的应用程序在没有重新启动装置的情况下将永远运行并且防止对安装软件的任何其他访问。如果没有设置该选项,则在继续前,安装软件不等待运行的应用程序结束。一旦安装软件已经完成该安装或卸载,则终止仍在运行的应用程序。

对EOpText有效的选项

enum TInstTextOption

     {

     EInstFileTextOptionContinue  =1<<9,//继续按钮

EInstFileTextOptionSkipIfNo  =1<<10,  //是/否-如果用户选择否,则跳过下一个文件

EInstFileTextOptionAbortIfNo=1<<11,//是/否-如果用户选择否,则中止安装

EInstFileTextOptionExitIfNo=1<<1 2,//是/否-如果用户选择否,则卸载

};

EInstFileTextOptionContinue

该选项表示安装程序将显示文本,具有用于继续安装的按钮。在对话框消除后,安装将继续。  

EInstFileTextOptionSkipIfNo

该选项表示安装程序将显示文本,具有两个按钮,一个标记为“是”,一个标记为“否”。如果选择了“否”按钮,那么安装程序将跳过当前处理的文件,否则安装将正常进行。

EInstFileTextOptionAbortIfNo

该选项表示安装程序将显示文本,具有两个按钮,一个标记为“是”,一个标记为“否”。如果选择了“否”按钮,那么安装程序将中止安装,否则安装将正常进行。安装程序将显示表示安装已经中止的对话框。

EInstFileTextOptionExitNo

该选项表示安装程序将显示文本,具有两个按钮,一个标记为“是”,一个标记为“否”。如果选择了“否”按钮,那么安装程序将中止安装,否则安装将正常进行。EInstFileTextOptionAbortIfNo和该选项选项之间的唯一区别是安装程序将不显示表示安装已经中止的对话框。

散列

该字段包含未压缩的文件数据的散列。

长度

该字段包含压缩文件数据的长度,SISFileDescription涉及SISX文件本身。

未压缩的长度

该字段包含压缩文件数据的长度,SISFileDescription在其已经被解压缩后被涉及。

文件索引

该字段是SISFileDataSISField的索引,它包含在SISDataUnit的数据单元字段中的实际文件数据。

SISHash

该SISField代表散列

SISHash           长度

散列算法          TUint8    1字节

散列数据

散列算法

该字段表示用于生成散列的算法。可能支持的典型的散列算法为:

enum TSISHashAlgorithm

{

     ESISHashAlgSHA1=1,    //SHA-1散列算法

}

散列数据

该字段包含散列的原始数据。数据的长度取决于所使用的散列算法。

SSIX文件格式被设计成支持使用多证书链进行标记。每个链也支持多个签名,使得不同的算法能够用于每个签名。在图4中示出了链的布局。只需要使这些签名中一个生效,从而安装软件认为证书链有效。

SISSIgnature

该SISField包含需要使这些签名生效的多签名和证书链。

SISSignature    长度

             SignatruesSISArray<SISSignatureCertificateChain

SISSignatureCertificateChain

该SISField包含用于将需要使签名生效的SISX文件和证书链标记的签名。

SISSignatureCertificateChain  长度

签名                          SISArray

证书链                        SISCertificateChain

签名

该字段包含签名的数组。

证书链

该字段包含需要验证签名的证书链。

SISCertificateChain

该SISField包含作为ASN.1编码的X509证书链的证书数据。

SISCertificateChain    长度

证书数据

证书链

该字段包含作为ASN.1编码的X509证书链的证书数据。

SISSignature

该SISField包含签名和标记的标识符以及用于生成它的散列算法。

SISSignature    长度

签名算法

签名数据

签名算法

这包含着用于标记的算法以及用于散列数据的算法,使得签名有效。

签名数据

该字段包含签名数据。

SISSignatureAlgorithm

该SISField包含关于签名和用于创建签名的散列算法的详情。

SISSignatureAlgorithm    长度

算法标识符               SISString

算法

这是由代表所使用的算法的对象标识符的字符“.”限定的字符串。典型的算法是:

1.“1.2.840.113549.1.1.5”-具有RSA签名的SHA-1

2.“1.2.840.10040.4.3”-具有DSA签名的SHA-1

从文本包描述中生成SISX文件。在安装时,该描述使用“if”、“then”以及“else”结构支持决定安装哪些文件的简单格式。使用以下的SISField将其编码为SISX包。

SISIf

该SISField代表在用于生成SISX文件的包文件中的条件和“if”语句。

SISIf     长度

表达式    SISExpression

安装块    SISInstallBlock

Else ifs  SISArray

表达式

该字段包含在安装过程中该SISField的处理过程中计算的表达式。

安装块

该字段包含若表达式计算为真时递归处理的SISInstallBlock。

Else ifs

如果表达式计算为假,那么顺序计算这些SISElseIf SISField中的每一个。如果表达式中的一个计算为真,那么递归处理SISInstallBlock,并且不再检查数组中的SISElseIf块。在该数组中可能为零或更大的SISElseIf SISField。通过添加SISElseIfSISField,在计算总为真的条件下,MakeSIS能够模拟包中的else语句。

SISElseIf

该SISField代表在打包文件中“if”语句的“else if”部分。

SISElseIf Length

表达式    SISExpression

安装块    SI SInstallBlock

表达式

当处理SISElseIf SISField时,由安装软件计算该字段。

安装块

如果表达式字段计算为真,那么由安装软件递归处理该SISInstallBlock SISField。

SISInstallBlock

该SISField包含需要安装的文件的列表、嵌入的SISX文件的列表、以及在该安装块内部的SISIf块中的列表。这些数组中的每个均具有零个或多个条目。

SISInstallBlock   长度

文件              SISArray

嵌入的SISX文件    SISArray

If块              SISArray

文件

该字段包含需要使用SISInstallBlock处理的文件的列表。要执行的最通常的操作将是安装这些文件,但是根据选项,可以将它们显示给用户或运行。在该数组中,可能有零个或更多的SISFileDescription SISField。

嵌入的SISX文件

该文件包含嵌入的SISX文件的列表,SISX文件由存储在SISX文件的元数据中的SISControllers表示,并且需要使用SISInstallBlock处理。在该数组中,可能有零个或更多的SISController SISField。

If块

该字段包含需要使用SISInstallBlock处理的SISIf字段的列表。安装软件将检查这些SISIf块中的每一个的条件,并且如果条件为真,则递归处理该SISIf块。在该数组中,可能有零个或更多的SISIfSISField。

SISExpression

该SISField代表表达式。表达式被分成几个部分,并且整个表达式表示为SISExpression SISField树。

SISExpression    长度

运算符TInt16     2字节

左表达式         SISExpression

右表达式    SISExpression

整数值      TInt 32        2字节

字符串值    SISString

如果运算符是EOpNone,那么SISField将不包含其他数据,并且为以下形式:

SISExpression     长度

运算符            TInt16=EOpNone

这是允许表达式终止。

运算符

该字段表示该表达式的运算符,从而确定其他字段中哪个是有效的。

enum TOperator

     {

     EOpNone=0,

     //二进制运算符

     EBinOpEqual=1,  //等于

     EBinOpNotEqual,  //不等于

EBinOpGreaterThan,     //大于

EBinOpLessThan,        //小于

EBinOpGreaterOrEqual,  //大于或等于

EBinOpLessOrEqual,     //小于或等于

//逻辑运算符

ELogOpAnd,             //逻辑“与”

ELogOpOr,              //逻辑“或”

//一元运算符

EUnaryOpNot,//非()-逻辑“非”

//函数

EFuncExists,//EXISTS()-如果文件存在,则进行检查

EFuncAppProperties,//APPPROP()-查询应用程序属性

//基元

EPrimTypeString,  //该表达式保留字符串值

EPrimTypeOption,  //该表达式是选项,由字符串标识

EPrimTypeVariable,//该表达式是变量,由字符串标识

EPrimTypeNumber//该表达式保留数字值

};

左表达式

这是表达式的左侧子部分。这将是有效的,即,当该SISExpression的运算符不是基元EPrimTypeString、EPrimTypeOption、EPrimTypeVariable、EPrimTypeNumber、或函数EFuncExists、EFuncAppProperties中的任何一个时,所包含的SISExpression将没有EOpNone的运算符。

右表达式

这是表达式的右侧子部分。这将是有效的,即,当该SISExpression的运算符是任何二进制运算符EBinOpEqual、EBinOpNotEqual、EBinOpGreaterThan、EBinOpLessThan、EBinOpLessOrEqual、EBinOpGreaterOrEqual、或逻辑运算符ELogOpAnd和ELogOpOr时,所包含的SISExpression将没有EOpNone的运算符。

整数值

表达式的该部分可以包含整数值。只有当表达式的类型为EPrimTypeNumber或EFuncAppProperties时,该部分才有效。

字符串值

表达式的该部分可以包含字符串。只有当表达式的类型为EPrimTypeString、EPrimTypeOption、EPrimTypeVariable或EFuncExists时,该部分才有效。

如上所述,SISX文件被设置为两部分:SISSignedController部分和SISData部分。上面的分解解释了包含在SISSignedController部分中的字段。现在将解释SISData部分。

SISX文件的该部分包含在安装过程中使用的实际文件数据。它由数据单元的数组组成,其中每一个均包含来自一个SISController的文件。如果有嵌入的SISX文件,可能有一个以上的数据单元。每个SISController均具有包含SISData SISField中的数据单元数组的索引的字段。该字段包含由那个SISController安装的文件。这使得添加和除去嵌入的SISX文件很容易。在图5中示出了具有嵌入的SISX文件的SISX文件格式的实例。SISData部分也包含如下的多个SISField。

SISData

SISData SISField包含SISX文件的所有文件数据。

SISData     长度

数据单元    SISArray

数据单元

为SISX文件的元数据中的每个SISController提供一个数据单元。如果有嵌入的文件的话,可能有一个以上的SISController以及这样的数据单元。

SISDataUnit

SISDataUnit SISField包含SIScontroller的所有文件数据。

SISDataUnit       长度

文件数据          SISArray

文件数据

该字段是可被压缩的SISFileData SISField的数组。在每个文件的该数组中存在条目,使该SISController安装成为可能。

SISFileData

SISFileData SISField包含文件的实际数据。

SISFileData         长度

数据长度            TUint64    8字节

文件数据                        数据

长度

数据长度

该字段包含压缩数据的长度。它是出现在SISFileDescription中的信息的副本,其为了方便而出现的。

文件数据

该字段包含文件数据。

总之,本发明被认为提供了以下已知软件安装包的显著优势:

●容易实现移动安装,提供比通过PC更方便的安装,这是因为能够基本上在任何地方无线地执行安装。

●比在可移动介质上设置软件作为标准压缩包更高效和快速的安装,这是因为在对任何文件解压缩的过程中没有浪费电源、带宽或时间。

●安装更可靠,因为不大可能发生内存不足的错误。

●比提供从标准包预先安装到可移动介质上的软件更安全的安装,这是因为它没有绕过关于软件的出处和真实性的安全性检查。

●比通过无线互联网更高效、快速、且更可靠的安装,这是因为它不依赖于慢的和可能时断时续的连接。

虽然参照特定实施例描述了本发明,应该理解在所附的权利要求限定的本发明的范围内可以对本发明实施修改。