兼容安卓应用的服务签名方法与装置制造方法

文档序号:6551239阅读:325来源:国知局
兼容安卓应用的服务签名方法与装置制造方法
【专利摘要】本发明涉及一种兼容安卓应用的服务签名方法,包括:S1:对应用程序软件包除开发者签名外的所有数据文件列出清单,并完成兼容安卓应用的服务签名操作;S2:通过使用服务自身标识证书或标识公钥对兼容安卓应用的服务签名进行验证。本发明对于同一个安卓应用程序包进行数字签名不会与应用程序的开发者签名发生冲突,进行的多方重签名得到的不同发布版本的安卓应用在更新安装时能够保留用户数据;且服务方签名数据存储在服务方域名以及业务名称相关的目录中,不同的服务方签名数据互不干扰,不同的业务签名互不影响,根本上解决了传统应用签名机制签名文件名称容易发生碰撞的问题。本发明还公开了一种兼容安卓应用的服务签名装置。
【专利说明】兼容安卓应用的服务签名方法与装置

【技术领域】
[0001] 本发明涉及计算机【技术领域】,尤其涉及一种兼容安卓应用的服务签名方法与装 置。

【背景技术】
[0002] 数字签名是基于消息摘要运算和非对称加密运算的,用于保证信息传输完整性、 认证性和抗抵赖性的信息安全技术。数字签名技术在社会生活中已经得到了广泛的应用, 安卓应用的数字签名就是上述技术的一个典型应用场景。
[0003] 具体地,现阶段安卓应用数字签名的操作流程为:利用摘要算法将安卓应用程序 包中除ΜΕΤΑ-INF目录以外的每个信息文件计算成固定长度的散列值,并将散列值和对应 文件名依序存储到META-INF/MANIFEST. MF文件中;继续使用摘要算法将上述META-INF/ MANIFEST. MF文件以及此文件中的每个散列值再次进行散列运算,并将散列值和对应文件 名依序存储到META-INF/[签名用alias名称首八个字符].SF文件中;进一步地,使用签名 者的私钥对上述.SF文件进行数字签名,将签名者的证书数据连同数字签名值进行结合并 编码,得到一个PKCS7格式的二进制数据包,存储在META-INF/[签名用alias名称首八个 字符].RSA文件中。上述传统的安卓应用签名流程在业内通常被称为"开发者签名",通过 开发者签名处理的应用程序包,应用程序使用者可以随时从中提取签名者的数字证书,并 使用此数字证书对程序包中所有文件的完整性进行验证,从而保证了应用程序包在发布中 的完整性,一旦发生应用程序包中文件在发布中被篡改的情况,用户可以将篡改检测出来。 但目前,使用传统的开发者签名技术对安卓应用程序包进行数字签名时,默认存放二次摘 要的文件名为:META-INF/[签名用alias名称首八个字符].SF,默认存放的数字签名文件 为META-INF/[签名用alias名称首八个字符].RSA。在应用程序发布流转过程中,渠道商 往往需要对应用程序包进行重签名,然而这往往带来两个问题:
[0004] (1)对于同一个安卓应用程序包而言,采用了双重签名和单次签名的程序包将被 安卓操作系统认为是不同的开发者发布的,将导致同一个程序的两个发布版本无法在更新 安装时保留用户数据;
[0005] (2)使用传统的应用程序包开发者签名机制,如果多个签名者采用默认的密钥 alias名称,如CERT,将导致在二次签名时,原签名方的数字签名被替换。例如,开发者A采 用的密钥alias名称为CERT,并对应用进行了签名;渠道商采用的密钥alias也恰好使用 了 CERT,当渠道商对此应用进行重签名时,将导致开发者的签名被替换。另外,由于传统安 卓应用签名时.SF文件和.RSA文件的命名规则是密钥alias首八个字符的大写,导致签名 文件名的命名空间比较小,容易发生碰撞。
[0006] 进一步地,同一个安卓应用程序往往要在多个不同的渠道进行发布,然而传统应 用程序包开发者签名机制的上述缺陷将导致同一个应用的多渠道不同版本在用户手机上 无法实现保留用户数据的更新安装,也容易导致开发商或渠道商的数字签名被无意识的剥 离,最终必然导致安卓应用管理的混乱与用户体验的下降。


