能够在多个存储节点上安全存储大型区块链的计算机实现的系统和方法与流程

文档序号:20274853发布日期:2020-04-03 19:30阅读:292来源:国知局
能够在多个存储节点上安全存储大型区块链的计算机实现的系统和方法与流程

本说明书主要涉及适用于在区块链网络的节点中实现的计算机实现的方法和系统。描述了用于处理大量交易和大交易区块的修正区块链节点结构、网络架构和协议。本发明特别适用于,但不限于,与比特币区块链一起使用。



背景技术:

在本文中,使用术语“区块链(blockchain)”来包括所有形式的电子的、基于计算机的分布式分类账(distributedledgers),包括但不限于区块链和交易链技术、许可及未许可的分类账、共享分类账及其变型。虽然已经提出并开发了其他区块链实施方案,但是区块链技术最广为人知的应用是比特币分类账(bitcoinledger)。虽然出于方便和说明的目的,本文中涉及的是比特币(bitcoin),但应当指出的是,本发明不限于与比特币区块链一起使用,其他的区块链实施方式和协议也落入本发明的范围内。

区块链是基于共识的电子分类账,所述分类账被实现为由区块组成的基于计算机的去中心化的分布式系统,而区块由交易和其他信息组成。就比特币而言,每个交易是对区块链系统中参与者之间的数字资产的控制的转移进行编码的数据结构,并且包括至少一个输入和至少一个输出。每个区块包含前一区块的散列,如此,这些区块被链接在一起,以创建一个永久的、不可更改的所有交易的记录,这些交易自区块链诞生之始写入区块链。交易包含小程序,这些小程序称为脚本,嵌入至所述交易的输入和输出中,这些小程序指定了如何以及由谁来访问交易的输出。在比特币平台上,这些脚本是使用基于堆栈的脚本语言编写的。

为了将交易写入区块链,必须对所述交易进行“验证”。一些网络节点充当矿工,执行工作以确保每个交易有效,无效交易则被网络拒绝。例如,安装在所述节点上的软件客户端在引用未花费的交易输出(unspenttransactionoutputs,简称utxo)的交易上执行验证工作。可通过执行其锁定和解锁脚本来执行验证。如果锁定和解锁脚本的执行评估为真(true),并且如果满足某些特定条件,则所述交易有效,可将所述交易写入区块链。因此,为了将交易写入区块链,所述交易必须:i)由接收交易的节点进行验证——如果交易经验证通过,则所述节点将所述交易中继到网络中的其他节点;ii)添加到矿工建造的新区块中;iii)被挖掘,即添加到过去交易的公共分类帐中。当向区块链添加足够数量的区块以使交易实际上不可逆转时,交易被视为已确认。

尽管区块链技术以使用加密货币实现而闻名,但数字企业家已经开始探索使用比特币所基于的加密安全系统和可存储在区块链上的数据来实现新系统。如果区块链能够用于自动化任务和流程,而不仅仅局限于以加密货币计价的支付,那么将是非常有利的。这类解决方案将能够利用区块链的优势(例如,事件的永久防篡改记录、分布式处理等),同时在所述解决方案的应用中更具通用性。

研究的领域之一是使用区块链来实现“智能合约(smartcontract)”。这些智能合约是旨在自动执行机器可读合约或协议的条款的计算机程序。与用自然语言编写的传统合约不同,智能合约是一种机器可执行程序,包括可处理输入以产生结果的规则,智能合约可根据这些结果引发待执行的操作。

与区块链相关的另一领域是使用“令牌(tokens)”(或“彩色币(colouredcoins)”)通过区块链来表示和传输现实世界的实体。潜在敏感或机密的项目可以由没有明显意义或价值的令牌来表示。因此,令牌充当允许从区块链引用现实世界的项目的标识符。



技术实现要素:

