电子证书管理的制作方法

文档序号:14721761发布日期:2018-06-17 17:14阅读:418来源:国知局

相关申请的交叉引用

本申请依据35U.S.C§119(e)要求第61/346452号美国临时申请的优先权,其全文内容通过引用结合于此。

技术领域

本申请涉及管理针对诸如软件应用之类的电子媒体产品的访问和权限。



背景技术:

软件可能难以创建但是易于拷贝。创建出好的软件应用可能经常要花费数百或数千小时,但是不法用户有时利用基本的计算机在数秒内就能够拷贝该同样的工作产品。版权法提供了合法保护的措施,但是其无法直接防止未获授权的各方制造发行商软件的拷贝。因此,在许多情况下,单独的版权保护可能是远远不够的。

一些软件发行商已经实现了技术障碍来阻止其软件和其它内容的未授权拷贝—例如,使用拷贝保护方案或者各种数字权限管理(DRM)系统。一个这样的拷贝保护方案的示例被称作正向锁定(forwardlocking),其例如可以被用来针对第三方可以通过应用商店进行出售的软件应用的未授权拷贝进行保护。使用正向锁定方法,客户端设备从应用商店将所请求的软件下载到设备上的受保护空间,应用的二进制码在该受保护空间无法被用户轻易访问。这样的方法可能涉及复制不可执行资源,这对于一些应用(诸如游戏)而言会大幅增加其安装大小。甚至更为重要的是,在某些情况下,这样的方法在已经出于研发目的而被“解锁”的诸如智能电话之类的设备上会被克服,使得应用的二进制码易于从设备拷贝出去。



技术实现要素:

本文档描述了用于对软件应用或类似数字项目的当前许可(或称证书)状态进行验证的系统和方法。应用的许可状态可以被链接至尝试使用该应用的特定用户或特定设备,并且在一些情况下,可以被用来控制该特定用户或设备是否被允许继续使用该应用。例如,如果用户已经通过非正常渠道获得了应用,例如通过从好友那里复制应用而不是从发行商那里购买该应用,则其许可状况可以指示该用户并非许可用户。该应用进而可以以适当方式进行响应,诸如通过禁用某些仅对许可用户可用的功能。

在一些实现中,这里所描述的技术例如可以被用来保护经由受信任组织所运营的应用市场所供应的软件。该受信任组织还可以针对市场中所供应的软件而提供对许可服务的访问。任意数量的软件发行方可以在应用市场上供应其应用,并且应用可以由各种用户购买或对他们进行分发。在一些情况下,希望访问应用市场的用户可以使用在用户的客户端设备上运行的市场客户端来浏览或购买通过应用市场所供应的应用。

使用这样的系统供应其软件应用的软件发行商可能想要防止那些应用的盗版。例如,虽然发行商的应用的大多数拷贝可以通过应用市场合法购买、许可并分发,但是也可能存在其它潜在的未授权的拷贝。这样,发行商会希望以一种便利的方式在合法许可的拷贝和非合法的未许可拷贝之间进行区分。

根据这里所描述的技术,在客户端设备上执行的应用可以通过查询许可服务器来查询应用的当前许可状态(例如,特定用户和/或设备是否被许可使用该应用)。许可服务器可以利用许可状态进行响应(例如,特定用户经由其所注册的一个账户和/或特定设备而被许可或未被许可使用该应用),因此在应用的合法拷贝和非合法拷贝之间提供区别。例如,许可检查技术可以在应用开启时被激活,并且可以基于许可检查的结果来确定该应用的进一步使用。在一些实现中,如果许可检查指示应用并未被恰当许可,则该应用可以自己关闭或者仅提供其整体功能的有限子集。

在一个一般方面,本申请描述了一种计算机实施的用于确定软件应用的许可状态的方法。该方法可以包括利用客户端计算设备上所执行的许可客户端并且从客户端计算设备上所执行的软件应用接收用于获得该软件应用是否被许可在该客户端计算设备上使用的指示的许可状态请求。该方法还可以包括使用该许可客户端识别与至少一个群组相对应的身份信息,该群组由对应于该客户端计算设备的用户的用户身份信息以及对应于该客户端计算设备的设备身份信息所构成。该方法还可以包括向从该客户端计算设备远程操作的许可服务发送从许可状态请求和身份信息所生成的通信,该通信被该许可服务用来至少部分地基于该身份信息以及与该软件应用相关联的许可信息生成该软件应用是否被许可在该客户端计算设备上使用的指示。该方法还包括利用该许可客户端从许可服务接收许可状态响应,其包括该软件应用是否被许可在该客户端计算设备上使用的指示。该方法还可以包括向该软件应用发送该许可状态响应以便由该软件应用进行处理。

在另一个一般方面,本申请描述了一种计算机实现的用于获得软件应用的许可状态的系统。该系统可以包括被布置为执行软件应用和许可客户端的客户端计算设备。该系统还可以包括被布置为执行许可服务的许可服务器系统。该软件应用可以被配置为生成许可状态请求以从许可服务获得该软件应用是否被许可在客户端计算设备上使用的指示,并且向许可客户端提供许可状态请求。许可客户端可以被配置为从软件应用接收该许可状态请求,识别与至少一个群组相对应的身份信息,该群组由对应于该客户端计算设备的用户的用户身份信息以及对应于该客户端计算设备的设备身份信息所构成,并且向许可服务发送从许可状态请求和身份信息所生成的通信。许可服务可以被配置为从许可客户端接收该通信,至少部分地基于该身份信息以及与该软件应用相关联的许可信息生成该软件应用是否被许可在该客户端计算设备上使用的指示,生成包括该软件是否被许可在该客户端计算设备上使用的指示的许可状态响应,并且将该许可状态响应发送至许可客户端。该许可客户端可以进一步被配置为从许可服务接收该许可状态响应,并且向软件应用提供该许可状态响应。该软件应用可以进一步被配置为从许可客户端接收该许可状态响应,并且对该许可状态响应进行处理。

