专利名称:用于确保通信的认证和完整性的技术的制作方法
用于确保通信的认证和完整性的技术背景消息可以在客户机即发起请求的实体、和服务器即响应请求的实体之间传递。客 户机可以将请求消息发送给服务器,而服务器可以将响应消息发送给客户机。客户机和服 务器可以是例如两台计算机或同一台计算机系统上的两个模块等。存在有关在客户机和服 务器之间交换消息的数据完整性和真实性的问题。客户机和服务器之一或两者可能会关心 所交换的信息的数据完整性和真实性。数据完整性可以涉及消息内容和确保接收到的消息 不是原始消息的经修改的版本。真实性可以涉及对发送者的认证,因为接收到的消息可能 是由除了期望的发送者之外的实体生成的。结合客户机接收到的响应,攻击者可以截取和 修改原本从服务器发送的响应。由此,客户机接收具有已经被修改的内容的响应。攻击者也 可以引入意在成为生成响应的服务器的另一实体,而非截取原本由服务器发送的响应。后 者可例如在攻击者引入代替服务器发送和接收消息的模块的情况下发生。相似地,结合服 务器接收到的请求,攻击者可以截取并修改原始的请求,或者攻击者可以用其他方式引入 代替请求者发送和接收消息的模块。概述提供本概述是为了以简化的形式介绍将在以下详细描述中进一步描述的一些概 念。本概述并不旨在标识出所要求保护的主题的关键特征或必要特征,也不旨在用于限定 所要求保护的主题的范围。 描述了用于确保第一模块从第二模块接收到的通信的真实性和数据完整性的技 术。依照本发明的一方面,第一模块使用非对称密钥对的公钥来加密共享的秘密,并且将经 加密的共享的秘密发送给第二模块。第二模块从诸如许可证信息存储的安全和可信的信息 存储中检索非对称密钥对的私钥,并且使用该私钥来获取共享的秘密以便为从第二模块发 送到第一模块的消息生成认证数据。第一模块使用共享的秘密来执行验证处理。依照本发 明的另一方面,第二模块使用从许可证信息存储或其他安全且可信的信息存储获取的非对 称密钥对的私钥来为从第二模块发送到第一模块的消息生成数字签名。第一模块使用非对 称密钥对的公钥执行验证处理。附图简述结合附图阅读以下对本发明的示例性实施例的详细描述,本发明的特征和优点将 变得更加显而易见,其中
图1是结合本文所述的技术可以在实施例中使用的环境的示例;图2是可以包括在实施例中并且可以结合执行本文中的技术使用的组件的示例;图3是可以在执行本文的技术的实施例中使用的请求的示例性表示;图4是响应和如何在使用本文的技术的实施例中确定响应中包括的认证数据的 示例性表示;图5和6是可以在使用本文的技术的实施例中执行的处理步骤的流程图;图7是可以在执行本文的技术的实施例中使用的另一请求的示例性表示;图8是另一响应和如何在使用本文的技术的实施例中确定响应中包括的认证数据的示例性表示; 图9和10是可以在使用本文的技术的另一实施例中执行的处理步骤的流程图。详细描述参考图1,所示的是其中可以实现使用本文中所述的技术的实施例的合适的计算 环境的示例。图1中示出的计算环境仅是合适的计算环境的一个示例,并不旨在对本文中 描述的技术的使用范围或功能提出任何限制。本领域的技术人员可以理解本文描述的技术 适用于与其他通用或专用计算环境和配置一起使用。公知的计算系统、环境、和/或配置的 示例包括但不限于,个人计算机、服务器计算机、手持式或膝上型设备、多处理器系统、基于 多处理器的系统、可编程消费电子产品、网络PC、微型计算机、大型计算机、包括任何以上系 统或设备的分布式计算环境等等。本文中所述的技术可在由一个或多个计算机或其他设备执行的诸如程序模块的 计算机可执行指令的一般上下文中描述。一般而言,程序模块包括执行特定任务或实现特 定抽象数据类型的例程、程序、对象、组件、数据结构等等。通常,程序模块的功能可以按照 各实施例所需的结合或分布。包括在图1中的是计算机12、网络14和服务器16。计算机12可以包括可用于执 行一个或多个程序模块的标准的、市场上可购买的计算机或专用计算机。在以下各节和各 附图中更详细描述的是可以结合使用本文描述的技术确保接收到的通信的完整性和认证 的由计算机12执行的程序模块。计算机12可以在网络化环境中运作并且与诸如服务器16 以及在图1中未示出的其它计算机通信。本领域的技术人员会理解虽然计算机12在示例中被示为在网络化环境中通信, 但是计算机12可以使用不同的通信介质与其它组件通信。例如,计算机12可以使用网络 连接和/或包括但不限于因特网、内联网或其它无线和/或硬连线连接的本领域公知的其 它类型的链接与一个或多个组件通信。如在图1中所示,计算机12可以包括一个或多个处理单元20、存储器22、存储30 和用于便于在计算机12的组件以及图1未示出的其它组件之间的通信的系统总线32。根据计算机12的配置和类型,存储器22可以是易失性的(诸如RAM)、非易失性的 (诸如ROM、闪存等)或两者的某种组合。此外,计算机12也可以具有附加存储(可移动的 和/或不可移动的),包括但不限于USB设备、磁盘或光盘或磁带。这种附加的存储在图1 中用存储30示出。存储30可以包括具有可以由计算机12使用的相关联的计算机可读介 质的一个或多个可移动或不可移动存储设备。一个实施例中的存储30可以包括硬盘和/ 或CD-ROM驱动器。作为示例而非限制,存储器22和存储30是计算机可读介质的示例。计 算机存储介质包括以用于储存诸如计算机可读指令、数据结构、程序模块或其它数据等信 息的任一方法或技术实现的易失性和非易失性,可移动和不可移动介质。计算机存储介质 包括但不限于,RAM、ROM、EEPR0M、闪存或其它存储器技术、CD-ROM、数字多功能盘(DVD)或 其它光盘存储、磁盒、磁带、磁盘存储或其它磁存储设备、或可以用来储存所期望的信息并 可由计算机12访问的任何其它介质。以上介质通常包含计算机可读指令、数据结构、程序 模块或其它数据。在如本文所描述的一个实施例中,计算机12可以在如图1所示通过网络使用到诸 如服务器16的远程计算机的逻辑连接在网络化环境中运作。一个或多个软件模块和/或数据文件可以包括在计算机12的存储30中。在计算机12的操作期间,包括在存储30中 的这些模块的一个或多个也可以驻留在诸如例如RAM的存储器22的一部分中,用于控制计 算机12的操作。 服务器16可以表示连接到网络14的服务器计算机系统。服务器计算机系统可以 包括用于服务请求的软件模块和类似于本文中关于计算机12描述的一个或多个处理器、 存储器、存储等。本文中描述的技术可以用在其中计算机12和服务器16可以在网络14上 通信的实施例中。计算机12和服务器16可以结合处理在两者之间交换的通信来执行操作。 例如,计算机12可以将请求发送给服务器16,而服务器16可以提供响应。本文中的技术可 用于确保诸如由计算机12从服务器16接收到的响应或诸如由服务器16从计算机12接收 到的请求的接收到的通信的完整性和真实性。数据完整性可以涉及通信内容和确保接收到 的通信不是原始通信的经修改的版本。真实性可以涉及对发送者的认证,因为接收到的通 信可能是由除了期望的发送者之外的实体生成的。本文的技术也可用在结合在诸如计算机12上的两个模块的同一计算机上的两个 模块之间交换的通信的实施例中。更一般地,本文的技术可以结合确保从发送者接收到的 消息的认证和完整性来使用。本文的技术可以结合诸如从服务器16到计算机12的一个方 向上传输的通信,以及结合诸如从服务器16到计算机12以及也从计算机12到服务器16 的两个方向上传输的通信来使用。出于说明的目的,以下更详细地阐述示例性实施例,其中使用本文的技术来执行 处理以确保第一模块从第二模块接收到的响应的完整性和认证,其中第一和第二模块可以 位于诸如计算机12的同一计算机上。然而,如本领域的技术人员可理解的并且也如本文中 别处更一般地描述的,技术可以结合在不同的计算机系统而非相同的计算机系统上的实体 之间传输的通信、由第一和第二模块而非仅仅由第一模块接收到的那些通信等使用。参考图2,所示的是可以包括在图1的计算机12上的以结合本文的技术使用的模 块的示例100。示例100包括应用程序102、软件保护服务(SPS) 104和许可证信息存储106。 应用程序102可以是在计算机12上安装的程序。许可证信息存储106可以包括关于被许 可在计算机上使用的一个或多个软件的许可信息。存储106可以是包括许可信息的多种不 同的数据存储实体中的任何一个。例如,存储106可以是文件、数据库或其它数据容器。元 素108示出了可以包括在许可证信息存储106中的关于应用程序102的许可证信息的逻辑 表示。108的信息可以例如指定到期日期、标识被许可执行应用程序102的计算机、标识许 可证授予的权限等。存储106也可以包括与在许可证中授予的各个权限相关联的信息。例 如,如将在以下各节中更详细描述的,许可证可以授予“运行”应用程序102的权限。许可 证信息存储106也可以将信息与运行的权限相关联。作为一个示例,非对称密钥对的私钥 可以被加密并存储在106中。私钥可以与关于应用程序102的许可证的“运行”权限和其 他权限相关联。应该注意许可证信息存储106可以包括结合先前以多种不同的方式中的任 何一种执行的软件安装和激活而获取的许可证数据。如本领域中公知的,非对称密钥对是结合不同的非对称密码技术使用的,其中为 加密和解密使用不同的密钥,诸如使用具有PKI (公钥基础结构)的公/私钥对。除非接收 者拥有相应的私钥,否则使用公钥加密的消息不能被解密。在以下各节中更详细地描述在 执行本文的技术的各实施例中对非对称密钥对的使用。
SPS 104可以管理计算机系统上关于诸如应用程序102的一个或多个软件产品的 许可证。SPS 104可以执行涉及许可证的使用的功能并且通过API展示功能。SPS可以执行 诸如获取许可证、存储和管理许可证、保护许可证不被篡改、评估许可证的有效性、评估许 可证是否被正确地绑定到机器上(例如许可证指示软件产品可以在该机器上执行)、评估 许可证是否授予关于软件产品的特定的权限等功能。应用程序102可以使用API来将请求 110发送给SPS 104。响应于接收请求110,SPS 104可以将响应112发送给应用程序102。 应用程序102可以发出请求110以获取关于有关应用程序102的许可证的信息。例如,用 户可以发出运行应用程序102的请求。“运行”可以是与应用程序相关联的、指示用户具有 运行应用程序的权限的权限。请求110可以被发送给SPS 104以确定许可证是否指示在计 算机上存在授予运行应用程序102的权限的现有的且有效的许可证。响应于接收请求,SPS 104可以关于有关应用程序102的许可证和所请求的权限执行许可证确认和验证处理。例 如,SPS 104可以从许可证信息存储106检索有关应用程序102的许可证 信息,并且执行处 理以确定是否有用于应用程序102的有效的许可证、许可证是否指示应用程序102被正确 地绑定到计算机12上以及许可证是否指示指定的权限是按照许可证授予的。从SPS 104 返回的响应112可以指示关于授予所请求的权限(例如在该示例中为“运行”应用程序的 权限)的当前有效的许可证的先前的确认和验证处理是否成功。诸如用可以存储在许可证信息库106中的电子形式或文档表示的许可证指定了 软件产品中的权限。诸如应用程序102的调用者可以使用API来调用“消费”方法,以便“消 费”有关诸如应用程序102的软件产品的权限。在成功地消费了有关软件产品的权限之后, 可以从许可证信息存储106检索与权限相关联的附加数据。参考如上所述的元素108,在成 功地消费了运行权限之后,可以从许可证信息存储106检索与运行权限相关联的私钥。消 费关于关键产品的权限可以被表征为执行以验证和确认上述有关软件产品的许可证和权 限的处理步骤。诸如被表示为包括在许可证信息存储106中的电子文档的许可证可以包括 结合消费处理使用的信息。消费处理可以包括例如检查是否许可软件产品在软件在其上运 行的机器上执行、检查诸如许可证是否过期的许可证的有效性等。对于软件应用程序,许可 证也可以指定允许结合应用程序执行的不同的权限。例如,如上所述,“运行”可以是指示用 户具有运行软件产品的权限的权限。可以调用消费权限API来确定当前是否存在带有运行 软件产品的权限的有效的许可证。如果是,那么许可证和权限被成功地消费。作为成功消 费处理之后的后续步骤,可以从包括在许可证信息存储106中有关应用程序102的许可证 检索与所消费的权限相关联的诸如私钥的附加信息。通过引用结合于此的由Gimyakti等 人于2003年10月24日提交的题为!PROGRAMMING INTERFACE FOR LICENSING (用于许可的 编程接口 )的美国专利公开2005/0091168Α1( ‘ 168公开)、美国专利申请No. 10/692, 868 描述了允许其他模块使用公共服务的许可证管理功能的示例性软件许可服务和API。上述 ‘168公开中的许可管理设备和API类似于刚结合SPS 104描述的工具。如将在以下各节中描述的,在成功地消费特定权限时从许可证信息存储106检索 出的私钥可以结合本文的技术使用,以确保应用程序102从SPS 104接收到的响应112的 数据完整性和真实性。结合一个实施例,应用程序102可以在应用程序104发出请求110之前通过在应 用程序102和SPS 104之间交换其他通信来建立与SPS 104的会话。结合建立会话,应用程序102可以指示应用程序102将结合关于会话的后续通信使用的非对称密钥对的特定公 钥。应用程序102也可以生成表征为每个会话唯一的标识符的会话密钥。会话密钥可以与 在应用程序102和SPS 104之间交换的关于相关联的会话的通信相关联。会话密钥可以使 用多种不同技术中的任何一种生成,其确保了关于每个会话的足够程度的唯一性。例如,会 话可以具有16到64字节范围内的大小,并且可以基于公钥、当前的时间等随机数生成。会 话密钥在本文中可以更一般地涉及表示具有关于每个会话的不同的值的标识符的一种类 型的共享的秘密。
应用程序102使用在建立与SPS 104的会话时指定的非对称密钥对的公钥来加密 共享秘密。应用程序102构建包括经加密的共享秘密和关于特定请求的任何其他数据的请 求110。这种其他数据可以例如标识为其发出请求110的权限。如上所述,请求110可以是 关于在指示允许在计算机12上执行应用程序102的有效的许可证中是否授予包括在请求 中的诸如“运行”权限的权限的查询。应该注意共享秘密可以关于应用程序102 “共享”并且以加密的形式传送给SPS 104。参考图3,所示的是可以从应用程序102发送到SPS 104的请求110的示例性表 示。请求602包括请求数据604、经加密的共享秘密606以及可选地关于请求的其他信息 608。请求数据604可以例如标识要由SPS 104执行的特定操作、标识一种或多种权限、标 识应用程序102等。元素606可以表示使用诸如RSA的多种不同的非对成加密技术中任何 一种、使用与当前会话相关联的公钥加密的共享秘密。SPS 104接收请求110并且执行处理以消费请求中有关应用程序102的许可证的 指定的权限。如上所述,权限的消费可以包括基于包括在许可证信息存储106中的信息对 于有关应用程序102的许可证和指定权限执行确认和验证处理。例如SPS 104可以从存 储106检索关于应用程序102的许可证信息以确定许可证是否过期、许可证是否指示应用 程序102被授权在特定的计算机12上执行、是否在许可证中授予在请求中指定的权限等。 如果处理确定结合用于计算机12上的有效的许可证授予指定的权限,那么成功地消费权 限。在成功地消费权限后,可随后从许可证信息存储106检索与该权限相关联的附加信息。 结合依照本文的技术的实施例,私钥可以与指定的消费权限相关联并且可以从存储106检 索。私钥可以对应于应用程序102用于加密共享秘密的非对称私/公钥对的公钥。在成功 地消费关于请求110的指定权限之后,SPS 104从许可证信息存储106检索私钥,并且解密 包括在来自应用程序102的请求中的经加密的共享秘密606。SPS也可以结合请求执行其 他处理。应该注意SPS 104可以执行处理以确定从许可证信息存储106检索出的私钥是否 是用于在建立会话时指定的公钥的成对的非对称密钥。例如,许可证信息存储106可以包 括非对称对的私钥和对应的公钥并且两者都可以从106检索。SPS 104可以确定从存储106 检索的公钥是否匹配建立会话时指定的公钥。如果公钥不匹配,那么SPS 104可以采取适 当的步骤,诸如终止处理并且在响应中返回适当的状况。同样,在成功地消费时可能检索到 多个私钥,并且SPS可以通过匹配公钥来选择适当的私钥以执行处理。参考图4,所示的是示出可以执行以确定包括在要发送到应用程序102的响应112 中的数据的处理的示例。响应704可以包括版本号702a、可选响应数据702b、可选现时值702c和认证数据702d。如下文所述,版本号702a和可选的响应数据702b和/或现时值 702c可以用作对生成认证数据702d的处理的输入。现时值可以被称为“一次使用的编号”, 如下文结合元素702更详细描述地,它随每条认证的消息改变。 版本号702a可以是与SPS 104相关联的版本号。版本号702a可以由SPS 104用 各种不同的方式获取。例如,版本号可以在模块SPS 104内编码、从许可证信息存储106或 计算机12上其他预定的位置检索。实施例可以为版本号702a选择适当的大小。例如,一 实施例可以使用最大为4字节的版本号702a。响应数据702b可以是可选的,例如如果特定 的请求110没有返回给调用者的任何信息。现时值702c可以被表征为对于每个响应通信 唯一的数字或其他标志。例如,现时值702c可以是由SPS 104生成的随机或伪随机数。现 时值702c可以在实施例中用于协助防止重放攻击。重放攻击可以被表征为其中可以截取 有效的数据传输并接着重复或转发的攻击。可以防止这种重放攻击,因为在每个响应中包 括不同的现时值702c,由此使得消息数据702和生成的认证数据702d也是关于每次响应改 变的。如所示的,要认证的消息数据702可以包括702a,并且也可以包括702b和/或 702c。消息数据702可以通过串接702a和可选的702b和/或702c来形成。消息数据702 首先被输入到信封函数(envelope function) 712中,后者使用共享的秘密710来确定认证 数据702d。在一个实施例中,信封函数712可以是执行以确定HMAC(键入的散列消息认证 代码)值作为认证数据702d的处理。可以使用密码散列函数结合密钥来计算HMAC的值, 在该示例中密钥是共享的秘密710。如上所述,共享的秘密710可以通过使用从许可证存储 106获取的私钥解密请求的一部分来获取。HMAC值可以被用作认证数据702d,以验证用于 生成HMAC值的消息数据702的数据完整性和认证两者。HMAC可以被定义为HMACkey (M) = h ((KEY XOR opad Il h ((KEY XOR ipad) Il m))等式 1其中h是所选的密码散列函数,KEY是密钥,诸如通过解密请求的一部分获取的共 享的秘密,其中为散列函数h特定的块大小向KEY填充额外的零,而M是要认证的消息702。 应该注意“ Il ”表示串接,XOR表示逻辑异或操作,而外部填充“opad”是十六进制常数Ox 5c5c5c…5c5c,而内部填充“ipad”也是十六进制常数0x363636…3636。在该示例中,M可 以被表示为作为串接版本号702a以及可选的响应数据702b和/或现时值702c的结果形 成的702。诸如SHA-I或MD-5的多种不同的密码散列函数中的任何一种可以被用作以上参 考的对HMAC的表示中的散列函数h。HMAC值的密码强度可以取决于底层的散列函数、密钥 的大小和质量以及按比特的散列输出长度大小。结合HMAC,KEY被用于形成散列算法h散列的内容。作为替换,实施例可以使用诸 如AES (高级加密标准)的使用共享的秘密作为对称密钥的对称密码技术作为信封函数,而 非使用等式I(HMAC)作为信封函数来确定认证数据。换而言之,实施例可以替换地使用诸 如AES的基于对称密码技术的键入的散列算法来作为信封函数712来生成认证数据702d, 而非使用基于散列函数的键入的散列算法的信封函数712来生成HMAC值作为认证数据。结 合诸如AES的对称密码技术,密钥被用作第一输入,而形成消息的内容是第二输入。应该注 意对称密码技术为加密和解密操作使用相同的密钥。本领域的技术人员可以理解信封函数可以更一般地是基于包括消息和密钥的输 入生成认证数据的任何算法。如本文中所述的HMAC算法和对称密码技术是可以在实施例中使用的信封函数的示例。现时值702c可以用各种不同的方式确定并且用多种不同的方式使得它为应用程 序102和SPS 104所知。例如,SPS 104可以使用基于时间的值、随机数生成器等来生成用 作现时值的值。从SPS发送给应用程序的响应112可以包括该现时值或应用程序可从中确 定/得出现时值的值。作为另一示例,应用程序可以确定现时值或用于得出现时值的值,并 且可以将此包括在发送给SPS的请求中。SPS接着可以使用该现时值形成用于确定HMAC值 的消息702。更一般地,使用现时值702c的实施例可以以SPS和应用程序理解的任何方式 生成现时值。一旦确定了认证数据702d,那么SPS 104如所示地构建响应704并且将响应704 传输给应用程序102。应该注意,在实施例中可以可选地加密响应数据702b和响应的其他 部分。例如如果响应数据702b包括有价值的内容或者SPS 104不希望以可读的形式传输 的内容,实施例可以选择加密响应数据702b。在接收到响应后,例如如果SPS 104加密了响应数据702b,那么应用程序102执行 任何必要的解密。应用程序102接着执行验证处理。更具体地,应用程序102以与SPS 104 计算包括在响应中的认证数据相同的方式计算其自身的认证数据的副本。应用程序102使 用应用程序102已知的共享的秘密以及包括在接收到的响应中的版本号702a和响应数据 702b和/或现时值702c (如果有的话)来计算其自身的认证数据的副本。应用程序102执 行处理以确定HMAC值或可以在实施例中用于确定认证数据的其他信封函数。应用程序102 将其自己计算的认证数据的副本与包括在响应中的认证数据702d作比较。如果两者匹配, 那么验证处理是成功的。否则,验证处理失败。应该注意实施例也可以结合验证处理执行附加步骤。例如,应用程序102也可以 结合在响应中接收到的版本号702a来执行附加检查。应用程序102可以检索版本号的期 望值并且将期望值与包括在响应中的版本号702a作比较。应用程序102可以用各种不同 的方式获取期望的版本号,诸如在本文中的别处结合SPS 104描述的那些方式。结合刚描述的是示例性实施例,应用程序希望确保接收到响应是由SPS 104而非 声称是SPS 104的另一实体发送的。应用程序102也希望确保接收到的响应是未经修改 的。为了确保接收到的响应的真实性和数据完整性,应用程序102生成是共享秘密的质询, 使用公钥加密质询,并且将经加密的质询发送给SPS 104。SPS 104接着执行处理以证明它 拥有结合关于应用程序102的许可证信息存储的私钥。SPS104通过解密质询(例如共享的 秘密)和使用经解密的值形成认证数据来证明它拥有私钥。应用程序102通过计算期望的 认证数据并且将在响应中接收到的认证数据与期望的认证数据作比较来验证响应。参考图5和6,所示的是可以依照本文的技术在实施例中执行的处理步骤的流程 图。图5和6的步骤概述了上文中刚描述的处理。在步骤302处,应用程序建立与SPS的 会话,并且指示要在会话期间使用的公钥。SPS会使用该公钥来确定要在后续的处理中从存 储的许可证中检索的匹配的非对称私钥。如上所述,可以例如用在应用程序和SPS之间交 换的一个或多个通信来建立会话。在步骤304处,应用程序生成共享的密钥,并且使用在步 骤302中与会话相关联的公钥来加密共享的秘密。在步骤306处,应用程序将经加密的共享 秘密发送给SPS作为请求的一部分。在步骤308处,SPS接收请求。在步骤310处,SPS执 行处理以消费可能在请求中关于有关应用程序的许可证指示的指定权限。在步骤312处,作出关于消费处理是否 成功的判定。如果否,那么控制前进到步骤314,其中可以执行与失 败的消费处理相关联的步骤。步骤314可以包括SPS返回指示步骤310的处理的状态的代 码。如果步骤312评估为是,那么控制前进到步骤316,其中SPS获取关于步骤302的公钥 的非对称密钥对的私钥。步骤316可包括SPS从包含应用程序的许可证信息的许可证信息 存储中检索私钥。控制从图5的步骤316前进到图6的步骤402,其中SPS使用私钥来解密 请求的数据并且获取共享的秘密。在步骤404处,SPS使用版本号、现时值(可选的)和响 应数据(可选的)来形成使用共享秘密作为密钥来为其确定认证数据的消息。SPS构建包 括版本号、现时值(可选的)、响应数据(可选的)和认证数据的响应。SPS的实施例也可 以可选地加密响应数据和/或包括在响应中的其他信息。在步骤406处,SPS将响应发送 给应用程序。应用程序解密响应(如有必要)并且计算认证数据。应用程序通过将计算出 的认证数据与在响应中接收到的认证数据作比较来执行验证处理。实施例也可以结合验证 处理执行其他比较,诸如例如将在响应中接收到的版本号与期望的版本号作比较。在步骤 408处,作出关于步骤406的认证数据值是否匹配的判定。步骤408也可以包括确定诸如期 望和接收到的版本号的其他数据值之间的比较是否指示匹配。如果步骤408评估为是,那 么应用程序确定验证处理是成功的。否则,如果步骤408评估为否,那么应用程序确定验证 处理失败。成功的验证处理向应用程序确保关于接收到的响应的真实性和完整性。现在将描述的是使用本文的技术的另一实施例,其中SPS使用从许可证信息存储 检索到的私钥以便用诸如RSA的非对称密码技术来生成作为数字签名的认证数据。从许可 证检索出的私钥可用于形成数字签名。应用程序可接收包括认证数据(数字签名)的响应, 并接着结合执行验证处理使用公钥。结合验证处理,应用程序接收作为数字签名的经加密 的散列值,计算应用程序形成的新生成的散列值并且使用公钥来相对于数字签名验证新生 成的散列值。在该实施例中,SPS用来生成接着使用私钥加密(由SPS用作为“签名”)的 散列值的“消息”可以包括将以下串接在一起模块版本号、响应数据(如果有的话)和/ 或现时值(如果有的话)。可以用类似于上述方式的多种不同的方式来确定现时值并且使 其为SPS和应用程序所知。结合使用数字签名的该后一的实施例,请求无需包括共享的秘 密。相反,当最初建立会话时,应用程序可以指定要使用的公钥。SPS可以检索对应于该公 钥的私钥,它使用其形成响应中的数字签名。应用程序接着在接受响应是有效的之前可以 使用公钥执行验证处理。现在将更详细描述的是请求和响应的表示以及可以使用上文中刚描述的数字签 名在实施例中使用的处理步骤的流程图。参考图7,所示的是可以在实施例中使用的请求的示例,其中认证数据是数字签 名。请求1002包括请求数据1004以及可选地其他信息1006。与图3的请求形成对比,在 该后一实施例中,从请求省略经加密的共享的秘密。请求的其他部分类似于以上结合图3 所描述的。参考图8,所示的是可以执行以确定包括在发送到应用程序102的响应1130中的 数据的处理的示例。响应1130可以包括版本号1102a、可选响应数据1102b、可选现时值 1102c和认证数据1102d。元素1102a、1102b和1102c可以是如以上结合图4所描述的。 响应1130也包括认证数据1102d,但是在该实施例中认证数据1102d是与图4的认证数据 702d形成对比的数字签名。在示例1100中,消息数据1102可以被输入到生成散列值1106的密码散列函数1104中,接着使用私钥1112用加密处理1110来加密该散列值1106以获 取数字签名1102d作为认证数据1102d。结合该实施例,包括在1120中的组件可以形成以 上一般地描述和例如图4中示出的信封函数执行的处理。参考图9和10,所示的是可以使用本文的技术结合另一实施例执行的处理步骤的 流程图。图9和10概述刚在其中认证数据是数字签名的实施例中描述的处理。结合图9 和10的步骤,可以理解一些处理步骤类似于结合图5和6描述的步骤。在步骤802处,应 用程序建立与SPS的会话并且指示要在会话期间使用的公钥。步骤802类似于图5的步骤 302。在步骤804中,应用程序形成请求并将其发送给SPS。这种请求的示例在图7中示出。 在步骤806中,SPS接收请求并且在步骤808中执行消费处理。在步骤810中,作出关于消 费处理是否成功的判定。如果否,控制前进到步骤812。如果是,控制前进到步骤814,其中 SPS从许可证信息库检索私钥。步骤808、810、812和814分别类似于图5的步骤310、312、 314 和 316。在步骤902中,SPS将数字签名确定为认证数据。版本号和可选的响应数据和/ 或现时值被用于形成为其确定散列值的消息数据。接着使用私钥加密散列值,而所得的经 加密的数据是包括在响应中作为认证数据的数字签名。在步骤904中,SPS构建包括版本 号、响应数据(可选的)、现时值(可选的)和认证数据的响应。响应中的响应数据和/或 其他信息可以被可选地结合图6的步骤404所述地加密。在步骤906中,响应被发送给应 用程序并且由应用程序接收。应用程序按需解密响应数据或响应的其他部分。在步骤908 中,应用程序通过计算消息的散列值并且使用公钥相对于数字签名验证计算出的散列值来 验证数字签名。在步骤910处,作出关于验证处理是否成功的判定。如果是,那么验证处理 成功,而控制前进到步骤912。否则,验证处理失败,而控制前进到步骤914。如 结合图6的 步骤406所述,步骤908也可以包括比较诸如接收到的和期望的版本号的其他值,作为验证 处理的一部分。在这种情况下,步骤910可以包括确定版本号是否匹配。可以依照认证数 据验证、版本号比较和可以在实施例中执行的其他比较来确定成功的验证处理。如上所述,诸如结合使用数字签名作为认证数据的实施例,可以首先使用散列函 数生成密码散列值来为消息内容确定散列值以数字地签署消息。散列函数是以标准长度的 “散列值”或“散列结果”的形式创建数字表示或“指纹”的算法。当使用相同的散列函数时, 对于消息内容的任何改变产生不同的散列结果。接着加密为关于消息内容计算的散列值。 作为签署的一部分,发送给另一方的消息可以包括消息内容和经加密的散列值。经加密的 散列值也可以被称为数字签名。可以在实施例中使用各种不同的散列函数和本领域公知的 加密技术中的任何一种。消息的接收者接着可以使用与发送者相同的散列算法为接收到的 消息内容计算新的散列值,并且使用公钥相对于数字签名执行对新的散列值的验证处理。本文中描述的示例性实施例可以结合防止软件盗版来使用。作为一个示例,可以 安装应用程序102的未经授权的版本以供在计算机上使用。当用户试图运行应用程序的 未经授权的版本时,攻击者可以例如用另一模块代替应用程序102如本文所述与之通信的 SPS 104。攻击者也可以截取和修改SPS 104发送的响应。实施例可以使用本文的技术,这 样使得应用程序102可以与SPS通信以确定许可证是否有效并且授予必要的权限以执行所 请求的操作。本文的技术可用于确保应用程序102接收到的响应的完整性和真实性,这样 使得应用程序102可以检测诸如上述攻击者损害的接收到的通信。
结合本文中描述的示例性实施例,可以结合与特定的软件应用程序相关联的许可证信息存储私钥。例如,如上所述,可以包括私钥作为与应用程序相关联的许可证信息的一 部分包括,并且许可证信息可以被包括在许可证信息存储中。本领域的技术人员可以理解 有关应用程序的许可证信息是一种特定类型的应用程序专用信息。使用本文的技术的其他 实施例可以存储私钥并且结合除了许可证信息之外的其他类型的应用程序专用信息来关 联私钥。此外,私钥和与应用程序相关联的应用程序专用信息可以被存储在除了许可证信 息存储之外的其他类型的存储库或数据存储中。更一般地,包括私钥的应用程序专用信息 可以被存储在任何类型的安全且可信的信息存储中。安全且可信的信息存储可以是用于存 储包括私钥的一种或多种不同类型的应用程序专用信息的数据存储。同样,如本文中结合 许可证信息所述,可能不会检索私钥,除非有成功的消费处理,其中消费处理包括例如确定 存在有关应用程序的有效的许可证以及许可证授予指定的权限。由此,许可证信息存储结 合私钥提供安全性和访问控制,因为不能获取私钥除非消费处理成功。在其中使用除了许 可证信息存储之外的不同类型的安全且可信的信息存储的实施例中,在提供对私钥的访问 之前,可能需要成功地执行除了消费处理之外的其他验证和/或确认处理。这种验证和/ 或确认处理可以随着实施例而改变,并且可以包括例如验证所需的数据是由应用程序或试 图获取私钥的其他模块提供的、对包括在应用程序专用信息中的其他数据的验证和/或确 认、诸如例如应用程序在使用特定的操作系统的特定的计算机系统上执行的关于硬件和/ 或软件信息的验证等等。以上描述的仅是示出使用本文的技术的两个示例。本领域的技术人员可以理解本 文的技术可以更一般地结合从任何发送者传输给相同或不同计算机系统上的任何接收者 的通信来使用。此外,这些技术可以结合在一个方向上发送的关于两个模块或其他实体的 通信或结合在两个方向上发送的通信使用。关于本文的示例,这些技术是结合从SPS 104 到应用程序102的一个方向上发送的通信来示出的。然而,本文的技术也可以结合单独地 从应用程序102发送到SPS 104的通信或与结合使用本文的技术从SPS发送到应用程序的 通信组合使用。虽然已经用对结构特征和/或方法动作专用的语言描述了本主题,但是所附权利 要求中定义的主题不必限于上述的具体特征或动作。相反,上述具体特征和动作是作为实 现权利要求的示例形式而公开的。
权利要求
1. 一种计算机实现的通信方法,包括从第一模块(102)向第二模块(104)发送(306)请求(110),所述请求包括作为使用非 对称密钥对的公钥加密的共享的秘密的第一部分;由所述第二模块(104)从包括关于所述第一模块的应用程序专用信息的安全且可信 的信息存储中获取(316)所述非对称密钥对的私钥;由所述第二模块(104)使用所述私钥解密(40 所述第一部分以获取所述共享的秘密;从所述第二模块向所述第一模块发送(406)响应(112),所述响应(11 包括认证数据 和与所述共享的秘密一起用于确定所述认证数据的至少一个数据项;以及由所述第一模块(10 使用共享秘密执行验证处理G06)以验证包括在所述响应中的 所述认证数据。
2. 一种计算机实现的通信方法,包括 从第一模块向第二模块发送(804)请求;由所述第二模块从包括许可证信息的许可证信息存储中获取(814)非对称密钥对的 私钥;从所述第二模块向所述第一模块发送(906)响应,所述响应包括使用所述私钥和至少 一个数据项形成的数字签名;以及由所述第一模块使用所述非对称密钥对的公钥执行(908)验证处理,以验证包括在所 述响应中的所述数字签名。
3. 一种其中存储可执行代码的计算机可读介质,所述可执行代码用于确保从第二模 块向第一模块发送的通信的真实性和数据完整性,所述计算机可读介质包括用于以下的存 储在其上的代码由第二模块从第一模块接收(306)包括作为用非对称密钥对的公钥加密的共享秘密 的第一部分的第一通信;由所述第二模块依照许可证和指定的权限执行(310)消费处理; 在成功地执行消费处理之后,由所述第二模块从包括关于所述第一模块的许可证信息 的许可证信息存储中检索(316)所述非对称密钥对的私钥;由所述第二模块使用所述私钥解密(40 所述第一部分以获取所述共享的秘密; 由所述第二模块使用所述共享的秘密和至少一个数据项确定(404)认证数据;以及 从所述第二模块向所述第一模块发送(406)第二通信,所述第二通信包括所述认证数 据和至少一个数据项。
全文摘要
描述了用于确保接收到的消息的数据完整性和认证的技术。一种技术包括从第一模块向第二模块发送请求,其中请求包括作为用公钥加密的共享密钥的第一部分,由该第二模块从诸如许可证信息存储的包括关于该第一模块的许可证信息或其他应用程序专用的信息的安全且可信的信息存储中获取私钥,使用该私钥来解密该第一部分并且获取共享的秘密,从该第二模块向该第一模块发送响应,其中所述响应包括认证数据和至少一个数据项,该数据项与该共享的秘密一起用于确定该认证数据,以及由该第一模块执行验证处理以验证包括在该响应中的认证数据。
文档编号G06F21/24GK102077213SQ200980125617
公开日2011年5月25日 申请日期2009年5月21日 优先权日2008年6月26日
发明者B·帕尔曼, M·张, M·扎戈尔斯基, T·苏拉米, W-P·S·苏 申请人:微软公司