衡量基于加密货币的区块链的健康状况的关键要素之一是实际存储区块链的节点数量。区块链根据每秒的交易数量增长。但是随着加密货币变得流行,每秒支付的次数增加了,区块链的增长率也提高了。存储成本变得非常高。

因此,一个技术问题是如何重新配置区块链网络,使其适合存储非常大型的区块链。进一步的技术问题是如何在不需要区块链网络上的所有节点都存储如此大型的区块链的情况下实现这一目标。还有一个技术问题是如何重新配置区块链网络,以使专用存储节点可以证明其正在存储这样一个非常大型的区块链的至少一部分。还有另一个技术问题是如何重新配置区块链网络,以激励专用存储节点存储这样一个非常大型的区块链的至少一部分。

本发明的目的是通过提供本文所述的技术方案来解决这些技术问题。特别地,本说明书描述了一种协议,所述协议(i)允许存储节点因维护公共区块链而获得奖励;和(ii)借助于区块链存储证明(proof-of-blockchainstorage,简称pobs)方案来验证所述区块链的完整性。所述协议提供了一种使用挑战-响应方法加密地检查存储在远程服务器上的数据文件是否完整的方法。所述协议免受中间人攻击(man-in-the-middleattack)。恶意对等方不能将所述挑战转移到存储数据的第三方并反馈响应。所述方案也是可公开验证的。

本发明的实施例可以以多种形式提供。例如,可以提供一种包括计算机可执行指令的计算机可读存储介质,所述计算机可执行指令在被执行时使一个或多个处理器执行本文所述的方法。还可以提供一种电子设备,所述电子设备包括:接口设备;连接到接口设备的一个或多个处理器;连接到一个或多个处理器的存储器,所述存储器存储了计算机可执行指令,所述计算机可执行指令在被执行时使得所述一个或多个处理器执行本文所述的方法。此外,还可以提供区块链网络的节点,所述节点用于执行本文所述的方法。

附图说明

参考本文描述的实施例,本发明的这些和其他方面将变得显而易见并得以阐明。现在仅通过示例并参考附图来描述本发明的实施例,其中:

图1示出了说明区块链存储证明(pobs)协议的步骤1的示意图;

图2示出了说明区块链存储证明(pobs)协议中的步骤3的示意图;

图3示出了呈钟形曲线形式的分布函数f(t);

图4示出了在区块链存储证明(pobs)协议中使用的交易的示例;和

图5示出了在区块链存储证明(pobs)协议中随机预言的使用。

具体实施方式

如发明内容部分所述,区块链根据每秒的交易数量增长。但是随着加密货币变得流行,每秒支付的次数增加了,区块链的增长率也提高了。存储成本变得非常高。

我们描述了一个协议,该协议(i)允许存储节点因维护公共区块链而获得奖励;和(ii)借助于区块链存储证明(pobs)方案来验证上述区块链的完整性。该协议提供了一种使用挑战-响应方法加密地检查存储在远程服务器上的数据文件是否完整的方法。该协议免受中间人攻击(man-in-the-middleattack)。恶意对等方不能将挑战转移到存储数据的第三方并反馈响应。上述方案也是可公开验证的。

提供了(例如)由矿工运行的系统,其中(例如)每个矿工每分钟从区块链随机采样交易(矿工不一定同步)。

提供了一种用于区块链网络的节点的计算机实现的方法,该计算机实现的方法包括:

从区块链中选择一个或多个存储证明即将被挑战的交易,所选定的一个或多个交易具有交易深度;

创建区块链存储交易的证明,该交易为存储证明即将被挑战的一个或多个选定的区块链交易,以及可以由存储一个或多个选定的交易的存储节点解锁的区块链存储奖励的证明;和

发送区块链存储交易的证明到区块链网络上的一个或多个存储节点。

上述方法提供了一种手段,区块链网络上的矿工可以通过该手段挑战区块链网络上的存储节点,以证明存储节点正在存储区块链或其中的至少一部分。