在另一个一般方面,本申请描述了一种计算机实现的方法,其包括利用许可服务器系统上执行的许可服务以及从在许可服务器系统远程进行操作的客户端计算设备上执行的许可客户端接收用于确定该客户端计算设备上执行的软件应用是否被许可在该客户端计算设备上使用的请求。该请求可以包括对应于用户身份信息和设备身份信息所构成的至少一个群组的身份信息。该方法还可以包括访问许可信息,其包括与通过应用市场进行的软件购买相关联的购买记录。该方法还可以包括至少部分地基于许可信息和身份信息生成该软件应用是否被许可在该客户端计算设备上使用的指示。该方法还可以包括向客户端计算设备发送该指示以便由该客户端计算设备进行处理。

在某些实例中,各种实现能够提供以下的一种或多种优点。这里所描述的许可方法对于软件发行方而言相对易于实现,但是对于用户而言则相对难以破解。这样,软件发行方可能能够花费更多时间将其应用编码为包括该应用针对其进行设计的功能,而不是开发专用拷贝保护方案。此外,该许可方法可以是灵活的,从而其允许软件发行方以他们所选择的任意方式来推行可配置的许可策略。此外,在某些实现中,许可检查功能不会明显增加应用的大小。

在附图和以下描述中阐述一个或多个实施例的细节。其它特征和优势将由于描述和附图以及权利要求而是明显的。

附图说明

图1是用于分发软件应用并且检查应用的相应许可状态的系统的概念图。

图2是用于检查软件应用的许可状态的多层系统的概念图。

图3是示出示例的许可检查和响应的图。

图4是用于请求并处理软件应用的许可状态的过程的泳道图。

图5示出了具有这里所描述的许可状态检查系统和过程所能够采用的示例状态代码的表。

图6示出了能够被用来实现这里所描述的技术的计算机设备和移动计算机设备的示例。

在各示图中的同样的附图标记指示同样的要素。

具体实施方式

本文档描述了一种用于针对非许可用户和/或设备对应用的非授权使用而保护通过中心应用商店(或app商店)分发和出售的软件应用的系统和技术。该系统和技术使用了一种许可方案,其例如通过将与用户或设备相关的信息与购买记录集合相比较来识别应用是否已经对该用户和/或设备适当许可,来检查应用的当前许可状态,并且将应用的许可状态返回至应用以便进行适当处理。例如,当许可状态检查指示当前用户并未被许可使用该应用,则该应用可以使得禁用仅对许可用户可用的某些特征。在一些情况下,这里所描述的许可方案还可以被用来保护通过应用商店供应的其它数字内容。

这样的功能可以由运营针对多个不同软件发行方的应用商店的单个软件分发服务来提供。许可系统可以发布用于与其进行交互的指南,从而个体发行方能够相当便利地获得许可保护而不必建立其自己的验证系统并且对这样的系统进行操作。相反,他们能够以相当标准的方式上传其应用以便呈现在应用商店中,并且能够使得为他们实现的许可限制,并且与许可事务相关的信息被报告给他们。

软件发行方可以将其应用(或app)连同适当元数据(例如,定价、文字描述、图标、用于从下载该应用的用户接收支付的账户号码,等等)一起上传至应用商店。这样的发行方可能希望使用法律和技术上结合的许可方法来限制其应用的盗版行为。该方法的技术方面可以对软件的非许可使用施加限制,而该方法的法律方面则可以在与技术限制相一致的法律方面对使用该软件的相对应权限进行限定。发行方可以从用于定义技术和法律限制之一或这二者的选项菜单中进行选择(例如,通过从某些已知且标准的许可系统进行选择,诸如已知的开源许可系统),和/或能够完全自己对这样的限制进行定义,诸如通过提供其自己的许可语言。

如以下更为详细描述的,例如在用户被允许在客户端设备上运行应用之前,受信任的许可服务可以为发行方提供可靠的方式来通过检查应用的许可状态而控制对其应用的访问。当应用检查许可服务器处的许可状态时,该许可服务器可以使用私钥签名许可状态响应,该私钥可以被用来确认该许可状态响应确实是由许可服务器所生成。该私钥例如可以是与应用或发行方账户唯一相关联的公钥/私钥对的一部分。应用可以在其经编译的二进制码中包括相对应的公钥,并且可以使用公钥/私钥对来验证许可状态响应的完整性。

为了帮助发行方将许可功能整合到应用中,操作许可服务或者提供对其的访问的受信任组织(例如,运作应用商店的同一组织)可以提供能够被嵌入应用之中的代码库。在这里被描述为许可验证库(LVL)的代码库可以对与在用户的客户端设备上操作的市场客户端进行的许可相关通信进行处理,并且市场客户端可以转而与远程许可服务器上操作的许可服务进行通信。使用嵌入式的LVL,应用能够通过调用许可检查器方法并且实现在来自远程许可服务器的签名响应中接收许可状态的回调(callback)来确定其当前许可状态。

图1是用于分发软件应用并且检查应用的相应许可状态的系统100的概念图。在该系统中,设备102与托管(host)诸如应用商店的应用市场106的服务器104进行通信。这样的通信可以在任意适当网络上进行(例如,互联网、LAN、WAN、无线宽带或其任意组合)。客户端设备102被描绘为智能电话,但是其它类型的客户端设备(例如,台式计算机、膝上计算机、网本、平板电脑、机顶盒等)也可以与服务器104进行通信。类似地,服务器104被描绘为独立服务器,但是服务器104可以表示服务器集群、服务器群,或者被用来托管保有应用市场106的其它服务器分组。在一些实现中,服务器104可以由提供这里所描述的许可服务的受信任组织进行操作。

客户端设备102可以被配置为执行为设备提供各种类型的功能的任意数量的软件应用(或app)。一种应用类型可以是提供与应用市场106的连接并且与之进行交互的市场客户端应用。市场客户端应用可以与受信任组织相关联,并且可以由受信任组织出于访问应用市场106的目的而提供。使用市场客户端应用,客户端设备102的用户可以浏览应用市场106或者搜索通过应用市场106所发布的具体应用。

