用于经由区块链控制资产有关的动作的系统及方法与流程

文档序号:16506608发布日期:2019-01-05 09:04阅读:187来源:国知局
本发明总体上涉及计算机实现的资产的控制、交换以及处理。具体地,本发明涉及智能合约领域,并且适合于结合诸如区块链之类的点到点分布式网络使用。其可以是比特币区块链或者替代的区块链平台。本发明特别有益于在多个实体之间拆分资产所有权和/或根据资产来累计或生成值的情况。本发明提供一种用于确定在这些情况下充当关于动作的触发的事件并且对其进行响应的机制。本发明还包括提供与电子资产的控制和转移有关的增强的安全性和匿名性的加密技术。
背景技术
::区块链是由区块组成的计算机实现的去中心化的、基于共识的分布式系统,区块进而由交易组成。每个区块包含前一个区块的散列,从而区块变为链接在一起,以创建自区块链起始以来已写入区块链的所有交易的永久、不可更改的记录。交易包含嵌入到其输入和输出中的称为脚本的小程序,所述小程序指定可以如何以及可以由谁访问交易的输出。区块链最广为人知的应用是比特币账本,然而已经提出并开发其他区块链实现方式。尽管出于方便和说明的目的可以在此引用比特币,但是应当注意的是,本发明并不限于结合比特币区块链使用,而是可替代的区块链实现方式也落入本发明的范围内。区块链技术因使用加密货币实现方式而最广为人知。然而,近期来,数字企业家已经开始探索比特币所基于的加密安全系统的使用以及可以存储在区块链上的数据,以实现新系统。这些包括但不限于:·存储元数据:信息可以经由区块链通过将信息作为元数据嵌入到交易内而得以传送;这进而可以用于:·实现数字通证(token)·建立使用数字签名所签署的合约。智能合约可以被设计成提供可以包括可以受评估以确定应该执行哪些动作(例如,是否应该向特定方进行支付)的条件和测试的自执行的机器可读解决方案。能够以自动、安全和有效的方式对基于区块链的资产的所有者计算和分配收入和/或成本将是有利的。为此,将需要检测生成动作(诸如可支付给这些资产的所有者或者可由这些资产的所有者支付的收入或成本)的事件(触发)。于是将需要一种用于自动地(即,通过机器)生成和签署区块链交易以执行收入或成本支付的技术。技术实现要素:现在已经设计出这种改进的解决方案。本发明可以包括一种构建于区块链协议上以使得能够自动生成区块链交易的技术方案。交易可以于是用于经由区块链在实体之间进行转移,例如支付收入或成本。使用区块链确保存在关于给定的合约进行的任何支付的安全、公开的记录。这样消除或至少减少在争议情形下需要获得对私有系统和数据源的访问,以提供关于违反该合约的任何拖欠的证据。本发明还可以包括并利用用于生成加密密钥的新颖技术。下面讨论根据本发明得出的一些其他益处。本发明可以提供一种用于控制、计算、生成和/或执行区块链上的交换的计算机实现的系统或机制。交换(转移)可以涉及任何类型的实体、虚拟或逻辑资产。本发明可以被设置成控制经由区块链关于资产进行的转移,并且可以包括资产或者资产的表示。资产或表示可以包括一个或多个私有加密密钥,每个私钥与资产的所有者相关联。私钥可以是加密密钥对的一部分。可以根据实质上如下面在标题为“用于子密钥生成的方法”的部分中描述的技术来生成一个或多个私钥。可以使用共同秘密生成私钥中的一个或多个。该共同秘密可以是根据主加密密钥生成的子密钥。本发明可以包括一种用于确定对第一实体和第二实体共同的秘密的技术。第一实体或第二实体可以是资产,而另一实体可以是与资产相关联的控制器或其他实体。该方法可以包括以下步骤:·基于至少第一实体主私钥和生成器值来确定第一实体第二私钥;·基于至少第二实体主私钥和生成器值来确定第二实体第二私钥;·基于第一实体第二私钥和第二实体第二公钥在第一实体处确定共同秘密(cs),并且基于第二实体第二私钥和第一实体第二公钥在第二实体处确定共同秘密(cs);·其中,第一实体第二公钥和第二实体第二公钥分别基于至少第一实体主密钥/第二实体主密钥和生成器值。本发明可以还包括一种注册表。注册表可以存储一个或多个公共加密密钥。每个公钥可以对应于资产的私钥中的一个私钥。公钥可以与可以在未花费的区块链交易(utxo)内识别的赎回脚本散列相关联。本发明可以包括一种智能合约,其包括与一个或多个区块链交易的自动化生成有关的至少一个规则,以使得能够关于资产进行转移。智能合约可以是机器可读的和/或可执行的。本发明可以包括一种计算代理,其被设置成评估和/或执行智能合约的至少一个规则。计算代理可以实质上如下文所描述的那样。转移可以是资金或者某种货币(例如,加密货币的一部分)的转移。其可以是待关于资产进行的支付。该转移可以和与资产相关联的收入或成本有关。可以在智能合约中所指定的各方之间进行转移。货币可以是比特币、或者任何数字(加密)货币,或者通证化值。智能合约中所提供的至少一个规则可以定义与资产相关联的支付调度。计算代理可以被设置成与其他计算代理进行通信。所述其他计算代理中的每个计算代理可以被设置成执行与资产相关联的任务。计算代理可以被设置成对所述其他计算代理中的每个计算代理的活动进行协调和/或授权。因此,可以存在“主”计算代理和一个或多个副(其他)计算代理。主代理可以被设置成对一个或多个副代理的活动进行控制、指导或者监视。本发明可以包括被设置成生成和与资产相关联的收入有关的区块链交易的至少一个其他计算代理(如下文所述的“收入代理”)。本发明可以包括被设置成生成和与资产相关联的成本有关的区块链交易的至少一个其他计算代理(如下文所述的“成本代理”)。本发明可以包括被设置成处理与资产相关联的收入针对支付的净额结清的至少一个其他计算代理(如下文所述的“净额代理”)。本发明可以包括被设置成生成警报和/或将警报传输至资产的所有者的至少一个其他计算代理,该警报提供关于与资产有关的事件的通知(如下文所述的“通知代理”)。计算代理可以被设置成在检测到智能合约中所指定的事件或触发时生成区块链交易。智能合约可以存储在分布式散列表中。合约的散列可以提供于与区块链交易相关联的元数据内。本发明还可以包括一种控制经由区块链关于资产进行的转移的计算机实现的方法,该方法包括以下步骤:定义包括至少一个私有加密密钥的资产,每个私钥与该资产的所有者相关联;生成包括至少一个公共加密密钥的注册表,其中,每个公钥:对应于资产的一个或多个私钥中的私钥,并且与可以在未花费的区块链交易内识别的赎回脚本散列相关联;生成智能合约,其包括与一个或多个区块链交易的自动化生成有关的、使得能够关于资产进行转移的至少一个规则;以及使用计算代理以评估和/或执行智能合约中的至少一个规则。转移可以是关于资产进行的货币转移,并且,其中,该转移涉及与资产相关联的收入和成本。货币可以是比特币、或者任何数字货币、或者通证化值。智能合约中所提供的至少一个规则可以定义与资产相关联的支付调度。该方法还可以包括以下步骤:设置计算代理以与其他计算代理进行通信,以及设置所述其他计算代理中的每个计算代理以执行与资产相关联的任务。计算代理可以被设置成对所述其他计算代理中的每个计算代理的活动进行协调和/或授权。该方法还可以包括提供以下项的步骤:i)被设置成生成和与资产相关联的收入有关的区块链交易的至少一个其他计算代理;ii)被设置成生成和与资产相关联的成本有关的区块链交易的至少一个其他计算代理;iii)被设置成处理与资产相关联的收入针对支出的净额结算的至少一个其他计算代理;iv)被设置成生成警报和/或将警报传输至资产的所有者的至少一个其他计算代理,该警报提供关于与资产有关的事件的通知。计算代理可以被设置成在检测到智能合约中所指定的事件或触发时生成区块链交易。智能合约可以存储在分布式散列表中,并且合约的散列提供于与区块链交易相关联的元数据内。本发明的一个或多个实施例可以包括实质上如下面在标题为“子密钥生成方法”的部分中描述的技术。本发明可以包括用于确定对第一实体和第二实体共同的秘密的技术。下文中,为了便于参考,可以使用术语“节点”代替“实体”。该方法可以包括以下步骤:·基于至少第一节点主私钥和生成器值来确定第一节点第二私钥;·基于至少第二节点主私钥和生成器值来确定第二节点第二私钥;·基于第一节点第二私钥和第二节点第二公钥在第一节点处确定共同秘密(cs),并且基于第二节点第二私钥和第一节点第二公钥在第二节点处确定共同秘密(cs);·其中,第一节点第二公钥和第二节点第二公钥分别基于至少第一节点主密钥/第二节点主密钥和生成器值。附加地或者可替代地,本发明的一个或多个实施例可以包括如下所述的计算机实现的方法:-在第一节点(c)处确定与第一节点(c)和第二节点(s)共同的共同秘密(cs),其中,第一节点(c)与具有第一节点主私钥(v1c)和第一节点主公钥(p1c)的第一非对称加密对相关联,并且第二节点(s)与具有第二节点主私钥(v1s)和第二节点主公钥(p1s)的第二非对称加密对相关联,其中,该方法包括:-基于至少第一节点主私钥(v1c)和确定性密钥(dk)来确定第一节点第二私钥(v2c);-基于至少第二节点主公钥(p1s)和确定性密钥(dk)来确定第二节点第二公钥(p2s);以及-基于第一节点第二私钥(v2c)和第二节点第二公钥(p2s)来确定共同秘密(cs),其中,第二节点(s)具有基于第一节点第二公钥(p2c)和第二节点第二私钥(v2s)的相同共同秘密(s),其中:-第一节点第二公钥(p2c)至少基于第一节点主公钥(p1c)和确定性密钥(dk);以及-第二节点第二私钥(v2s)至少基于第二节点主私钥(v1s)和确定性密钥(dk)。确定性密钥(dk)可以基于消息(m)。该方法还可以包括以下步骤:-基于消息(m)和第一节点第二私钥(v2c)来生成第一签署消息(sm1);以及-通过通信网络将第一签署消息(sm1)发送至第二节点(s),其中,第一签署消息(sm1)可以用第一节点第二公钥(p2c)得以验证,以认证第一节点(c)。优选地,该方法可以包括以下步骤:-通过通信网络从第二节点(s)接收第二签署消息(sm2);-用第二节点第二公钥(p2s)验证第二签署消息(sm2);以及-基于验证第二签署消息(sm2)的结果来认证第二节点(s),其中,基于消息(m)或第二消息(m2)以及第二节点第二私钥(v2s)来生成第二签署消息(sm2)。优选地,该方法可以包括以下步骤:-生成消息(m);以及-通过通信网络将消息(m)发送至第二节点(s)。优选地,该方法可以包括以下步骤:-通过通信网络从第二节点(s)接收消息(m)。优选地,该方法可以包括以下步骤:-通过通信网络从另一节点接收消息(m)。优选地,该方法可以包括以下步骤:-从数据存储器和/或与第一节点(c)相关联的输入接口接收消息(m)。优选地,第一节点主公钥(p1c)和第二节点主公钥(p1s)可以基于相应的第一节点主私钥(v1c)和第二节点主私钥(v1s)和生成器(g)的椭圆曲线点乘法。优选地,该方法可以包括以下步骤:-通过通信网络接收第二节点主公钥(p1s);以及-在与第一节点(c)相关联的数据存储器中存储第二节点主公钥(p1s)。优选地,该方法可以包括以下步骤:-在第一节点(c)处生成第一节点主私钥(v1c)和第一节点主公钥(p1c);-通过通信网络将第一节点主公钥(p1c)发送至第二节点(s)和/或其他节点;以及-在与第一节点(c)相关联的第一数据存储器中存储第一节点主私钥(v1c)。优选地,该方法可以包括以下步骤:-通过通信网络向第二节点发送指示关于确定共同秘密(cs)的方法通过公共生成器(g)使用公共椭圆曲线加密(ecc)系统的通知,以及其中,生成第一节点主私钥(v1c)和第一节点主公钥(p1c)的步骤包括:-基于公共ecc系统中所指定的可允许的范围中的随机整数来生成第一节点主私钥(v1c);以及-根据以下公式,基于第一节点主私钥(v1c)和公共生成器(g)的椭圆曲线点乘法来确定第一节点主公钥(p1c):p1c=v1c×g。优选地,该方法可以包括以下步骤:-基于确定消息(m)的散列来对确定性密钥(dk)进行确定,以及其中,确定第一节点第二私钥(v2c)的步骤基于根据以下公式的第一节点主私钥(v1c)和确定性密钥(dk)的标量加法:v2c=v1c+dk,以及其中,确定第二节点第二公钥(p2s)的步骤基于根据以下公式的第二节点主公钥(p1s)与确定性密钥(dk)和公共生成器(g)的椭圆曲线点乘法的椭圆曲线点加法:p1s=p1s+dk×g。优选地,确定性密钥(dk)可以基于确定先前的确定性密钥的散列。第一非对称加密对和第二非对称加密对可以基于相应的先前的第一非对称加密对和先前的第二非对称加密对的函数。以上关于一个方面或实施例描述的任何特征也可以结合任何其他方面或关系得以使用。例如,关于该方法所描述的任何特征也可以应用于系统,反之亦然。本发明的这些方面和其他方面根据本文所描述的实施例将变得明显并且参考本文所描述的实施例得以阐述。附图说明现在将仅通过示例并参考附图来描述本发明的实施例,在附图中:图1示出根据本发明的实施例实现的系统的概述。图2示出可以结合本发明而利用的一些说明性使用情况。图3示出图5至图11中的关于本文所使用的赛马示例的交易中所使用的元数据的格式。图4示出赛马资产的定义。图5示出这样的交易:其开始于下面所使用的“赛马”场景的序列,并且其中,马厩使用下面描述的用于生成子密钥的方法为赛马生成私钥,然后为赛马帐户提供种子基金用于股份发行。图6示出区块链交易,其中,继图5之后,赛马本身然后发行股份。应该注意的是,从技术上来说,马厩拥有赛马的私钥,但逻辑上这是正在发生的事情。图7示出用于向投资者索取一组马厩费用的交易。图8示出赛马将马厩费用传递回马厩的交易。图9示出当赛马赢得第一场比赛而马厩赚取20,400英镑时所生成的交易。使用标准btc经纪人交易(此处未示出),交易所已在关于20,400英磅的交换中向马厩支付等量的btc以(transaction-id=exchange-s3-t1)。使用来自exchange-s3-t1的输出作为输入,马厩生成交易以向赛马密钥支付奖金作为btc。图10示出赛马向投资者支付出其奖金的交易。图11示出爱丽丝向伊芙销售一个股份的交易。图12至图18示出如下面所讨论的根据父密钥推导子密钥的示意性技术的各个方面,该技术适合于与本发明的的各方面有关的用途。具体实施方式本文所使用的关键术语本文使用以下术语来限定关键概念和组件。从一个角度来看,本文所描述的发明可以被视为提供用于控制区块链上的交换的通用技术机制。这些交换可以是与支付款有关的金融交换易。本发明针对涉及使得能够进行这种交换的技术机构制或车辆手段。根据一个角度,本发明提供一种与当前资产所有权成比例计算、注册和/或分摊成本和/或生成收入的技术布置。因此,本发明所提供的一个益处在于其允许代表关于在区块链上注册和维护的资产的成本和收入的数据的分发或转移。进而,这增加这些资产满足各种实体(诸如资产自身和投资方)的现实世界需求的能力。最近对区块链应用的研究包括探索用于创建并且使用称为“智能合约”的东西的机制、以及如何针对区块链对它们进行监视和管理。一种可能性是使用智能合约以表示所有权可以在多个其他实体之间分拆的资产。然后可以使用区块链作为转移的手段在各实体之间安全地转移该所有权。在某些情况下,资产将权利赋予收入。附加地或可替代地,资产可以将持有者与特定成本义务绑定。本发明提出一种通用机制,以允许诸如针对资产所累计的成本或者通过该资产生成的收入之类的价值经由区块链得以交换。本发明的关键要素:本发明的一些要素如下:·用于确定可支付给基于区块链的资产的所有者的收入的事件(触发)的技术方案和技术,·用于确定生成可由基于区块链的资产的所有者支付的成本的事件(触发)的技术方案和技术,·用于基于一组预定义规则来计算收入/成本并将其分配给基于区块链的资产的所有者的技术方案和技术,·用于生成和签署比特币交易以执行收入/成本支付的技术方案和技术。该处理由代理层级进行控制,如图1所示。这些代理可以是与区块链并行执行的基于计算机的资源。它们可以合适地被编程以响应于测试和条件的结果来监视区块链的状态,和/或可以从区块外的源接收输入。关于可以如何实现这种代理的示例,参见下面题为“用于本发明的说明性计算代理”的部分。在本文所描述的示例中,进行以下假设。但是,应该理解的是,该示例并不限制对基本方法的可能变化:·每合约(即,每资产)存在一个主代理。可以存在几个执行分立式功能的副代理。·主代理管理和“授权”所有副代理。·本发明的副代理包括下述类型的代理中的一个或多个代理的组合:○负责处理通过资产生成的收入的一个或多个收入代理;○负责处理通过资产生成的成本的一个或多个成本代理;○可选地,负责在适用的情况下收入针对支付的净额结算的一个或多个净额代理;○负责向股东提醒各种事件(诸如进行的收入支付、到期的成本支付;影响资产或者与之有关的事件;或者任何其他通知)的一个或多个通知代理;○执行必要的或者可选的分立式功能的任何其他类型的代理。代理的操作是基于规则的,并且可以遵循预定义的任何规则集。根据要执行的任务的要求来确定规则。根据本发明,主代理管理所有其他代理。层级的示例以及可能的控制和处理流程可以如下:·主代理授权收入/成本代理执行其任务,例如:○主代理监视所有触发,或者○副代理监视触发并从主代理寻求授权以进行处理,或者○副代理得以预先授权以监视和执行其任务,或者○上述项的任何组合。·来自收入/成本代理的输出和控制传递给主代理。·主代理接合净额代理(将来自收入/成本代理的数据传递给净额代理)。·净额代理将输出传递给主代理。·主代理授权交易广播(要么其自身进行广播,要么其授权副代理以进行广播,或者上述两项的组合等)。现在接下来概述本发明实施例的关键要求。确定当前所有权为了分摊针对资产的成本/收入,必须能够确定该资产的当前所有权。根据本发明的实施例,属于当前所有者的细节保存在(公共的或私有的、分布式的或集中式的)注册表中。注册表可以包含相应的所有者的公钥,所述公钥与可以在未花费的区块链交易(utxo)内识别的赎回脚本散列相关联。utxo表示由每个公钥所拥有的股份的数量。此外,可以存储诸如电子邮件地址之类的其他信息。计算并支付成本:为了对资产所有权累计成本:-资产必须具有确定其当前所有权的能力;-资产必须能够确定关于给定时间段的总成本/收入;-资产必须能够在当前所有权之间分割成本/收入;以及-资产必须有能力触发来自/去往当前资产持有者的这些成本/收入的支付。将通过生成区块链交易以在各方之间交换某价值来执行支付。倘若所需要的输入数据和/或参数是可用的,那么取决于资产类型和收入类型,支付规则可以是简单的或者复杂的。例如,收入规则可以是根据每个所有者当前的所有权比例向每个所有者支付总收入的股份。在另一示例中,每个所有者可以在累计收入的时间段上基于每个所有者的所有权的比例而应得到收入的股份。在另一示例中,可以关于持有股份所有权达给定时间长度而支付“红利”。这些示例仅是示意性的,而并非限制可以设置的不同支付规则的数量或类型。可以通过若干方式来实现合约实施(例如,未支付的成本的收回),这些方式中的一些方式可以自动地(再次通过使用计算代理)或者通过非自动化手段受控制。例如:-法律赔偿-重新分配资产所有权(虽然仅如果要求发行方会签资产重新分配则是可能的);以及-阻止支付收入,直到已经收回成本。其他功能可以通过设计代理和相应地设置规则来构建其他(可选的)功能。示意性但非详尽的示例可以包括:-该资产可以有能力从收入中净扣成本;-该资产可以有能力在尚未支付先前的成本的情况下持有收入;-该收入/成本/净额可以在时间段(例如,每六个月)结束时或者随着该收入/成本/净额生成(例如,立即)被汇总(rollup)。技术模型本文提出的技术方案提供一种用于经由使用计算代理和智能合约来控制资产的基于区块链的机制。本发明使得能够自动生成一组区块链交易。这些交易可以用于对与支付与智能合约的履行相关的收回成本或者支付收入的支付。图1示出根据本发明的实施例的系统的概述,该系统包括可以被设置成实现该系统的系统架构的组件。成本代理一旦满足触发条件,成本代理就将:·计算整个资产的到期的总支付;·基于合约内所定义的支付规则(例如,按比例(pro-rata))来计算关于资产的当前所有权拆分中的单独支付(individualpayment);以及·为每个单独资产持有者创建支付交易。如果需要,则可以存在针对给定合约限定的多于一个的成本代理,例如,一个用于定期成本,一个用于专设(ad-hoc)成本。收入代理一旦触发条件触及,收入代理就将:·计算整个资产的到期的总支付;·基于合约内所定义的支付规则(例如,按比例(pro-rata))来计算关于资产的当前所有权分拆中的单独支付(individualpayment);以及·为每个单独资产持有者创建支付交易。如果需要,则可以存在针对给定合约限定的多于一个的收入代理(例如,一个用于定期收入,一个用于专设收入)。净额代理一旦满足触发条件,净额代理就将:·将支付交易合并到来自支付地址匹配的多个单独净额交易的单个净额交易中。在本文提供的示例中,仅存在单个净额合约。然而,重要的是,注意,本发明不限于此。在一个或多个实施例中,可以存在多个净额代理。在这些情况下,每个实例都具备明确定义的独特规则集。确定当前所有权分拆本文所描述的实施例假设可以通过注册表(或者数据库)和utxo列表的组合来确定资产的当前所有权。术语“utxo列表”在本领域中是已知的,并且指代尚未花费的区块链上的交易输出的列表。图2示出与本文所描述的技术模型相关的一些关键使用情况。现在如下更详细地解释它们。确定所有权[100]应该注意的是,以下示例假设动作由资产本身直接执行。然而,在其他实施例中,可以使用相同的过程用某其他资产控制器替换该角色。在该使用情况下,资产需要确定其当前所有权,以促进支付。表1付款计算[200]同样的再次,此示例性用例使用情况中下的主要参与者角色是资产。然而,在其他实施例中,资产可以由另一主要参与者角色代替。在目前的支付款计算的用例使用情况中下,资产希望计算应当支付或者收取自由其当前所有者支付或者向当前所有者收取的收入和/或成本的金额量(如上文的用例使用情况100中所确定的那样)。表2支付成本[300]再次,该示例使用情况中的主角色是资产。资产持有者希望支付因资产所有权而导致的成本。表3考虑事项:注意,对于资产持有者不存在特别动机以支付其成本的比例。在以上所定义的过程中,存在通过两条路径可能的赔偿:-如果未支付成本,则可以扣留后续收入。这将需要在合约内进行定义(并假设存在针对资产正生成的收入),但易于在步骤100.10内检测。-通过相关法律渠道的法律赔偿。可以创建合约,从而发行合约上存在公证人,从而如果资产持有者不支付,则他们的资产所有权将使用标准m/n多重签名交易被撤销回到资产自身。在此情况下:-在执行步骤300.20之后,创建具有基于允许支付成本的时间而设置的锁定时间的第二交易。这将取得最新交易发行的交易输入,但将资产分配回资产。该交易由相关公证人签署。-如果资产持有者支付其成本,则该交易是无效的(因为已经使用交易输入),但如果他们没有支付其成本,则资产所有权被撤销。由于支付交易有效地针对资产重新发行股份,因此该交易无法转移到下一时段,而是每当创建成本交易时必须创建两个交易。变体1:以上示例假设通过比特币来支付成本。然而,由于可以使用任何通证化值,因此对此无需情况如此。在此情况下,需要以下改变:-步骤300.50添加两个交易输入而非仅一个。第一个是按照btc的挖矿费用,第二个是通证化的成本交易(例如,通过法定货币)。变体2:以上示例假设挖矿费用(连同其他成本一起)由资产持有者支付。对此无需情况如此。倘若挖矿费用由资产自身支付,那么需要以下改变:-步骤300.20创建两个交易输入;一个是资产发行,加上一个用于挖矿费用的btc。变体3:并非每资产持有者创建成本交易,而是创建单个成本交易,并且每个单独资产持有者添加他们的输入(而不是每资产持有者的分离交易)。交易输出是到期成本的总价值,其中,通过替代路径通知每资产持有者的量的细节。虽然该模式适用于简单拆分,而且相对少数量的资产持有者,但在许多情况下这是不切实际的,因为交易仅当全部所有者同意支付时是有效的。从资产的角度来看,在预期多个资产持有者可能延迟支付或者不进行支付的情况下,那么变体3是优选的,在于:其使得最短时间内所接收到的收入的量最大化。可以基于可以嵌入(硬编码)于主代理或者可以位于分离的查找表上的预定义的规则集经由主代理来控制用于支付的实际变体。例如,规则可以基于简单的布尔标志来管控要使用哪个变体,或者可以涉及所有者的阈值数量或任何其他合适的可测试条件。支付收入[400]再次,在该示例中,主要角色是资产。资产希望与其所有者的所有权成比例向其所有者支付收入。表4变体:这是通过通证化形式而不是原生btc支付收入的考虑。在此情况下,交易收入交易分配给赎回脚本地址,赎回脚本地址包括:-资产持有者的公钥;以及-与收入分发相关联的元数据。示例场景-赛马出于示出本发明的可行的实现方式的目的,现在提供示例场景。在附图内提供场景的单独交易序列。在该示意性场景中,马厩选择在赛马中发行股份,具有相关联的奖金的权利和支付保养费(例如,马厩费用)的义务。在示例中,在爱丽丝购买30%并且鲍勃购买20%的同时,马厩保留50%的所有权。作为合约义务,所有者必须向发行方(马厩)注册其细节。其可以只是关于比特币支付的公钥(即,btc地址)。然而,其可以还包括用于通知的电子邮件地址、全名、出生日期、住宅/公司地址、税务文件号等。取决于发行方自身的处理要求和/或发行方可能或可能不感到受限的任何规定,这些项中的任何一个可以是合约要求或者选项。取决于发行方的期望,合约通证(即,包含元数据的比特币交易)可以关于所有权的完全转让要求发行方的签名(即,在“信任网”情况下)或(如该示例中)可以受允许在没有发行方签名的情况下进行转让。在后一情况下,根据合约的条款和条件,新的所有者必须联系发行方以注册其所有权(见条款1.1)。这些所注册的细节存储在合约自身内,并且依赖于不包括可修改的字段(例如,所有权信息)的合约的散列。有效地,在合约自身内定义针对合约的散列,这意味着散列中无需包括合约的所有属性。这允许在合约文档内维护所有权列表,但是散列内不包括所有者。因此,即使文档的所有者改变,文档的签名仍然保持不变。合约摘要以下提出包含关于实现这些条款的两个代理的细节的合约的人类可读版本的所选精华。发行马厩首先使用自身的私钥注册赛马。这可以是全新的私钥,或者其可以使用实质上如下面在标题为“子密钥生成方法”的部分中所描述的机制以根据马厩自身的密钥直接推导它。马厩然后需要为赛马的账户提供种子基金,用于其在stable-s3-t1中进行的发行交易(见图5)。赛马然后自身向racehorse-s3-tl中的各种资产持有者发行股份(见图6)。发行交易允许所有者直接自由转移资产,因为合约声明如果成本未偿还则奖金不到期(意味着所有权绝不被直接撤销)。该交易的输出4创建涵盖赛马自身、允许实施合约的第28条的智能合约。成本代理(马厩费用)在每年两次的基础上,负责记账马厩费用的成本代理受日期触发。成本计算为1000聪/股份/天(为了简单起见,示例假设六个月=180天)。为了改善现金流,代理为每个公钥所有者创建分离的交易,其中,所有者的细节取自与标的合约(或发行方自身的私人内部数据库)相关联的资产注册表,以及当前的股份分配取自区块链(基于关于utxo的标的btc和合约上所指定的钉住率)。对于有关于钉住率的细节,见以下关于“编码方案”的部分。代理的高级过程是:-根据所有权注册表和相关utxo确定所有权○在该示例中,这提供马厩-5(pubk-stable)、爱丽丝-3(pubk-alice)、鲍勃-2(pubk-bob)的列表-计算关于该时段到期的总成本;○在该示例中,这提供总共180,000聪-根据合约确定分摊规则;○在该示例中中,仅记账爱丽丝(54,000聪)和鲍勃(36,000聪)和马厩(90,000聪)-创建支付交易,而并不使用sighash_anyonecanpay标记所签署的交易输入(以允许随后添加交易输入)○在该示例中,这是racehorse-s3-t2和racehorse-s3-t3-等待支付公布到区块链上。合约自身将关于当未接收到支付时如何表现而指导代理;例如,如果在14天内未接收到支付,则可以发送提醒,并在60天后将账户标记为拖欠。-在随后接收到支付的情况下,更新监视代理以终止任何进一步的收集活动。图7示出与示例的该方面相关的交易,其中,第一组马厩费用需要从投资者索取(6个月值180000satoshi/股)。由于金钱偿还到马厩,因此不生成回到隐藏的所有者的成本交易(尽管如果马厩正试图“隐藏”其股份,那么将是这样的:区块链上的公开记录不在各持有者之间进行区分)。因为无法向爱丽丝或鲍勃提供改变,所以存在假设的交易,以创建合适大小的交易输入(假设为alice-s3-t1和bob-s3-t1)投资者支付成本在接收到不完整的交易时,投资者(爱丽丝和鲍勃)将分配正确的交易输入以履行费用并使用其比特币钱包来完成交易。这将交易输入添加到存根的交易racehorse-s3-t2(对于爱丽丝)和racehorse-s3-t3(对于鲍勃)-见图7。收入代理(奖金)一旦马厩接收到来自赛道的支付,就可以支付出赛马所累计的奖金。取决于情况,奖金可以通过btc得以接收(例如,如果赛马行业已经启动比特币交易,或者如果特定赛道已经启动通过比特币作奖金等),或者可以通过法定货币得以接收。在后一情况下,马厩可以在执行收入分发步骤之前执行将奖金转换为btc的步骤。该代理的高级过程是:-使用合约来确定如何为该投资累计收入○在该示例中,关于比赛结果的细节检查外部新闻源-与(在合约内所定义的)相关方关于基金需求进行通信○在该示例中,包含基于他们应该代表赛马从赛道接收的奖金而进行支付的发票的电子邮件将发送到马厩-根据所有权库确定所有权○在该示例中,这提供了马厩-5(pubk-stable)、爱丽丝-3(pubk-alice)、鲍勃-2(pubk-bob)的列表-等待要支付到相关账户的收入○在该示例中,共计80btc的奖金20,400英镑支付给赛马的公钥散列地址-计算如何对该时段到期的奖金进行拆分○在该示例中,这提供了总共8btc/股份-根据合约确定分摊规则;○在该示例中,马厩40btc、爱丽丝24btc和鲍勃16btc-创建支付交易以支付回报图8示出赛马将马厩费用传递回马厩的交易。注意,如果马厩没有对其所有权保密,则可以通过简单地使用马厩的公钥而不是赛马在s3-t2到s3-t5中的公钥来使得马厩费用直接地支付给马厩。现在在下面更详细地讨论可以与本发明结合使用的其他技术和机制。编码方案可以通过各种方式格式化区块链交易中的元数据。然而,在此描述一种可能的编码方案。如果合约所定义的权利赋予合约的持有者或所有者,则合约是可转移的。不可转移的合约的示例是角色被命名的合约—也就是说,权利赋予特定的指定实体而不是合约的持有者。本编码方案中仅讨论可转移的合约。通证表示详述或定义合约所赋予的权利的特定合约。通证可以是比特币交易的形式的合约表示。该编码方法使用包括三个参数或数据项的元数据。该数据可以指示:i)在合约下可用的股份的量(这在本文中可以称为“股份数”);ii)从发送方转移到至少一个接收方的转移单元的数目(这在本文中可以称为“股份值”);以及iii)用于计算转移单元的数目的值的因数(在本文中这可以被称为“钉住率”)。该编码方案的优点是,它可以用于仅使用上述三个参数来将合约封装或表示为区块链上的通证。实际上,可以使用这三个数据项中的最小项来指定合约。由于该编码方案可以用于任何类型的可转移合约,因此可以设计和应用普通算法。这些元数据项的进一步细节被提供如下。可分割的通证是关于交易输出的值可以再细分为跨多个通证而分配(即,跨多个交易而分配)的较小量的通证。原型是通证化的法定货币。可分割的合约定义为指定非零钉住率的合约。对于可分割的合约,交易输出中所转移的通证化的值经由钉住率与标的比特币(btc)值绑定。也就是说,合约指定持有者关于钉住率的权利。对于不可分割的通证,不存在钉住率,并且合约指定持有者关于固定价值的权利(例如,类似于不记名债券:“该合约可兑换确切1000美元”、或代金券“该合约可以兑换一次理发”)。对于不可分割的合约,标的交易btc值与合约价值无关。短语“标的btc值”是指附加到交易输出的比特币量(btc)。在比特币协议中,每个交易输出必须具有认为有效的非零btc量。实际上,btc量必须大于所设定的最小值(称为“微额(dust)”),其在撰写本文时目前设定为546聪。1比特币定义为等于1亿聪。由于比特币交易在此仅用作促进所有权交换的手段,因此实际的标的btc量是任意的:真正的价值在于合约规范。从理论上讲,每一个通证可以由微额携带。根据目前的编码方案,特别是对于可分割的通证,标的btc值确实具有意义:其经由钉住率来承载与合约价值的关系。钉住率自身是任意的,并且被选择以便将标的btc量保持较小。使用钉住率而不是简单地以微额标的每个通证交易的原因是因为本发明的协议促进可分割性:当通证拆分成较小量的若干交易输出时,不必调整原始合约。相反,仅基于钉住率和标的btc值的再细分的量来计算每个再细分的通证的合约价值。有限通证是由称为股份数的数目所定义的固定的非零数量的股份来固定(或“限制”)总发行值的通证。因此,在有限合约下不再发行任何股份。例如,关于赛马的部分所有权的合约受限为赛马的100%(例如,按每1%的100股份,按每10%的10股份,等等)。无限合约暗指发行方能够例如通过将所需量的法定货币加入其准备金账户来包销进一步的股份发行。必须在所有合约上明确声明股份数。有限合约必须具有股份数>0;无限合约通过设置股份数=0得以表示。原型示例是货币准备金(类似于黄金准备金),从而准备金银行账户中所持有的总价值与现有期票(即未赎回的通证)中的总价值相匹配。该概念超越货币准备金延伸为包括现货库存。例如,授权的印刷t恤通证的发行方可以开始于现货中的10,000件t恤的库存,并可以发行可分割的通证以表示那10,000件t恤(其中,例如,每股=1件t恤)。原始通证可以再细分,并且每个再细分的通证根据钉住率所定义的交易输出的标的btc值而对于多件t恤是可兑换的。然而,如果需求增加,则发行方可以决定进一步发行股份(即,增加流通中的股份的数量达(比如)另外10,000件)。在此情况下,发行方有责任在其准备金账户(即,库存仓库)中存放另外10,000件t恤,以包销进一步的发行。因此,任何一次的现货中的t恤的总数量(其中,现货充当“准备金账户”)=未赎回股份的总数量。钉住率仅应用于可分割的合约,其中,(称为股份值的数目所表示的)股份的价值钉住于标的btc量。例如,合约可以指定发行方承诺对于每个标的1btc以10,000美元的费率兑换通证。这将意味着(例如)具有15,400聪的通证化的标的输出值的交易将可兑换为1.54美元。关于钉住率的0的值指示合约是不可分割的(即,仅可以整体转移,类似不记名债券)。当钉住率设置为0(表示不可分割的通证)时,标的btc值与合约值无关,并且可以按任何量设置。通常在此情况下,希望保持标的btc量尽可能小(即设置为微额)以使操作成本最小化。股份数是(有限)合约下可用的股份的总(固定)数量。对于有限合约,股份数必须是大于零的整数。对于无限合约,股份数不是固定的,因为更多的股份可以随时发行(倘若它们被包销),通过将值设置为0来表示该情况。股份定义为转移的单位,并且股份值是该单位的值。例如,对于法定货币,转移的单位可以设置为1美分。或者,例如,其可以设置为50美分,在此情况下,仅可以按50美分的“手数(lot)”执行转移。股份值也可以表示为百分比:例如,如果饲养员希望以10份等额股份出售赛马,则股份值=10%。股份值必须>0并且必须在合约上进行定义。总发行表示已发行的股份的总价值。该价值仅涉及有限合约,因为对于无限合约,发行不是固定的,而是可以发行更多股份。如果股份表示为百分比,则按定义,总发行=100%。对于有限合约,股份数、股份值以及总发行通过以下方式相关:股份数×股份值=总发行总发行的0的值暗指其为无限合约。无限合约的示例是法定货币(因此,总发行量设置为0);有限合约的示例是:(i)限量版纪念币(所铸造的1000个币,其中,1股=1个币):总发行=1000×1=1000个币;(ii)所售票的场所处的座位,其中,总发行量=可用座位的总数量。流通定义为未花费的通证的总价值(即由utxo(未花费的交易输出)中的交易确定)。所有未花费的交易的完整集保存在可用于所有比特币节点的列表中。例如,如果发行方最初发行10,000美元作为法定货币类型通证,并且随着时间,值5500美元的通证被兑换,则发行=4500美元(未赎回通证的值)。该值应该与相关联的准备金帐户中的余额一致。子密钥生成方法以上描述指代对根据原始(主)密钥生成子密钥有利的情况。现在提供一种用于实现此目的的方法,以用于说明可以执行该操作的一种方式。参考图12至图18提供以下描述。图12示出系统1,其包括通过通信网络5与第二节点7通信的第一节点3。第一节点3具有关联的第一处理设备23,而第二节点5具有关联的第二处理设备27。第一节点3和第二节点7可以包括电子设备,诸如计算机、电话、平板计算机、移动通信设备、计算机服务器等。在一个示例中,第一节点3可以是客户端(用户)设备,并且第二节点7可以是服务器。服务器可以是数字钱包供应商的服务器。第一节点3与具有第一节点主私钥(v1c)和第一节点主公钥(p1c)的第一非对称加密对相关联。第二节点(7)与具有第二节点主私钥(v1s)和第二节点主公钥(p1s)的第二非对称加密对相关联。换句话说,第一节点和第二节点各自拥有相应的公钥-私钥对。可以在注册过程(例如钱包的注册)期间生成用于相应第一节点3和第二节点7的第一非对称加密对和第二非对称加密对。用于每个节点的公钥可以例如通过通信网络5公开地共享。为了确定第一节点3和第二节点7二者处的共同秘密(cs),节点3、节点7执行各个方法300、方法400的步骤,而不通过通信网络5传送私钥。由第一节点3执行的方法300包括:基于至少第一节点主私钥(v1c)和生成器值(gv)来确定(330)第一节点第二私钥(v2c)。生成器值可以基于在第一节点和第二节点之间共享的消息(m),该操作可以包括:通过通信网络5共享消息,如下面进一步详细描述的那样。方法300还包括:基于至少第二节点主公钥(p1s)和生成器值(gv)来确定(370)第二节点第二公钥(p2s)。方法300包括:基于第一节点第二私钥(v2c)和第二节点第二公钥(p2s)来确定(380)共同秘密(cs)。重要的是,还可以通过方法400在第二节点7处确定相同的共同秘密(cs)。方法400包括:基于第一节点主公钥(p1c)和生成器值(gv)来确定(430)第一节点第二公钥(p2c)。方法400还包括:基于第二节点主私钥(v1s)和生成器值(gv)来确定(470)第二节点第二私钥(v2s)。方法400包括:基于第二节点第二私钥(v2s)和第一节点第二公钥(p2c)来确定(480)共同秘密(cs)。通信网络5可以包括局域网、广域网、蜂窝网络、无线电通信网络、互联网等。这些网络(其中,可以通过诸如电线、光纤或者无线的通信介质传输数据)可能容易诸如被窃听者11窃听。方法300、方法400可以允许第一节点3和第二节点7都独立地确定共同秘密,而不通过通信网络5发送共同秘密。因此,一个优点是:可以通过每个节点来安全且独立地确定共同秘密(cs),而不必通过潜在地不安全的通信网络5来发送私钥。进而,共同秘密可以用作秘密密钥(或者作为秘密密钥的基础)。方法300、方法400可以包括附加步骤。见图13。方法300可以包括:在第一节点3处基于消息(m)和第一节点第二私钥(v2c)来生成签署消息(sm1)。方法300还包括:通过通信网络将第一签署消息(sm1)发送(360)至第二节点7。进而,第二节点7可以执行步骤:接收(440)第一签署消息(sm1)。方法400还包括以下步骤:用第一节点第二公钥(p2c)验证(450)第一签署消息(sm2),并且基于验证第一签署消息(sm1)的结果来认证(460)第一节点3。有利地,这允许第二节点7认证(生成第一签署消息的)所声称的第一节点是第一节点3。这基于以下假设:仅第一节点3可以具有对第一节点主私钥(v1c)的访问,因此仅第一节点3可以确定用于生成第一签署消息(sm1)的第一节点第二私钥(v2c)。应当理解的是,类似地,第二签署消息(sm2)可以在第二节点7处得以生成并且发送至第一节点3,从而诸如在点到点场景中第一节点3可以认证第二节点7。可以通过各种方式实现在第一节点和第二节点之间共享消息(m)。在一个示例中,该消息可以在第一节点3处得以生成,其然后通过通信网络5发送至第二节点7。可替代地,该消息可以在第二节点7处得以生成,然后通过通信网络5发送至第二节点7。在一些示例中,消息(m)可以是公开的,因此可以通过不安全网络5传输。一个或多个消息(m)可以存储在数据存储器13、数据存储器17、数据存储器19中。技术人员将认识到,可以通过各种方式实现该消息的共享。有利地,可以保存允许重新创建共同秘密(cs)的记录,而不必私有地存储或安全地传输该记录自身。注册方法100、200将参考图14描述注册方法100、注册方法200的示例,其中,方法100由第一节点3执行,而方法200由第二节点7执行。这包括:为各个第一节点3和第二节点7建立第一非对称加密对和第二非对称加密对。非对称加密对包括相关联的私钥和公钥,诸如公钥加密中所使用的密钥。在该示例中,使用椭圆曲线加密(ecc)和椭圆曲线运算的性质来生成非对称加密对。在方法100、方法200中,这包括:第一节点和第二节点就公共ecc系统进行协定(110、210)并且使用基点(g)。(注意:基点可以称为公共生成器,但术语“基点”用于避免与生成器值gv混淆)。在一个示例中,公共ecc系统可以基于secp256k1,其为由比特币使用的ecc系统。基点(g)可以被选择、随机生成或者被分配。现在转向第一节点3,方法100包括:关于公共ecc系统和基点(g)进行设置(110)。这可以包括:从第二节点7或第三节点9接收公共ecc系统和基点。可替代地,用户接口15可以与第一节点3相关联,由此用户可以选择性地提供公共ecc系统和/或基点(g)。在又一可替代方案中,公共ecc系统和/或基点(g)中的一个或两个可以由第一节点3随机选择。第一节点3可以通过通信网络5向第二节点7发送指示使用公共ecc系统和基点(g)的通知。进而,第二节点7可以通过发送指示确认使用通用ecc系统和基点(g)的通知来进行安排(210)。方法100还包括:第一节点3生成(120)第一非对称加密对,其包括第一节点主私钥(v1c)和第一节点主公钥(p1c)。这包括:至少部分地基于在公共ecc系统中指定的可允许的范围中的随机整数来生成第一主私钥(v1c)。这还包括:根据公式基于第一节点主私钥(p1c)和基点(g)的椭圆曲线点乘法来确定第一节点主公钥(p1c):p1c=v1c×g(公式1)因此,第一非对称加密对包括:v1c:由第一节点保密的第一节点主私钥。p1c:使得公开地获知的第一节点主公钥。第一节点3可以将第一节点主私钥(v1c)和第一节点主公钥(p1c)存储在与第一节点3相关联的第一数据存储器13中。为了安全,第一节点主私钥(v1c)可以存储在第一数据存储器13的安全部分中,以确保该密钥保持私有。方法100还包括:通过通信网络5将第一节点主公钥(p1c)发送(130)至第二节点7,如图14所示。在接收(220)到第一节点主公钥(p1c)时,第二节点7可以将第一节点主公钥(p1c)存储(230)在与第二节点7相关联的第二数据存储器17中。类似于第一节点3,第二节点7的方法200包括:生成(240)第二非对称加密对,其包括第二节点主私钥(v1s)和第二节点主公钥(p1s)。第二节点主私钥(v1s)也是可允许的范围内的随机整数。进而,第二节点主公钥(p1s)由以下公式确定:p1s=v1s×g(公式2)因此,第二非对称加密对包括:v1s:由第二节点保密的第二节点主私钥。p1s:使得公开获知的第二节点主公钥。第二节点7可以将第二非对称加密对存储在第二数据存储器17中。方法200还包括:将第二节点主公钥(p1s)发送(250)至第一节点3。进而,第一节点3可以接收(140)并存储(150)第二节点主公钥(p1s)。应当理解的是,在一些可替代方案中,相应的公共主密钥可以得以接收并存储在与第三节点9(诸如,可信第三方)相关联的第三数据存储器19处。这可以包括充当公共目录的第三方,例如认证机构。因此,在一些示例中,第一节点主公钥(p1c)可以仅当确定需要共同秘密(cs)时由第二节点7请求和接收(反之亦然)。作为初始设置,注册步骤可以只需要发生一次。由第一节点3发起会话并确定共同秘密现在将参考图15描述确定共同秘密(cs)的示例。共同秘密(cs)可以用于第一节点3和第二节点7之间的特定会话、时间、交易或其他目的,并且使用相同的共同秘密(cs)可能是不期望的或不安全的。因此,可以在不同的会话、时间、交易等之间改变共同秘密(cs)。提供以下内容以用于说明上面已经描述的安全传输技术。生成消息(m)310在该示例中,由第一节点3执行的方法300包括:生成(310)消息(m)。消息(m)可以是随机的、伪随机的或用户定义的。在一个示例中,消息(m)基于unix时间和随机数(nonce)(和任意值)。例如,消息(m)可以提供为:消息(m)=unixtime+随机数(公式3)在一些示例中,消息(m)是任意的。然而,应当理解的是,消息(m)可以具有在某些应用中可能有用的选择性值(例如,unix时间等)。方法300包括:通过通信网络3将消息(m)发送(315)至第二节点7。由于消息(m)不包括关于私钥的信息,因此可以通过不安全的网络来发送消息(m)。确定生成器值(gv)320方法300还包括步骤:基于消息(m)来确定(320)生成器值(gv)。在该示例中,这包括:确定消息的加密散列。加密散列算法的示例包括用于创建256位生成器值(gv)的sha-256。也就是:gv=sha-256(m)(公式4)应当理解的是,可以使用其他散列算法。这可以包括安全散列算法(sha)系列中的其他散列算法。一些特定示例包括sha-3子集中的实例,包括sha3-224、sha3-256、sha3-384、sha3-512、shake128、shake256。其他散列算法可以包括race原始完整性校验消息摘要(ripemd)系列中的那些散列算法。特定示例可以包括ripemd-160。其他散列函数可以包括基于zémor-tillich散列函数和基于背包(knapsack-based)的散列函数系列。确定第一节点第二私钥330然后,方法300包括步骤330:基于第二节点主私钥(v1c)和生成器值(gv)来确定(330)第一节点第二私钥(v2c)。这可以基于根据以下公式的第一节点主私钥(v1c)和生成器值(gv)的标量加法:v2c=v1c+gv(公式5)因此,第一节点第二私钥(v2c)不是随机值,而是根据第一节点主私钥确定性地推导的。加密对中对应的公钥,即,第一节点第二公钥(p2c),具有以下关系:p2c=v2c×g(公式6)将公式5中的v2c代入公式6中,提供:p2c=(v1c+gv)×g(公式7)其中,“+”运算符指代椭圆曲线点加法。注意,椭圆曲线加密代数是分布式的,公式7可以表示为:p2c=v1c×g+gv×g(公式8)最后,等式1可以代入等式7中,以提供:p2c=p1c+gv×g(公式9.1)p2c=p1c+sha-256(m)×g(公式9.2)因此,倘若获知第一节点主公钥(p1c)和消息(m),那么可以推导对应的第一节点第二公钥(p2c)。第二节点7可以具有这样的知识以独立地确定第一节点第二公钥(p2c),如将在下文中关于方法400进一步详细讨论的那样。基于消息和第一节点第二私钥来生成第一签署消息(sm1)350方法300还包括:基于消息(m)和所确定的第一节点第二私钥(v2c)来生成(350)第一签署消息(sm1)。生成签署消息包括:应用数字签名算法以对消息(m)进行数字签署。在一个示例中,这包括:在椭圆曲线数字签名算法(ecdsa)中将第一节点第二私钥(v2c)应用于消息,以获得第一签署消息(sm1)。ecdsa的示例包括基于利用secp256k1、secp256r1、secp384r1、se3cp521r1的ecc系统的那些ecdsa。可以利用第二节点7处的对应的第一节点第二公钥(p2c)来验证第一签署消息(sm1)。第一签署消息(sm1)的该验证可以由第一节点7使用,以认证第一节点3,这将在下面的方法400中进行讨论。确定第二节点第二公钥370'然后,第一节点3可以确定(370)第二节点第二公钥(p2s)。如上所述,第二节点第二公钥(p2s)可以至少基于第二节点主公钥(p1s)和生成器值(gv)。在该示例中,由于公钥确定(370')为私钥与基点(g)的椭圆曲线点乘法,因此第二节点第二公钥(p2s)可以通过类似于公式6的方式表示为:p2s=v2s×g(公式10.1)p2s=p1s+gv×g(公式10.2)公式10.2的数学证明与上面描述的用于推导关于第一节点第二公钥(p2c)的公式9.1相同。应当理解的是,第一节点3可以独立于第二节点7确定(370)第二节点第二公钥。在第一节点3处确定共同秘密380然后,第一节点3可以基于所确定的第一节点第二私钥(v2c)和所确定的第二节点第二公钥(p2s)来确定(380)共同秘密(cs)。共同秘密(cs)可以由第一节点3通过以下公式来确定:s=v2c×p2s(公式11)在第二节点7处执行的方法400现在将对第二节点7处执行的对应方法400进行描述。应当理解的是,这些步骤中的一些步骤类似于上文所讨论的、由第一节点3执行的那些步骤。方法400包括:通过通信网络5从第一节点3接收(410)消息(m)。这可以包括在步骤315由第一节点3发送的消息(m)。然后,第二节点7基于消息(m)来确定(420)生成器值(gv)。由第二节点7确定(420)生成器值(gv)的步骤类似于上文所描述的由第一节点执行的步骤320。在该示例中,第二节点7独立于第一节点3执行该确定步骤420。下一步骤包括:基于第一节点主公钥(p1c)和生成器值(gv)来确定(430)第一节点第二公钥(p2c)。在该示例中,由于公钥确定(430')为私钥与基点(g)的椭圆曲线点乘积,因此第一节点第二公钥(p2c)可以通过类似于公式9的方式表示为:p2c=v2c×g(公式12.1)p2c=p1c+gv×g(公式12.2)公式12.1和公式12.2的数学证明与上文关于公式10.1和公式10.2所讨论的那些数学证明相同。第二节点7认证第一节点3方法400可以包括由第二节点7执行的用于认证所宣称的第一节点3是第一节点3的步骤。如上文所讨论的那样,这包括:从第一节点3接收(440)第一签署消息(sm1)。然后,第二节点7可以利用在步骤430确定的第一节点第二公钥(p2c)来验证(450)第一签署消息(sm1)上的签名。可以根据上文所讨论的椭圆曲线数字签名算法(ecdsa)来完成验证数字签名。重要的是,应当仅使用对应的第一节点第二公钥(p2c)来正确地验证用第一节点第二私钥(v2c)签署的第一签署消息(sm1),因为v2c和p2c形成加密对。由于这些密钥关于在注册第一节点3时所生成的第一节点主私钥(v1c)和第一节点主公钥(p1c)是确定性的,因此验证第一签署消息(sm1)可以用作认证发送第一签署消息(sm1)的所宣称的第一节点在注册期间是同一第一节点3的基础。因此,第二节点7还可以执行步骤:基于验证(450)第一签署消息的结果来认证(460)第一节点3——见图16。第二节点7确定共同秘密方法400还可以包括:第二节点7基于第二节点主私钥(v1s)和生成器值(gv)来确定(470)第二节点第二私钥(v2s)。类似于第一节点3所执行的步骤330,第二节点第二私钥(v2s)可以基于根据以下公式的第二节点主私钥(v1s)和生成器值(gv)的标量加法:v2s=v1s+gv(公式13.1)v2s=v1s+sha-256(m)(公式13.2)然后,第二节点7可以独立于第一节点3在以下公式的基础上基于第二节点第二私钥(v2s)和第一节点第二公钥(p2c)来确定(480)共同秘密(cs):s=v2s×p2c(公式14)由第一节点3和第二节点7确定的共同秘密(cs)的证明由第一节点3确定的共同秘密(cs)与在第二节点7处所确定的共同秘密(cs)相同。现在将对公式11和公式14提供相同的共同秘密(cs)的数学证明进行描述。转到由第一节点3确定的共同秘密(cs),公式10.1可以代入公式11中,如下:s=v2c×p2s(公式11)s=v2c×(v2s×g)s=(v2c×v2s)×g(公式15)转到由第二节点7确定的共同秘密(cs),公式12.1可以代入公式14中,如下:s=v2s×p2c(公式14)s=v2s×(v2c×g)s=(v2s×v2c)×g(公式16)由于ecc代数是可交换的,因此公式15和公式16是等价的,因为:s=(v2c×v2s)×g=(v2s×v2c)×g(公式17)共同秘密(cs)和秘密密钥共同秘密(cs)现在可以用作秘密密钥,或者用作用于第一节点3和第二节点7之间的安全通信的对称密钥算法中的秘密密钥的基础。共同秘密(cs)可以是椭圆曲线点(xs,ys)的形式。可以使用节点3、节点7协定的标准公知操作来将该形式转换为标准密钥格式。例如,xs值可以是可以用作用于aes256加密的密钥的256位整数。对于需要160位长度密钥的任何应用程序,它也可以使用ripemd160转换为160位整数。可以根据需要确定共同秘密(cs)。重要的是,第一节点3不需要存储共同秘密(cs),因为该共同秘密(cs)可以基于消息(m)得以重新确定。在一些示例中,所使用的消息(m)可以被存储在数据存存储器13、数据存储器17、数据存储器19(或其他数据存储器)中,而没有主私钥所需的相同的安全级别。在一些示例中,消息(m)可以是公开地可用的。然而,取决于某应用,倘若共同秘密(cs)被保持得与第一节点主私钥(v1c)一样安全,那么共同秘密(cs)可以存储在与第一节点相关联的第一数据存储器(x)中。有利地,该技术可以用于基于单个主密钥加密对来确定可以对应于多个安全秘密密钥的多个共同秘密。生成器值(密钥)的层级例如,可以确定一系列相继生成器值(gv),其中,可以基于先前的生成器值(gv)来确定每个相继gv。例如,代替重复步骤310至步骤370和步骤410至步骤470以生成相继单用途密钥,通过各节点之间的先前协定,先前所使用的生成器值(gv)可以由双方重复进行散列化,以建立生成器值的层级。实际上,基于消息(m)的散列,生成器值可以是下一代生成器值(gv)的下一代消息(m')。这样做允许计算相继几代的共享秘密而无需进一步的协议建立传输,特别是关于每一代的共同秘密的多条消息的传输。下一代共同秘密(cs')可以计算如下。首先,第一节点3和第二节点7都独立地确定下一代的生成器值(gv')。这类似于步骤320和步骤420,但采用以下公式:m'=sha-256(m)(公式18)gv'=sha-256(m')(公式19.1)gv'=sha-256(sha-256(m))(公式19.2)然后,第一节点3可以确定下一代的第二节点第二公钥(p2s')和第一节点第二私钥(v2c'),类似于上述步骤370和330,但采用以下公式:p2s'=p1s+gv'×g(公式20.1)v2c'=v1c+gv'(公式20.2)然后,第二节点7可以确定下一代的第一节点第二公钥(p2c')和第二节点第二私钥(v2s'),类似于上述步骤430和步骤470,但采用以下公式:p2c'=p1c+gv'×g(公式21.1)v2s'=v1s+gv'(公式21.2)然后,第一节点3和第二节点7可以各自确定下一代共同秘密(cs')。具体地说,第一节点3使用以下公式确定下一代共同秘密(cs'):cs'=v2c'×p2s'(公式22)第二节点7使用以下公式确定下一代共同秘密(cs'):cs'=v2s'×p2c'(公式23)可以通过相同的方式计算其他代(cs”,cs”',等)以创建链层级。该技术要求第一节点3和第二节点7都保持跟踪原始消息(m)或原始地计算的生成器值(gv)以及其与哪个节点有关。由于这是公开地已知的信息,因此不存在关于保留该信息的安全问题。因此,该信息可以保存在“散列表”上(将散列链接至公钥)并且(例如使用种子(torrent))在网络5上自由分发。此外,如果层级中的任何单独共同秘密(cs)真是受到危及,则倘若私钥v1c、v1s保持安全,那么这不影响层级中任何其他共同秘密的安全性。密钥的树结构除了如上所述的链(线性)层级之外,还可以创建树结构形式的层级。利用树结构,可以确定用于不同目的的各种密钥,例如认证密钥、加密密钥、签名密钥、支付密钥等,由此这些密钥全都链接至单个安全地维护的主密钥。在图17中最佳地示出该情况,图17示出具有各种不同密钥的树结构901。这些树结构中的每个树结构可以用于创建与另一方的共享密钥。可以通过若干方式完成树分支,其中的三种方式如下所述。(i)主密钥引发(spawning)在链层级中,通过将多重反复散列化的消息(multiplyrehashedmessage)和原始主密钥相加来创建每个新的“链接”(公钥/私钥对)。例如,(为了清楚起见,仅示出第一节点3的私钥):v2c=v1c+sha-256(m)(公式24)v2c'=v1c+sha-256(sha-256(m))(公式25)v2c"=v1c+sha-256(sha-256(sha-256(m)))(公式26)……依此类推。为了创建分支,任何密钥可以用作子主密钥。例如,就像对于常规主密钥进行的一样,v2c'可以通过将其和散列相加来用作子主密钥(v3c):v3c=v2c'+sha-256(m)(公式27)子主密钥(v3c)自身可以具有下一代密钥(v3c'),例如:v3c'=v2c'+sha-256(sha-256(m))(公式28)这使用如图18所示的主密钥引发方法提供树结构903。(ii)逻辑关联在该方法中,作为链(或者通过任何其他方式)而生成树中的所有节点(公钥/私钥对),并且通过表来维护树中的各节点之间的逻辑关系,其中,树中的每个节点仅使用指针来与树中其父节点相关联。因此,指针可以用于确定有关的公钥/私钥对,以用于确定用于会话的共同秘密密钥(cs)。(iii)消息多重性可以通过在链或树中的任何点处引入新消息来生成新的私钥/公钥对。消息自身可以是任意的,或者可以带有一些含义或功能(例如,它可以与“现实”银行帐户号等有关)。可能希望安全地保留用于形成新私钥/公钥对的这些新消息。用于本发明的说明性计算代理本发明可以利用计算资源或代理以执行合约过程的自动化方面。以下提供合适的代理的示例,但可以使用其他实现方式。代理可以结合区块链进行操作,在图灵机的实现方式中将其用作不可擦除的条带。该代理与区块链网络并行运行,监督和处理(循环)过程的执行。循环过程被设计成执行给定任务,例如,过程的自动化或者设备或系统的控制。该并行资源监视区块链的状态,并且可以使得交易写入区块链。在一种意义上,它利用区块链作为图灵机的不可擦除的条带,其具有以下定义和特征:1、区块链充当图灵机的条带。区块链中的每笔交易代表条带上的小单元。该小单元可以包含来自有限字母表的符号。2、条带头可以从已经写入区块链上的区块读取信息。3、条带头可以将包含许多交易的新区块写入到区块链的末尾。然而,它们无法写入已存在的区块上。因此,区块链条带是不可擦除的。4、用于每个交易的元数据可以存储为多重签名支付到脚本散列(p2sh)交易的一部分。代理的重要功能是充当监视区块链当前状态的自动化实体。代理还可以从任何区块外的源接收信号或输入。取决于区块链状态和/或接收到的输入,代理可以执行特定动作。代理决定要执行哪个(些)动作。这些动作可能涉及或不涉及“现实世界”中(即,区块之外)的动作和/或区块链上的动作(例如,创建和广播新交易)。代理所采取的操作可以由区块链状态触发。代理还可以决定下一组交易要广播到比特币网络并随后写入区块链。代理的动作与区块链(例如,比特币)网络并行运行且同时运行。从某种意义上说,这样扩展区块链(例如,比特币)脚本的功能。这种连续监视实现“循环”控制流构造,使得所组合的代理和区块链系统是图灵完备的。图灵机包括两个栈:·数据栈:这由如上所述区块链表示。·控制栈:这由代理功能表示。这存储与重复控制流功能有关的信息。控制栈与数据栈的分离提供防止比特币核心内发生无限循环的优点,减轻拒绝服务攻击。代理管理和运行能够经由任何类型的循环构造(例如,for-next、repeatuntil等)进行循环的子程序。本文所描述的示意性实施例包括使用“重复”构造的一个实例的过程。用户可以指定索引(z)和限值(j)。它们分别表示当前迭代次数(通常从0开始计数)和重复循环的总迭代次数。对于每次迭代:1、索引递增1。对于退出条件,迭代当索引达到限值时将停止;2、执行包含“ifconditionthenaction”(icta)语句的代码块;该动作可以是区块链上或区块链外的任何动作;3、计算该子例程的加密散列。这可以存储在区块链中作为交易的一部分。由于散列对每个代码是唯一的,因此其将使得能够验证已经使用哪个代码。循环体包括代码块。每个代码块都包含“ifconditionthenaction”(icta)语句。这样监视区块链的当前状态,以用于与以下内容匹配的交易:·启动或触发条件(例如,当达到特定日期时)。·重复条件(即,与先前迭代相关联的元数据或散列)。·停止条件(即,循环的最后迭代)。icta语句使得代理能够基于区块链的当前状态判断下一个要进行的交易。进行下一个交易涉及:将交易广播到比特币网络上,并将新交易写入区块链上。这充当已执行该迭代的记录。一旦交易已经写入区块链上,管理器就将随后将发现前一次迭代已执行并且写入区块链上,并将执行下一次迭代。下一次迭代继续,直到当索引(i)达到代码块中所指定的限值(j)时,重复循环退出。每个交易都以可以复用的方式保存在区块链中。在比特币实现方式中,交易中的每个签名附加有sighash标志。该标志可以取得不同的值,每个值指示在没有该签名的所有者参与的情况下是否可以修改交易的其他部分。在交易输入中的一个交易输入中,可复用的交易具有sighash标志“sighash_anyonecanpay”。这允许任何人贡献于交易的输入。该参数使得代理的icta功能能够执行、重复多次并且具有不同的输入。该功能的使用可以例如经由可复用的交易的版权而受限于授权方。icta代码块的“ifcondition”部分可以监视任何类型的条件。这与其他编程语言(例如,c、c++、java)类似,并且不限于存储在区块链上的信息。例如,它可以监视日期和时间(即,何时达到特定日期和时间)或者监视天气(即,何时温度低于10℃且正在下雨),监视合约或信托的条件(即,何时公司a购买公司b)。icta代码块的“thenaction”部分可以执行许多动作。本发明不限于可以采取的动作的数量或类型。该动作不限于区块链上的交易,尽管包含与该操作相关的元数据的交易可以写在区块链上。元数据可以是任何形式。然而,在一个实施例中,元数据可以存储对包含与该动作有关的更多数据或指令的文件的超链接。元数据可以存储对关于包含与该动作有关的更多数据或指令的散列表的超链接以及充当用于散列表的循环键(loop-upkey)的散列。可以通过特定于每个用户的需求的多种方式实现代理的控制栈。例如,控制栈的重复循环可以基于任何图灵完备语言。一种可能的语言选择是forth风格的基于栈的语言。使用这种语言的优点是,它将控制栈在编程风格方面与已经知道的并且广泛使用的比特币脚本保持一致。使用比特币脚本的可替代栈作为数据存储空间比特币脚本包含命令,也称为操作码,其使用户能够将数据移动到称为“alt栈”的可替代栈。操作码是:·op_toaltstack–其将数据从主栈的顶部移动至alt栈的顶部上。·op_fromaltstack–其将数据从alt栈的顶部移动至主栈的顶部。这使得来自中间计算步骤的数据能够存储在alt栈中,这类似于允许数据存储在计算器上的“存储器”功能,在一个实施例中,alt栈用于配置比特币脚本以解决小型计算任务并且将结果返回至计算中。使用代码寄存器以管理代理代理还管理其拥有并运行的所有代码的注册表。该注册表构造得类似于将特定密钥映射到特定值的查找表或字典。密钥和值对分别由代码块的散列(h1)和存储代码的地方的ipv6地址表示。为了使用密钥h1检索代码块,查找表用于检索关联值(这是存储代码的位置)并相应地检索源代码。代码注册表的实现方式可以变化。代理的代码的交易元数据,以及循环的重新引发在特定迭代时重新引发代理的循环所需的信息可以作为元数据存储在区块链上记录的交易中。通过这种方式,区块链上的交易存储或提供对关于在代理上正执行的循环的给定迭代的信息的访问。该信息可以包括与循环相关联的任何变量的值(例如索引i)、以及任何其他必要信息(例如代码块中使用的参数值或者指定可以访问其他所需信息的地方的位置相关数据)。元数据自身存储为交易中多签名支付到脚本散列(p2sh)的一部分。通过交易所记录的元数据还能够记录过去已经如何执行代码的审计跟踪。存在代理可以在每次迭代时重新引发重复循环代码块的多种方式。代码块可以硬编码到代理自身中,或者可以存储在私有或公共可用文件中,或者存储为私有或公共散列表文件上的条目,或者上述项的组合。代码块可以是带有硬编码变量的静态代码块,或者可以是静态的但包含可以填充的参数。参数可以是任何数据格式的单个值,或可以是小片块的代码,或者是上述项的组合。可以通过直接从交易(例如比特币交易)中的元数据检索参数或者从诸如内部数据库或私有/公共文件或散列表或上述项的任何组合的外部源检索参数来填充参数。指向参数值的外部源的指针可以存储在交易中的元数据中。以下步骤提供代理可以如何在第i次迭代时重新引发重复循环代码块的一个示例。在该示例中,代码注册表是散列表,其中,散列充当表的查找键并且存储在交易上的元数据中。1、代理关于包含与代码注册表中的条目匹配的代码块的散列的交易而监视区块链。2、代理寻找包含对应的散列(h1)的交易。3、代理读取“metadata-codehash”,得到codehash字段以得到h1并使用其以检索代码(c1)。如果ripemd-160(sha256(c1))等于h1,则代码尚未改变,并且继续下一步骤是安全的。4、代理读取存储索引i的“metadata-codehash”,并在第i次迭代时重新引发代码。换句话说,循环在适当的迭代时得以“重新加载”。5、用户的签名包括于p2sh命令中,以验证元数据的来源。6、如果循环的该迭代需要这些数据,则代理读取“metadata-outputhash”和“metadata-outputpointer”,以检索先前的步骤的输出。应当注意的是,上述实施例说明本发明而不是限制本发明,并且本领域技术人员在不脱离由所附权利要求限定的本发明的范围的情况下将能够设计许多替代实施例。在权利要求中,置于括号中的任何附图标记不应解释为限制权利要求。词语“包括(comprising)”和“包含(comprises)”等不排除除了在任何权利要求或说明书中作为整体列出的要素或步骤之外的其他要素或步骤的存在性。在本说明书中,“包括(comprises)”表示“包括或由......组成”并且“包括(comprising)”表示“包括或由......组成”。要素的单数引用不排除这些要素的复数引用,反之亦然。本发明可以借助于包括若干不同元件的硬件以及借助于适当编程的计算机得以实现。在列举若干装置的设备权利要求中,这些装置中的若干装置可以由硬件的一个且同一项得以体现。在相互不同的从属权利要求中叙述特定措施的仅有的事实并不表示不能充分使用这些措施的组合。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1