一个或多个选定的区块链交易具有对应于区块链的一个或多个交易的深度的交易深度d,和可根据交易深度d设置区块链存储奖励的证明,使得交易深度d越大,奖励越多。

该特征鼓励存储节点存储更多的区块链,因为它们将因存储更深的交易而获得更多的奖励。

可以从区块链中随机选择一个或多个区块链交易。可以选择区块链交易的列表。引入随机选择有助于提高系统的安全性。通过确保从在区块链上已接收到多个确认的一个或多个区块中选择一个或多个交易,进一步提高了安全性。

区块链存储交易的证明可以包括与将要存储在上述区块链上的新挖掘的区块相关联的数据。例如,与该新挖掘的区块相关联的数据可以是新挖掘的区块的区块头数据。这样,当矿工有新挖掘出的准备在存储节点上存储的区块时,可以对区块链上的存储节点提出挑战,该挑战与待存储的新挖掘的区块相关联。

与上述新挖掘的区块相关联的数据可以和从上述区块链中选择的一个或多个区块链交易相关联的数据相结合。例如,与上述新挖掘的区块相关联的数据可以通过异或运算(xoroperation)或级联(concatenation)和从上述区块链中选择的一个或多个区块链交易相关联的数据相结合。此外,上述区块链存储交易的证明包括以下之一:

与上述一个或多个选定的区块链交易相关联的数据的加密函数;

与上述一个或多个选定的区块链交易相关联的数据相结合的新挖掘的区块相关联的数据的加密函数。

上述的功能建立了加密函数,该加密函数可以由拥有上述一个或多个选定的区块链交易的存储节点来计算,以便解锁奖励。

上述区块链存储交易的证明还包括与上述区块链网络的一个或多个存储节点相关联的一个或多个区块链网络地址。这些地址可以是经认证的区块链网络地址,该认证通过私钥共享方案来实现,以提高系统的安全性(如下文中更详细的描述)。

上述方法还可以包括生成挑战前缀,该挑战前缀包括上述一个或多个选定区块链交易的标识号,并且挑战前缀和区块链存储交易的证明可以被发送到上述区块链网络上的一个或多个存储节点。上述一个或多个存储节点可以使用该挑战前缀以从其区块链副本中识别和提取上述一个或多个选定的区块链交易。为了进一步提高系统的安全性,随机预言可用于生成上述挑战前缀和以下其中之一:与上述一个或多个选定的区块链交易相关联的数据的加密函数;与上述新挖掘的区块相关联的数据的加密函数,该新挖掘的区块与一个或多个选定的区块链交易相结合。上述挑战前缀还可以附带用于完整性和认证的数字签名,或者可以在非交易字段中发送挑战前缀消息给存储节点。

在接收到上述区块链存储交易的证明时,上述一个或多个存储节点可以访问存储在其节点上的一个或多个选定的区块链交易,并使用上述一个或多个选定的区块链交易解锁奖励。例如,遵循前述示例,可以通过计算以下之一来解锁奖励:

与一个或多个选定的区块链交易相关联的数据的加密函数;

与新挖掘的区块相关联的数据的加密函数,该新挖掘的区块与一个或多个选定的区块链交易相结合。

可以提供一种包括计算机可执行指令的计算机可读存储介质,该计算机可执行指令在被执行时使一个或多个处理器执行本文所述的方法。

可以提供一种电子设备,包括:

接口设备;

一个或多个处理器,连接到上述接口设备;

存储器,连接到上述一个或多个处理器,该存储器存储了计算机可执行指令,该计算机可执行指令在被执行时使上述一个或多个处理器执行本文所述的方法。

此外,可以提供一种区块链网络的节点,该节点用于执行本文所述的方法。

现在将描述区块链存储协议的证明的示例。在本节中,我们书写来表示从集合x中随机采样的元素x。我们有时书写y:=a(x)来表示在输入x上运行算法a的确定性结果。字符串级联由竖线(||)表示。异或运算用符号表示。区块链交易集合用符号b表示。