在典型的市场交易中,用户诸如可以通过搜索或浏览应用市场106来识别感兴趣的应用,并且可以随后决定购买该应用。如箭头A所示出的,客户端设备102例如可以从设备上执行的市场客户端向应用市场106发送应用购买请求108。应用市场106可以例如通过针对应用对用户收费并且诸如通过创建交易的电子记录来登记该购买而对交易进行处理。交易的电子记录随后可以被用来验证购买应用的用户是该应用的许可用户。如箭头B所示,应用市场106随后可以将所请求应用的二进制码110递送至客户端设备102。

如以上所描述的,客户端设备102的用户还能够通过非法渠道获得应用二进制码110。例如,应用二进制码110可以被没有被软件发行方许可这样做的用户进行拷贝和/或再次分发。在这样的情况下,软件发行方在一定程度上可能难以控制其应用的未许可使用。

这样,根据这里所描述的技术,软件发行方可以使用许可状态检查系统来确定应用的特定拷贝是否被尝试执行该应用的用户所适当许可。例如,如果尝试执行应用的用户并没有通过应用市场106购买该应用,则可以认为该应用没有对该特定用户进行许可。许可状态检查系统还可以或者备选地被用来确定特定设备是否被许可执行应用。例如,软件发行方可以将应用的许可与特定设备进行捆绑以使得具有多个设备的用户仅可以被允许在该应用在其上实际被许可的一个或多个设备上对其进行使用。备选地,设备可以与其所登录的账户进行捆绑,并且许可可以与该账户相关联,从而用户能够在多个设备上执行应用而其它用户则无法在该设备上执行相同应用(除非他们作为第一用户登录或者他们的账户也被许可使用该应用)。

如以下更为详细描述的,如箭头C所示,利用这里所描述的许可状态检查系统的应用可以向托管许可检查器服务116的服务器104发出许可检查请求112。作为一个示例,该应用可以包括使得在应用启用时发出许可检查请求112的指令。在一些实现中,应用本身可能无法与服务器104直接进行通信,而是可以另外与同样在客户端设备102上执行的市场客户端进行通信。市场客户端可以与应用市场206相关联并且对其提供访问。市场客户端可以被配置为向许可检查器服务116发送许可检查请求112,并且接收从许可检查器服务116发回的任意响应。因此,市场客户端可以用来促使针对设备上的多个应用中的每一个的许可状态检查,并且可以在每次应用之一被执行时被调用或者在如每个相应服务所确定的适当时间被调用。

许可检查请求112可以通过任意适当网络(例如,互联网、LAN、WAN、无线宽带或其任意组合)被传输至服务器104。服务器104被描绘为托管应用市场106和许可检查器服务116,但是应当理解的是,应用市场106和许可检查器服务116的功能可以在不同服务器上托管。此外,应用市场106和许可检查器服务116中每一个的功能可以进一步进行划分(segment)并且被托管在任意适当数量的不同服务器上,以便例如跨附加网络设备分发网络业务负载。

许可检查请求112可以包括各种如下类型的数据,该数据允许许可检查器服务116确定应用是否对尝试执行该应用的当前用户或设备而被适当许可。例如,许可检查请求112可以包括指定用户尝试执行的特定应用的应用标识符(例如,包名称)。许可检查请求112还可以包括该应用随后可以用来对其从许可检查器服务116所接收的任意响应进行验证的随机数或临时数(nonce)。

这些数据类型以及其它应用特定信息都可以由应用自身所识别或生成。然而,在一些情况下,应用可能没有足够允许度来访问在确定应用是否针对特定用户或设备适当许可时可能有用的其它类型的数据。这样,在一些实现中,应用可以向客户端设备102上执行的市场客户端提供临时数、应用标识符和/或任意其它相关的应用特定信息,并且市场客户端可以收集要包括在许可检查请求112中的与用户和设备相关的附加信息。在一些情况下,市场客户端可以具有比应用更大的允许度,并且能够访问附加设备和/或用户特定信息。例如,市场客户端可能能够识别设备用户的主要账户用户名、与设备相关联的国际移动用户身份码(IMSI),以及其它的设备和/或用户特定信息。

在一些实现中,应用可以例如通过远程过程间通信(IPC)调用市场客户端以发起许可检查,并且市场客户端可以收集要包括在许可检查请求112中的附加信息。市场客户端随后可以代表应用向许可检查器服务116发送许可检查请求112,其可以包括应用以及市场客户端所收集的信息的组合。在以上所描述的实现中,网络连接和许可相关的API可以由市场客户端而不是应用进行管理。在这样的实现中,应用自身并不需要管理到许可服务器的连接或者需要了解某些许可相关的API,并且因此应用代码尤其可以更为集中于其设计所针对的特定功能(因此对于发行方而言简化了开发并且可能缩小应用的大小,这可以在多个应用了缓解该负担并且该负担相反置于单个许可检查系统上时是相关的)。

当接收到许可检查请求112时,许可检查器服务116可以对该请求进行评估以确定是否能够从该请求中的信息针对某个信任水平建立用户身份。在一些实现中,该系统可以使用信任阈值,从而用户能够利用某个信任水平(例如,百分之八十的概率)进行标识,许可检查可以如以下所描述的继续进行,但是如果信任水平低于阈值,则许可检查可以终止和/或可以提供程序性(programmatic)响应。针对没有达到阈值信任水平的程序性响应的示例可以包括生产错误代码或在响应中发送诸如“非许可”的缺省许可状态。

信任水平可以基于直接或间接对应于请求中的信息的因素。例如,与设备相关联的用户名可以被认为是用于识别用户的直接因素,而位置标识符(例如,通过IP地址、来自设备的GPS读数或者小区塔台或其它访问点位置所确定的设备的当前地理位置)则可以被认为是间接因素。不同用户识别因素在各种实现中可以被等同或非等同地进行加权。例如,在所有因素等同加权的示例中,其中四个或五个因素认为应用的用户是特定人员,系统就可以百分之八十地确认该用户就是那个人。在其它示例中,不同因素可以被不同地进行加权,例如根据该因素与确定用户的身份有多相关来加权。

