书签 分享 收藏 举报 版权申诉 / 20

快速RSA签名验证.pdf

  • 上传人:1**
  • 文档编号:1099803
  • 上传时间:2018-03-31
  • 格式:PDF
  • 页数:20
  • 大小:1.08MB
  • 摘要
    申请专利号:

    CN200780046426.9

    申请日:

    2007.11.29

    公开号:

    CN101558600A

    公开日:

    2009.10.14

    当前法律状态:

    授权

    有效性:

    有权

    法律详情:

    专利权的转移IPC(主分类):H04L 9/30变更事项:专利权人变更前权利人:微软公司变更后权利人:微软技术许可有限责任公司变更事项:地址变更前权利人:美国华盛顿州变更后权利人:美国华盛顿州登记生效日:20150428|||授权|||实质审查的生效|||公开

    IPC分类号:

    H04L9/30

    主分类号:

    H04L9/30

    申请人:

    微软公司

    发明人:

    N·弗格森

    地址:

    美国华盛顿州

    优先权:

    2006.12.18 US 11/640,796

    专利代理机构:

    上海专利商标事务所有限公司

    代理人:

    张政权;钱静芳

    PDF完整版下载: PDF下载
    内容摘要

    RSA消息签名可以通过验证se mod n=F(m,n)来验证。如果预先计算被定义为K=se div n的K值,并将其作为输入提供给验证该签名的计算设备,则签名验证可以显著地更快。为了避免对大的K值的传输和数学运算(它们自身可以是低效的),可以选择相对小的RSA公共指数e,诸如e=2或e=3。K是基于公开可用的信息且可以由签署消息的计算设备或由中间计算设备来计算,并且被发送给验证该签名的设备而不影响安全性。

    权利要求书

    1.  一种或多种包括用于验证签名的计算机可执行指令的计算机可读介质,所述计算机可执行指令针对以下步骤,包括:
    接收包括消息数据和所述签名的经签署的消息,所述经签署的消息已经使用包括模数值的私钥来签署,所述私钥与包括公共指数和所述模数值的公钥配对;
    接收对应于所述签名用所述公共指数乘方接着除以所述模数值的商的预先计算的值;以及
    使用所述预先计算的值来验证所述签名。

    2.
      如权利要求1所述的计算机可读介质,其特征在于,所述经签署的消息还包括附加签名值,并且其中针对使用所述预先计算的值来验证所述签名的所述计算机可执行指令还包括针对使用所述预先计算的值和所述附加签名值来验证所述签名的计算机可执行指令。

    3.
      如权利要求1所述的计算机可读介质,其特征在于,所述公共指数值为3。

    4.
      如权利要求1所述的计算机可读介质,其特征在于,所述经签署的消息以及所述预先计算机值是在发送计算设备处发起的。

    5.
      如权利要求1所述的计算机可读介质,其特征在于,所述经签署的消息以及所述预先计算的值是在不同的计算设备处发起的。

    6.
      如权利要求1所述的计算机可读介质,其特征在于,所述预先计算的值和所述签名是使用签名记录来编码的。

    7.
      如权利要求1所述的计算机可读介质,其特征在于,所述预先计算的值是在所述签名的验证之外无限期保留的。

    8.
      一种或多种包括用于帮助签名的签证的计算机可执行指令的计算机可读介质,所述计算机可执行指令针对以下步骤,包括:
    发送包括消息数据和所述签名的经签署的消息,所述经签署的消息已经使用包括模数值的私钥来签署,所述私钥与包括公共指数和所述模数值的公钥配对;
    生成对应于所述签名用所述公共指数乘方接着除以所述模数值的商的预先计算的值;以及
    发送所述预先计算的值。

    9.
      如权利要求8所述的计算机可读介质,其特征在于,还包括针对以下步骤的计算机可执行指令,所述步骤包括:生成所述经签署的消息。

    10.
      如权利要求8所述的计算机可读介质,其特征在于,所述经签署的消息还包括验证所述签名所需的附加签名值。

    11.
      如权利要求8所述的计算机可读介质,其特征在于,所述公共指数值为3。

    12.
      如权利要求8所述的计算机可读介质,其特征在于,还包括针对以下步骤的计算机可执行指令,所述步骤包括:使用签名记录来编码所述预先计算的值和所述签名。

    13.
      如权利要求12所述的计算机可读介质,其特征在于,编码所述预先计算的值还包括使用所述签名记录的额外字段来编码所述预先计算的值。

    14.
      一种验证签名的方法,包括:
    接收包括消息数据和所述签名的经签署的消息,所述经签署的消息已经使用包括模数值的私钥来签署,所述私钥与包括公共指数和所述模数值的公钥配对;
    接收对应于所述签名用所述公共指数乘方接着除以所述模数值的商的预先计算的值;以及
    使用所述预先计算的值来验证所述签名。

    15.
      如权利要求14所述的方法,其特征在于,还包括:接收附加签名值,其中所述使用预先计算的值来验证所述签名还包括使用所述预先计算的值和所述附加签名值来验证所述签名。

    16.
      如权利要求14所述的方法,其特征在于,所述公共指数值为3。

    17.
      如权利要求14所述的方法,其特征在于,所述经签署的消息和所述预先计算的值是在发送计算设备处发起的。

    18.
      如权利要求14所述的方法,其特征在于,所述经签署的消息以及所述预先计算的值是在不同的计算设备处发起的。

    19.
      如权利要求14所述的方法,其特征在于,其中所述预先计算的值和所述签名是使用签名记录来编码的。

    20.
      如权利要求14所述的方法,其特征在于,其中所述预先计算的值是在所述签名的验证之外无限期地保留的。

    说明书

    快速RSA签名验证
    发明背景
    数字签名用于数字地证明经签署的数据是由特定实体发送的。诸如计算机用户等每个实体导出一组被称为密钥对的数据。密钥对中的一个密钥被称为公钥且可以被自由分发。密钥对的第二个密钥被称为私钥,并且数字签名唯一地标识特定实体的能力取决于实体有多小心地保护其私钥。可以使用私钥来“签署”任何数据。更具体地,要签署的数据和私钥作为输入提供给已知数学函数。这种函数的输出是数据的数字签名。
    接着可以使用公钥来验证自从数据被签署后没有被更改过。更具体地,经签署的数据、数字签名和公钥作为输入提供给已知的数学函数。如果经签署的数据在它被签署之后被修改,则数学函数将如此指示:一般地通过要不是对数据的修改应该是相等的所得值的不相等。假设仅私钥可以生成将在数学上用对应的公钥验证的签名,则对签名的这种数学验证指示数据没有改变,因为它是由拥有该私钥的某人来签署的。如果仅有一个实体拥有该私钥,则签名的验证用于验证数据实际上是由该实体发送的,并且它在传输过程中没有被修改过。
    一种常用的数字签名算法被称为RSA算法,其借用有功于其发明的三个人的姓的第一个字母。RSA公钥包括通常用字母“e”指示的“公共指数”以及通常用字母“n”指示的模数。某些数据(通常称为“消息”并且由变量“m”表示)的RSA签名“s”可以通过检查se mod n等于F(m,n)来验证,其中“F”是所协商的填充函数(padding function)。
    随着对数字通信的使用的增加,经签署的消息的数目也同样增加。因此,验证经签署的消息所花费的时间会是重要的,尤其是因为尽管消息仅需要被签署一次,但其签名可以被验证多次——每个接收者验证一次。结果,签名验证的执行次数要比消息签署多得多。
    对于RSA算法,签名验证要求计算F(m,n)和se mod n两者,其中“F”是所协商的填充函数。在这两个表达式中,传统上后者计算起来在计算上更为密集。实际上,一般地使用单独的模乘和模平方以逐步的方式来对se mod n求值。如本领域的技术人员所公知的,直接计算se mod n并且避免这种逐步的方式将导致可能是非常大的se项的计算,结果是损失了性能。

    概述
    为了验证RSA签名,消息数据“m”和签名“s”的接收者需要验证se mod n等于F(m,n),其中“F”是所协商的填充函数,且“e”和“n”是对应于该消息的签署者的RSA公钥的元素。然而,验证se mod n等于F(m,n)具有非常接近于1的概率在数学上是足够的,而非验证相等绝对为真。用于此的一个机制是验证对于适当选择的“p”的值,(se mod n)mod p等于F(m,n)mod p。
    根据模运算的特性,如果“K”值被定义为se div n,则se mod n可以被表示为se-Kn。将该表达式代入以上模p的等式,得到(se-Kn)mod p=F(m,n)mod p。等号左边的表达式可以计算为(s mod p)e-(K mod p)(n mod p))mod p。考虑到该表达式的各项,一开始需要计算以下值:(1)s mod p,(2)K mod p以及(3)n modp。这些项中的每一个都是对p的模,并且因此得到相对小的值,因为可以选择p为易于处理的小的值,且任何模p的项在数学上肯定比p小。使用单独的模平方和模乘来计算求幂,剩余的计算都可以通过模p来完成。
    然而,“K”值留待确定。如果选择指数“e”足够小,诸如e=2或e=3,则K的值同样将相对地小,因为K与se成正比。相对小的K值使得能够更高效地计算K mod p项,并且也使得能够更高效地传输K。假设K涉及指数项,即se,则推导出K值在计算上会是高耗费的。然而,由于可以高效地传输K,因此它可以由除寻求验证签名s的计算设备之外的计算设备来确定,接着被简单地发送给执行验证的计算设备。出于更为重要的安全性考虑,K值完全基于公开可用的信息,包括签名s、公共指数e以及模数n。因此,发送K不会引起RSA签名方案的安全性的任何降低。
    在一个实施例中,K值可以用除接收经签署的消息的计算设备之外的计算设备来计算,并且接着可以被发送到接收该经签署的消息的一个或多个计算设备。例如,K值可以用发送和签署消息的计算设备来计算。与签署消息自身的计算成本相比,计算K的计算成本是极小的。因此,签署计算设备所执行的工作没有显著的增加。
    在一替换实施例中,K值可以用集中式服务器来计算,如负责将经签署的消息的各个副本分发到作为服务器的客户机的那些计算设备的电子邮件服务器、或者在一个或多个客户机之间共享经签署的数据的文件服务器。通过在中央位置计算K,可以使得由经签署的消息的接收者所执行的每个单独的签名验证变得更为高效。
    在另一替换实施例中,接收经签署的消息的计算设备可以计算一次K,并将其与经签署的消息一起存储。随后通过参考已经计算出的K值,可以更高效地执行任何后续的签名验证。
    在又一替换实施例中,使用RSA签名方案的Rabin变量,可以选择公共指数e为e=2。选择这种小的e值提供可以用高效的方式发送并且随后可以由验证计算设备用高效的方式来使用的相对小的K值。在又一替换实施例中,可以选择公共指数e为e=3。即使e=3,K值也可以保持相对小,但是避免了Rabin变量的缺点。在这两种情况下(e=2和e=3),选择填充函数F来最小化由于选择小公共指数而造成的任何安全性降级。
    在又一替换实施例中,可以使用现有格式来发送K值以便提供向后兼容性。例如,许多签名是编码在提供附加字段以供添加的格式中的。K值可以经由这种附加字段来提供。知道要查找这种字段的接收计算设备可以利用通过预先计算K所获得的计算效率,而尚未更新的接收计算设备仍可以验证签名并可以简单地忽略包括K值的附加字段。因此,K可以用向后兼容的方式来提供。
    提供本概述以便以简化的形式介绍将在以下详细描述中进一步描述的一些概念。本概述不旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用于限制所要求保护的主题的范围。
    附加特征和优点将从以下参考附图进行的详细描述中显而易见。

    附图简述
    结合附图,可以最好地理解以下详细描述,其中:
    图1是传统签名方案的框图;
    图2是示例性计算设备的框图;
    图3是示出由执行签名验证的计算设备接收到的元素的框图;
    图4是示出根据一个实施例的将元素传输到计算设备的框图;以及
    图5是示出根据另一实施例的将元素传输到计算设备的框图。
    详细描述
    以下描述涉及用于更高效地验证消息签名的机制。可以通过验证se mod n=F(m,n)来验证RSA消息签名,其中“s”是签名,“e”是来自RSA公钥的指数,“n”是来自RSA公钥的模数,“m”是经签署的数据,以及函数“F”是所协商的填充函数。如果预先计算定义为K=se div n(se除以n)的K值并且将其作为输入提供给验证签名的计算设备,则可以将验证等式se mod n=F(m,n)的效率提高一个或多个数量级。为了避免传输大的K值以及对其的数学运算(它们本身可能是低效的),可以选择相对小的指数e,如e=2或e=3。
    在一个实施例中,K值可以由签署消息的计算设备来计算,并且与消息和签名一起发送。计算K值的计算复杂度比计算消息签名的计算复杂度小得多,并且因此不会对签署消息的计算设备增加显著的计算负担。
    在另一实施例中,K值可以由诸如电子邮件或文件服务器等集中式计算设备来计算。在一个示例中,电子邮件或文件服务器可以在接收到经签署的消息后且在服务器的任何客户机接收该经签署的消息之前计算K值。通过以集中式的方式执行一次K的计算,可以更高效地实施多个单独的签名验证,从而基本上补偿服务器计算设备的附加计算努力。
    在又一实施例中,接收消息和签名的计算机可以计算一次K并存储它以供在后续签名验证时使用。为了便于访问,可以将K存储在接收计算机上,这样使得它可以与消息和签名处于一个位置。
    在又一实施例中,可以将公共指数e的值选为2,以提供可由验证签名的计算设备高效发送和高效使用的相对小的K值。在又一实施例中,可以将公共指数e的值选为3,以在保持K值相对小的同时提供附加的安全性。使用e=2或e=3要求适当地选择适当地随机化结果中的所有位的填充函数F。
    此处所描述的技术集中在但不限于,通过使用预先计算的K值来更高效地实施验证的RSA签名的验证。如将要示出的,可以用任何数量的计算设备来计算K值。此外,假设适当地选择公共指数e并假设签名验证无需无限的准确度,则所述验证可以比传统的RSA签名验证快一个或多个数量级。
    转向图1,示出部分地包括发送计算设备20和接收计算设备10的示例性系统99,所述两个计算设备经由网络90连接。发送计算机20可以生成两个密钥:公钥21和私钥22。密钥的生成是用本领域技术人员所公知的方法来进行的,诸如根据普遍存在的RSA算法或RSA算法的Rabin变量。之所以称为公钥21是因为它旨在被自由地分发并且由诸如接收计算设备10等接收者用于验证使用私钥22签署的消息的签名。
    消息30可以由发送计算设备20生成并且包括发送计算设备希望发送的任何数据集合。消息30可以例如是电子邮件消息,但不限于此。同样地,消息30可以是由发送计算设备20发送的文件、组件、模块或任何其它数据集合。
    在发送消息30之前,计算设备可以使用私钥22用诸如RSA算法所描述的方式等本领域技术人员公知的方式来生成经签署的消息31。用这样的方式使用私钥22来签署消息30以使得可以使用消息数据、签名自身以及包含在公钥21中的信息来验证经签署的消息的签名。更具体地,私钥22用于基于由变量“m”表示的消息30的数据来生成由变量“s”表示的签名,使得s满足等式se mod n=F(m,n),其中n和e都是公钥21的部分。
    一旦计算设备20生成了包括消息数据和签名的经签署的消息31,则可以诸如通过网络90将其发送至计算设备10。计算设备10可以通过验证签名满足等式semod n=F(m,n)来验证经签署的消息31的签名。如果签名满足等式,则所接收到的消息数据很可能是与发送计算设备20所发送的相同的消息数据,并且发送计算设备20或更适当地发送计算设备的用户还很可能是消息的发送者,因为该用户应该是可以使用密钥22的唯一的人,并且要求该私钥来生成满足等式se mod n=F(m,n)的签名。因此,通过验证经签署消息31的签名,接收计算设备10接收消息的内容确实是由其声明的发送者发送的数字保证。
    如图1所示,为了验证se mod n=F(m,n),接收计算设备10从经签署的消息31获取签名s的值以及消息数据m,并且从公钥21获取n和e的值。由此,如所示的,接收计算设备10使用公钥21来验证经签署的消息31。尽管被示为分开的消息,但经验证的消息32只不过仅是结合了经签署的消息的签名已被验证的知识的经签署的消息31。
    虽然并非所需,但是以下描述是在由一个或多个计算设备执行的诸如程序模块等计算机可执行指令的一般上下文中的。更具体地,除非另外指明,否则描述将参考由一个或多个计算设备或外围设备执行的动作或操作的符号表示。这样,可以理解,有时被称为是计算机执行的这些动作和操作包括用结构化形式表示数据的电信号或诸如光量子等光信号的处理单元所做的操纵。该操纵转换数据或将其维护在存储器中的各个位置,这用本领域的技术人员很好理解的方式重新配置或者用其它方式更改计算设备或外围设备的操作。其中维护数据的数据结构是具有该数据的格式所定义的特定属性的物理位置。
    一般而言,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等。而且,本领域的技术人员可以理解,计算设备不必限于常规个人计算机,并且包括其它计算配置,包括手持式设备、多处理器系统、基于微处理器的或可编程消费电子产品、网络PC、小型机、大型计算机等。类似地,计算设备不必限于独立式计算设备,因为机制也可以在其中任务由通过通信网络链接的远程处理设备执行的分布式计算环境中实现。在分布式计算环境中,程序模块可以位于本地和远程存储器存储设备两者中。
    参考图2,示出示例性计算设备100。示例性计算设备100可包括但不限于,一个或多个中央处理单元(CPU)120、系统存储器130以及将包括系统存储器的各类系统组件耦合至处理单元120的系统总线121。系统总线121可以是若干种总线结构的任一种,包括存储器总线或存储器控制器、外围总线以及使用各种总线体系结构的任一种的局部总线。
    计算设备100通常也包括计算机可读介质,该计算机可读介质可包括可由计算设备100访问的任何可用介质,并包括易失性和非易失性介质以及可移动和不可移动介质。作为示例而非局限,计算机可读介质可包括计算机存储介质和通信介质。计算机存储介质包括以用于储存诸如计算机可读指令、数据结构、程序模块或其它数据等信息的任何方法或技术实现的介质。计算机存储介质包括但不限于,RAM、ROM、EEPROM、闪存或其它存储器技术、CD-ROM、数字多功能盘(DVD)或其它光盘存储、磁盒、磁带、磁盘存储或其它磁存储设备、或可以用来储存所需信息并可由计算设备100访问的任何其它介质。通信介质通常以诸如载波或其它传输机制等已调制数据信号来体现计算机可读指令、数据结构、程序模块或其它数据,并包括任何信息传送介质。作为示例而非局限,通信介质包括有线介质,如有线网络或直接连线连接,以及无线介质,如声学、RF、红外和其它无线介质。上述任何的组合也应当包括在计算机可读介质的范围之内。
    系统存储器130包括诸如只读存储器(ROM)131和随机存取存储器(RAM)132等易失性和/或非易失性存储器形式的计算机存储介质。基本输入/输出系统133(BIOS)包括如在启动时帮助在计算设备100内的元件之间传输信息的基本例程,它通常储存在ROM 131中。RAM 132通常包含处理单元120立即可访问和/或当前正在操作的数据和/或程序模块。作为示例而非局限,图2示出操作系统134、其它程序模块135和程序数据136。
    计算设备100也可包括其它可移动/不可移动、易失性/非易失性计算机存储介质。仅作为示例,图2示出对不可移动、非易失性磁介质进行读写的硬盘驱动器141。可以与该示例性计算设备一起使用的其它可移动/不可移动、易失性/非易失性计算机存储介质包括但不限于,磁带盒、闪存卡、数字多功能盘、数字录像带、固态RAM、固态ROM等等。硬盘驱动器141通常通过不可移动存储器接口,如接口140连接到系统总线121。
    上文讨论并在图2示出的驱动器及其关联的计算机存储介质为计算设备100提供了计算机可读指令、数据结构、程序模块和其它数据的存储。例如,在图2中,示出硬盘驱动器141储存操作系统144、其它程序模块145和程序数据146。注意,这些组件可以与操作系统134、其它程序模块135和程序数据136相同,也可以与它们不同。这里对操作系统144、其它程序模块145和程序数据146给予不同的标号来说明至少它们是不同的副本。
    相关于下文中的描述,计算设备100可以在使用到一个或多个远程计算机的逻辑连接的联网环境中操作。为了说明简单起见,图2示出了计算设备100连接到网络90,网络90不限于任何特定的网络或联网协议。图2中所示的逻辑连接是通用网络连接171,其可以是局域网(LAN)、广域网(WAN)或其它网络。计算设备100通过网络接口或适配器170连接到通用网络连接,网络接口或适配器170进而连接到系统总线121。在联网环境中,相关于计算设备100、其部分或外围设备所描述的程序模块可以存储在通过通用网络连接171通信上耦合到计算设备100的一个或多个其它计算设备的存储器中。可以理解,所示的网络连接是示例性的,并且可以使用建立通信链接的其它手段。
    再次返回签名验证,se mod n、F(m,n)的计算以及它们相等性的判定要求CPU120结合系统存储器130执行特定数学函数。如本领域技术人员公知的,项se的值可能是非常大的。因此,使用单独的模平方和模乘来递增地执行se mod n的计算,而非首先计算se,然后计算它对n的模。更具体地,递增地计算se mod n是通过首先计算(s2 mod n),接着取结果对n的模,接着可能将结果乘以s,接着取该结果对n的模,接着将结果平方,接着取结果对n的模等来进行的。对于大的e值,诸如通常使用的e=65537,计算se mod n可以是相当耗时的,并且比计算F(m,n)项在计算上会耗费多得多。换言之,验证se mod n=F(m,n)所需的时间大多数耗费在计算se mod n项上。
    如先前所解释的,变量“m”表示消息30的数据,而变量“s”表示为消息30生成来创建经签署的消息31的签名。变量“n”和“e”表示的项是从公钥21获得的。更具体地,公钥21和私钥22的生成需要选择两个随机数,这两个随机数相乘在一起以产生成为“n”值的且被称为公钥21和私钥22的“模数”的大随机数。变量“e”是“公共指数”并且以本领域技术人员公知的方式结合私有指数来选择。公共指数e结合模数n构成公钥21,而私钥22包括模数n结合私有指数。
    如果可以示出在数学上se mod n等于F(m,n)的概率非常高则可以验证签名,而非绝对地验证se mod n等于F(m,n)。用于此的一种机制是验证等式se mod n=F(m,n)对相对小的值p的模。根据模运算的特性,如果(se mod n)mod p等于F(m,n)mod p,则se mod n=F(m,n)或se mod n恰好在F(m,n)的某倍p的范围中。作为一个简单的示例,假设p=3,se mod n=16且F(m,n)=16。如可以看到的,se mod n=F(m,n),但是考虑计算(se mod n)mod p和F(m,n)mod p的效果。在每个情况下,结果会是1,因为16除以3得出商为5以及余数为1。然而,如果se mod n等于19或22或者通过向16加上或从16减去3的倍数得出的任何其它值,(se mod n)mod p也会等于1。因此,如果(se mod n)mod p等于F(m,n)mod p,则se mod n=F(m,n)或se mod n都恰好在F(m,n)的某倍p的范围中。
    当然,对本领域的技术人员显而易见的是,se mod n和F(m ,n)的值不仅仅是二位数字,而是有几百个位数长度的非常大的数字。因此,可以从一组特定的、足够大的值选择p的随机值,这样使得(se mod n)mod p等于F(m,n)mod p的验证可以具有很大确信度地证明se mod n=F(m,n)。
    然而,(se mod n)mod p的计算仍然面对计算指数项的任务,如上所示,这可以在计算上是高耗费的。然而,根据模运算的特性,给定任何除数,任何数字可以被表示为某倍除数加上小于除数的某个余数。同样,考虑上述的简单示例,数字16可以被表示为3的五倍(即15)加上余数1。因此,项se mod n给出的余数可以被表示为原始se减去某倍除数n。数学上,这可以表示为se mod n=se-(se div n)n。如果将值“K”定义为等于se div n,则该等式变成se mod n=se-Kn。
    在以上模p公式中用se-Kn代替se div n得出:(se-Kn)mod p=F(m,n)modp。根据模运算的特性,等号左边的项可以被扩展,且等式可以被重写为:((s modp)e-(K mod p)(n mod p))mod p=F(m,n)mod p。左边的值取决于:(1)s mod p,(2)K mod p以及(3)n mod p。这些项中的每一个都是对p的模,并且因此得出相对小的值,因为可以选择p为易于处理的小的值,且任何模p的项在数学上肯定比p小。此外,使用模p平方和模p乘,可以相当高效地计算指数项(s mod p)e。这确保了在计算中使用的值保持很小,并且因此计算相对高效。
    如上所示,可以从一组特定的、足够大的值中随机地选择p。在一个实施例中,特定值的集合可以是素数的集合。为了确保从中选择p的素数足够大,可以使用128位或更大的素数。在替换实施例中,可以选择p为两个素数p1和p2的乘积,其中每个素数可以是64位长。如所示的,用这种方式选择p的一个优点是可以用一次模p1和一次模p2来执行所需的计算,其中使用现代的64位处理器每次计算都可以特别高效。在另一实施例中,p可以在特定的范围内随机地选择为三个或更多素数的乘积,或者从不包括仅仅是小素数的乘积的任何“平滑”数字的一组数字中选择。
    转向图3,示出示例性环境200,包括接收计算设备10和经签署的消息31、公钥21以及预先计算的K值210。如所示的,如果接收计算设备10接收预先计算的K值210,则它可以更高效地验证签名s232,如图3所示,该签名s232如同消息数据m231一样是经签署的消息31的分量。图3中同样示出公钥21的分量,即模数n221和公共指数e222。
    在一个实施例中,可以经由向后兼容的机制将预先计算的K值210提供给接收计算设备10。诸如签名s232等许多签名可以与经签署的消息31一起用经编码的格式提供,所述经编码的格式提供附加字段以供添加。通常用于提供签名的这种格式的示例包括符合ASN.1标准或XML标准的格式。使用这种可扩展格式来提供签名允许添加可以包括预先计算的K值210的新字段。如果接收计算设备10包括经更新的确认软件,则这种经更新的软件可以解析签名s232、标识新字段、提取预先计算的K值210,并进而使用此处所描述的更为高效的机制来验证签名。另一方面,如果接收计算设备10包括传统确认软件,则这种传统软件仍旧可以获取签名s232,并且可以简单地忽略包括预先计算的K值210的新字段。在这种情况下,传统确认软件可以根据已知的较不高效的机制,通过验证se mod n=F(m,n)来简单地确认签名s232。
    如果用这种向后兼容的方式来提供预先计算的K值210,则该K值将作为签名s232的一部分、由此作为经签署的消息31k的一部分来提供,而非在图3中所示独立地提供。然而,如图3中所示的,在替换实施例中,可以独立地提供预先计算的K值210,由此使任何计算设备能够预先计算K,而无需这一计算设备解析签名s232。
    如可以从图3中看到的,预先计算的K值210仅基于s、e和n的值,其中每个已经存在于经签署的消息31或公钥21中。因此,将预先计算的K值210提供给接收计算设备10没有任何附加的安全风险,因为除了已经存在于经签署的消息31和公钥21中的信息之外,K不包含任何附加信息。同样地,在不同于接收计算设备10的计算设备上计算K值210没有任何附加的安全风险。
    然而,如先前所示的,预先计算的K值210与项se成正比。对于大的e值,K值同样将是大的。这样的大的K发送起来可能不是高效的,并且可能更为重要地,这样大的K对于接收计算设备10用于计算项(K mod p)来验证签名s232时可能不是高效的。为了维持适当大小的K值,可以选择公共指数e222为小的值,诸如2或3。如果使用e=2,则由计算设备10执行的所得计算会是非常高效的。然而,如本领域技术人员所公知的,使用e=2有一些缺点。这些缺点可以通过选择e=3结合适当的函数F(m,n)来避免。如本领域的技术人员所公知的,如果F(m,n)不充分随机化或者更精确地伪随机化结果的各个位,则e=3可能提供较少的安全性。然而,对于e=3,适当地选择的确实随机化结果的各位的F(m,n)可以提供足够的安全性。
    如上所示,可以通过验证(s mod p)e-(K mod p)(n mod p))mod p=F(m,n)modp来验证签名s232。因此,为了求等式左边的表达式的值,计算设备10可以确定(1)s mod p,(2)K mod p以及(3)n mod p。如果p是两个64位数字p1和p2的乘积所形成的,则计算设备10可以确定(1)s mod p1,(2)s mod p2,(3)K modp1,(4)K mod p2,(5)n mod p1和(6)n mod p2。如本领域的技术人员所公知的,假设n是2048位长,则s mod p1的计算会要求大约64X64比特的32次基本乘法。对于e=3,K可以是s的两倍长,并且因此,K mod p1的计算会要求大约64X 64比特的64次基本乘法。最后,n mod p1同样会要求32次基本乘法。因为这些项的每一个模p2会要求相似数量的基本乘法,在64位处理器上所以((s mod p)e-(K mod p)(n mod p))mod p的整个计算只不过会要求256次基本乘法加上一些附加操作,其中p是两个64位数字p1和p2的乘积。用作比较,使用与上述示例中相同的所有变量,se mod n的计算会要求大约3000-4000次基本乘法。因此,通过从外部源获得预先计算的K值210并选择e=2或e=3,以及适当大小的p,所描述的计算可以比常规签名验证快10倍以上。
    转向图4,示出根据一个实施例的示例性环境300。如所示的,发送计算设备20不仅计算相关签名s232来创建经签署的消息31,而且计算预先计算的K值210。如本领域的技术人员所认识到的,与签名s232的计算相比,预先计算的K值210的计算是极小的。因此,虽然如果接收计算设备10从外部源接收预先计算的K值210,它可以用高10倍的效率来验证签名s232,但是发送计算设备20在计算预先计算的K值210以及计算签名s232时没有受到对应的性能惩罚。因此,如图4所示,在一个实施例中,发送计算设备20可以向接收计算设备10提供预先计算的K值210。
    转向图5,示出根据一个替换实施例的示例性环境400。如所示的,发送计算设备20签署消息来创建经签署的消息31,并且无需拥有计算预先计算的K值210的能力。相反,预先计算的K值210可以由诸如服务器计算设备410等中间计算设备来计算。在一个实施例中,服务器计算设备410可以用上述方式将预先计算的K值210插入到新字段中以便提供向后兼容性。或者,服务器计算设备410可以仅将预先计算的K值210附加到经签署的消息31上。在任一情况下,由服务器计算设备410作出的对预先计算的K值210的单个计算在验证签名s232时可以提供10倍的效率,这一验证将由诸如计算设备10、11和12等经签署的消息31的每个接收者单独地执行,计算设备10、11和12中的每一个被示为担当服务器计算设备410的客户机。因此,服务器计算设备410在计算预先计算的K值210时所经历的计算的任何增加,可由接收经签署的消息31的计算设备10、11和12的每一个在试图验证签名s232时所经历的计算效率中的伴随增加来更多地补偿。
    虽然图4和5中所示的以及以上描述的实施例的每一个集中在从一个或多个外部计算设备传递经签署的消息31、公钥21以及预先计算的K值210,但是替换实施例构想了同一计算设备的不同部分担当发送者和接收者。例如,计算设备上的一个应用程序可以发送包括预先计算的K值210的经签署的消息31,而同一计算设备上的另一应用程序可以接收并验证签名。换言之,前面的应用程序担当图4的计算设备20,而后面的应用程序担当图4的计算设备10。
    类似地,参考图5,计算设备上的一个应用程序可以担当中央服务器410并可为同一计算设备上的可能需要K的一个或多个其它应用程序确定预先计算的K值210。在一个示例性实施例中,经签署的消息31(无论是经由计算设备内部的通信还是计算设备之间的通信接收到)与预先计算的K值210一起存储,以供稍后在接收计算设备上使用。因此,前面的应用程序为后面的应用程序确定预先计算的K值210,并且可以进一步方便K的存储,使得它与经签署的消息31相关联并可选地与其处于同一个位置。在另一实施例中,诸如计算设备10等接收计算设备无需特定的应用程序来确定预先计算的K值210,而是相反可以使用它通常使用的任何应用程序,除保存所确定的K值并与经签署的消息31相关联并且可选地与其处于一个位置之外。在这种情况下,对签名232的后续验证可以变得更加高效。
    在又一实施例中,签名232不仅包括值s,也包括可以用作填充函数F的输入的一个或多个附加值t。当签署消息30时,签署者可以生成适当的t值并计算s值使得se mod n=F(m,n,t)。签名现在可以包括s值和t值两者。可以如上详细描述地计算预先计算的K值210。包括s和t两者的新签名的验证者可以提取t以供用作F的附加输入,并且可以提取s以便用上文详细描述的相同的方式来验证签名。
    如可以从以上描述中看出的,向寻求验证签名的计算设备提供特定预先计算的信息可以十倍或更多的减少为验证这种签名所需的计算耗费。考虑到此处描述的主题的多个可能的变型,对本发明可能在所附权利要求及其等效物的范围内的所有这样的实施例提出权利要求。

    关 键  词:
    快速 RSA 签名 验证
      专利查询网所有文档均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    0条评论

    还可以输入200字符

    暂无评论,赶快抢占沙发吧。

    关于本文
    本文标题:快速RSA签名验证.pdf
    链接地址:https://www.zhuanlichaxun.net/p-1099803.html
    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2017-2018 zhuanlichaxun.net网站版权所有
    经营许可证编号:粤ICP备2021068784号-1