每个矿工运行的协议:

1.在时间τ,从区块链(图1)挑选随机选择的交易集合。交易列表本地存储(通用列表功能(genlistfunctionality))

2.成功挖掘新区块后,成功的矿工创建一个(多个)挑战(通用挑战功能(genchalfunctionality))。计算挑战收入:$r:=getrew(d),其中d为交易深度。

3.矿工广播包含币库交易的新挖掘的区块数据,该币库交易包括与存储证明(图2)相关联的挑战。

现在我们定义pobs结构中使用的功能。

预处理(preprocessing):设置在交易深度d上操作的pobs奖励函数rew。区块链中的交易t越深,pobs奖励就越高。

获取奖励功能(getrewardfunctionality):

设rew为奖励函数。一旦接收到深度d

getreward(d):

1.返回rew(d)

通用列表功能(genlistfunctionality):

设n为请求的交易总数。在询问区块链b之后,创建列表l

genlist(n):

1.i=0

2.当i<n时

3.

4.如果

5.返回l

设置:假设矿工持有(i)新挖掘的区块头head和(ii)已确认交易l的列表,生成挑战chal,除其他事项外,该挑战还表明想要拥有证明的特定交易t∈l。该述交易记录在接收多个确认的区块中。

通用挑战功能(genchalfunctionality):

如前所述,设head为区块头,设l为已确认交易的列表,设h为加密散列函数。设d为交易的深度(区块数量或其后的确认数量)。genchal(head,l)功能定义如下:

genchal(head,l):

1.选择随机

2.chal:=h(head||t)或或...

3.$r:=getrew(d)

4.返回(chal,$r)

应该注意的是,上文中我们没有表明分布函数f(t)的形状。该函数可以是单值的或者遵循钟形曲线(参见图3)。

准备币库交易:使用chal和存储节点接收比特币地址完成币库交易。为了便于说明,图4给出了简单示例。

挑战:生成挑战前缀pref=tid,该前缀包括交易标识号。消息可以(i)附有用于完整性和认证的数字签名,或者(ii)可以包括在非交易字段中,例如在op_return之后。将pref和chal发送到存储节点。在接收到chal时,服务器计算允许他/她解锁资金的h(head||t)。

上述技术还可以从向协议添加随机预言中获益。随机预言是使用随机选择的响应(代表诚实的一方)响应每个查询的预言。在这种情况下,矿工查询区块头head上的随机预言(ro)。在接收head时,ro使用真正随机的响应h(head||t),pref=tid(参见图5)响应每个查询。

经过认证的比特币地址

为了安全起见,我们还建议使用经过认证的比特币地址来防止矿工与存储节点之间的串通。在这方面,去中心化的点对点系统中的挑战之一是确保节点可以在受信的基础上与网络中的另一个节点通信。随着一些实现的网络体系结构的发展,一些节点可以承担更多的专用任务,而其他节点可以依赖那些专用节点作为特定数据源或特定功能(如前所述)的执行者。如果某一节点要依赖另一个节点获取信息或作为合法来源,则该节点需要能够建立用于与该另一节点通信的受信关系。在节点可以具有不同角色的情况下,具有用于确定和验证节点角色的机制是有利的。此外,如果节点被证明是非法的或恶意的,则其他节点应该可以记住该节点,从而忽略来自该节点的未来通信。在点对点系统中,挑战是要通过施加中央权限来解决这些问题,而不损害系统的点对点性质。

因此,可以提供管理从自主专用节点集合到请求节点的凭证的安全分发的方法和设备。凭证的安全分发可以使用秘密共享和没有节点重建或拥有的群组私钥。凭证包括用于请求节点的标识符和秘密点,该秘密点由节点根据多个专用节点中的每个专用节点提供的秘密点的部分组装而成,该秘密点是基于上述群组私钥和请求节点标识符的映射到点的散列。在一些实现中,节点可以是区块链节点。