【发明内容】

[0007] 本发明所要解决的技术问题是如何实现一种在兼容传统JAR包签名机制以及传 统的安卓应用开发者签名机制的情况下保证同一个安卓应用的多渠道多重签名的不同版 本能够进行保留用户数据的更新安装,以及如何实现一种支持任意数量的多方、多服务重 签名,签名数据互不冲突,且均可以进行独立验证的关键问题。
[0008] 为此目的,本发明提出了一种兼容安卓应用的服务签名方法,包括具体以下步 骤:
[0009] S1 :对应用程序软件包除开发者签名外的所有数据文件列出清单LIST,并完成兼 容安卓应用的服务签名操作;
[0010] S2:通过使用服务自身标识证书或标识公钥对所述兼容安卓应用的服务签名进行 验证。
[0011] 进一步地,所述步骤S1进一步包括:
[0012] S11 :将所述清单LIST中所有数据文件进行摘要操作得到摘要信息;
[0013] S12 :将得到的所有所述摘要信息组成一个字符串MSG ;
[0014] S13 :通过使用服务方证书私钥对所述MSG进行数字签名,获得签名值SIG ;
[0015] S14 :在软件包中预先创建的ΜΕΤΑ-INF目录中创建和服务方提供的预设业务名称 相关的目录,并在此目录中创建服务签名文件存储所述数字签名数据SIG,并存储包含所有 相关摘要的文件路径名的清单文件。
[0016] 进一步地,所述步骤S14进一步包括:在软件包中的所述ΜΕΤΑ-INF目录中生成一 个以服务方域名中顶级域名命名的目录,即为第一目录,在所述第一目录中嵌套创建一个 服务方域名倒数第二段字符串命名的目录,即为第二目录,进一步在所述第二目录中创建 一个以服务方域名倒数第三段字符串命名的目录,以此类推,直至服务方域名第一段字符 串为止。
[0017] 进一步地,所述步骤S2进一步包括:
[0018] S21 :解析应用程序包apk文件,根据自身服务方名称找到对应的服务签名文件存 储目录,并从所述存储目录中找到预设业务名称对应的摘要文件清单;
[0019] S22 :枚举应用程序包中ΜΕΤΑ-INF目录外所有文件,检查枚举到的文件中是否存 在摘要文件清单内容之外的文件,如果存在则服务签名验证失败;
[0020] S23:读取清单文件中列出的所有数据文件进行摘要操作得到摘要信息,将所有数 据文件摘要信息组成一个字符串MSG ;
[0021] S24 :从预先创建的ΜΕΤΑ-INF目录中读取服务签名文件的所述签名值SIG ;
[0022] S25 :通过使用业务证书,MSG、SIG三个因子进行签名验证运算,得到验证结果 RESULT_VER,如果验证成功,RESULT_VER为真;否则RESULT_VER为假,服务签名验证失败。
[0023] 进一步地,所述步骤S2进一步包括:枚举应用程序包中ΜΕΤΑ-INF目录内部所述开 发者签名文件与预设业务对应的服务签名文件之外的文件,检查枚举到的文件中是否存在 读取的摘要文件清单内容之外的文件,如果存在,验证结果RESULT_CHK为假,服务签名验 证失败;否则RESULT_CHK为真,服务签名验证成功。
[0024] 为此目的,本发明还提出了一种兼容安卓应用的服务签名装置,包括:
[0025] 服务数字签名模块,用于对应用程序软件包除开发者签名外的所有数据文件列出 清单LIST,并完成兼容安卓应用的服务签名操作;
[0026] 服务签名验证模块,用于通过使用服务自身标识证书或标识公钥对所述兼容安卓 应用的服务签名进行验证。
[0027] 进一步地,所述服务数字签名模块包括:
[0028] 第一摘要操作单元,用于将所述清单LIST中所有数据文件进行摘要操作得到摘 要信息;
[0029] 第一组串单元,用于将得到的所有所述摘要信息组成一个字符串MSG ;
[0030] 第一签名值获取单元,用于通过使用服务方证书私钥对所述MSG进行数字签名, 获得签名值SIG ;
[0031] 存储单元,用于在软件包中预先创建的ΜΕΤΑ-INF目录中创建和服务方提供的预 设业务名称相关的目录,并在此目录中创建服务签名文件存储所述数字签名数据SIG,并存 储包含所有相关摘要的文件路径名的清单文件。
[0032] 进一步地,所述服务签名验证模块包括:
[0033] 解析单元,用于解析应用程序包apk文件,根据自身服务方名称找到对应的服务 签名文件存储目录,并从所述存储目录中找到预设业务名称对应的摘要文件清单;
[0034] 枚举检查单元,用于枚举应用程序包中ΜΕΤΑ-INF目录外所有文件,检查枚举到的 文件中是否存在摘要文件清单内容之外的文件,如果存在则服务签名验证失败;
[0035] 第二摘要操作单元,用于读取清单文件中列出的所有数据文件进行摘要操作得到 摘要信息;
[0036] 第二组串单元,用于将所有数据文件摘要信息组成一个字符串MSG ;
[0037] 第二签名值获取单元,用于从预先创建的ΜΕΤΑ-INF目录中读取服务签名文件的 所述签名值SIG ;
[0038] 验证单元,用于通过使用业务证书,MSG、SIG三个因子进行签名验证运算,得到验 证结果RESULT_VER,如果验证成功,RESULT_VER为真;否则RESULT_VER为假,服务签名验证 失败。
[0039] 进一步地,所述验证单元,还用于枚举应用程序包中ΜΕΤΑ-INF目录内部所述开发 者签名文件与预设业务对应的服务签名文件之外的文件,检查枚举到的文件中是否存在读 取的摘要文件清单内容之外的文件,如果存在,验证结果RESULT_CHK为假,服务签名验证 失败;否则RESULT_CHK为真,服务签名验证成功。
[0040] 通过采用本发明所公开一种兼容安卓应用的服务签名方法,将在兼容传统JAR包 签名机制以及传统的安卓应用开发者签名机制的情况下保证同一个安卓应用的多渠道多 重签名的不同版本能够进行保留用户数据的更新安装,同时还将支持任意数量的多方,多 服务重签名,签名数据互不冲突,且均可以进行独立验证。本发明还公开了一种兼容安卓应 用的服务签名装置。