在一些实现中,请求可以包括与客户端设备的认证用户相关联的令牌。例如,与用户相关联的信息可以由许可服务或第三方认证服务进行认证,并且这样的认证可以以令牌形式来表示。令牌可以存储在客户端设备上,并且例如可以由应用或市场客户端进行访问以包括在许可检查请求中。包括这样的令牌可以被认为是用户身份的有力直接指示,并且因此可以关于其它直接或间接指示符而被加以大的权重。在一些实现中,包括这样的令牌可以被认为是确定了用户身份。

如果许可检查器服务116能够以足够的信任水平确定用户的身份,则可以对比应用的购买记录来检查用户身份,并且许可检查器116可以返回许可检查响应118,市场客户端随后可以通过IPC回调将该许可检查响应返回至应用。例如,如果所识别的用户与购买记录中的用户相匹配,则许可检查器116可以返回“许可”响应。如果不相匹配,则可以返回“非许可”响应。在一些实现中,许可检查器服务116可以备选地或附加地基于设备特定信息对请求进行评估,并且可以对比购买记录检查设备身份以确定应用是否针对具体设备而被适当许可。

为了确保许可检查响应118的完整性,响应可以由许可检查器服务116使用私钥进行签名或加密。该私钥可以特定于发行方账户或应用,并且可以是发给软件发行方所或由其生成的公钥/私钥对的一部分。在密钥对由发行方生成的实现中,发行方可以将私钥上传至许可服务器以在签名许可检查响应时使用。

在一些实现中,受信任组织可以为每个发行方账户生成许可密钥对,并且可以在发行方账户的简档页面中给出公钥。发行方随后可以拷贝该公钥并且将其嵌入应用源代码中,该源代码随后将被编译到应用封包中。私钥可以被受信任组织所保留,其随后可以使用该私钥来签名针对相关联发行方账户所发行的应用的许可响应。例如,当接收到许可检查请求时,许可检查器服务116可以确定哪个应用的许可状态被请求,并且可以识别与该特定应用相关联的私钥以便在签名许可响应时使用。

许可检查器服务116随后可以签名许可检查响应118并且将该响应发送回客户端设备102。所签名的许可响应随后可以由应用使用应用封包中所包括的公钥进行解密。以这种方式使用公钥/私钥对通过允许应用检测许可检查响应118是否已经被篡改或者被欺骗而确保了许可状态检查查询过程的完整性。

一旦接收到有效的(例如,没有被欺骗的)许可检查响应118,应用就可以基于响应的内容而采取任意适当的动作。这样的动作可以被编译到控制应用在其接收到特定响应时如何做出反应的策略之中。例如,如果响应指示用户被适当许可使用应用,则该应用可以被编程为继续正常执行。另一方面,如果响应指示用户并未被许可使用应用,则该应用可以执行不同的编程响应,诸如通知用户对应用的非授权使用并禁止,并且提供允许用户获得许可的链接或其它机制。应用还可以自行关闭,由此防止对该应用的任何进一步使用。

在一些情况下,该策略还控制应用在其例如由于服务器错误而接收到未验证响应时或者应用例如在设备离线的情况下根本没有接收到响应时如何做出反应。在这样的实例中,该策略可以基于过往的许可检查响应来确定适当动作。例如,如果应用已经发出了十个之前的许可检查请求,并且已经接收到指示用户和/或设备被许可使用该应用的十个许可检查响应,则该策略可以将该未验证响应或响应缺失作为异常而忽视,并且该应用可以被允许继续正常执行。类似地,如果应用已经接收到十个指示该用户和/或设备并未被许可使用该应用的许可检查响应,则该策略可以禁用该应用的进一步执行。

其它的定制约束也可以或备选地包括在该策略中。例如,当响应指示应用并未被适当许可时,该应用可以继续执行,但是可以诸如通过禁用仅对被许可用户可用的特征仅向非许可用户提供有限功能。应用因此可以像免费模式的免费版(freemium)分销模型那样进行操作,令用户有机会采取动作来升级至完全特征的高级版(premium)模式。作为另一个示例,在被完整或部分无效之前,应用例如可以针对测试应用是否值得购买的用户允许某个数量的非许可使用。在其它情况下,应用可以提供例如七天的试用期,在此期间即使应用没有被许可也能够使用全部或部分功能。这些和其它类型的约束可以由软件发行方来建立,其可以以发行方认为适当的任何方式对许可检查响应中所返回的许可状态进行处理。

在一些实现中,设备上执行的操作系统可以备选地或附加地被配置为接收从许可检查器服务116所发送的许可检查响应并且对其做出反应。在这样的实现中,与如以上所描述的应用可以反应的方式相类似,操作系统可以在接收到有效许可检查响应118时发起适当动作。例如,在接收到指示应用没有被许可在客户端设备上使用的许可检查响应118时,操作系统可以终止应用。

图2是用于检查软件应用的许可状态的多层系统200的概念图。在系统200中,名为myApp的应用205和市场客户端210驻留并执行于客户端设备上。市场客户端210可以被配置为与在客户端设备远程执行的许可服务器215进行通信,以确定在客户端设备上运行的myApp205的许可状态。为了检查myApp205的许可状态,该应用例如可以通过远程IPC240向市场客户端210传送许可检查请求,市场客户端210转而可以针对myApp205的许可状态而对许可服务器215进行查询。

myApp205可以由软件发行方进行编译以包括例如LVL220的许可库、主要活动模块225和公钥230。通常,LVL220可以被用来执行如这里所描述的各种许可检查技术,主要活动模块225可以包括与应用的主要功能相关的指令,而公钥230可以被用来对myApp205从许可服务器215所接收的许可响应进行验证。在一些实现中,软件发行方可以执行应用的模糊处理(obfuscation)或二进制封包,这可以使得不法用户难以改变或篡改应用或LVL。

LVL220可以由运行许可服务的受信任组织所开发并维护,并且可以被提供至软件发行方以简化许可检查在其应用中的实现。LVL220可以包括对在许可状态查询期间执行的所有或部分功能进行处理的内部分类,诸如联系市场客户端210以发起许可状态请求,并且验证并确认对许可状态请求的任意响应。LVL220还可以给出一个或多个接口,其允许软件发行方插入定制代码以便定义适当的许可策略并且基于对许可状态请求的响应来管理对应用的访问控制。