两个节点可以通过一组自主专用节点提供凭据的方式相互认证,无需涉及该组或涉及集中式证书管理者或认证者。该方法可以包括第一节点和第二节点使用双线性配对操作来导出相同的密钥,双线性配对操作涉及第一节点和第二节点各自的标识符和秘密点。假设使用群组私钥从群组中获得了秘密点和标识符,则双线性配对操作使得在两个节点的每个节点处生成相同的密钥,从而认证它们各自的凭证并实现两个节点之间的受信通信。

节点可以从一组专用节点获得凭证,每个专用节点具有群组私钥的私钥份额。该方法可以包括从节点向多个专用节点发送对凭证的请求,其中,节点具有标识符;从多个专用节点中的每个节点接收由该节点根据标识符和该节点的私钥份额生成的秘密点的一部分;以及通过组合秘密点的各接收部分来生成秘密点,并且其中,秘密点是群组私钥乘以标识符的映射到点的散列,上述凭证是标识符和秘密点。可以不需要任何专用节点或不需要任何节点来获得群组私钥的完整副本。

在一些实现中,发送请求可以包括向多个专用节点中的每一个发送单独的请求。标识符可以包括标识该节点的标识符字符串和标识该组专用节点的角色的角色字符串。在一些情况下,标识符还包括凭证的到期时间,并且在另一些情况下,发送请求包括发送标识符字符串,并且其中,接收包括接收标识符。

在一些实现中,生成秘密点包括组合秘密点的各接收部分。在一些示例实现中,组合可以包括求和。

在一些实现中,秘密点是使用秘密份额生成的,并且基于群组私钥。在其中一些情况下,秘密份额使用拉格朗日插值和多个专用节点的私钥份额,无需重建群组私钥。

还可以为第一节点提供一种计算机实现的方法,以建立与第二节点的受信通信,该第二节点具有第二节点标识符和第二秘密点,该第二秘密点是群组私钥乘以第二节点标识符的映射到点的散列,该群组私钥与用于授予凭证的节点群组相关联。该方法可以包括从节点群组获得第一秘密点,其中第一秘密点是群组私钥乘以第一节点标识符的映射到点的散列;向第二节点发送第一节点标识符;接收第二节点标识符;使用双线性配对操作,根据第二节点标识符的映射到点的散列和第一秘密点,生成第一会话密钥;以及确认第一会话密钥与第二节点生成的第二会话密钥相匹配,第二会话密钥通过使用双线性配对操作,根据第二秘密点和第一节点标识符的映射到点的散列生成。

在一些实现中,生成第一会话密钥的双线性配对操作可以由以下表达式之一来表征:

ka=e(h1(idb),sa)和

ka=e(sb,h1(ida))

生成第二会话密钥的双线性配对操作由另一个表达式表征,其中e()是双线性配对操作,h1()是映射到点的散列,ida和idb分别是第一节点标识符和第二节点标识符中的一个,sa和sb分别是第一秘密点和第二秘密点中的一个。

在一些实现中,获得第一秘密点包括从节点群组中的多个节点中的每个节点获得第一秘密点的各个部分,并且组合各个部分以形成第一秘密点,而无需重建群组私钥。

在一些实现中,确认包括从第一节点向用第一会话密钥加密的第二节点发送挑战,接收对挑战的响应,并且基于该响应,确定第二节点使用第二会话密钥有效解密了挑战。

在一些实现中,发送还包括发送第一随机数,并且其中接收还包括接收第二随机数和计算的c0值,其中该c0值包括第二会话密钥、第一随机数和第二随机数的的散列。在其中一些情况下,级联还包括第一节点标识符和第二节点标识符。在其中一些情况下,生成包括生成计算的c1值,该计算的c1值包括第一会话密钥、第一随机数和第二随机数的级联的散列,并且其中确认包括确认上述计算的c0值与上述计算的c1值匹配。

