具有冗余安全性的可靠的软件产品验证和激活的制作方法

文档序号:6438867阅读:178来源:国知局
专利名称:具有冗余安全性的可靠的软件产品验证和激活的制作方法
具有冗余安全性的可靠的软件产品验证和激活
背景技术
操作系统和应用程序之类的软件产品经常会包含受版权法保护的材料,版权法授予原创作品(例如软件代码)的作者对该作品的使用和分发的专有权。为了从拥有软件产品权利的卖方那里获取软件产品拷贝,用户通常会与卖方达成许可协议,该协议限定了用户可以如何使用和/或分发软件产品。举个例子,许可协议可以限制用户可以安装软件的次数和/或可以安装该软件的计算机的数量。软件产品的非授权拷贝有可能对销售这些产品许可的卖方造成极大损害。为了防止使用非授权拷贝,软件卖方通常要求在尝试安装软件产品拷贝的时候完成过一个“激活” 过程。该过程可以被设计成确定该拷贝是否被授权安装(例如该拷贝是不是用户合法购买的)和/或所述安装是否符合一个或多个适用的许可协议(例如用户是否超出了最大的许可安装次数)。如果软件产品是以多个版本的形式(例如专业版和家庭版)提供的,那么该激活过程还可以识别用户购买的版本,并且根据识别的版本来有选择地使能(enable)软件产品中的一个或多个特征。一些常规的软件激活技术使用所谓的“产品密钥”,这种产品密钥是一条用户可以在合法购买或以其他方式合法获取软件产品拷贝的时候得到的信息。在激活过程中,用户提供产品密钥作为合法性“证据”。在接受并验证了这种证据时,将会允许用户完成安装,并且将会根据就特定安装而授予用户的一个或多个许可来使能软件产品中的恰当特征。

发明内容
发明人业已认识并了解到,在软件产品验证和激活系统中存在显著的设计限制, 也就是说,产品密钥有可能局限于能被人类用户易于操纵(例如读取和/或拷贝)的大小(或长度)。发明人还认识并了解到,与使用较短的产品密钥是有关联的现有产品密钥实现的限制,例如安全性、性能、扩展性和/或可管理性方面的妥协。相应地,在一些实施例中提出了用于软件产品验证和激活的改进系统、方法和设备,其将附加标识信息(例如序列号之外的信息)引入产品密钥,该附加标识信息可以用于促进产品密钥的验证。例如,附加标识信息可以充当一个或多个索引,以便识别要在验证产品密钥的过程中使用的密码算法和/或密钥算法参数。由于不必将特定的密码算法和/或参数硬编码在产品密钥验证组件中,因此,此类系统可以更为有效且更易于扩展。发明人还认识并了解到,在将附加标识信息引入产品密钥时,可以保持乃至增强软件产品验证和激活系统的安全性。例如,通过至少部分在远程激活服务器上执行产品密钥验证,可以实现足够的安全等级,由此可以通过网络请求来减慢所尝试的蛮干攻击 (brute force attack)。这种激活服务器还能记录每一个单独的产品密钥使用的次数。发明人还认识并了解到,由于激活服务器是可以从因特网访问的(例如,激活服务器可以接受采用web请求形式的激活请求),因此,该激活服务器是很容易受到攻击的。由此,可能期望引入一个附加的安全层,其中举例来说,所述安全层是通过在产品密钥中引入要由激活服务器之外的实体核实的附加安全信息而被引入的。相应地,在一些实施例中,除了激活服务器之外还可以提供一个用于验证产品密钥的增强型安全服务器。所述增强型安全服务器使用的信息可以是不能被激活服务器访问的,由此,即使激活服务器被成功攻击, 所述服务器也可以保持安全。如果激活服务器被突破(breach),这种附加安全机制可以防止系统完全失效,由此为系统开发人员提供了更多时间来对所述突破做出响应。应该预料到的是,在下文中被更详细论述的前述概念以及附加概念的所有组合 (如果这些概念不是相互不一致的)都被认为是这里公开的发明主题的一部分。特别地,在本公开结尾出现的所保护主题的所有组合都被认为是这里公开的发明主题的一部分。