在一些实现中,LVL220包括促成针对应用的当前许可状态的请求的API。对该API的调用可以接受一个或多个参数。例如,API调用可以接受应用所生成的随机数,其可以被用来确认任意所返回的许可响应。API调用还可以接受应用标识符参数,诸如来自应用市场的清单(manifest)中所定义的可以允许许可服务识别应用的应用封包名称。API调用还可以接受如清单中所定义的应用版本代码参数。API还可以接收回调功能,其可以用作代表功能来处理来自许可服务器215的异步响应。

主活动模块225可以包括与应用的主要功能相关的指令,并且可以包括对LVL220的一个或多个调用。例如,在应用启动期间,主活动模块225可以包括对LVL220的早期调用以使得许可状态请求得以执行。主活动模块225还可以或备选地包括对LVL220的其它调用以便在启动之外的具体执行点处执行许可状态请求。例如,特定游戏应用可以允许未许可用户玩该游戏的前三个级别,但是可能针对进一步的进度要求许可。在这种情况下,主活动模块225可以在用户尝试访问前三个之后的任意级别时包括对LVL220的调用。

许可服务器215可以作为受信任许可服务器进行操作以确定例如myApp205的应用是否针对试图执行该应用的用户或设备而被许可。如以上所描述的,myApp205可以包括基于来自许可服务器的许可状态响应而允许或不允许应用的进一步使用的逻辑,或者可以包括用于以应用发行方所指定的方式对响应进行处理的其它逻辑。这样,许可服务器215的角色可以是为用户提供许可状态,但是应用本身则可以负责查询服务器并且有条件地批准对应用的访问。

许可服务器215可以维护与这里所描述的许可技术相关的各种信息。例如,许可服务器215可以包括诸如与在应用市场中发行软件应用的各种发行方相关的发行方数据245,对应于应用市场中所供应的软件应用的应用列表数据250,以及描述涉及通过应用市场出售的应用和其它产品的交易的购买记录数据255之类的信息。发行方数据245和应用列表数据250例如可以被用来将发行方链接至请求许可检查的应用,从而许可服务器215能够利用适当的私钥235签名响应。

在一些实现中,许可服务器215可以在用户(例如,经由与系统进行注册的用户账户)被记录为已经购买过应用或者应用可免费使用的情况下认为用户是被许可的。为了适当识别用户并确定许可状态,服务器可以从市场客户端210以许可状态请求的形式接收与应用和用户相关的信息。诸如在许可与设备而不是特定用户进行捆绑的实现中,许可状态请求可以附加地或备选地包括与试图执行应用的设备相关的信息。这样的特定于应用、特定于用户和/或特定于设备的信息可以由应用、市场客户端210或二者的组合所收集。该信息随后可以被用来识别尝试执行应用的特定用户或设备,其随后可以与购买记录数据255进行比较来确定应用是否由所识别的用户或设备通过应用市场所购买。

根据所示出的实现,myApp205并未直接查询许可服务器215,而是通过远程IPC240调用市场客户端210来发起许可请求。在其它实现中,应用例如可以在LVL220中包括允许该应用直接查询许可服务器215的逻辑。许可请求可以包括各种类型的特定于应用、特定于用户和/或特定于设备的信息以允许许可服务器215确定应用的许可状态。例如,myApp205可以将其封包名称和临时数在远程IPC调用中送至市场客户端210。myApp205还可以发出回调,来自许可服务器215的响应能够通过该回调从市场客户端210异步返回至myApp205。

在一些实现中,市场客户端210可以具有比myApp205更大的允许度,并且因此恶意收集与用户和/或设备有关的附加信息,诸如设备的主要账户用户名、IMSI和其它信息。市场客户端210随后可以代表myApp205向许可服务器215发送许可检查请求。

一旦接收到许可检查请求,许可服务器215就可以在尝试以足够信任水平建立用户和/或设备的身份时使用与用户、设备和/或应用相关的适当可用信息对该请求进行评估。如果用户和/或设备的身份得以建立,许可服务器215随后就可以对比应用的购买记录255检查该身份并且返回许可响应,市场客户端210随后可以将该许可响应通过IPC回调返回至应用。

为了确保许可查询的完整性,许可服务器215可以使用私钥235签名许可响应数据,该私钥235可以是服务器和应用发行方之间共享的RSA密钥对的一部分。在一些实现中,许可服务可以为每个发行方账户生成许可密钥对并且在账户的简档页面中给出公钥。发行方随后可以拷贝该公钥并将其嵌入应用源代码中。在编译源代码时,公钥230被嵌入应用之中,该应用随后可以在应用市场上发布。许可服务器215可以内部保留私钥235并且使用它来签名针对该账户所发布的应用的许可响应。

当应用接收到已经利用私钥235签名的响应时,其可以使用所嵌入的私钥230验证数据。在许可服务中使用公钥密码可以允许应用检测到已经被篡改或被欺骗的响应。

图3是示出示例的许可检查和响应的示图。在以上所描述的许可状态检查技术的之前示例中,应用在其想要确认该应用的许可状态的任何时候经由市场应用对许可服务器进行查询。如图3所示,应用还可以使用高速缓存机制来改进许可系统的性能。这样的实现例如可以在不可能或不便于在应用每次请求许可状态时访问许可服务器的情形中使用。例如,可以在设备例如因为该设备没有网络连接或者因为许可服务器离线而无法与许可服务器进行通信时使用高速缓存。在这样的示例中,应用仍然被允许基于高速缓存的许可状态信息进行工作。

可以向如以上参考图2所描述的应用的主要活动模块305添加一个或多个许可检查。例如,应用可以在该应用的onCreate()方法中包括许可检查,从而当用户启动应用时就调用许可检查。许可检查还可以被添加在其它的具体执行点处。例如,一些应用可以包括多个其它应用所能够执行的活动模块。在这样的情况下,许可检查也可以被包括在那些活动模块中以确保应用即使在并非由用户直接启动的情况下也得以适当许可。