在一些实现中,第二秘密点是由群组私钥乘以第二节点标识符的映射到点的散列。

在一些实现中,第一秘密点和第二秘密点各自由上述节点群组使用秘密共享分别提供给第一节点和第二节点。

例如,一组节点中的每个节点可以包括私钥k的份额ki。秘密共享用于阈值加密系统中,其中密钥k在n个参与者之间分配,使得至少t+1个参与者需要协作来重建k。对密钥k的任何t个片段的知识都使密钥k无法确定。

秘密共享基于多项式插值,并且秘密假设为有限域f的元素。该方案包括经销商(也存在无经销商版本),n个参与者u1,...,un的集合。在该协议中,任意随机秘密以t次多项式f(x)的形式存储为f(0),只有节点i可以计算其份额f(xi)。如果n个节点之外的t+1个节点协作,他们可以用其(密钥k)份额k1,k2,...,kn重建f(x)上的任意点,上述份额对应于使用拉格朗日多项式插值的f(x1),f(x2),...,f(xn)。拉格朗日多项式插值规定,t次函数f(x)可以用t+1点p={(x1,f(x1)),(x2,f(x2)),...,(xt+1,f(xt+1))}来重建

其中

注意:bi,p(xi)=1和bi,p(xj)=0。在这方面,bi是插值系数。

在涉及无经销商份额分配的实现中:

1.每个节点i指派xi,这每个人都知道。每个xi都必须是唯一的。

2.每个节点i生成t次随机多项式fi(x)。

3.每个节点i向每个其他节点秘密地(用接收者的公钥加密)发送其在多项式fi(xj)modn上相应的点。

4.每个节点i将其接收到的所有f1(xi),f2(xi),...fp(xi),都modn相加(其中n是基字段的特征(也可以表示为gf(n),)),以形成ki=f(xi)modn,其为多项式f(x)modn上的份额。

节点群组中的节点协作为请求节点生成秘密点sa。上述秘密点sa在循环群g1中,其重要性将从下面关于握手和配对的解释中变得清晰。秘密点与标识符相关,如下所示:

sa=k·h1(ida)

其中ida是请求节点504的标识符。在一些实现中,凭证可以认为是(ida,sa)。h1是映射到点的散列函数,这将在下文中详细解释。

为了在不重建群组私钥k的情况下生成秘密点,节点群组使用秘密共享加入(secretsharejoining)的形式协作生成sa。请求节点向上述节点群组中的至少t+1个节点发送凭证请求。这些节点各自向请求节点提供一部分sa。具体地,秘密点sa的每个份额sai由节点i确定并发送到请求节点,然后请求节点将它们组装(即组合)成秘密点sa。在一些示例中,通过对份额sai求和来合并份额sai,以获得秘密点sa。

现在描述基于群组的分布式凭证生成的示例过程。该过程由请求节点执行。该过程从请求节点将指数i设置为1开始。请求节点从节点i请求凭证。节点i是用于执行本文所述的凭证授予过程的实现的一组节点中的专用节点。节点i使用群组私钥份额ki的一部分来确定秘密点sa的第i个部分。该部分可称为sai。

请求节点从第i个节点接收部分sai,即它接收部分凭证。接收节点评估指数i是否为t+1。如果是,那么接收节点已经接收到t+1部分凭证,但是如果不是,那么它仍然需要其他部分凭证来重建秘密点sa。如果i尚未等于t+1,那么它将递增1,并且该过程从节点群组中的另一个节点返回以请求其他部分凭证。如果i等于t+1,则在操作712中,请求节点组装秘密点sa。

通过节点群组中的节点的共同努力获得了凭证,具有一种机制来检查或验证凭证而不依赖于中央权限或返回到该群组进行验证/认证是有利的。这样,声称具有来自同一组节点的有效凭证的两个节点可以验证彼此的凭证,而没有与使该组节点协作验证和确认所发布的凭证相关联的时间延迟和通信开销的负担。