在这里没有必要按比例绘制附图。为了清楚起见,并不是每一个组件都会在每一个图中得到标记。图1显示了根据本公开的一些实施例来验证和激活软件产品的说明性系统。图2显示了根据本公开的一些实施例来验证和激活软件产品的另一个说明性系统。图3A显示了根据本公开的一些实施例来产生产品密钥的说明性过程。图:3B显示了根据本公开的一些实施例、可以借助图3A所示的过程产生的产品密钥的示例。图4显示了根据本公开的一些实施例的说明性过程,其中该过程可以由用户计算机上的安装程序响应于用户安装软件产品拷贝的尝试来执行。图5显示了根据本公开的一些实施例的说明性过程,其中该过程可以由验证机构 (authority)响应于接收到来自用户尝试安装软件产品拷贝的计算机的激活请求来执行。图6显示了根据本公开的一些实施例的说明性过程,其中该过程可以由检查 (audit)机构响应于接收到来自验证机构的检查请求来执行。图7示意性显示了一个可以实现本公开的不同发明方面的说明性计算机。
具体实施例方式发明人认识并了解到,在实现使用产品密钥来验证和激活软件产品的健壮安全的系统的过程中存在着很多难题。这其中的一些难题在下文中通过参考图1而被说明。图1显示了用于验证和激活软件产品的说明性系统100,其中可以实现这里公开的不同发明方面。在本示例中,系统100包括产品密钥生成服务器110,它可以由软件卖方或是其他的一些适当的第三方来操作。当用户120合法购买或以其他方式合法获得诸如操作系统或应用程序之类的软件产品拷贝时,可以将生成服务器110产生的产品密钥转达给用户。例如,当所述拷贝是经由诸如光盘(CD)之类的物理介质销售时,该产品密钥可被印刷在只能在购买之后才能得到(例如受热缩塑料包保护)的包装材料的一部分上。在一些实现中,产品密钥可以包括两个组件用于识别软件产品的特定拷贝(如果是公司许可则是拷贝群组)的标识组件,以及可以用于核实产品密钥是由某个恰当机构(例如软件卖方)产生和/或没有在分发过程中受到篡改的安全组件。举个例子,所述标识组件可以包括序列号,并且所述安全组件可以包括处于序列号之上并用软件卖方的秘密密钥产生的电子签名。
当用户120尝试在用户计算机130上安装软件产品拷贝时,在用户计算机130上运行的安装程序可以提示用户130输入产品密钥。一旦接收到产品密钥,则安装程序可以处理该产品密钥,并且基于从处理产品密钥的过程中推导的信息来向激活服务器140发送激活请求。例如,根据特定的实现,安装程序可以完全或部分验证该产品密钥(例如使用软件卖方的公钥来核实安全组件是在标识组件之上的有效签名)。作为替换或补充,安装程序可以向激活服务器140发送产品密钥和/或从中推导的信息(例如作为激活请求的一部分),由此激活服务器140也可以完全或部分验证该产品密钥。换句话说,产品密钥的验证可以用任何适当的方式分布在用户计算机130与验证服务器140之间。为了验证产品密钥,用户计算机130和/或验证服务器140可以与产品密钥生成服务器110共享一些验证信息。在一个产品密钥包含序列号和序列号之上的电子签名的示例中,验证信息可以包括与用于产生电子签名的秘密密钥相关联的公钥。这个公钥可以使得用户计算机130和/或验证服务器140能够执行签名验证,以便确定电子签名是否可能是使用相关联的秘密密钥来正确产生的。如果产品密钥通过验证,则激活服务器140可以选择一个或多个适用的许可,并且将选定许可通知给用户计算机130。举例来说,这些许可可以是基于软件产品类型、软件产品版本、软件产品所属的软件产品系列、分发软件产品拷贝的渠道(例如零售,原始设备制造商或批发)和/或其他适当的信息而被选择的。然后,用户计算机130可以将这些许可与所安装的软件产品拷贝相关联,并且根据许可来有选择地使能软件产品中的特征。发明人认识并了解到,在软件产品验证和激活系统中存在显著的设计限制,即产品密钥的大小(或长度)。举个例子,参考图1所示的系统100,如果产品密钥是通过印刷介质传播给用户120的(例如作为打印在热缩塑料包装的包裹内部的码),那么可以预计用户从该印刷介质上读取产品密钥,并且手动地将产品密钥输入计算机130。该过程有可能会很耗时并容易出错,因此可能期望将产品密钥限制在可管理的大小(例如不超过20、25、30或 40个字母数字字符或其他符号)。发明人还认识并了解到,与使用较短的产品密钥有关联的现有产品密钥实现的限制。例如在一些实现中,产品密钥中只有少量比特是专用于产品密钥的安全组件的(例如通过使用更短的数字签名),由此可以在标识组件中编码更多信息。由于攻击者更易于通过重复尝试随机产生且具有恰当长度的字符串来发现碰巧是有效产品密钥的字符串,因此, 这种方法有可能损害产品密钥的安全性。特别地,如果产品密钥验证全都是在本地计算机 (例如图1所示的用户计算机130)上进行,那么,由于可以在该设置中实施蛮力攻击而不用发起可以减慢所述攻击的网络请求,安全风险有可能会尤其严重。此外,如果产品密钥验证完全是在本地计算机上进行的,那么本地计算机可能只能验证那些本地计算机可以为之访问足够验证信息的产品密钥。例如,在一些实现中,只有在本地计算机可以访问相应的签名验证算法和/或相应的公钥的情况下,本地计算机才能够验证包含数字签名的产品密钥。 由此,用于产生产品密钥的安全机制的升级有可能涉及向众多本地计算机传播新的验证信息,例如新的密码算法和/或密钥,这种过程的成本很高并且会很麻烦,此外还有可能阻止采用改进的安全机制。相比之下,在其他的一些实现中,产品密钥中有更多的比特是专用于产品密钥的安全组件的(例如通过使用更长的数字签名),由此,蛮力攻击有可能会更为困难。但是,由于较少的信息可以被编码在产品密钥的标识组件中,因此,安全性的提升是以性能降低为代价的。例如,标识组件可以只携带用于软件产品的特定拷贝的序列号,而没有其他标识信息。结果,产品密钥不能携带在验证过程中使用的所有信息。可以包含在产品密钥中的其他标识信息的示例是所谓“组ID”,它标识软件产品的类型,软件产品的版本,软件产品所属的软件产品系列,用以分发软件产品拷贝的渠道,和/或软件产品的其他相关特性。这些标识信息可以充当索引,以便检索要用来核实产品密钥中包含的电子签名的公钥。在不能直接访问此类信息的情况下,可以实施尝试-错误验证过程,以便循环访问一组可能的公钥, 直至验证成功或是穷尽了可能的公钥集合(在这种情况下可以将产品密钥无效)。这种迭代过程可能导致严重的性能降级,这是因为诸如签名验证之类的密码操作有可能是计算密集型的。由于可供取出有效序列号的一个(或多个)范围有可能变小,因此,限制产品密钥中携带的标识信息的量还有可能具有更进一步的缺陷。例如,为了简化代码开发和数据管理,软件卖方有可能希望采用某种编号规定,例如将某个范围的数字指定给每一个软件产品,以及进一步将子范围指定给产品的相应版本。如果序列号的大小有限,那么产品管理器有可能希望更密切地预测到每一个产品和/或版本需要的序列号总数(例如通过预测销售量),由此减小“被浪费的数字”的数量(例如为产品保留但是实际不与产品的任何拷贝相关联的可能的序列号),并且由此适应更多的产品。这种预测有可能会很困难,并且本身是不精确的。如果意外地耗尽了所指定的范围,那么有可能需要在不同系统组件上实现代码变化(例如通过服务包(service pack)),这取决于所述编号规定,另外这有可能成本很高且非常麻烦。简而言之,发明人认识并了解到需要用于软件产品验证和激活的改进系统,例如以便增强安全性、性能、可扩展性和/或可管理性。优选地,改进的系统可以是向后兼容的, 例如能够与已有的产品密钥实现同时或联合部署,和/或允许在代码变化最小的情况下重新使用已有系统组件。在一些实施例中,提供了一种用于软件产品验证和激活的改进系统,该系统在产品密钥中引入了附加标识信息(例如序列号之外的信息),该信息可以用于促进产品密钥验证。例如,附加标识信息可以识别软件产品类型、软件产品版本、软件产品所属的软件产品系列、分发软件产品拷贝的渠道和/或软件产品的其它相关特性。这些信息可以充当一个或多个索引,以便识别要在验证产品密钥的过程中使用的密码算法和/或密钥算法参数。 发明人认识并了解到,通过包含这种附加标识信息可以通过促进验证信息的简单检索来极大加速验证过程(例如在没有常规的尝试错误过程)。此外,通过包含这种附加标识信息可以在产品密钥验证组件中不再硬编码特定的密码算法和/或参数,所以导致产生一个更易于扩展的系统。换言之,加密算法和/或参数的未来变化可以更易于实现,并且产品密钥验证组件的代码变化将会很少或者没有代码变化。发明人还认识并了解到,在将附加标识信息引入产品密钥时,可以保持乃至增强软件产品验证和激活系统的安全性。举个例子,如上所述,通过与网络请求相关的延迟,可以减慢蛮力攻击。因此,通过至少部分在远程激活服务器上执行产品密钥验证(例如与完全在尝试安装软件的本地计算机上进行验证相反),可以实现足够的安全等级。此外,由于特定的密码参数不可以为攻击者所知(例如攻击者可能不能够有效地将附加标识信息映射到相应的密码参数),因此,攻击者会更加难以猜测有效的产品密钥。由于这种安全性的增强, 产品密钥中的更多比特可被分配给标识组件,而这进而又可以扩大可用产品密钥的空间, 并且减小了对于产品密钥范围进行预测的需要或是在超出这种预测时出现的问题。举个例子,在一些实现中,在产品密钥中有接近一半的比特可被分配给标识组件,由此将可用产品密钥的数量增加到了 IO15(Cpadrilli0n)以上。 发明人还认识并了解到,由于激活服务器是可以从因特网访问的(例如,激活服务器可以接受采用web请求形式的激活请求),因此,该激活服务器是很容易受到攻击的。对激活服务器的成功攻击可以导致信息受损,攻击者可以使用该信息来产生有效的产品密钥。 因此,可能期望引入一个附加的安全层,其中举例来说,所述安全层可以通过在产品密钥中引入由激活服务器之外的实体核实的附加安全信息来引入。相应地,在一些实施例中,除了激活服务器之外还可以提供一个用于验证产品密钥的增强型安全服务器。所述增强型安全服务器使用的信息是不能被激活服务器访问的,由此,即使激活服务器被成功攻击,所述服务器也可以保持安全。如果激活服务器被突破,这种附加安全机制可以防止系统完全失效, 由此为系统开发人员提供了更多时间来对所述突破做出响应。下文中更详细地描述了与用于软件产品验证和激活的本发明的系统、方法和设备相关联的不同概念及其实施例。应该了解,在上文中引入以及在下文中详细论述的不同概念可以采用多种方式实现,并且所公开的概念并不局限于任何特定的实现方式。例如,本公开并不局限于不同的图中显示的特定组件排列,并且其他排列同样也可以是适用的。具体实现和应用的这些示例仅仅是出于例证目的提供的。图2显示了可以实现这里公开的不同发明方面的用于验证和激活软件产品的说明性系统200的示例。与图1所示的示例相似,说明性系统200包括产品密钥生成服务器 110、用户120、用户计算机130以及激活服务器140。此外,所述说明性系统200还包括与激活服务器140协同验证产品密钥的增强型安全服务器250。在一些实施例中,产品密钥生成服务器110可以由软件卖方或是其他的某个适当的机构操作,以便产生要分发给软件产品的合法用户的产品密钥。该产品密钥生成服务器 110可以使用任何适当的技术或技术组合来产生产品密钥。举例来说,如上所述,产品密钥生成服务器110可以在产品密钥中包括标识组件,其中该标识组件可以包括要与软件产品的特定拷贝相关联的序列号以及“组ID”,所述组ID标识软件产品的类型、软件产品的版本、软件产品所属的软件产品系列、用以分发软件产品拷贝的渠道和/或软件产品的其他相关特性。产品密钥生成服务器110还可以在产品密钥中包含安全组件,该安全组件可以用于核实标识组件的完整性和/或真实性,举个例子,在一些实施例中,安全组件可以包括处于部分或所有标识组件之上的电子签名,其中该电子签名是用产品密钥生成服务器110 的秘密密钥产生的。在其他的一些实施例中,安全组件可以包括一个密文,其中该密文是通过使用产品密钥生成服务器110的秘密密钥加密部分或全部标识组件而被产生的。任何适当的加密算法都是可以使用的,包括但不局限于诸如高级加密标准(AES)之类的对称加密算法,诸如椭圆曲线密码(ECC)加密算法之类的非对称加密算法,和/或任何适当的算法组合。在其他一些实施例中,安全组件可以包括基于部分或所有标识组件以及产品密钥生成服务器110的秘密密钥生成的散列值Oiash value)。任何适当的散列算法都是可以使用的,包括但不局限于MD4、MD5、SHA-l、SHA-256或SHA-512。在其他的一些实施例中,安全组
8件可以包括将要与标识组件相关联的随机或伪随机值。为了增强安全性,在一些实现中,产品密钥的安全组件可以包括分别要由两个或更多单独的实体核实的两个或更多的安全值,由此避免系统中的单个失效点。举例来说,参考图2,产品密钥生成服务器110可以在产品密钥的安全组件中包括两个分别要由激活服务器140和增强型安全服务器250核实的安全值。这两个安全值可以用任何适当的方式产生。例如,这些安全值可以基于标识组件中的相同部分或不同部分并且使用一种或多种上述技术(例如签名、加密、散列和/或随机生成)来产生。此外,安全值可以使用不同的技术或是使用具有不同参数(例如不同的秘密密钥)的相同技术来产生。这样一来,即使一个验证机构(例如激活服务器140)受损,也可以避免全面的系统失效。例如,由于未受损害的验证机构(例如增强型安全服务器250)仍旧能使伪造的产品密钥失效,因此,攻击者可能不能够随意激活软件产品的非法拷贝。这样做可以为系统开发人员提供更多时间来开发和分发一个或多个服务补丁,以便封闭攻击者使用的弱点。以下结合图3A-B论述用于产生产品密钥的说明性过程的更多细节。应该了解,本公开中与产品密钥生成相关联的各方面并不局限于任何特定的生成技术。例如,产品密钥可以使用上述技术和/或其他适当技术中的任何一种或是其组合产生。此外,上述技术可以根据特定的实现而以任何适当的方式来适配和/或修改。例如,通过签名、加密和/或散列过程产生的安全值可以基于产品密钥中分配给所述安全值的空间量(例如比特数量)而被截短成某个恰当的长度。如上文中结合图1论述的那样,当用户120合法购买或以其他方式合法获取了软件产品拷贝时,可以将产品密钥生成服务器110产生的产品密钥传达给用户,例如将其作为印刷在受热缩塑料包保护的包装材料上的代码来传达。可替换地,也可以给用户一个密码,以便从web链接下载产品密钥。此外,其他的传播方法也是适当的。当用户120尝试在用户计算机130上安装软件产品拷贝时,在用户计算机130上运行的安装程序可以提示用户120输入产品密钥。一旦接收到产品密钥,则安装程序可以处理该产品密钥,并且基于从处理该产品密钥的过程中推导的信息来向激活服务器140发送一个激活请求。如上所述,可能期望将产品密钥验证过程的至少一部分委托给用户计算机130之外的一个实体,由此减慢可能的蛮力攻击和/或防止其它那些可能会在验证过程完全是在本地执行的情况下出现的攻击。相应地,在一些实施例中,至少一部分产品密钥验证过程可以由激活服务器140执行。用户计算机130上的安装程序可以不执行任何验证, 或者可以执行某些初始检查来发觉印刷错误(例如通过执行校验和验证)。后一种方法可能是非常有利的,这是因为用户往往会在键入产品密钥的时候出错,并且可能期望在与激活服务器140的通信中招致延迟之前发觉这种简单的错误。换言之,除非初始检查表明产品密钥很可能是正确键入的,否则用户计算机130可以不向激活服务器140发送任何激活请求。将验证委托给激活服务器140的另一个优点是可以更容易地实现和/或保持用户计算机130上的安装程序。举个例子,在图2的示例中,安装程序有可能不再需要存储和保持来自产品密钥生成服务器110的验证信息。这种验证信息的示例包括但不局限于一种或多种密码算法(例如签名验证、解密和/或散列算法)和/或用于这些算法的一个或多个参数(例如在签名验证、解密和/或散列过程中使用的密钥)。结果,针对验证信息的任何变更(例如升级至更安全的算法和/或刷新密钥)可以是在对安装程序执行少量代码变更或是没有代码变更的情况下实现的。以下结合图4论述由用户计算机上运行的安装程序执行的说明性过程的更多细节。再次参考图2,激活服务器140可以从用户计算机130接收激活请求,其中该请求可以包括用户120键入的产品密钥和/或从产品密钥中推导出的信息。举个例子,在一些实施例中,激活服务器140可以经由激活请求来接收序列号、组ID以及至少一个由用户计算机130从产品密钥中提取的安全值。作为替换或补充,激活服务器140可以接收产品密钥,并且执行它自己的处理来恢复这些信息。如上所述,从产品密钥中提取的信息(例如序列号和/或组ID)可用于识别和/或检索那些将要在验证产品密钥的过程中使用的验证信息(例如一个或多个密码算法和/或用于该密码算法的参数)。在图2所示的示例中,激活服务器140可以使用序列号和/或组 ID来从存储器260中检索验证信息。举例来说,在基于电子签名的实现中,激活服务器140 可以使用序列号和/或组ID来从存储器260中检索签名验证算法的标识和/或验证密钥。 同样,在基于加密的实现中可以检索解密算法的标识和/或解密密钥,在基于散列的实现中可以检索散列算法的标识和/或秘密密钥,以及在基于随机生成的实现中可以检索已经与特定产品密钥相关联的随机或伪随机生成值。这样一来,激活服务器140可能能以一种模块化的方式来处理不同类型的安全机制,由此允许软件卖方更灵活地根据其特定需要来选择不同安全机制。例如在一些实施例中,不同的软件卖方可以共享总的产品密钥实现,但却使用不同的算法和/或参数。作为替换或补充,同一个软件卖方可以为不同产品或是不同的版本、系列或其他适当的产品分类使用不同的算法和/或参数。举个例子,如果产品与高拷贝风险相关联(例如流行的视频游戏),那么可以选择更安全的算法,然而对于预计会产生大量激活请求的产品来说(例如流行的操作系统),可以选择更有效的算法。在图2所示的示例中,产品密钥生成服务器110可以将一些或所有验证信息存入存储器沈0。例如,对于所产生的每一个产品密钥,产品密钥生成服务器110可以采用一种便于稍后使用在产品密钥中编码的标识信息(例如序列号和/或组ID)来进行访问的方式而将某些或所有相应的验证信息存入存储器260。作为替换,存储器260可以由中央机构管理,所述机构为不同的软件产品和/或软件产品群组选择恰当的安全机制。在此类实施例中,产品密钥生成信息(例如签名生成、加密和/或散列算法,和/或相关联的参数)以及验证信息(例如签名验证、解密和/或散列算法,和/或相关联的参数)可以与一些标识信息 (例如序列号和/或组ID)相关联地存入存储器沈0,由此,产品密钥生成服务器110可以使用该识别信息来访问恰当的产品密钥生成信息,并且激活服务器140可以使用该识别信息来访问恰当的验证信息。此外,存储器260还可以存储以随机、伪随机或以其他方式产生并与产品密钥的一个或多个标识组件相关联的值。在下文中将会结合图5来论述由激活服务器执行的用于验证产品密钥的说明性过程的更多细节。如上所述,在一些实施例中,产品密钥可以包括由诸如激活服务器140和增强型安全服务器250之类的不同实体单独核实的多个安全值。在图2所示的示例中,增强型安全服务器250可以实现为由激活服务器140调用的检查服务(auditing service) 0举个例子,一旦成功核实了产品密钥中的两个安全值之一,则激活服务器140可以决定是否需要检查,如果是的话,则其向增强型安全服务器250发送检查请求。作为响应,增强型安全服务器250可以基于这两个安全值中的另一个值来执行它自己的验证。与激活服务器140 一样,增强型安全服务器250可以访问来自存储器沈0的验证信息,但是增强型安全服务器250访问的验证信息可以不同于激活服务器140访问的验证信息。在一些实现中,增强型安全服务器250可以在线执行检查,并且将结果回送到激活服务器140,所述激活服务器则只在这两个验证全都成功的情况下才可以许可激活请求。在其他实现中,当激活服务器 140自己执行的验证成功时,它可以许可激活请求,而增强型安全服务器250则可以离线执行检查,并且可以追溯性地将产品密钥无效。在下文中将会结合图6来论述由增强型安全服务器执行的用于验证产品密钥的说明性过程的更多细节。根据特定的实现,激活服务器140可以采用任何方式来选择产品密钥以用于检查。例如,激活服务器140可以采用随机或伪随机的方式进行选择。另举一例,激活服务器 140可以基于软件产品类型、软件产品版本、软件产品所属的软件产品系列、用以分发软件产品拷贝的渠道和/或其他那些可以用编码在产品密钥的标识组件中的信息访问的软件产品的相关特性来进行选择。作为另一个示例,激活服务器140可以基于所感知的安全威胁等级来选择产品密钥以用于检查,其中所述威胁等级是用户输入或是通过自动检测一个或多个系统活动模式来指示的,并且举例来说,所述系统活动模式可以是涉及特定产品或产品群组的请求的频率,或者是从特定用户或用户群组那里接收到请求的频率。一旦验证了产品密钥(例如由激活服务器140单独验证或是由激活服务器140和增强型安全服务器250验证),则激活服务器140可以选择一个或多个适用的许可,并且将选定的许可告知用户计算机130。然后,用户计算机130可以将这些许可与所安装的软件产品拷贝相关联,并且根据这些许可来有选择地使能软件产品中的特征。应该了解的是,图2所示以及如上所述的特定实现仅仅是说明性的,而这里公开的不同发明概念是不局限于任何特定的实现方式的。举例来说,在可替换的实现中,产品密钥生成服务器Iio和激活服务器140可以由同一实体操作和/或在相同的物理服务器上操作。作为另一个示例,增强型安全服务器250可以经由某个适当网络直接访问,例如企业网或因特网,其中所述访问既可以永久性的,也可以是根据需要的(例如在激活服务器140受损或是因为其他原因不可用时)。此外,在一些情况中,用户120可以是个人用户,但在其他情况中,该用户也可以是法人用户,例如在零售计算机设备之前在该设备上安装软件产品的原始设备制造商(OEM)。转到图3A,该图显示了一个用于产生产品密钥的说明性过程300,其中该过程可以由图2所示的产品密钥生成服务器110执行,以便产生产品密钥。在图:3B中则显示了可以借助过程300产生的产品密钥350的一个示例。在图3A所示的示例中,过程300始于识别软件产品序列号的操作305。在一些实施例中,该序列号可以是从与软件产品相关联的号码范围中选出的,其中举例来说,所述序列号是在每次将序列号指定给新的软件产品拷贝的时候,通过从所述范围的下端开始递增一个(或者可替换地,从所述范围的较高的一端开始递减一个)所述序列号而被选择的。其他那些用于选择序列号的方式也是适当的,例如以随机或伪随机的方式从一组可用号码中选择。如上所述,序列号单独可以不携带与软件产品有关的足够信息来允许验证机构 (例如图2所示的激活服务器)识别验证过程需要的验证信息。相应地,在一些实施例中,产品密钥可以包括能够促进产品密钥的有效验证的附加标识信息。例如,所述附加标识信息可以是与软件产品类型、软件产品版本、软件产品所属的软件产品系列,分发软件产品拷贝的渠道和/或软件产品的相关特性相关联的组ID。更一般地,组ID可以识别那些能以用于验证目的的类似方式(例如使用相同的密码算法和/或参数)处理的软件产品群组。在操作310,第一安全值可以是用适当的安全机制基于序列号和附加标识信息(例如组ID)产生的。例如,序列号和/或附加标识信息可用于确定安全机制,该安全机制则可以基于签名、加密、散列、随机生成和/或其他密码技术。作为更具体的示例,序列号和/或附加标识信息可用于确定对称加密算法和秘密密钥,并且第一安全值可以至少部分是通过用对称加密算法和秘密密钥加密所述序列号和附加标识信息产生的。作为另一个示例,序列号和/或附加标识信息可用于确定散列算法和秘密密钥,并且第一安全值可以至少部分是通过散列所述序列号和附加标识信息产生的,其中秘密密钥可以用作散列的参数。在操作315,基于序列号和附加标识信息,可以产生第二安全值。在一些实施例中,第二安全值可以使用与用以产生第一安全值的机制不同的安全机制来产生。例如,第二安全值可以使用不同的密码算法或是具有不同密钥的相同密码算法产生。作为替换,第二安全值与第一安全值可以是用相同的安全机制产生的(例如使用相同的散列算法和秘密密钥)。在操作320,基于序列号、附加标识信息以及第一和第二安全值,产生一个校验和。 该校验和可以用循环冗余校验(CRC)校验和算法或是某种其他适当的算法来产生。如上文中结合图2所述,校验和可用于确定用户是否有可能在键入产品密钥时产生了打字错误。 由此,校验和是不需要针对蛮力攻击是安全的,并且相对较少的比特(例如不超过10个)即
可 两足需要ο在操作325,通过采用某种适当的方式,可以将序列号、附加标识信息、第一和第二安全值以及校验和封装在一起,从而形成产品密钥。举例来说,在一些实施例中,具有字母表“BCDFGHJKMPQRTVWXY2346789”的基础(base) 24编码可被用于对序列号、附加标识信息、 第一和第二安全值以及校验和的串联进行编码,并且可以在编码字串中的选定位置插入不在用于编码的字母表中的特殊字符,例如字符“N”。然后,作为结果产生的产品密钥可被保存,并且稍后会与软件产品的拷贝相关联并传达给用户。如下文中结合图:3B和4更详细论述的那样,特殊字符(例如字符“N”)的位置可供安装程序用以确定对特定产品密钥执行常规还是改进的产品密钥验证。所述特殊字符的位置还可以指示产品密钥具有常规格式还是改进格式。由此,安装程序可以根据特殊字符的位置而不同地解析产品。在操作330,与产品密钥相关联的验证信息可以采用便于一个或多个验证机构(例如图2所示的激活服务器140和增强型安全服务器)检索的方式存储。例如,验证信息可以与产品密钥的序列号和/或附加标识信息(例如组ID)相关联地存储,从而验证机构可以通过提供序列号和/或附加标识信息来检索验证信息。
这里使用的“验证信息,,通常可以指任何可以在验证产品密钥时使用的信息。例如,验证信息可以包括要用于验证产品密钥的一个或多个密码算法的标识和/或一个或多个相关联的参数(例如密钥)。优选地,与第一和第二安全值有关的验证信息可以作为独立单元存储,由此,负责验证第一安全值的实体(例如图2所示的激活服务器140)可能不能访问与第二安全值有关的验证信息。这样一来,即使成功攻击了负责核实第一安全值的实体, 与第二安全值有关的验证信息也可以保持安全。作为另一个示例,验证信息可以包括安全值本身,由此可以简单地通过将提取自产品密钥的安全值与使用产品密钥的序列号和/或附加标识信息检索的安全值相比较来执行验证。在以随机或伪随机方式产生安全值的实现中,或者在操作310和315中使用相同安全机制来产生第一和第二安全值的实现中,这种存储安全值本身的方法是很适当的。在后一种情况中,可能期望不向验证机构(例如图2所示的激活服务器140)揭示安全机制,由此可以在验证机构受到成功的攻击的时候避免损害所述安全机制。图;3B显示了 5x5格式的说明性产品密钥350,其中25个字符中有M个字符是从具有M个字符“BCDFGHJKMPQRTVWXY2346789”的字母表中得到的,并且在第9个位置插入了特殊字符“N”。该格式可以与同样使用5x5格式的现有产品密钥的实现兼容,并且安装程序可以使用特殊字符“N”的位置来确定执行常规的产品密钥处理还是依照本公开的一些实施例的新的产品处理。在一些实施例中,移除了特殊字符“N”的产品密钥350可被解码成例如如图:3B中的表355所示的具有114个字符的字串。该比特串中的前50个比特可以对应于产品密钥的标识组件,其中前20个比特代表组ID360,剩余的30比特代表序列号362。接下来的63 比特可以对应于产品密钥的安全组件,其中分别为第一安全值364,第二安全值366以及校验和368分配了 40、13和10个比特。最后一个比特370可以指示与产品密钥相关联的软件产品拷贝是经由零售渠道(也被表示为“FPP”)还是升级渠道(也被表示为“CCP”)分发的。应该指出的是,在图:3B所示的示例中,在产品密钥350中有接近一半的比特(或是 114个比特中的50个比特,大约45%或是超出40%)被分配给了标识组件。结果,有超出IO15 的号码(例如0到25°-1)可用于组ID和序列号组合,这样做极大减小了对于预测精确的产品密钥范围的需要。应该了解的是,图3A所示的过程300以及图所示的产品密钥350只是说明性的,在本公开的不同实施例中也可以使用其他那些用于产生产品密钥的方式和/或用于产品密钥的其他格式。例如,一些产品密钥实现可以使用携带了用于验证的足够信息的“自我核实”产品密钥,由此验证机构不需要从单独的来源检索验证信息。图4显示了可以由用户计算机上的安装程序响应于用户激活软件产品拷贝的尝试而执行的说明性过程400。例如,过程400可以由图2所示的用户计算机130在为用户 120安装软件产品拷贝的过程中执行。过程400可以始于向用户提示与正在被安装的软件产品拷贝相关联的产品密钥并且经由键盘或鼠标之类的输入设备来接收产品密钥的操作405。在操作410,过程400可以确定该产品密钥是用常规的产品密钥实现产生的还是用引入了本公开中描述的一个或多个发明概念的新的产品密钥实现来产生的。举个例子,在一个实施例中,过程400可以在产品密钥中扫描诸如字母“N”之类的特殊字符。如果在预定位置发现字母“N”(例如在产品密钥的安全组件或净荷开始时所处的比特偏移50或是其附近),那么可以确定该产品密钥与新的实现相关联。否则,产品密钥可以与现有的实现相关联,并且该过程400可以作为执行常规产品密钥验证的子过程415来继续。在另一个实施例中,只要存在字母“N”之类的特殊字符,则可以表明产品密钥与新的实现相关联,并且特殊字符在产品密钥内部的位置可以提供能够用于验证产品密钥的附加信息。例如,除了用基础(base) M字母表编码的比特之外,还可以使用特殊字符位置来编码一个或多个比特,从而有效提高产品密钥的信息携带容量。如果确定产品密钥与新的实现相关联,那么过程400可以继续执行操作420,以便执行校验和验证。举个例子,参考图3B所示的实施例,该过程400可以将产品密钥解码成二进制格式,并且核实产品密钥中始于比特偏移103的10比特信息是不是产品密钥中的剩余部分或是其任何适当部分的正确校验和。其中举例来说,所述10比特校验和可以是对照产品密钥的前103个比特和/或升级比特核实的。如果在操作420中确定校验和正确,那么用户有可能正确键入了产品密钥,并且过程400可以继续执行操作425,以便向适当的验证机构(例如图2所示的验证服务器140) 传送激活请求。根据特定实施例,该激活请求可以包括产品密钥本身和/或与产品密钥的一个或多个组成部分相对应的比特串,例如组ID、序列号、第一安全值和/或第二安全值。另一方面,如果在操作420中确定校验和不正确,那么该过程可以继续执行操作 430,以便提示用户重新输入产品密钥,然后则会返回操作405,以便处理用户下一次输入产品密钥的尝试。在操作435,过程400可以接收来自验证机构的关于在操作425中传送的激活请求的状态的通知。如果该请求被拒绝,则过程400可以继续执行操作445,以便向用户告知未能使用所提供的产品密钥完成安装。否则,该过程400可以继续执行操作440,以便识别验证机构授予的一个或多个许可,并且根据所授予的许可来使能软件产品中的一个或多个特征。参考图5,该图显示了一个说明性过程500,其中该过程可以由验证机构(例如图2 所示的验证服务器140)响应于接收到来自用户尝试安装软件产品拷贝的计算机(例如图2 所示的用户计算机130)的激活请求来执行。在本示例中,过程500始于接收激活请求的操作505,其中该请求可以包括完整的产品密钥和/或产品密钥的不同相关部分,例如图3B所示的组ID、序列号、第一安全值和/ 或第二安全值。在操作510,过程500可以使用一些来自产品密钥的识别信息,例如组ID, 来访问与第一安全值相关的验证信息。举例来说,过程500可以使用其中编码了组ID的统一资源定位符(URL)来联系存储器(例如图2所示的存储器沈0)以便得到验证信息。在获得了相关验证信息的情况下,过程500可以继续执行操作515,以便分析第一安全值。例如,在使用秘密密钥加密序列号和组ID来产生第一安全值的实施例中,过程500 访问的验证信息可以包括与所用加密算法相对应的解密算法的标识(或者,可替换地,实现解密算法的程序代码)以及被用作解密算法参数的秘密密钥。在该实例中,在操作520,过程 500可以使用所访问的验证信息来解密第一安全值,并且将结果与序列号和组ID相比较。 如果序列号和组ID与经过解密的第一安全值匹配,则可以认为产品密钥通过验证(至少临时有效),并且该过程500可以继续执行操作530,以便处理可能的检查。另一方面,如果确
14定序列号和组ID与解密的第一安全值不匹配,则过程500可以继续执行操作525,以便向发送激活请求的计算机通知所述激活请求已被拒绝。作为替换或补充,过程500访问的验证信息可以包括所用加密算法的标识(或者, 可替换地,实现加密算法的程序代码)以及用作加密算法参数的秘密密钥。在该实例中,过程500可以执行它自己对于序列号和组ID的加密,并且在操作520中将结果与第一安全值相比较。如果第一安全值与过程500产生的密文匹配,则可以认为产品密钥通过验证(至少临时有效),并且该过程500可以继续执行操作530,以便处理可能的检查。另一方面,如果确定第一安全值与过程500产生的密文不匹配,则过程500可以继续执行操作525,以便向发送激活请求的计算机告知所述激活请求已被拒绝。在使用秘密密钥散列序列号和组ID来产生第一安全值的另一个实施例中,过程 500访问的验证信息可以包括所用散列算法的标识(或者,可替换地,实现该散列算法的程序代码)以及在产生第一安全值的过程中被用作参数的秘密密钥。然后,在操作520,过程 500可以执行它自己对于序列号和组ID的散列,并且将结果与第一安全值相比较。如果第一安全值与过程500产生的序列号及组ID的散列值相匹配,则可以认为产品密钥通过验证 (至少临时有效),并且该过程500可以继续执行操作530,以便处理可能的检查。另一方面, 如果确定第一安全值与过程500产生的序列号及组ID的散列值不匹配,则过程500可以继续执行操作525,以便向发送激活请求的计算机通知所述激活请求已被拒绝。如上所述,是否检查特定产品密钥的决定可以采用不同的方式做出,例如通过随机选择和/或基于所感知的安全威胁等级。如果在操作530中确定要检查产品密钥,则过程500可以继续执行操作M0,以便向检查机构(例如图2所示的增强型安全服务器250)传送检查请求,并且在操作545中接收检查响应。如果检查成功,或者如果在操作530中确定不必检查,则过程500可以继续执行操作535,以便识别将被授予的一个或多个许可,以及将授予的许可通知发送激活请求的计算机。另一方面,如果检查失败,则过程500可以继续执行操作525,以便向发送激活请求的计算机通知所述激活请求已被拒绝。参考图6,该图显示了一个说明性过程600,其中该过程可以由检查机构(例如图2 所示的增强服务器250)响应于接收到来自验证机构(例如图2所示的激活服务器140)的检查请求而执行。在本示例中,过程600始于接收检查请求的操作605,其中该请求可以包括完整的产品密钥和/或产品密钥的不同相关部分,例如图3B所示的组ID、序列号、第一安全值和/ 或第二安全值。在操作610,过程600可以使用来自产品密钥的一些识别信息,例如组ID, 来访问与第二安全值相关的验证信息。举个例子,过程600可以使用其中编码了组ID的统一资源定位符(URL)来联系存储器(例如图2所示的存储器沈0)以便得到验证信息。根据特定的实现,过程600可以提供附加证书(credential)信息以便访问与第二安全值相关的验证信息。这种附加证书信息可以是不能被前端验证机构(例如图2所示的可以直接从因特网访问的激活服务器140)得到的,由此,即使前端验证机构的安全性被突破,与第二安全值相关的验证信息也仍旧可以保持安全。在获得了相关验证信息的情况下,过程600可以继续执行操作615,以便分析第二安全值。例如,在通过使用秘密密钥散列所述序列号和组ID以产生第二安全值的实施例中,过程600访问的验证信息可以包括所用散列算法的标识(或者,可替换地,实现散列算法的程序代码)以及作为散列算法参数使用的秘密密钥。在该实例中,过程600可以执行它自己对于序列号和组ID的散列,并且在操作620中将结果与第二安全值相比较。作为替换,过程600访问的验证信息可以包括以随机或伪随机方式产生并与序列号和/或组ID关联的值,在这种情况下,过程600可以简单地将那些以随机或伪随机方式产生的值与第二安全值相比较。如果第二安全值匹配该散列值(作为验证信息的一部分检索得到或是由过程600 使用检索到的验证信息产生),则可以认为产品密钥通过了检查机构的验证,并且过程600 可以继续执行操作625,以便向发送检查请求的验证机构通知所述检查成功。否则,该过程 600可以继续执行操作630,以便向验证机构通知所述检查失败。图7示意性显示了可以实现本公开的不同发明方面的说明性计算机1000。举例来说,在该计算机上可以实现在这里为图1-2中的产品密钥生成服务器110、用户计算机130、 激活服务器140以及增强型安全服务器250描述的任何功能。计算机1000包括处理器或处理单元1001以及存储器1002,其中该存储器可以包括易失和/或非易失存储器。除了系统存储器1002之外,计算机1000还可以包括存储器1005 (例如一个或多个磁盘驱动器)。 存储器1002可以存储一个或多个指令,以便对处理单元1001进行编程来执行这里描述的任何功能。此外,存储器1002还可以存储一个或多个应用程序和/或应用编程接口(API) 函数。计算机1000可以具有一个或多个输入设备和/或输出设备,例如图7所示的设备 1006和1007。除其它功能外,这些设备可以用于呈现一个用户接口。可用于提供用户接口的输出设备的示例包括用于呈现视觉输出的打印机或显示屏,或是用于呈现音频输出的扬声器或其他声音生成设备。可用于用户接口的输入设备的示例包括键盘和指示设备,例如鼠标、触摸板和数码板。另举一例,计算机可以通过语音识别或采用其他音频格式来接收输入fe息。如图7所示,计算机1000还可以包括一个或多个网络接口(例如网络接口 1010), 以便使得能够经由不同的网络(例如网络1020)来进行通信。网络的示例包括局域网或广域网,例如企业网或因特网。此类网络可以基于任何适当的技术,并且可以依照任何适当的协议工作,此外还可以包括无线网络、有线网络或光纤网络。已经这样描述了本发明的至少一个实施例的若干方面,应该预料到的是,本领域技术人员可以很容易想到不同的替换、修改和改进。这些替换、修改和改进预定是本公开的一部分,并且处于本发明的实质和范围以内。相应地,以上描述和附图仅仅是作为示例的。本发明的上述实施例可以采用多种方式中的任何一种来实现。例如,这些实施例可以使用硬件、软件或是其组合来实现。在使用软件实现时,无论是在单个计算机上提供还是分布于多个计算机之间,软件代码都可以在任一适当的处理器或是处理器集合上执行。此外,这里概述的不同方法或过程可被编码成能在使用了多种操作系统或平台的一个或多个处理器上运行的软件。作为补充,此类软件可以用多种适当的编程语言和/或编程或脚本工具来编写,并且还可被编译成在主机(framework)或虚拟机上运行的可执行机器语言代码或中间代码。在这方面,本发明可以作为使用一种或多种程序编码的非瞬态计算机可读介质 (或多个计算机可读媒体)(例如计算机存储器,一个或多个软盘,紧凑型碟片,光盘,磁带,闪速存储器,现场可编程门阵列或其他半导体器件中的电路配置,或其他非瞬态有形的计算机存储介质)来实现,当在一个或多个计算机或其他处理器上运行所述程序时,所述程序将会执行用于实现如上所述的本发明的不同实施例的方法。计算机可读介质或媒体是可传送的,由此,其上保存的一个或多个程序可被载入一个或多个不同计算机或其他处理器,以便实现如上所述的本发明的不同方面。这里使用的术语“程序”或“软件” 一般意义上是指可以用于对计算机或其他处理器进行编程,以便实现如上所述的本发明的不同方面的任何类型的计算机代码或计算机可执行指令集合。此外还应该预料到,根据这个实施例的一个方面,在执行本发明的方法时, 一个或多个计算机程序不必驻留在单个计算机或处理器上,而是可以采用模块化的形式分布在多个不同的计算机或处理器中,以便实现本发明的不同方面。计算机可执行指令可以采用多种由一个或多个计算机或其他设备运行的形式,例如程序模块。一般来说,程序模块包括例程、程序、对象、组件、数据结构等等,其执行特定的任务或实现特定的抽象数据类型。通常,在不同的实施例中可以根据需要来组合和分布程序模块的功能。此外,数据结构可以采用任何适当的形式而被存入计算机可读媒体。为了易于例证,数据结构可被显示成具有通过数据结构中的位置来进行关联的字段。这种关系同样可以通过为字段的存储指定计算机可读介质中传递字段之间关系的位置来实现。但是,任何适当的机制均可用于在数据结构的字段中的信息之间建立关联,包括通过使用在数据元素之间建立关联的指针、标签或其他机制。本发明的不同方面既可以单独使用,也可以组合使用,还可以采用上述实施例中没有具体论述的多种安排使用,由此,本发明并不仅限于被应用于如上所述或是在附图中例证的组件的细节和安排。例如,在一个实施例中描述的各方面可以采用任何方式与其他实施例中描述的各方面相结合。此外,本发明可以作为方法来实现,并且在这里已经提供了所述方法的示例。作为方法一部分执行的操作可以采用任何适当的方式排序。相应地,可以构造以与所例证的顺序不同的顺序来执行操作的实施例,其中所述实施例可以包括同时执行某些操作,即使这些操作在说明性实施例中被显示成是连续操作。在权利要求中使用了“第一”、“第二”、“第三”等顺序术语来修饰权利要求元素,但这并不单独意味着一个权利要求元素相对于另一个元素的任何优先级、优先权、顺序或是执行方法操作的时间顺序,它们仅仅用作标签来将具有某个名称的一个权利要求元素与另一个具有相同名称的元素区分开来(而是用于顺序术语),从而区分权利要求元素。此外,这里使用的措辞和术语是用于描述目的地的,而不应该将其视为限制。这里使用的“包括”、“包含”、“具有”、“容纳”、“涉及”及其不同变体意味着包含其后列举的项目, 以及其等价物和额外的项目。
权利要求
1.一种用于验证产品密钥(350)的系统(200),包括 第一服务器(140),被配置成接收产品密钥(350),其中该产品密钥包括用于识别软件产品的至少一个拷贝的标识信息(360,362,370),该产品密钥(350)还包括与标识信息(360,362,370)相关联的安全信息(364,366),该安全信息包括第一部分(364)和第一部分(366);以及对标识信息(360,362,370)以及安全信息的第一部分(364)进行处理,以便确定产品密钥(350)是否有效;以及第二服务器(250),被配置成接收包含标识信息(360,362,370)和安全信息的第二部分(366)的至少一部分产品密钥(350);从产品密钥(350)之外的至少一个来源(260)访问验证信息;使用验证信息来处理标识信息(360,362,370)以及安全信息的第二部分(366),以便确定产品密钥(350)是否有效,其中该验证信息对于第一服务器而言是不能访问的。
2.如权利要求1的系统(200),其中该验证信息是第二验证信息,并且其中第一服务器 (140)还被配置成访问与第二验证信息不同的第一验证信息;以及使用第一验证信息来处理标识信息(360,362,370)以及安全信息的第一部分(364), 以便确定产品密钥(350)是否有效。
3.如权利要求1的系统(200),其中第一服务器(140)还被配置成如果基于安全信息的第一部分(364)确定产品密钥(350)有效,则确定是否由第二服务器(250 )来对该产品密钥(350 )进行检查;以及如果确定由第二服务器(250)来对该产品密钥(350)进行检查,则向第二服务器(250) 传送检查请求,该检查请求包括标识信息(360,362,370)以及安全信息的第二部分(366)。
4.如权利要求3的系统(200),其中第二服务器(250)还被配置成一旦接收到来自第一服务器(140)的检查请求,则使用标识信息(360,362,370)中的至少一些来从产品密钥(350)之外的至少一个来源(260)访问验证信息;以及如果基于安全信息的第二部分(364)确定产品密钥(350)有效,则向第一服务器(140) 告知产品密钥(350)成功通过检查。
5.如权利要求1的系统(200),其中标识信息(360,362,370)和/或安全信息(366)中的至少一些至少部分是基于指定字母数字字符在产品密钥(350)中的位置推导得到的。
6.一种用于验证产品密钥(350)的系统(200),包括至少一个第一处理器(140),其被配置成接收验证产品密钥(350)的请求,该请求包括识别软件产品的至少一个拷贝的标识信息(360,362,370),所述产品密钥(350)还包括与标识信息(360,362,370)相关联的安全信息(364,366),该安全信息包括第一部分(364)和第二部分(366);对标识信息(360,362,370)以及安全信息的第一部分(364)进行处理,以便确定产品密钥(350)是否有效;以及确定是否由至少一个第二处理器(250 )来检查产品密钥(350 )。
7.如权利要求6的系统(200),其中至少一个第一处理器(140)还被配置成使用至少一个随机或伪随机输入来确定是否由至少一个第二处理器(250)来检查产品密钥(350)。
8.如权利要求6的系统(200),其中标识信息(360,362,370 )中的至少一些标识从包含下列各项的群组中选出的至少一项软件产品的类型; 软件产品的版本;软件产品所属的软件产品系列;以及分发软件产品拷贝的渠道,其中至少一个第一处理器(140)还被配置成使用标识信息 (360,362,370)中的至少一些信息来确定是否由至少一个第二处理器(250)来检查产品密钥(350)。
9.如权利要求6的系统(200),其中至少一个第一处理器(140)还被配置成 识别与验证产品密钥(350)的请求相关联的安全威胁等级;以及使用所识别的安全威胁等级来确定是否由至少一个第二处理器(250)来检查该产品密钥(350)。
10.如权利要求6的系统(200),其中至少一个第一处理器(140)还被配置成 使用标识信息(360,362,370)中的至少一些信息来从产品密钥(350)之外的至少一个来源(260)访问验证信息;以及使用验证信息来对标识信息(360,362,370)以及安全信息(364)的第一部分进行处理,以便确定产品密钥(350)是否有效。
全文摘要
本发明涉及一种具有冗余安全性的可靠的软件产品验证和激活。用于验证产品密钥的系统、方法和设备。在一些实施例中,产品密钥包括安全信息和用于识别软件产品的至少一个拷贝的标识信息。该安全信息可以包括由第一验证机构使用第一验证信息处理的第一部分,以及由第二验证机构使用第二验证信息处理的第二部分。所述第二验证信息可以采用与第一验证信息分离的方式保存,并且也可以不能被第一验证机构访问。在一些实施例中,第一验证机构随机确定是否由第二验证机构检查产品密钥。可替换地,第一验证机构可以基于与产品密钥相关联的软件产品的类型和/或所感知的安全风险的等级来确定是否检查。
文档编号G06F21/00GK102419804SQ201110370740
公开日2012年4月18日 申请日期2011年11月21日 优先权日2010年11月19日
发明者冈亚基 C., D. 贝纳罗 J., P. 哈克 J., G. 托谢夫 K., J. 莱森 T., 索拉米 T. 申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1