许可检查可以利用两个主要接口—许可检查器接口310和许可检查器回调接口315。许可检查器接口310可以包括对发起许可检查的方法的调用。例如,在LVL中,这可以是对应用所构建的LicenseChecker对象的checkAccess()方法的调用。

许可检查器回调接口315可以包括返回许可检查结果的回调。该接口可以声明两种方法,allow()和dontAllow(),它们可以由LVL基于许可检查的结果来调用。这两种方法可以使用任意适当逻辑来实现以允许或不允许对应用的用户访问。还可以声明附加的applicationError()方法以对许可检查期间所抛出的任意应用错误进行处理。

如图中所示,应用的主活动模块305中的代码实例化了许可检查器310和许可检查器回调315对象。当构建许可检查器310时,代码可以输送包括应用上下文、所要使用的策略以及发行方用于许可的公钥的参数。

该代码随后调用许可检查器310的checkAccess()方法。该方法可以访问策略325以例如确定本地是否高速缓存有有效的许可响应。如果是,则checkAccess()可以调用许可检查器回调315中的allow()方法。否则,许可检查器310可以发起被送至许可服务器的许可检查请求。

当从许可服务器接收到响应时,许可检查器310可以创建许可验证器330,该许可验证器330对所签名的许可数据以及从响应所提取的各种信息进行验证。该信息可以被送至策略而用于进一步的评估以确定该许可对于用户是否有效(335)。如果许可被确定为有效,则策略325可以高速缓存该响应,并且可以通知验证器330,该验证器330随后可以调用许可检查器回调315的allow()方法。如果许可并非有效,则策略325可以通知验证器330,该验证器330随后可以调用许可检查器回调31的dontAllow()方法。在一些实现中,有效或无效的许可状态可以被加密并且在计算设备上本地存储,例如存储在高速缓存中。在应用错误的情况下,诸如当应用尝试检查无效封包名称的许可时,许可检查器310可以将错误响应送至许可检查器回调的applicationError()方法。

利用如以上所描述的已经被高速缓存的许可信息,对checkAccess()的后续调用可以访问高速缓存的许可信息而不是联系许可服务器。在一些实现中,高速缓存的许可数据可以在如策略325所定义的具体情形中被采用。例如,当checkAccess()方法被调用但是计算设备缺少到许可服务器的连接时,可以从许可客户端向应用返回错误消息。进而,应用可以获取高速缓存的许可状态信息。

在一些实现中,策略325可以包括高速缓存超时信息,其防止陈旧的许可状态信息被使用。例如,策略325可以擦除已经被存储达例如一周的具体时间周期的高速缓存的许可状态信息。在其它实现中,高速缓存的许可状态信息可以被保留更长时间段,但是策略325可以忽视过于陈旧的高速缓存数据。高速缓存的数据是否过于陈旧的确定可以取决于为何访问高速缓存数据。例如,由于缺少网络连接而被访问的高速缓存数据可以被认为有效达一周,而为了提高系统性能而被访问的高速缓存数据则仅在至多一小时内被认为有效,或者例如针对特定用户会话有效。

图4是用于请求并处理软件应用的许可状态的过程400的泳道图。过程400例如可以由图2的多层系统200来实现。为了清楚呈现,以下描述使用多层系统200作为描述过程400的基础。然而,可以使用另一个系统或系统组合来执行该过程。

通常,过程400可以被用来验证客户端设备上执行的应用的许可状态,并且可以在应用执行期间的任意适当的点被调用。该应用诸如可以使用JAVA的SecureRandom功能来生成安全的随机数R(405),并且可以保存该值以用于未来引用。该应用随后可以发起调用以检查应用的许可状态(410),诸如通过调用许可验证库中的checkLicense()方法并且传送R和callbackFunction参数。在checkLicense()中也可以传送附加或备选的特定于应用的参数。checkLicense()方法随后例如可以使用“intent”或“binder”或者其它适当机制来调用在客户端设备上执行的市场客户端应用。

市场客户端应用可以接收intent(415),并且可以尝试收集与用户和/或设备相关的信息(420)。例如,市场客户端应用可以识别中心的签收(signon)服务用户名、电话号码(MSISDN)、IMSI、移动设备标识符,或者其它适当的特定于用户或特定于设备的信息。该信息可以被称作身份信息。在一些实现中,身份信息可能并不被市场API服务器所信任,因此用户和设备的身份仍然是不确定的。相反,该信息可以被认为是市场API服务器在其尝试确定用户或设备的身份时可以使用的信号。

市场客户端应用例如可以通过HTTPS向市场API服务器发送检查许可发布,其传送R、应用名称以及身份信息(425)。在一些实现中,代理服务器可以被用来添加MSISDN信息以不加密部分传输,这可以提供可由市场API服务器所使用的更多的用户身份信号。

一旦接收到该检查许可发布,市场API服务器就可以记录该发布中所包括的所有或部分信息,其随后可以被用来帮助识别欺骗性用户身份信息。随着时间推移,市场API服务器所接收的多个不规律信号可以被用来识别欺骗。例如,市场API服务器可以保持客户端应用在其上执行的计算设备与和执行该应用的用户相关联的身份信息之间的关联。市场API服务器还可以保持追踪用户在其上执行应用的设备的数量和身份。在一些实现中,如果特定用户身份与某些数量的应用在不同客户端设备上的执行相关联,则这可以指示欺骗,该用户身份可能不被验证为特定应用的被许可用户。也可以由市场API服务器实现其它防止欺骗的机制,并且这可以基于随时间在市场API服务器所接收的身份信息。

市场API服务器可以确认用户和/或设备具有使用应用的有效许可(430),诸如通过进行检查来查看应用名称是否被登记至与该用户身份信息相关联的用户。市场API服务器还可以建立与用户身份相关的信任水平(435)。例如,市场API服务器可以对来自之前所接收发布的用户身份信息和所存储数据进行分析以确定该用户是其所声称的那个人的信任水平。

如果应用被登记至用户身份信息中的用户,并且如果市场API服务器例如以某个概率级别确信该用户是其所声称的人,则市场API服务器可以生成“被许可”的返回信息。否则,市场API服务器可以生成“并未被许可”的返回信息。该返回信息随后可以与附加信息相组合,该附加信息例如包括应用名称、R、封包名称、与用户相关联的系统ID和/或时间戳。市场API服务器可以使用与发行方相关联的私钥对返回消息和任意附加信息进行签名(440)。