【专利附图】

【附图说明】
[0041] 通过参考附图会更加清楚的理解本发明的特征和优点,附图是示意性的而不应理 解为对本发明进行任何限制,在附图中:
[0042] 图1示出了本发明实施例中的一种兼容安卓应用的服务签名方法的步骤流程图; [0043] 图2示出了本发明实施例中的一种兼容安卓应用的服务签名方法中的一个应用 程序包经过业务签名后的目录情况;
[0044] 图3示出了本发明实施例中的一种兼容安卓应用的服务签名装置的结构示意图;
[0045] 图4示出了本发明实施例中的一种兼容安卓应用的服务签名装置中多个业务调 用服务数字签名模块进行重签名的过程。

【具体实施方式】
[0046] 下面将结合附图对本发明的实施例进行详细描述。
[0047] 如图1所示,本发明提供了一种兼容安卓应用的服务签名方法,包括具体以下步 骤:
[0048] 步骤S1 :对应用程序软件包除开发者签名外的所有数据文件列出清单LIST,并完 成兼容安卓应用的服务签名操作。其中,开发者签名的数据文件包括:.MF文件、.SF文件 和.RSA文件。
[0049] 具体地,步骤S1进一步包括:
[0050] 步骤S11 :将清单LIST中所有数据文件进行摘要操作得到摘要信息。
[0051] 步骤S12 :将得到的所有摘要信息组成一个字符串MSG。
[0052] 步骤S13 :通过使用服务方证书私钥对MSG进行数字签名,获得签名值SIG。
[0053] 步骤S14 :在软件包中预先创建的ΜΕΤΑ-INF目录中创建和服务方提供的预设业务 名称相关的目录,并在此目录中创建服务签名文件存储数字签名数据SIG,并存储包含所有 相关摘要的文件路径名的清单文件。
[0054] 进一步地,步骤S14进一步包括:在软件包中的ΜΕΤΑ-INF目录中生成一个以服务 方域名中顶级域名命名的目录,即为第一目录,在第一目录中嵌套创建一个服务方域名倒 数第二段字符串命名的目录,即为第二目录,进一步在第二目录中创建一个以服务方域名 倒数第三段字符串命名的目录,以此类推,直至服务方域名第一段字符串为止。其中,具体 的一个应用程序包经过业务签名后的目录情况如图2所示。
[0055] 步骤S2 :通过使用服务自身标识证书或标识公钥对兼容安卓应用的服务签名进 行验证。
[0056] 具体地,所述步骤S2进一步包括:
[0057] 步骤S21 :解析应用程序包apk文件,根据自身服务方名称找到对应的服务签名文 件存储目录,并从存储目录中找到预设业务名称对应的摘要文件清单。
[0058] 步骤S22 :枚举应用程序包中ΜΕΤΑ-INF目录外所有文件,检查枚举到的文件中是 否存在摘要文件清单内容之外的文件,如果存在则服务签名验证失败;
[0059] 步骤S23 :读取清单文件中列出的所有数据文件进行摘要,将所有数据文件摘要 信息组成一个字符串MSG。
[0060] 步骤S24 :从预先创建的ΜΕΤΑ-INF目录中读取服务签名文件的签名值SIG。
[0061] 步骤S25 :通过使用业务证书,MSG、SIG三个因子进行签名验证运算,得到验证结 果RESULT_VER,如果验证成功,RESULT_VER为真;否则RESULT_VER为假,服务签名验证失 败。
[0062] 进一步地,当进行服务签名验证操作的所述预设业务为最后一次进行服务签名操 作的业务时,步骤S2进一步包括:枚举应用程序包中ΜΕΤΑ-INF目录内部所述开发者签名文 件与预设业务对应的服务签名文件之外的文件,检查枚举到的文件中是否存在读取的摘要 文件清单内容之外的文件,如果存在,验证结果RESULT_CHK为假,服务签名验证失败;否则 RESULT_CHK为真,服务签名验证成功。
[0063] 本发明提供的一种兼容安卓应用的服务签名方法对应用程序进行签名,具有以下 突出的优点:首先,对于同一个安卓应用程序包,使用本技术进行数字签名不会与应用程序 的开发者签名发生任何冲突,采用本技术进行的多方重签名得到的不同发布版本的安卓应 用在更新安装时能够保留用户数据;其次,服务方签名数据存储在服务方域名以及业务名 称相关的目录中,不同的服务方签名数据互不干扰,不同的业务签名互不影响,签名文件命 名空间无限制,根本上解决了传统应用签名机制签名文件名称容易发生碰撞的问题;再次, 服务方的应用签名与业务签名均可以独立进行验证,互不影响,并具有和传统应用签名机 制等同的完整性和认证性安全,且当进行服务签名验证操作的业务为最后一次进行服务签 名操作的业务时,对RESULT_CHK进行验证的增强的验证模式将保证检测出对软件包的任 何形式的篡改,包括检测出对ΜΕΤΑ-INF目录内除开发者签名文件之外的任何篡改。
[0064] 如图3所示,本发明提供了一种兼容安卓应用的服务签名装置10,包括:服务数字 签名模块101以及服务签名验证模块102。
[0065] 具体地,结合图4所示的多个业务调用服务数字签名模块101进行签名的过程, 服务数字签名模块101用于对应用程序软件包除开发者签名外的所有数据文件列出清单 LIST,并完成兼容安卓应用的服务签名操作;服务签名验证模块102用于通过使用服务自 身标识证书或标识公钥对兼容安卓应用的服务签名进行验证。其中,开发者签名的数据文 件包括:.MF文件、.SF文件和.RSA文件。
[0066] 进一步地,服务数字签名模块101包括:第一摘要操作单元,用于将清单LIST中 所有数据文件进行摘要操作得到摘要信息;第一组串单元,用于将得到的所有摘要信息组 成一个字符串MSG ;第一签名值获取单元,用于通过使用服务方证书私钥对MSG进行数字签 名,获得签名值SIG ;存储单元,用于在软件包中预先创建的ΜΕΤΑ-INF目录中创建和服务方 提供的预设业务名称相关的目录,并在此目录中创建服务签名文件存储数字签名数据SIG, 并存储包含所有相关摘要的文件路径名的清单文件。
[0067] 进一步地,服务签名验证模块102包括:解析单元,用于解析应用程序包apk文 件,根据自身服务方名称找到对应的服务签名文件存储目录,并从存储目录中找到预设业 务名称对应的摘要文件清单;枚举检查单元,用于枚举应用程序包中ΜΕΤΑ-INF目录外所 有文件,检查枚举到的文件中是否存在摘要文件清单内容之外的文件,如果存在则服务签 名验证失败;第二摘要操作单元,用于读取清单文件中列出的所有数据文件进行摘要操作 得到摘要信息;第二组串单元,用于将所有数据文件摘要信息组成一个字符串MSG ;第二签 名值获取单元,用于从预先创建的ΜΕΤΑ-INF目录中读取服务签名文件的所述签名值SIG ; 验证单元,用于通过使用业务证书,MSG、SIG三个因子进行签名验证运算,得到验证结果 RESULT_VER,如果验证成功,RESULT_VER为真;否则RESULT_VER为假,服务签名验证失败。 [0068] 更进一步地,验证单元,当进行服务签名验证操作的所述预设业务为最后一次进 行服务签名操作的业务时,还用于枚举应用程序包中ΜΕΤΑ-INF目录内部所述开发者签名 文件与预设业务对应的服务签名文件之外的文件,检查枚举到的文件中是否存在读取的摘 要文件清单内容之外的文件,如果存在,验证结果RESULT_CHK为假,服务签名验证失败;否 则RESULT_CHK为真,服务签名验证成功。
[0069] 为了更好的理解与应用本发明公开了一种兼容安卓应用的服务签名方法与装置, 进行以下实施例示意,且本发明不仅局限于下述所列举的实施例。
[0070] 实施例1
[0071] 假定服务方某业务的私钥为prikey,业务证书为cert,服务方域名为www. cstc. org. cn,服务的业务名称为"应用加固",对应拼音缩写为YYJG,待签名应用程序包sample, apk的结构如下:
[0072] sample, apk
[0073]
[0074]