作为概述,考虑群组私钥k是有限域的成员,即获得凭证的请求节点以其标识符ida和循环群g1中的秘密点sa的形式拥有凭证。在此示例实施例中,标识符(或“假名”)ida是(alice||role||expirationtime),其中||表示两个字符串的级联,而role是与节点群组和/或其功能或角色关联的字符串或其他字母数字标识符。请求节点可以向任何人透露其标识符,但保守sa的秘密性。

另一个请求节点获得标识符idb为(bob||role||expirationtime)和秘密点sb。

注意,秘密点sa由sa=k·h1(ida)给出,秘密点sb由sb=k·h1(idb)给出。

当alice和bob希望彼此建立受信通信时,即他们中的一个或两个都希望验证彼此的凭证时,两个节点交换其各自的标识符/假名而不公开其秘密点。

节点alice通过计算下式生成会话密钥ka:

ka=e(h1(bob||role||expirationtime),sa)

其中e()是双线性映射,即配对操作,节点bob通过计算下式来计算会话密钥kb:

kb=e(sb,h1(alice||role||expirationtime))

运算h1()是一个映射到点的函数,这将在下文中进一步描述。由于配对的属性,两个密钥是相同的,即ka=kb。通过发送挑战值并获得响应,两个节点可以验证协议成功,即两个节点各自持有由同一组节点发出的指示相同角色的凭证。或者,一方可以向另一方发送一些内容,当且仅当握手成功,这些内容才会被成功解密。

本示例中的配对操作在此情况下依赖于sa和sb来自同一循环群g1。在其他情况下,这两个可能来自不同的循环群g1和g2,这两个循环群作为两个阿贝尔群(abeliangroup)相关,这两个阿贝尔群将另一个阿贝尔群中的值取为:

e:g1×g2→gt

其中g1、g2和gt是同阶的循环群。

在生成公共凭证时,会有某些参数。这些参数可以由过程中的任何节点生成,并与其他节点共享。从假设e是包含域上n个点的椭圆曲线开始,其中q是与素数2和3互素的一个素数的幂,公共参数可以包括:

params=(p,g1,g2,gt,g1,g2,e,h1,h2)

其中g1(分别g2)是具有双线性映射e(.,.)的素数阶p的群g1(分别g2)的生成器。g1是具有r、q互质的r阶的循环子群。并且,e(g1,g2)生成具有p阶的gt。h1和h2分别是相对于g1和g2的映射到点的散列。如上所述,在一些实现中,以及在本文所述的许多示例中,可能仅使用g1,这意味着秘密点sa和sb均使用相同的映射到点的散列函数h1。

在一些椭圆曲线加密系统中,散列算法用于将密码或其他字符串(有限域的元素)映射到给定椭圆曲线的点上。这些是映射到点的散列。更准确地说,映射到点的散列函数h1是一种转换,它接受输入消息m并返回点p∈e(k)。更具体地,h1返回点p∈e(k)[r],其中e(k)[r]是由g1生成的e(k)的子群。在此方案中,存在从基域到曲线的一对一映射f。这使得能够使用f(h(m))进行散列,其中h是经典散列函数并且

现在描述在两个节点a和b之间通过验证彼此的凭证来建立受信通信通道的消息流。在此示例实现中,节点a向节点b提供其标识符ida。标识符ida是公开可用的,并且在某些情况下可以由节点b从另一个来源获得。由此,节点b能够使用节点a的标识符、由节点b持有的秘密点sb以及由发出凭证的节点群组规定的映射到点的散列函数h1来生成会话密钥kb。会话密钥kb是使用配对操作e()生成的,配对操作e()也由节点群组规定:

kb=e(sb,h1(alice||role||expirationtime))

其中,在此示例中,节点b的标识符idb为(alice||role||expirationtime)