所签名的数据和签名随后可以被返回至市场客户端,其转而可以向客户端应用返回签名结果(445)。例如,市场客户端可以利用作为参数的签名数据和签名调用回调函数以将签名结果返回至客户端应用。

客户端应用随后可以经由intent结果接收签名结果(450),并且可以使用公钥对签名结果进行解密(455)。该公钥可能已经在应用被编译时嵌入客户端应用之中,并且可以被用来验证所签名结果的完整性。客户端应用还可以比较签名数据中的返回值(460)。例如,应用可以比较返回的R以验证其与过程开始时所生成的随机数相匹配。

在验证该响应时来自市场API服务器的有效响应时,客户端应用随后例如可以基于策略决定如何对许可结果做出反应。例如,应用可以在返回消息指示应用被许可的情况下提供全部功能,并且可以在返回消息指示应用并未被许可的情况下提供有限功能或不提供功能。在一些实现中,客户端应用可以使用签名结果中的信息连同其自己的信号一起基于与应用相关联的策略来确定适当动作。

图5示出了具有可以由以上所描述的许可状态检查系统和处理所利用的示例状态代码的表。表500表示可以包括在从市场客户端到客户端应用的响应中的示例状态代码。表500中的状态代码全部包括在客户端应用发起许可状态检查之后所出现并且由于许可服务器没有接收到许可状态检查请求而被市场客户端未签名地返回的错误。客户端应用可以被配置为根据客户端应用所定义的策略对这些或其它状态代码进行处理。

表550表示可以响应于许可状态检查请求而从许可服务器返回至客户端应用的示例状态代码。除非另外指出,否则该状态代码被签名以使得客户端应用能够验证来自许可服务器的响应。客户端应用可以被配置为如以上所描述的根据客户端应用所定义的策略对这些或其它状态代码进行处理。

图6示出了均可随这里所描述的技术一起使用的通用计算机设备600和通用移动计算机设备650的示例。计算设备600旨在表示各种形式的数字计算机,诸如膝上计算机、台式机、工作站、个人数字助理、服务器、刀锋服务器、大型机和其它适当计算机。计算设备650旨在表示各种形式的移动设备,诸如个人数字助理、蜂窝电话、智能电话和其它类似的计算设备。这里所示出的组件、其连接和关系以及其功能仅旨在进行示例,而并非意在对本文档中所描述和/或要求保护的发明的实现进行限制。

计算设备600包括处理器602、存储器604、存储设备606、连接到存储器604和高速扩展端口610的高速接口608,以及连接到低速总线614和存储设备606的低速接口612。组件602、604、606、608、610和612的每一个使用各种总线进行互连,并且可以安装在共用主板上,或者以其它适宜方式进行安装。处理器602能够处理指令以便在计算设备600内执行,该指令包括存储在存储器604中或者存储设备606上以在诸如耦合到高速接口608的显示器616的外部输入/输出设备上显示用于GUI的图形信息的指令。在其它实现中,可在适当时使用多个处理器和/或多个总线,以及多个存储器和存储器类型。而且,多个计算设备600可以与提供各部分必要操作的每个设备进行连接(例如,作为服务器组、刀锋服务器分组或多处理器系统)。

存储器604存储计算设备600内的信息。在一种实现中,存储器604是一个或多个易失性存储单元。在另一实现中,存储器604是一个或多个非易失性存储器单元。存储器604还可以是另一形式的计算机可读介质,诸如磁盘或光盘。

存储设备606能够为计算设备600提供大型存储。在一种实现中,存储设备606可以是或者可包含计算机可读介质,诸如软盘设备、硬盘设备、光盘设备、磁带设备、闪存或其它类似固态存储器设备、或者设备阵列,包括存储域网络或其它配置中的设备。计算机程序产品可有形实现在信息载体中。计算机程序产品还可包含指令,当该指令被执行时,执行诸如以上所描述的一个或多个方法。信息载体是计算机或机器可读介质,诸如存储器604、存储设备606、或处理器602上的存储器。

高速控制器608管理计算设备600的带宽密集操作,而低速控制器612管理较低带宽密集的操作。这样的功能分配仅是示例性的。在一种实现中,高速控制器608(例如,通过图形处理器或加速器)耦合到存储器604、显示器616,并且耦合到可接受各种扩展卡(未示出)的高速扩展端口610。在实现中,低速控制器612耦合到存储设备606和低速扩展端口614。可以包括各种通信端口(例如,USB、蓝牙、以太网、无线以太网)的低速扩展端口可耦合到一个或多个输入/输出设备,诸如键盘、指点设备、扫描仪,或者例如通过网络适配器耦合到诸如交换机和路由器之类的联网设备。

如图所示,计算设备600能够以各种不同形式来实现。例如,其可以实现为标准服务器620,或者在这种服务器群组中实现多次。其还可以被实现为机架式服务器系统624的一部分。此外,其还可以在诸如膝上计算机622的个人计算机中实现。备选地,来自计算设备600的组件可以与诸如设备650的移动设备(未示出)中的其它组件相结合。每个这样的设备可包含一个或多个计算设备600、650,并且整个系统可由多个彼此通信的计算设备600、650所构成。

除其它组件之外,计算设备650包括处理器652、存储器664、诸如显示器654的输入/输出设备、通信接口666和收发器668。设备650还可提供有诸如微驱动器或其它设备的存储设备以提供附加存储。每个组件650、652、664、654、666和668使用各种总线进行互连,并且若干组件可安装在共用主板上或者以其它适宜方式进行安装。

处理器652能够执行计算设备650内的指令,包括存储在存储器664中的指令。处理器可被实现为包括单独且多个的模拟和数字处理器的芯片的芯片组。例如,处理器可提供设备650的其它组件的协同,诸如用户接口控件、设备650所运行的应用程序以及设备650所进行的无线通信。