【权利要求】
1. 一种兼容安卓应用的服务签名方法,其特征在于,包括具体以下步骤: 51 :对应用程序软件包除开发者签名外的所有数据文件列出清单LIST,并完成兼容安 卓应用的服务签名操作; 52 :通过使用服务自身标识证书或标识公钥对所述兼容安卓应用的服务签名进行验 证。
2. 如权利要求1所述的方法,其特征在于,所述步骤S1进一步包括: 511 :将所述清单LIST中所有数据文件进行摘要操作得到摘要信息; 512 :将得到的所有所述摘要信息组成一个字符串MSG ; 513 :通过使用服务方证书私钥对所述MSG进行数字签名,获得签名值SIG ; 514 :在软件包中预先创建的ΜΕΤΑ-INF目录中创建和服务方提供的预设业务名称相关 的目录,并在此目录中创建服务签名文件存储所述数字签名数据SIG,并存储包含所有相关 摘要的文件路径名的清单文件。
3. 如权利要求2所述的方法,其特征在于,所述步骤S14进一步包括:在软件包中的所 述ΜΕΤΑ-INF目录中生成一个以服务方域名中顶级域名命名的目录,即为第一目录,在所述 第一目录中嵌套创建一个服务方域名倒数第二段字符串命名的目录,即为第二目录,进一 步在所述第二目录中创建一个以服务方域名倒数第三段字符串命名的目录,以此类推,直 至服务方域名第一段字符串为止。
4. 如权利要求1所述的方法,其特征在于,所述步骤S2进一步包括: 521 :解析应用程序包apk文件,根据自身服务方名称找到对应的服务签名文件存储目 录,并从所述存储目录中找到预设业务名称对应的摘要文件清单; 522 :枚举应用程序包中ΜΕΤΑ-INF目录外所有文件,检查枚举到的文件中是否存在摘 要文件清单内容之外的文件,如果存在则服务签名验证失败; 523 :读取清单文件中列出的所有数据文件进行摘要操作得到摘要信息,将所有数据文 件摘要信息组成一个字符串MSG ; 524 :从预先创建的ΜΕΤΑ-INF目录中读取服务签名文件的所述签名值SIG ; 525 :通过使用业务证书,MSG、SIG三个因子进行签名验证运算,得到验证结果RESULT_ VER,如果验证成功,RESULT_VER为真;否则RESULT_VER为假,服务签名验证失败。
5. 如权利要求1所述的方法,其特征在于,所述步骤S2进一步包括:枚举应用程序包 中ΜΕΤΑ-INF目录内部所述开发者签名文件与预设业务对应的服务签名文件之外的文件, 检查枚举到的文件中是否存在读取的摘要文件清单内容之外的文件,如果存在,验证结果 RESULT_CHK为假,服务签名验证失败;否则RESULT_CHK为真,服务签名验证成功。
6. -种兼容安卓应用的服务签名装置,其特征在于,包括: 服务数字签名模块,用于对应用程序软件包除开发者签名外的所有数据文件列出清单 LIST,并完成兼容安卓应用的服务签名操作; 服务签名验证模块,用于通过使用服务自身标识证书或标识公钥对所述兼容安卓应用 的服务签名进行验证。
7. 如权利要求6所述的装置,其特征在于,所述服务数字签名模块包括: 第一摘要操作单元,用于将所述清单LIST中所有数据文件进行摘要操作得到摘要信 息; 第一组串单元,用于将得到的所有所述摘要信息组成一个字符串MSG ; 第一签名值获取单元,用于通过使用服务方证书私钥对所述MSG进行数字签名,获得 签名值SIG; 存储单元,用于在软件包中预先创建的ΜΕΤΑ-INF目录中创建和服务方提供的预设业 务名称相关的目录,并在此目录中创建服务签名文件存储所述数字签名数据SIG,并存储包 含所有相关摘要的文件路径名的清单文件。
8. 如权利要求6所述的装置,其特征在于,所述服务签名验证模块包括: 解析单元,用于解析应用程序包apk文件,根据自身服务方名称找到对应的服务签名 文件存储目录,并从所述存储目录中找到预设业务名称对应的摘要文件清单; 枚举检查单元,用于枚举应用程序包中ΜΕΤΑ-INF目录外所有文件,检查枚举到的文件 中是否存在摘要文件清单内容之外的文件,如果存在则服务签名验证失败; 第二摘要操作单元,用于读取清单文件中列出的所有数据文件进行摘要操作得到摘要 信息; 第二组串单元,用于将所有数据文件摘要信息组成一个字符串MSG ; 第二签名值获取单元,用于从预先创建的ΜΕΤΑ-INF目录中读取服务签名文件的所述 签名值SIG; 验证单元,用于通过使用业务证书,MSG、SIG三个因子进行签名验证运算,得到验证结 果RESULT_VER,如果验证成功,RESULT_VER为真;否则RESULT_VER为假,服务签名验证失 败。
9. 如权利要求8所述的装置,其特征在于,所述验证单元,还用于枚举应用程序包中 ΜΕΤΑ-INF目录内部所述开发者签名文件与预设业务对应的服务签名文件之外的文件,检 查枚举到的文件中是否存在读取的摘要文件清单内容之外的文件,如果存在,验证结果 RESULT_CHK为假,服务签名验证失败;否则RESULT_CHK为真,服务签名验证成功。
【文档编号】G06F21/51GK104092544SQ201410300232
【公开日】2014年10月8日 申请日期:2014年6月26日 优先权日:2014年6月26日
【发明者】罗文 , 骆俊瑞, 黄子河, 刘法旺, 杨玚, 严宏君, 马会丽, 庞思铭 申请人:工业和信息化部计算机与微电子发展研究中心(中国软件评测中心)
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1