具体实施方式
本文描述了用于在区块链网络的背景下改进的恢复并验证公钥的技术。针对该背景,区块链网络可以包含公钥基础设施(PKI),其中发送方可以使用发送方的私钥来加密,而接收方可以使用发送方的公钥来解密。在PKI下,发送方的公钥和私钥形成唯一的对(pair)。尽管发送方将私钥保密以便没有其他人知道私钥,但公钥可以公开。这允许使用该对的其中一个密钥来加密信息,而使用该对的另一个密钥来解密。在此背景下,本文结合了例如椭圆曲线算法用于实施区块链网络的PKI。
一些实施例允许通过生成可恢复的公钥签名来恢复公钥。通过将识别参数的计算逻辑结合到椭圆曲线数字签名算法(ECDSA)中的公钥生成过程中,输出的数字签名可以伴随有识别参数。在一些情况下,识别参数可以用于有效地恢复公钥。附加地或可选地,一些情况允许恢复过程遍历识别参数的所有可能实例,直到恢复可验证的公钥为止。
更详细地,这些实施例通常涉及从发送方通过区块链网络传输的消息中提取信息、从信息中恢复公钥、以及验证恢复的公钥。具体地,从消息中提取的信息除了包括消息的哈希值、由消息的发送方嵌入的数字签名、以及椭圆曲线的参数外,还包括识别参数。识别参数的存在允许基于通过简单的比较步骤提取出的信息来恢复公钥。下面参考图1至图9具体描述。
为本文的实施例提供进一步的背景,如上所述,分布式账本系统(DLS),也可以称为共识网络(例如,由点对点(Peer-to-Peer)节点组成)和区块链网络,使参与实体能够安全且不可篡改地进行交易并存储数据。尽管术语“区块链”通常与特定网络和/或用例相关,但本文所使用的区块链一般指在不参考任何特定用例的情况下的DLS。
区块链是以交易是不可篡改的方式存储交易的数据结构。因此,记录在区块链上的交易是可靠和值得信赖的。区块链包括一个或多个区块。链中的每个区块通过包括紧邻其之前的前一区块的加密哈希值(cryptographic hash)链接到该前一区块。每个区块还包括时间戳、自身的加密哈希值以及一个或多个交易。已经由区块链网络的节点验证的交易经哈希处理并编码成默克尔(Merkle)树。Merkle树是数据结构,其中树的叶节点处的数据是经哈希处理的,并且在该树的每个分支中的所有哈希值在该分支的根处连接。此过程沿着树持续一直到整个树的根,在整个树的根处存储了代表树中所有数据的哈希值。声称是存储在树中的交易的哈希值可以通过确定其是否与树的结构一致而被快速验证。
区块链是用于存储交易的去中心化或至少部分去中心化的数据结构,而区块链网络是通过广播、验证和确认交易等来管理、更新和维护一个或多个区块链的计算节点的网络。如上所述,区块链网络可提供为公有区块链网络、私有区块链网络或联盟区块链网络。在本文中参考联盟区块链网络进一步详细描述本文的实施例。然而,可以预期,可以在任何适当类型的区块链网络中实现本文的实施例。
通常,联盟区块链网络在参与的实体之间是私有的。在联盟区块链网络中,共识过程由可以被称为共识节点的授权的节点集控制,一个或多个共识节点由相应的实体(例如,金融机构、保险公司)操作。例如,十(10)个实体(例如,金融机构、保险公司)组成的联盟可以操作联盟区块链网络,每个实体可以操作联盟区块链网络中的至少一个节点。
在一些示例中,在联盟区块链网络内,提供全局区块链作为跨所有节点复制的区块链。也就是说,所有共识节点相对于全局区块链处于完全共识状态。为了达成共识(例如,同意向区块链添加区块),在联盟区块链网络内实施共识协议。例如,联盟区块链网络可以实施实用拜占庭容错(PBFT)共识,下面将进一步详细描述。
图1是示出可用于执行本文实施例的环境100的示例的示图。在一些示例中,环境100使得实体能够参与到联盟区块链网络102中。环境100包括计算系统106、108以及网络110。在一些示例中,网络110包括局域网(LAN)、广域网(WAN)、因特网或其组合,并且连接网站、用户设备(例如,计算设备)和后台系统。在一些示例中,可以通过有线和/或无线通信链路来访问网络110。在一些示例中,网络110使得与联盟区块链网络102通信以及在联盟区块链网络102内部通信成为可能。通常,网络110表示一个或多个通信网络。在一些情况下,计算系统106、108可以是云计算系统(未示出)的节点,或者每个计算系统106、108可以是单独的云计算系统,其包括通过网络互连并用作分布式处理系统的多个计算机。
在所描述的示例中,计算系统106、108可以各自包括能够作为节点参与至联盟区块链网络102中的任何适当计算系统。计算设备的示例包括但不限于服务器、台式计算机、膝上型计算机、平板计算设备和智能电话。在一些示例中,计算系统106、108承载一个或多个由计算机实施的服务,用于与联盟区块链网络102交互。例如,计算系统106可以承载第一实体(例如,用户A)的由计算机实施的、例如交易管理系统的服务,第一实体使用该交易管理系统管理其与一个或多个其他实体(例如,其他用户)的交易。计算系统108可以承载第二实体(例如,用户B)的由计算机实施的、例如交易管理系统的服务,第二实体使用该交易管理系统管理其与一个或多个其他实体(例如,其他用户)的交易。在图1的示例中,联盟区块链网络102被表示为节点的点对点网络(Peer-to-Peer network),并且计算系统106、108分别提供参与联盟区块链网络102的第一实体和第二实体的节点。
图2描绘了根据本文实施例的架构200的示例。示例性概念架构200包括分别对应于参与者A、参与者B和参与者C的参与者系统202、204、206。每个参与者(例如,用户、企业)参与到作为点对点网络提供的、包括多个节点214的区块链网络212中,至少一些节点将信息不可篡改地记录在区块链216中。如本文进一步详细描述的,尽管在区块链网络212内示意性地描绘了单个区块链216,但是在区块链网络212上提供并维护了区块链216的多个副本。
在所描绘的示例中,每个参与者系统202、204、206分别由参与者A、参与者B和参与者C提供或代表参与者A、参与者B和参与者C,并且在区块链网络中作为相应的节点214发挥作用。如这里所使用的,“节点”通常是指连接到区块链网络212并且使相应的参与者能够参与区块链网络中的个体系统(例如,计算机、服务器)。在图2的示例中,参与者对应于每个节点214。然而,可以预期,一个参与者可以操作区块链网络212内的多个节点214,和/或多个参与者可以共享一个节点214。在一些示例中,参与者系统202、204、206使用协议(例如,超文本传输协议安全(HTTPS))和/或使用远程过程调用(RPC)与区块链网络212通信或通过区块链网络212通信。
节点214可以在区块链网络212内具有不同的参与程度。例如,一些节点214可以参与共识过程(例如,作为将区块添加到区块链216的监视节点),而其他节点214不参与此共识过程。作为另一示例,一些节点214存储区块链216的完整的副本,而其他节点214仅存储区块链216的一部分的副本。例如,数据访问特权可以限制相应的参与者在其相应系统内存储的区块链数据。在图2的示例中,参与者系统202、204存储各自的区块链216的完整副本216'、216”。
区块链(例如,图2的区块链216)由一系列区块组成,每个区块存储数据。数据的示例包括表示两个或更多个参与者之间的交易的交易数据。虽然本文以非限制性示例使用“交易”,但是可以预期,任何适当的数据可以存储在区块链中(例如,文档、图像、视频、音频)。交易的示例可以包括但不限于交换有价物(例如,资产、产品、服务、货币)。交易数据不可篡改地存储在区块链中。也就是说,交易数据不能改变。
在将交易数据存储到区块中之前,对交易数据进行哈希处理。哈希处理是将交易数据(作为字符串数据提供)转换为固定长度的哈希值(也作为字符串数据提供)的过程。不能对哈希值进行去哈希处理(un-hash)以获取交易数据。哈希处理确保即使交易数据轻微改变也会导致完全不同的哈希值。此外,如上所述,哈希值具有固定长度。也就是说,无论交易数据的大小如何,哈希值的长度都是固定的。哈希处理包括通过哈希函数处理交易数据以生成哈希值。哈希函数的示例包括但不限于输出256位哈希值的安全哈希算法(SHA)-256。
多笔交易的交易数据被哈希处理并存储在区块中。例如,提供了两笔交易的哈希值,并且对它们自身进行哈希处理以提供另一个哈希值。重复此过程,直到针对要存储在区块中的所有交易提供单个哈希值为止。该哈希值被称为Merkle根哈希值,并存储在区块的头中。任何交易中的改变都会导致其哈希值发生变化,并最终导致Merkle根哈希值发生变化。
通过共识协议将区块添加到区块链。区块链网络中的多个节点参与共识协议,并竞相将区块添加到区块链中。这种节点称为共识节点。上面介绍的PBFT用作共识协议的非限制性示例。共识节点执行共识协议以将交易添加到区块链,并更新区块链网络的整体状态。
更详细地,共识节点生成区块头,对区块中的所有交易进行哈希处理,并且将所得的哈希值成对地组合以生成进一步的哈希值,直到为区块中的所有交易提供单个哈希值(Merkle根哈希值)为止。将此哈希值添加到区块头中。共识节点还确定区块链中最新区块(即,添加到区块链中的最后一个区块)的哈希值。共识节点还向区块头添加随机数(nonce)和时间戳。
通常,PBFT提供容忍拜占庭故障(例如,故障节点、恶意节点)的实用拜占庭状态机复制。这通过假设将发生故障(例如,假设存在独立节点故障和/或由共识节点发送的经操纵的消息)在PBFT中实现。在PBFT中,以包括主共识节点和备共识节点的顺序提供共识节点。主共识节点被周期性地改变。交易由区块链网络内的对区块链网络的全局状态达成一致的所有共识节点添加到区块链中。在该过程中,在共识节点之间传输消息,并且每个共识节点证明所述消息是从指定的对等节点(peer node)接收的,并验证在传输期间所述消息未被篡改。
在PBFT中,共识协议是在所有共识节点以相同的状态开始的情况下分多个阶段提供的。首先,客户端向主共识节点发送调用服务操作(例如,在区块链网络内执行交易)的请求。响应于接收到所述请求,主共识节点将所述请求组播到备共识节点。所述备共识节点执行所述请求,并且各自向客户端发送回复。客户端等待直到接收到阈值数量的回复。在一些示例中,客户端等待直到接收到f+1个回复,其中f是区块链网络内可以容忍的故障共识节点的最大数量。最终结果是,足够数量的共识节点就将记录添加到区块链的顺序达成一致,并且该记录或被接受或被拒绝。
在一些区块链网络中,用密码学来维护交易的隐私。例如,如果两个节点想要保持交易隐私,以使得区块链网络中的其他节点不能看出交易的细节,则这两个节点可以对交易数据进行加密处理。加密处理的示例包括但不限于对称加密和非对称加密。对称加密是指使用单个密钥既进行加密(从明文生成密文)又进行解密(从密文生成明文)的加密过程。在对称加密中,同一密钥可用于多个节点,因此每个节点都可以对交易数据进行加密/解密。
非对称加密使用密钥对,每个密钥对包括私钥和公钥,私钥仅对于相应节点是已知的,而公钥对于区块链网络中的任何或所有其他节点是已知的。节点可以使用另一个节点的公钥来加密数据,并且该加密的数据可以使用其他节点的私钥被解密。例如,再次参考图2,参与者A可以使用参与者B的公钥来加密数据,并将加密数据发送给参与者B。参与者B可以使用其私钥来解密该加密数据(密文)并提取原始数据(明文)。使用节点的公钥加密的消息只能使用该节点的私钥解密。
非对称加密用于提供数字签名,这使得交易中的参与者能够确认交易中的其他参与者以及交易的有效性。例如,节点可以对消息进行数字签名,而另一个节点可以根据参与者A的该数字签名来确认该消息是由该节点发送的。数字签名也可以用于确保消息在传输过程中不被篡改。例如,再次参考图2,参与者A将向参与者B发送消息。参与者A生成该消息的哈希值,然后使用其私钥加密该哈希值以提供为加密哈希值的数字签名。参与者A将该数字签名附加到该消息上,并将该具有数字签名的消息发送给参与者B。参与者B使用参与者A的公钥解密该数字签名,并提取哈希值。参与者B对该消息进行哈希处理并比较哈希值。如果哈希值相同,参与者B可以确认该消息确实来自参与者A,且未被篡改。
上述非对称加密可以结合椭圆曲线数字签名算法(ECDSA)以更少的位(bite)实现可媲美Rivest-Shamir-Adleman(RSA)算法的加密结果。例如,示例性RSA 2048位公钥提供112位的安全级别。但是,提供同样的112位的安全级别,ECDSA可能只需要224位大小的公钥。较小的密钥大小可以导致设置较少的带宽,例如,区块链网络上的安全套接字层/传输层安全(SSL/TLS)流,这意味着ECDSA证书对移动应用更有利。此外,此类证书可以存储到具有更多限制存储器约束的设备中,这一事实允许在物联网(IoT)设备中实施TLS堆栈而不需分配许多资源。在区块链网络上的许多应用中,当从发送方收到消息时,期望接收方基于接收到的信息有效地恢复并验证发送方的公钥。
参照图3和图4,描述了根据本文实施例的使用椭圆曲线数字签名算法(ECDSA)生成数字签名并使用椭圆曲线数字签名算法(ECDSA)验证数字签名的图。如用于生成数字签名的过程300所示,接收初始数据值,该初始数据值可以包含椭圆曲线参数、由发送方发送的消息(M)的哈希值(e)、以及发送方(用户A)的私钥(dA)。这里,椭圆曲线参数可以包括:有限域Fq的大小q(当q=2m时,还包括基本表示和不可约多项式);定义椭圆曲线方程的两个元素a和b(在该有限域Fq中);基点G=(xG,yG),其中xG和yG是Fq中的元素;G的程度(degree)n;以及其他。然后,过程300继续计算包含第一参数r和第二参数s的输出签名(303),其可以包括如下面更详细描述的四个步骤,即步骤1到步骤4。在步骤1中,使用随机数生成器生成随机数k∈[1,n-1](304)。这里的数n是与基点G的程度相对应的素数,如由椭圆曲线的参数所表征的。在步骤2,根据(x1,y1)=[k]G计算椭圆曲线点,然后将x1的数据类型转换为整数(306)。这里,(x1,y1)表示椭圆曲线上的坐标点,[k]G表示椭圆曲线上的点G的k倍,而G表示椭圆曲线上的基点。在步骤3,根据r=(e+x1)mod n来计算参数r(308)。这里,e是发送方要发送的消息M的哈希值,而mod表示模运算。接下来,确定r是否等于0或r+k是否等于n(310)。如果结果为是,则过程返回步骤1。如果结果为否,则过程继续到步骤4,在步骤4根据s=((1+dA)-1(k-r*dA))mod n计算第二参数s(312)。这里,-1运算符表示逆运算,其中结果是模n下的逆;并且r*dA表示模乘。接下来,确定s是否等于0(314)。如果结果为是,则过程返回到步骤1。如果结果为否,则过程继续以返回并输出包括第一参数r和第二参数s的数字签名(316)。
如用于在接收方侧(称为用户B)恢复公钥的过程400所示,接收初始输入数据(402),该初始输入数据包括椭圆曲线参数、公开为PA的公钥、来自发送方的消息的哈希值e、以及包含第一参数r和第二参数s的数字签名。然后,过程400继续通过如下面更详细描述的五个步骤,即步骤1到步骤5,来恢复并验证公钥。在步骤1,过程400确定r∈[1,n-1]是否为真(404)。这里,在1到n-1的范围内检查数字签名的第一参数r,其中1是该范围的下限而n表征该范围的上限(404A)。如果r不在该范围内,则验证将不通过(413B)。接下来,在步骤2,过程400确定s∈[1,n-1]是否为真(405)。这里,在1到n-1的范围内检查数字签名的第二参数s,其中1是该范围的下限而n表征该范围的上限(405A)。如果s不在该范围内,则验证将不通过(413B)。在步骤3,参数t被计算为(r+s)mod n(406)。这里,确定t是否等于0(407)。如果是,则验证失败(413B)。如果否,则过程400继续计算被表示为(x1,y1)并被计算为[s]G+[t]PA的椭圆曲线点(408)。这里,G表示椭圆曲线上的基点,PA表示用户A(发送方)的已经公开的公钥。在步骤5,变量R被计算为:(e+x1)mod n,(410),表示模运算。这里,确定R等于r是否为真(412)。如果R与r匹配,则验证通过(413A);否则,验证失败(413B)。
图5是示出根据本文实施例的可以被执行以使用结合了识别参数的椭圆曲线数字签名算法(ECDSA)来恢复公钥的过程500的示例的示图。所接收的初始输入数据包括椭圆曲线参数、来自发送方(用户A)的消息M的哈希值e、包含第一参数r和第二参数s的签名、以及识别参数v(502)。然后,过程500继续通过如下面更详细描述的六个步骤,即步骤1到步骤6,来恢复并验证公钥(503)。在步骤1,过程500确定r∈[1,n-1]是否为真(504)。这里,在1到n-1的范围内检查数字签名的第一参数r,其中1是该范围的下限而n表征该范围的上限(504A)。如上所述,n是素数并且也是椭圆曲线上的基点G的程度。如果r不在该范围内,则验证将不通过并且发出错误报告(518)。接下来,在步骤2,过程500确定s∈[1,n-1]是否为真(505)。这里,在1到n-1的范围内检查数字签名的第二参数s,其中1是该范围的下限而n表征该范围的上限(505A)。如果s不在该范围内,则验证将不通过并且发出错误报告(518)。在步骤3,第一坐标参数x1被计算为x1=(r-e)mod n(506)。这里,mod n表示模运算。确定识别参数v的低位v0是否等于1(507)。如果是,则x1被计算为x1=x1+n;否则,x1保持当前值,如步骤4所示(508)。该计算强制x1是范围有界的。在步骤5,根据下式计算模素p的平方根y:y1 2=x1 3+ax+b(509)。其中,参数a和b由椭圆曲线参数确定。确定是否存在平方根(510)。如果确定为否,则发出错误报告(518)。如果存在平方根,则将对应于奇数的根设置为y,将对应于偶数的根设置为p-y(511)。这里,p是椭圆曲线的一个参数。作为素数,p满足:(p-y)2=(p2-2py+y2)=y2 mod p。然后确定识别参数v的高位v1是否等于1(512)。响应于确定v1等于1,y1被设置为两个可用根中的奇数(513A);否则,将y1设置为两个可用根中的偶数(514B)。然后,过程500继续设置由坐标点P=(x1,y1)表示的椭圆曲线点(515)。在步骤6,计算出的公钥被恢复:PA=(s+r)-1(P-[s]G)(516)。这里,G代表椭圆曲线上的基点,[s]G代表椭圆曲线上G的s倍。在步骤7,返回计算出的公钥PA作为用户A(发送方)的恢复的公钥。
图6是示出根据本文实施例的可以被执行以使用椭圆曲线数字签名算法(ECDSA)来恢复并验证公钥的过程600的示例的图。接收初始输入数据,该初始输入数据包括椭圆曲线参数、公开为PA的公钥、来自用户A(发送方)的待签名的消息的哈希值e、以及用户A(发送方)的私钥dA(602)。然后,过程600继续如以下三个步骤所述以恢复并验证公钥(603)。在步骤1,通过调用如图3所述的过程(步骤302到316)获得数字签名的第一参数和第二参数(r,s)。在步骤2,从私钥dA计算公钥PA(606)。该计算通常可以遵循PKI下的非对称加密模式。接下来,过程600遍历2位识别参数v的所有可能的实例(607)。在步骤3,遍历期间的每次迭代包括调用签名恢复公钥过程(如图5(502到518)所示)以获得公钥PA'(608)。确定PA是否等于PA'(609)。如果两者匹配,则过程600可以输出伴随有识别参数v的数字签名(其包括第一参数r和第二参数s)。这种组合可以被称为可恢复的公钥数字签名,注释为(r,s,v)。如果两者不匹配,则过程600可以继续检查识别参数v的下一个可能的实例(607)。如果检查了识别参数v的所有实例并且没有任何匹配,则过程600可以报告错误(611)。
图7是示出根据本文实施例的可以被执行以使用椭圆曲线数字签名算法(ECDSA)生成数字签名和识别参数的过程700的示例的示图。接收的初始输入数据包括椭圆曲线参数、公开为PA的公钥,来自发送方(用户A)的消息的哈希值e、以及包含第一参数r和第二参数s的签名、和识别参数v(702)。然后,过程700继续通过如下面更详细描述的四个步骤,即步骤1到4,来恢复并验证公钥(703)。在步骤1,使用随机数生成器生成范围[1,n-1]内的随机数k(704)。在步骤2,计算坐标点为(x1,y1)、被计算为[k]G的椭圆曲线点(705)。这里,[k]G表示椭圆曲线上的基点G的k倍。x1的数据类型被转换为整数。在将识别参数的低位v0和高位v1初始化为0之后,确定x1是否小于n,其中n是基点G的程度。响应于确定x1不小于n,将识别参数v的低位v0设置为0(707A)。响应于确定x1小于n,将识别参数v的低位v0设置为1(707B)。接下来,确定y1是否是奇数(708)。响应于确定y1不是奇数,将识别参数v的高位v1设置为0(708A)。响应于确定y1是奇数,将识别参数v的高位v1设置为1(708B)。在步骤3,数字签名的第一参数r被计算为:r=(e+x1)mod n(709)。然后确定r是否等于0以及r+k是否等于n(710)。如果确定为是,则过程700返回到步骤1(704)。否则,过程700继续到步骤4,其中数字签名的第二参数s被计算为:s=((1+dA)-1(k-r*dA))mod n(711)。这里,-1表示对模n的逆运算,mod n表示模运算。然后确定s是否等于0(712)。如果确定为是,则过程700返回到步骤1(704)。否则,过程700继续到步骤5,其返回可恢复的公钥数字签名(r,s,v)(713)。这里,v={v0,v1}。
图8是示出根据本文实施例的可以被执行以使用椭圆曲线数字签名算法(ECDSA)来验证公钥的过程800的另一示例的示图。接收初始输入数据,该初始输入数据包括椭圆曲线参数、公开为PA的公钥、来自用户A(发送方)的消息m的哈希值e、包括第一参数r和第二参数s的数字签名、以及识别参数v(802)。至少基于包括第一参数r和第二参数s的可恢复数字签名以及识别参数v来获得并验证公钥PA'(803)。具体地,通过调用如上在图5中所述的公钥恢复过程来获得公钥PA'(804)。然后将恢复的公钥PA'与公开的公钥PA比较(805)。响应于确定两者匹配,验证通过(805A)。响应于确定两者不匹配,验证失败(805B)。
图9描绘了根据本文实施例的装置900的模块的示例。装置900可以是用于恢复并验证公钥的系统的实施例的示例。装置900可以对应于上述实施例,并且装置900包括以下:接受模块902,用于接收用于恢复并验证公钥的信息编码参数;生成模块904,用于基于参数生成恢复的公钥;以及比较模块906,用于比较公开的公钥与恢复的公钥,以验证例如公开的公钥。参数包括:椭圆曲线的参数、公开的公钥、消息的哈希值、数字签名和识别参数。
在可选实施例中,比较模块还执行以下操作:响应于确定公开的公钥与恢复的公钥匹配,确定公开的公钥被验证;并且响应于确定公开的公钥与恢复的公钥不匹配,确定公开的公钥未被验证。
在可选实施例中,生成模块还执行以下操作:确定数字签名中包括的第一参数是否在有界范围内,其中有界范围是从下限到上限,下限是1,上限由包括在椭圆曲线的参数中的指定素数表征。在该可选实施例中,生成模块还执行以下操作:响应于确定第一参数不在有界范围内,返回错误消息。在该可选实施例中,生成模块还执行以下操作:验证包括在数字签名中的第二参数是否在有界范围内;并且响应于确定第二参数不在有界范围内,返回错误消息。
在可选实施例中,生成模块还执行以下操作:至少基于数字签名和哈希值来计算第一坐标参数,其中,通过以下方式计算第一坐标参数:从被包括在数字签名中的第一参数中减去哈希值以生成减法结果,并对减法结果执行模运算以获得第一坐标参数。在该可选实施例中,生成模块还执行:响应于确定识别参数等于1,将第一坐标参数递增指定素数,该素数表征有界范围的上限。
在可选实施例中,生成模块还执行以下操作:计算由椭圆曲线的参数表征的椭圆方程的模素平方根,以确定第二坐标参数,其中针对由第一坐标参数实例化的椭圆方程来计算模素平方根。在该可选实施例中,生成模块还执行以下操作:响应于确定识别参数的特定位为1,将第二坐标参数设置为模素平方根的奇数成员;响应于确定识别参数的特定位为0,将第二坐标参数设置为模素平方根的偶数成员。在该可选实施例中,生成模块还执行:配置通过第一坐标参数与第二坐标参数的配对所指定的坐标点,其中至少基于数字签名中所包括的第一参数和第二参数、由第一坐标参数与第二坐标参数的配对所指定的坐标点、以及椭圆曲线的参数来生成恢复的公钥。
前述实施例中示出的系统、装置、模块或单元可以通过使用计算机芯片或实体来实施,也可以通过使用具有特定功能的产品来实施。典型的实施设备是计算机,计算机可以是个人计算机、笔记本电脑、手机、照相手机、智能手机、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板电脑计算机、可穿戴设备或这些设备的任意组合。
对于装置中每个模块的功能和作用的实施过程,可以参考前面方法中相应步骤的实施过程。为简单起见,这里省略了细节。
由于装置实施基本上对应于方法实施,所以对于相关部件,可以参考方法实施中的相关描述。先前描述的装置实施仅是示例性的。被描述为独立部件的模块可以是或可以不是物理上独立的,并且显示为模块的部件可以是或可以不是物理模块,可以位于一个位置,或者可以分布在多个网络模块上。可以基于实际需求来选择部分或所有模块,以实现本文解决方案的目标。本领域普通技术人员无需创造性的努力即可理解和实现本申请的实施例。
再次参照图9,其可以解释为示出用于加密或解密的计算装置的内部功能模块和结构。执行主体本质上可以是电子设备,并且该电子设备包括以下:一个或多个处理器;存储器,被配置为存储一个或多个处理器的可执行指令。
本文描述了用于以低开销(overhead)来恢复并验证公钥的具体实施例。通过将识别参数v结合到用于生成发送方侧的数字签名的工作流中,与数字签名相关联的公钥可以由接收方基于从发送方接收的参数以减少的开销来恢复。在一些情况下,可以通过遍历参数v的各种实例来恢复公钥。这些情况平均可能会导致用于恢复公钥以确定参数v的操作过程的持续时间的1.5倍。在其他情况下,可以基于指定的v值来恢复公钥,并且验证过程仅涉及两次比较。这种减少的开销可以对发送方与接收方之间的加密流量密集的区块链应用产生显著影响。当区块链网络内的参与者发起与它们之间的每个通信会话的密钥交换时,节省的意义尤其显著。
所描述的主题的实施例可以单独或组合地包括一个或多个特征。
例如,在第一实施例中,计算机实施的方法包括:接受椭圆曲线的信息编码参数、公开的公钥、消息的哈希值、数字签名和识别参数;基于椭圆曲线的参数、消息的哈希值、数字签名和识别参数生成恢复的公钥;比较公开的公钥与恢复的公钥以验证公开的公钥。前述和其他描述的实施例可以各自可选地包括以下特征中的一个或多个:
第一特征,可与任何以下特征组合,指定“生成恢复的公钥”包括:确定数字签名中所包括的第一参数是否在有界范围内。在该第一特征中,有界范围是从下限到上限,其中下限为1,上限由椭圆曲线的参数中所包括的指定素数表征。该第一特征进一步指定:响应于确定第一参数不在有界范围内,返回错误消息。在该可选实施例中,“生成恢复的公钥”包括进一步执行以下操作:验证包括在数字签名中的第二参数是否在有界范围内;以及响应于确定第二参数不在有界范围内,返回错误消息。
第二特征,可与先前或以下特征中的任一个组合,指定“生成恢复的公钥”还包括:至少基于数字签名和哈希值计算第一坐标参数。在该第二特征中,通过以下操作计算第一坐标参数:从数字签名中所包括的第一参数中减去哈希值以生成减法结果,并对减法结果执行模运算以获得第一坐标参数。该第二特征指定“生成恢复的公钥”还包括:响应于确定识别参数等于1,将第一坐标参数递增指定素数,该指定素数表征有界范围的上限。
第三特征,可与先前或以下特征中的任一个组合,指定“生成恢复的公钥”还包括:计算由椭圆曲线的参数表征的椭圆方程的模素平方根,以确定第二坐标参数。在该第三特征中,针对由第一坐标参数实例化的椭圆方程计算模素平方根。该第三特征指定“生成恢复的公钥”还包括:响应于确定识别参数的特定位为1,将第二坐标参数设置为模素平方根的奇数成员;并且响应于确定识别参数的特定位为0,将第二坐标参数设置为模素平方根的偶数成员。该第三特征指定“生成恢复的公钥”还包括:配置由第一坐标参数与第二坐标参数的配对所指定的坐标点,其中至少基于数字签名中所包括的第一参数和第二参数、由第一坐标参数和第二坐标参数所指定的坐标点、以及椭圆曲线的参数来生成恢复的公钥。
第四特征,可与先前或以下特征中的任一个组合,指定“生成恢复的公钥”还包括:响应于确定公开的公钥与恢复的公钥匹配,确定公开的公钥被验证;并且响应于确定公开的公钥与恢复的公钥不匹配,确定公开的公钥未被验证。
本文中描述的主题、动作和操作的实施例可以在数字电子电路、有形体现的计算机软件或固件、计算机硬件中实施,包括本文中公开的结构及其结构等同物,或者它们中的一个或多个的组合。本文中描述的主题的实施例可以实施为一个或多个计算机程序,例如,编码在计算机程序载体上的一个或多个计算机程序指令的模块,用以由数据处理装置执行或者控制数据处理装置的操作。例如,计算机程序载体可以包括一个或多个计算机可读存储介质,其上编码或存储有指令。载体可以是有形的非暂态计算机可读介质,例如磁盘、磁光盘或光盘、固态驱动器、随机存取存储器(RAM)、只读存储器(ROM)或其他类型介质。可选地或另外地,载体可以是人工生成的传播信号,例如,机器生成的电信号、光信号或电磁信号,其被生成以对信息进行编码以便传输到合适的接收器装置以由数据处理装置执行。计算机存储介质可以是或可以部分是机器可读存储设备、机器可读存储基板、随机或串行存取存储器设备或它们中的一个或多个的组合。计算机存储介质不是传播信号。
计算机程序,也可以被称为或描述为程序、软件、软件应用程序、app、模块、软件模块、引擎、脚本或代码,可以以任何形式的编程语言编写,包括编译或解释性语言、说明性或程序性语言;其可以配置为任何形式,包括作为独立程序或作为模块、组件、引擎、子程序或适合在计算环境中执行的其他单元,该环境可包括由数据通信网络互连的在一个或多个位置的一台或多台计算机。
计算机程序可以但非必须对应于文件系统中的文件。计算机程序可以被存储在保存其他程序或数据的文件的一部分(例如,存储在标记语言文档中的一个或多个脚本)中、存储在专用于所讨论的程序的单个文件中、或存储在多个协同文件(例如,存储一个或多个模块、子程序或代码部分的多个文件)中。
作为示例,用于执行计算机程序的处理器包括通用微处理器和专用微处理器,以及任何类型的数字计算机的任何一个或多个处理器。通常,处理器将接收用于执行的计算机程序的指令以及来自耦合到处理器的非暂态计算机可读介质的数据。
术语“数据处理装置”包括用于处理数据的所有类型的装置、设备和机器,包括例如可编程处理器、计算机或多处理器或计算机。数据处理装置可包括专用的逻辑电路,例如FPGA(现场可编程门阵列)、ASIC(专用集成电路)或GPU(图形处理单元)。除了硬件,该装置还可以包括为计算机程序创建执行环境的代码,例如,构成处理器固件、协议栈、数据库管理系统、操作系统或它们中的一个或多个的组合的代码。
本文中描述的过程和逻辑流程可由一台或多台计算机或处理器执行一个或多个计算机程序进行,以进行通过对输入数据进行运算并生成输出的操作。过程和逻辑流程也可以由例如FPGA、ASIC、GPU等的专用逻辑电路或专用逻辑电路与一个或多个编程计算机的组合来执行。
适合于执行计算机程序的计算机可以基于通用和/或专用微处理器,或任何其他种类的中央处理单元。通常,中央处理单元将从只读存储器和/或随机存取存储器接收指令和数据。计算机的元件可包括用于执行指令的中央处理单元和用于存储指令和数据的一个或多个存储设备。中央处理单元和存储器可以补充有专用逻辑电路或集成在专用逻辑电路中。
通常,计算机还将包括一个或多个存储设备,或可操作地耦接到一个或多个存储设备,以从该一个或多个存储设备接收数据或将数据传输到一个或多个存储设备。存储设备可以是例如磁盘、磁光盘或光盘、固态驱动器或者任何其他类型的非暂态计算机可读介质。但是,计算机不需要具有这样的设备。因此,计算机可以耦接到本地和/或远程的例如一个或多个存储器的一个或多个存储设备。例如,计算机可以包括作为计算机的组成部分的一个或多个本地存储器,或者计算机可以耦接到云网络中的一个或多个远程存储器。此外,计算机可以嵌入到另一个设备中,例如移动电话、个人数字助理(PDA)、移动音频或视频播放器、游戏控制台、全球定位系统(GPS)接收器或例如通用串行总线(USB)闪存驱动器的便携式存储设备,仅举几例。
组件可以通过直接或经由一个或多个中间组件可通信地例如电或光地彼此连接而彼此“耦接”。如果组件之一被集成到其他组件中,则组件也可以彼此“耦接”。例如,集成到处理器中的存储组件(例如,L2高速缓存组件)被“耦接到”处理器。
为了提供与用户的交互,本文中描述的主题的实施例可以在计算机上实现或配置为与该计算机通信,该计算机具有:显示设备,例如,LCD(液晶显示器)监视器,用于向用户显示信息;以及输入设备,用户可以通过该输入设备向该计算机提供输入,例如键盘和例如鼠标、轨迹球或触摸板等的指针设备。其他类型的设备也可用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的感官反馈,例如视觉反馈、听觉反馈或触觉反馈;并且可以接收来自用户的任何形式的输入,包括声音、语音或触觉输入。此外,计算机可以通过向用户使用的设备发送文档和从用户使用的设备接收文档来与用户交互;例如,通过向用户设备上的web浏览器发送web页面以响应从web浏览器收到的请求,或者通过与例如智能电话或电子平板电脑等的用户设备上运行的应用程序(app)进行交互。此外,计算机可以通过向个人设备(例如,运行消息应用的智能手机)轮流发送文本消息或其他形式的消息来并接收来自用户的响应消息来与用户交互。
本文使用与系统,装置和计算机程序组件有关的术语“配置为”。对于被配置为执行特定操作或动作的一个或多个计算机的系统,意味着系统已经在其上安装了在运行中促使该系统执行所述操作或动作的软件、固件、硬件或它们的组合。对于被配置为执行特定操作或动作的一个或多个计算机程序,意味着一个或多个程序包括当被数据处理装置执行时促使该装置执行所述操作或动作的指令。对于被配置为执行特定操作或动作的专用逻辑电路,意味着该电路具有执行所述操作或动作的电子逻辑。
虽然本文包含许多具体实施细节,但是这些不应被解释为由权利要求本身限定的对要求保护的范围的限制,而是作为对特定实施例的具体特征的描述。在本文多个单独实施例的上下文中描述的多个特定特征也可以在单个实施例中的组合实现。相反,在单个实施例的上下文中描述的各种特征也可以单独地或以任何合适的子组合在多个实施例中实现。此外,尽管上面的特征可以描述为以某些组合起作用并且甚至最初如此要求保护,但是在一些情况下,可以从要求保护的组合中删除来自该组合的一个或多个特征,并且可以要求保护指向子组合或子组合的变体。
类似地,虽然以特定顺序在附图中描绘了操作并且在权利要求中叙述了操作,但是这不应该被理解为:为了达到期望的结果,要求以所示的特定顺序或依次执行这些操作,或者要求执行所有示出的操作。在某些情况下,多任务并行处理可能是有利的。此外,上述实施例中的各种系统模块和组件的划分不应被理解为所有实施方式中都要求如此划分,而应当理解,所描述的程序组件和系统通常可以一起集成在单个软件产品或者打包成多个软件产品。
已经描述了主题的特定实施例。其他实施例在以下权利要求的范围内。例如,权利要求中记载的动作可以以不同的顺序执行并且仍然实现期望的结果。作为一个示例,附图中描绘的过程无需要求所示的特定顺序或次序来实现期望的结果。在一些情况下,多任务并行处理可能是有利的。