节点b向节点a提供其标识符idb,然后节点a能够使用节点b的标识符、其秘密点sa以及相同的配对操作和映射到散列函数来类似地生成会话密钥ka:

ka=e(h1(bob||role||expirationtime),sa)

如果秘密点是由节点群组使用相同的群组私钥k和相应节点a和b的标识符合法协作生成的,那么配对操作应该导致ka=kb。这可能以多种方式进行测试。在此示例实现中,节点a向使用会话密钥ka加密的节点b发送挑战。节点b试图使用其会话密钥kb解密该挑战,并发送对该挑战的响应。响应可以用会话密钥kb加密。在此基础上,两个节点可以确保它们具有相同的会话密钥。该会话密钥可用于加密两个节点之间的通信。在另一个实现中,会话密钥可以用于加密通信,从而建立另一个密钥。在又一实现中,两个节点之间的通信简单地依赖于上述过程来验证/认证彼此的凭证,并且两个节点之间的通信要么未加密,要么使用节点的常用公-私钥对加密。

现在描述另一个示例实现。在此示例中,节点a从生成随机数noncea开始。节点a将标识符ida和其随机数发送到节点b。节点b生成其自己的随机数nonceb。在此示例中,节点b生成值c0,该值是配对操作的结果和其他数据(包括随机数)的散列。在此示例中,值c0可以由下式给出:

c0=h(e(sb,h1(ida))||ida||idb||noncea||nonceb)

其中,h是从字符串到字符串的抗冲突散列函数。在一个示例中,h是sha-256。

节点b然后提供其标识符idb、其随机数nonceb和值c0来回复节点a。节点a执行类似的计算以获得值c1,在本例中,该值表示为:

c1=h(e(h1(idb),sa)||ida||idb||noncea||nonceb)

需要注意的是,c1和c0在表达式中参数的唯一区别在于配对操作。因此,如果双线性配对操作确认节点a和节点b的凭证是从同一组节点获得的,那么这两个值应该匹配。节点a可以验证它们是否匹配,如果匹配,将c1发送到节点b,节点b也验证它们是否匹配。在一个实现中,值c0=c1其后用作会话密钥来加密节点a和节点b之间的通信。在一些实现中,节点简单地依赖于其常用的公-私钥对来加密通信,上述操作用于认证,而不用于建立会话密钥。

在一些示例实现中,被级联并散列以形成值c0和c1的数据或字符串可以包括其他数据或字符串,或者可以不包括一些上述示例字符串。例如,在一个实现中,值c0和c1可以不包括标识符ida和idb的级联。尽管可以理解的是,散列和随机数有助于保护通信免受中间人攻击。

应当说明的是,上述实施例说明而非限制本发明,在不脱离本发明的由所附权利要求限定的范围的情况下,本领域技术人员将能够设计出许多替代性实施例。例如,应当理解,虽然交易可以转移比特币,但是用户可以改为使用本文所述的方法和系统来交换其他资源(例如信息、合约和令牌)。令牌根据与令牌相关联的智能合约来表示资产或资源,使得令牌的控制有能力控制资产或资源。智能合约本身可以存储在区块链外,也可以存储在一个或多个交易中。

在权利要求中,括号中的任何附图标记不应解释为对权利要求的限制。词语“包括(comprising)”和“包括(comprises)”等并非在整体上排除其他元件和步骤的存在,尽管这些元件和步骤并没有在任何权利要求或说明书中列出。在本说明书中,“包括(comprises)”意指“包括(includes)或由......组成(consistsof)”,“包括(comprising)”意指“包括(including)或由......组成(consistingof)”。元件的单数引用不意味着排除这些元件的复数引用,反之亦然。本发明可以借助包括若干不同元件的硬件,以及借助适当编程的计算机来实施。在列举了若干装置的设备权利要求中,这些装置中的若干个可以由硬件的同一个部件来体现。不争的事实是,在相互不同的从属权利要求中列举了某些方法,并不代表这些方法的结合不能获得有益效果。

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