处理器652可以通过耦合到显示器654的控制接口658和显示接口616与用户进行通信。显示器654例如可以是TFTLCD(薄膜晶体管液晶显示器)显示器或OLED(有机发光二极管)显示器,或者其它适当的显示技术。显示接口656可以包括用于驱动显示器654向用户显示图形和其它信息的适当电路。控制接口658可以从用户接收命令并且对其进行转换以便向处理器652进行提交。此外,可提供与处理器652进行通信的外部接口662,从而使得设备650能够与其它设备进行近域通信。例如,外部接口662在一些实现中可提供有线通信,或者在其它实现中提供无线通信,并且也可使用多个接口。

存储器664存储计算设备650内的信息。存储器664可以实现为一个或多个计算机可读介质或媒体、一个或多个易失性存储器单元或者一个或多个非易失性存储器单元。也提供扩展存储器674并通过扩展接口672连接到设备650,例如,扩展接口672可以包括SIMM(单列存储组模)卡接口。这样的扩展存储器674可为设备650提供额外的存储空间,或者还可以为设备650存储应用程序或其它信息。具体而言,扩展存储器674可以包括指令以执行或补充以上所描述的处理,并且还可以包括安全信息。例如,扩展存储器674由此可被提供作为设备650的安全模块,并且可利用允许对设备650进行安全使用的指令进行编程。此外,可经由SIMM卡提供安全应用程序以及附加信息,诸如以不可破坏的方式在SIMM卡上设置识别信息。

例如,如以下所描述的,存储器可以包括闪存和/或NVRAM存储器。在一种实现中,计算机程序产品有形实现在信息载体中。计算机程序产品还可包含指令,当被执行时,指令执行诸如以上所描述的一个或多个方法。信息载体是计算机或机器可读介质,诸如存储器664、扩展存储器674、处理器652上的存储器。

设备650可通过通信接口666进行无线通信,在必要时,通信接口666包括数字信号处理电路。通信接口666可在各种模式或协议下提供通信,除其它之外,模式或协议诸如GSM语音呼叫、SMS、EMS或MMS消息发送、CDMA、TDMA、PDC、WCDMA、CDMA2000或GPRS。例如,这样通信可通过射频收发器668进行。此外,诸如可使用蓝牙、WiFi或其它这样的收发器(未示出)进行短距离通信。此外,GPS(全球定位系统)接收器模块670可为设备650提供附加的导航和位置相关的无线数据,其可由设备650上运行的应用程序适当使用。

设备650还可以使用音频编解码器660进行可听通信,音频编解码器660接收来自用户的话音信息并且将其转换为可用的数字信息。音频编解码器660同样可以诸如通过扬声器(例如在设备650的听筒中)为用户生成可听声音。这样的声音可以包括来自语音电话呼叫的声音,可以包括录制的声音(例如,语音消息、音乐文件等),并且还可以包括设备650上运行的应用所生成的声音。

如图所示,计算设备650可以以多种不同方式来实现。例如,其可以实现为蜂窝电话660。其还可以实现为智能电话682、个人数字助理或其它类似移动设备的一部分。

此外,计算设备600或650可以包括通用串行总线(USB)闪存驱动器。USB闪存驱动器可以存储操作系统和其它应用。USB闪存驱动器可以包括输入/输出组件,诸如可以插入另一个计算设备的USB端口的无线传送器或USB连接器。

这里所描述的系统和技术的各种实现可以以数字电路、集成电路、专门设计的ASIC(专用集成电路)、计算机硬件、固件、软件和/或其组合来实现。这些各种实现可以包括在一个或多个计算机程序中的实现,计算机程序可在包括至少一个可编程处理器的可编程系统上执行和/或解析,可编程系统可以为专用或通用,其耦合以从存储设备、至少一个输入设备以及至少一个输出设备接收数据和指令并且向其传送数据和指令。

这些计算机程序(也称作程序、软件、软件应用或代码)包括用于可编程处理器的机器指令,并且能够以高级程序和/或面向对象编程语言来实现,和/或以汇编/机器语言来实现。如这里所使用的,术语“机器可读介质”、“计算机可读介质”是指用来向可编程处理器提供机器指令和/或数据的任意计算机程序产品、装置和/或设备(例如,磁碟、光盘、存储器、可编程逻辑设备(PLD)),其包括接收机器指令作为机器可读信号的机器可读介质。术语“机器可读信号”是指被用来为可编程处理器提供机器指令和/或数据的任意信号。

为了提供与用户的交互,这里所描述的系统和技术可在具有用于向用户显示信息的显示设备(例如,CRT(阴极射线管)或LCD(液晶显示器)监视器)和用户能够通过其为计算机提供输入的键盘和指点设备(例如,鼠标或轨迹球)的计算机上实现。也可以使用其它类型的设备来提供与用户的交互;例如,提供给用户的反馈可以为任意形式的传感器反馈(例如,视觉反馈、听觉反馈或触觉反馈);并且来自用户的输入可以以任意形式接收,包括声音、话音或触觉输入。

这里所描述的系统和技术可在计算系统中实现,计算系统包括后端组件(例如,数据服务器),或者其包括中间件组件(例如,应用服务器),或者其包括前端组件(例如,具有用户能够通过其与这里所描述的系统和技术的实现进行交互的图形用户界面或网络浏览器的客户端计算机),或者这些后端、中间件或前端组件的任意组合。系统的组件可通过任意形式的介质或数字数据通信(例如,通信网络)进行互连。通信网络的示例包括局域网(LAN)、广域网(WAN)和互联网。

计算系统可以包括客户端和服务器。客户端和服务器通常彼此远离并且典型地通过通信网络进行交互。客户端和服务器的关系源自于在各自计算机上运行的计算机程序并且具有彼此的客户端服务器关系。

虽然以上已经对一些实现进行了详细描述,但是其它修改也是可能的。此外,可以使用用于执行本文档中所描述的系统和方法的其它机制。此外,图中所描绘的逻辑流程并不要求所示出的特定顺序或连续顺序来实现所期望的结果。可以提供其它步骤,或者可以从所描述的流程中删除步骤,并且可以向所描述的系统添加其它组件或者从中去除组件。因此,其它实现处于以下权利要求的范围之内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1