使用区块链实现逻辑门功能的制作方法

文档序号:16506591发布日期:2019-01-05 09:04阅读:336来源:国知局
使用区块链实现逻辑门功能的制作方法
本发明大体涉及分布式分类账(distributedledger)(区块链)技术,可为任何与区块链相关的技术,包括(但不限于)比特币区块链。本发明的各方面还涉及逻辑门和组合逻辑领域。本发明可适用于控制系统或过程。
背景技术
:在本文中,我们使用术语“区块链”来包括所有形式的电子的、基于计算机的分布式分类账,包括基于共识的区块链和交易链技术、取得许可和未取得许可的分类账、侧链和替代链技术(altchains)、共享分类账及其变形。虽然已经提出并开发了其他区块链实施方案,但是区块链技术最广为人知的应用是比特币分类账(bitcoinledger)。虽然出于方便和说明的目的,本申请文件可能提到了比特币,但应该指出的是,本发明不限于比特币区块链的应用,其他区块链实施方式和协议也落入到本发明的范围内。术语“用户”在本文中可以指人或基于处理器的资源。区块链是一种由计算机实现的去中心化的分布式系统,由区块组成,而区块又由交易组成。每笔交易均包括至少一个输入和至少一个输出。每个区块包含前一个区块的散列,使得区块链接在一起,从而创建一个永久的、不可更改的记录,该记录自区块链诞生之始就已写入区块链的所有交易。交易包含嵌入其输入和输出中的被称为脚本(script)的小程序,这些小程序指定如何以及由谁来访问交易的输出。在比特币平台上,这些脚本是使用基于堆栈的脚本语言编写的。为了将交易写入区块链,必须对其进行“验证”。网络节点(矿工)执行工作以确保每个交易都有效,无效交易被网络所拒绝。安装在节点上的软件客户端通过执行锁定和解锁脚本,对未花费的交易(utxo)执行此验证工作。如果锁定和解锁脚本的执行评估为真(true),则交易有效,且将交易写入区块链。因此,解锁脚本可以提供用于评估锁定脚本的输入。虽然这通常采用基于签名的输入的形式,但已知其他形式的输入也是可能的。此外,脚本语言中的许多命令是布尔运算符(例如op-equal),提供真或假(false)的结果。这使得条件性可以构建到交易中。虽然已经提出并开发了其他区块链实施方案,但是区块链技术最广为人知的应用是比特币分类账。虽然出于方便和说明的目的,本申请文件可能提到了比特币,但应该指出的是,本发明不限于比特币区块链的用途,其他区块链实施方式和协议也落入到本发明的范围内。区块链技术最有名的是其在加密货币上的应用。然而,近年来,数字企业家们已经开始探索使用比特币所基于的加密安全系统和能够存储在区块链上的数据来实现新的系统。本发明涉及区块链技术的这样一种新的、创造性的变形。特别地,本发明涉及使用区块链来实现或仿真逻辑门的功能,继而,逻辑门可用作简单而有效且强大的机制,用于创建广泛而多种多样的计算机实现系统。这样的系统可包括用于控制过程和/或指导设备和系统的行为的控制单元。控制单元的基本元件是逻辑门。通过将门逻辑构建为区块链交易,可以实现由区块链技术带来的好处,即强大的处理过程。这些好处包括但不限于增强的网络安全,去中心化的设备/系统/过程控制,与遗留系统的潜在集成,以及记录的不变性/永久性。因此,希望提供一种在区块链上或通过区块链提供或仿真逻辑门功能的解决方案。在这种解决方案中,逻辑门可通过区块链交易的锁定脚本来实现。可以提供对逻辑门的基本结构的扩展,以允许任何数量的输入和任何数量的输出。现在已经设计出这种改进的解决方案。技术实现要素:因此,根据本发明,提供了如所附权利要求中所限定的解决方案。本发明的实施例可提供计算机实现方法和相应的系统,可以描述为控制方法/系统。本发明的实施例可基本上以下文小标题为“技术2”的部分中描述的实施例为依据。该方法可以包括在第一区块链交易中提供锁定脚本的步骤。第一(和/或进一步的)交易可由自动化过程生成,即通过计算机生成而无需人为干预。锁定脚本可包括至少一个用于处理多个布尔输入的指令。可以布置和/或选择该至少一个指令以实现逻辑门的功能。逻辑门可为或门,异或门,与非门,或非门,非门,同或门(xnorgate),蕴涵门(implygate),逆蕴涵门(converseimplicationgate)。指令可由用户(程序员)选择,以实现预定或选择的逻辑门的功能。由于使用至少一个计算资源或代理来处理至少一个输入信号,因此可以提供多个布尔输入。然后可以将布尔输入(真/假)提供给交易脚本。该方法还可包括以下步骤:提供具有解锁脚本的进一步的区块链交易;和/或使用多个布尔输入,执行第一和进一步的区块链交易的锁定和解锁脚本。处理至少一个输入信号以提供多个布尔输入的步骤,由至少一个计算资源或代理执行,在将多个布尔输入提供给锁定脚本之前。该方法可包括提供具有解锁脚本的进一步的区块链交易的步骤。解锁脚本可包括赎回脚本。可以在锁定脚本内提供至少一个指令作为散列,如此通过解锁(赎回)脚本提供实际的指令,其中所提供的指令的散列必须与锁定脚本中的散列匹配,以便花费(第一)交易的输出。该方法可包括处理至少一个输入信号的步骤,以提供至少一个布尔输入。可以从任何源接收或导出该输入信号。该处理步骤在被用作解锁脚本的输入之前,可由至少一个计算资源或代理执行。计算资源可以是“区块外”资源,表示它不是区块链网络的一部分。该方法可包括使用至少一个布尔输入,分别执行第一和/或进一步的区块链交易的锁定和解锁脚本的步骤。该方法可包括将进一步交易和/或第一交易传送到区块链网络以进行验证的步骤。网络可为比特币网络。或者,可以在不将进一步交易发送到区块链网络的情况下,验证该进一步交易。该方法可包括监测或搜索网络区块链以确定进一步交易存在或缺席的步骤。该方法可包括提供计算资源的步骤,该计算资源用于,基于在区块链内对进一步交易的检测,影响设备或过程的行为。该方法可包括将进一步交易的有效性解译为逻辑门提供的真(true)输出的步骤。有效性可由控制代理确定,或者通过监测区块链和/或区块链网络来确定。确定进一步交易的有效性可用作由计算代理执行的动作的触发器。区块链网络内的进一步交易的验证可取决于解锁脚本的(成功)执行。该方法可包括基于区块链内是否存在进一步交易,来控制设备或过程的步骤。这可为任何类型的设备、系统或技术过程。被控制的设备、系统或过程可以在块外实现,即可与区块链网络分开或不同。该至少一个输入信号可包括数值、常数值、散列函数的结果、加密密钥、区块链谜题(puzzle)和/或比特币其他区块链相关地址。术语“区块链谜题”是区块链
技术领域
中已知的术语,并且本领域技术人员很容易理解。可通过在基于计算的资源上执行的自动化过程,来生成第一和/或进一步交易,和/或传送第一和/或进一步交易到区块链网络。至少一个指令可包括布尔条件、操作码或运算符。它可以使用基于堆栈的编程语言来编写和/或执行。本发明还可提供一种计算机实现的系统,用于实现上述方法的任何变形。本发明可提供一种控制系统,该控制系统包含或用于执行布尔计算,且在区块链上或使用区块链实现,该布尔计算包括:包括锁定脚本的区块链交易,该锁定脚本包括选择的至少一个指令,以便实现布尔真值表的功能,通过处理至少一个布尔输入来提供至少一个布尔输出。真值表可为用于异或门的真值表。本发明还可提供一种区块链实现的控制系统,用于实现异或门的功能,该系统可运行以用于:接收来自计算资源或代理的多个布尔输入;和当一个且仅一个布尔输入允许生成与存储数据项相等的散列值时,提供第一输出。该系统可运行以用于在区块链交易中,通过执行锁定脚本,实现异或门的功能。所描述的与一个方面或实施例相关的任何特征,也均可用于另一方面或实施例。例如,所描述的与该方法有关的任何特征,均可应用于相应的系统,反之亦然。附图说明参考本文所述的实施例,本发明的这些和其他方面将变得清晰,并得以阐明。现在将仅通过示例并参考附图来描述本发明的实施例,其中:图1示出了根据本发明的实施例的系统,其与说明性使用实例有关;图2示出了图1的控制系统的真值表;图3示出了处理图1的示例的解锁交易的步骤;以及图4到8示出了可用于共享秘密并生成公钥或私钥的技术;图9示出了本发明的说明性实施例的功能,其中在第二交易的解锁脚本内评估两个布尔输入a和b以生成布尔输出x;图10示出了本发明的实施例的概况,包括第一和第二交易;图11示出了根据本发明的实施例的流程;图12示出了根据如下所述的本发明的“技术1”的实施例的概况;图13示出了根据如下所述的本发明的“技术2”的实施例的概况;图14示出了根据如下所述的本发明的“技术3”的实施例的概况;图15提供了根据现有技术如何评估锁定和解锁脚本的图示。具体实施方式本发明提供了一种使用区块链交易的锁定脚本的机制,以实现特定真值表的逻辑。如现有技术中已知的,这样的真值表用于实现逻辑门,其中通常基本门具有两个输入a和b以及单个输出x。图9示出了由本发明示例性实施例创建的结构的概况。在本实施例中,在交易中评估两个输入a和b以产生输出x。输入值a和b通过区块链交易的解锁脚本提供,该区块链交易试图花费与锁定脚本相关的先前交易的输出,锁定脚本包含逻辑门代码。在一个或多个实施例中,解锁脚本可包括赎回脚本。因此,需要至少两个交易来实现本发明的任何实施例。第一个交易使用嵌入门逻辑的锁定脚本锁定一定数量的比特币或其他加密货币。第二个交易通过呈现a和b的值(可能连同签名)来花费第一个交易的输出。在经典门中,a,b和x是二进制的,取值等于真(1)或假(0)。但是,根据本发明的实施例,将经典门复制和扩展以包括更复杂的变形。特别地,区块链门的输入本身可能不是“真”或“假”输入,而可为若干不同的值、格式或值的类型。例如,a和b可为整数、散列值、加密密钥、btc地址(等),a和b的真值可在交易内评估以产生输出。在交易可为有效(“真”)或无效(“假”)的意义上说,输出必须是二进制的。但是,输出可用于几个更复杂的功能中的任何。例如,它可能代表满足一系列条件的重要的临时支付,或者它可能是一项不重要的支付,但仍然作为事件的安全永久记录。以下提供区块链门的变形使用的进一步示例。存在许多不同类型的逻辑门,所有这些逻辑门都属于本发明的范围。一般而言,有几个足以构成任何电路的基本的2-输入门,排序不分先后:另一个常用的门是非门(notgate),它只有一个输入;它的输出是输入的相反值。门通常以“真值表”的形式呈现,提供输入值和相关的输出值的每种可能的组合。例如,表1示出了与门(andgate)和非门(notgate)。表1:与门和非门的真值表所有八个基本2-输入门如表2所示。表2:8个2-输入门abandorxornandnorxnorimpn-imp00000111tf10011100ft01011100tf11110001tf实际上,在给定两个二进制输入的情况下,有16种可能的不同方式来绘制输出列,赖于所需应用程序,其中多数方式可能证明有用。这些均可创建为单个门。因此,在通过单个区块链脚本(例如如下“技术1”)实现真值表的情况下,任何所述16种可能性都可在交易锁定脚本内进行编码。当然,一些可能性可能很少或不具有现实生活应用。为了完成的目的,前6个门的16种可能性如表3所示。表3:每个可能的2-输入,1-输出‘门’如前文所述,本发明提出了一种解决方案,其中创建区块链交易以实现逻辑门的至少部分功能。此门功能在交易的锁定脚本中进行仿真。为方便起见,这种锁定脚本在本文中可称为“区块链门”或“比特币门”。虽然可以使用替代的区块链协议和平台,同样为了方便起见,可以在示例中引用比特币。应注意,根据已知技术,区块链交易可用于利用n/m多重签名(multisig)选项。实际上,就交易所需的签名数量而言,这表现为逻辑门。在n=m的情况下,多重签名操作表现为逻辑与门。然而,这是逻辑门的有限实施,因为它仅涉及或仅受输入所提供的签名数量的影响,且不允许将区块链实施的逻辑门评估为任何其他类型的输入。另一方面,本发明允许门功能在更宽的一组参数化输入上操作。根据本发明的各个实施例,第一区块链交易(tx1)的锁定脚本用于提供所选逻辑门的功能。也就是说,在第一交易中提供的锁定脚本包含一些代码,这些代码在被执行时将使用所呈现的输入值,并根据特定逻辑门的真值表来提供输出。因此,选择和安排锁定脚本内的指令,以便实现所需门的真值表。锁定脚本与第一个交易的输出(txo)相关联。然后生成第二交易(tx2)。第二交易包括输入,该输入包括解锁脚本或与解锁脚本相关。解锁脚本可用于解锁第一交易的锁定脚本,以便花费输出(txo)。验证导致第一个和第二个交易的锁定和解锁脚本的执行。因此,将使用a和b的具体值。如现有技术中已知的,参见图15,以了解如何在交易验证期间评估锁定和解锁脚本。如果执行锁定和解锁脚本得出有效交易,则交易的有效性可以解译为逻辑门的真(true)输出。相反,如果交易验证失败,则可以将其解译为逻辑门的假(false)输出。这是对现有技术的增强,因为根据已知的区块链技术,失败的脚本即是这样。然而,根据本发明,失败的脚本(即不成功的验证)使得能够检测到“错误”输入并随后响应“错误”输入。因此,本发明能够推导和启动有意义的后续行为,而不管输入是真还是假,因为一些动作过程取决于区块链门的输出,无论输出是什么。交易的有效性可以通过以下方式确定:·计算代理·区块链网络上的一个或多个节点·检测区块链上的区块内的交易。如上所述,当第二交易被呈现给(比特币)网络以便尝试花费来自第一交易的输出时,挖掘节点将执行其验证任务。如果交易有效,可以将交易写入区块链,否则交易将被拒绝。因此,计算代理可以监测区块链的状态,以确定该交易是否已经成功记入分类账。如果在区块链中检测到该交易,则一定表示该交易有效,这可以由计算代理解译为逻辑门的true输出。有效性或无效性的确立可作为执行某些动作的触发因素。该动作可以由代理执行,该动作可控制或影响设备、系统或过程的行为。如图12、13和14所示,可以将第一交易(tx1)称为“准备逻辑门”,因为它定义了要被仿真的门的功能。可以将第二交易(tx2)称为“评估逻辑门”,因为它通过解锁脚本,提供了将用于评估门输出的值。有用于实现上述内容的各种技术,如下所述并参考图10至14。技术1图12中提供了技术1的概况。关键的定义属性:·将输入信号a和b提供给用于单个交易(tx2)的交易输入的解锁脚本;·a和b是“(比特币)谜题”,可能附有一个或多个签名;·tx2的解锁脚本用于尝试花费先前交易tx1的输出;这导致分别执行tx2和tx1的解锁和锁定脚本;·在tx2的解锁脚本中处理a和b以评估为真/假;·然后使用那些处理的值,执行相关逻辑,即所选门的代码(在tx1的锁定脚本中提供);·然后脚本评估执行其他逻辑和指令,例如多重签名;注意,如本领域中已知的,多重签名操作与执行所选逻辑门的代码不同,并且多重签名操作在执行所选逻辑门的代码之后执行。每个谜题代表一个真或假的条件,并在执行锁定脚本期间通过以下方式进行评估:·首先通过解锁脚本,向解锁脚本提供解决方案,即谜题的值;·锁定脚本对呈现的值进行散列,然后将其与内部存储的散列值进行比较(“内部存储的”表示该散列作为锁定脚本的一部分已被写入)。呈现的值的散列和存储的散列相等表示“真”,而不等表示“假”;因此,对于每个谜题,散列的比较提供了中间结果;·然后,将两个评估条件的中间结果应用于锁定脚本内提供的相关的门逻辑代码,以提供表示逻辑门的输出x的最终结果。如果最终结果为真,则所附签名被核实,使用多重签名操作。tx1的锁定脚本可为比特币协议中已知的支付脚本散列(p2sh-paytoscripthash)锁定脚本,或者来自备选协议的功能对等项。根据已知技术,p2sh锁定脚本包括赎回脚本的散列,tx1输出只能在呈现正确脚本时花费,该正确脚本在进行散列后与存储在锁定脚本中的散列匹配。因此,对于支付脚本散列交易,实际逻辑在解锁脚本内呈现,尽管锁定脚本“知道”随后将提供的逻辑。如技术人员将理解的,虽然必须知道在这种交易中锁定脚本的行为,但是使用加密安全技术,可以提供实际指令集作为解锁脚本的一部分。这种方法的一个优点是无法辨别赎回脚本的内容或存储的散列,因为在实践中,解决方案通过赎回脚本呈现为初始散列,然后在执行锁定脚本期间再次进行散列处理,以便进行比较。因此,可以增强或维护隐私和安全性。在另一个变形中,可能不会对a和b值进行散列,不是测试散列之间的相等性,而是应用另一个测试来导出真和假。例如,a可能是当前道琼斯指数,脚本可能会测试a>(某个预定阈值)。这种方法不会使用p2sh交易类型来比较散列值,而得到a和b的中间结果,而是使用锁定脚本中的“条件评估代码”,来评估一些其他类型的预定条件。通过这种方式,可以测试许多不同类型的条件的真/假。然后,可以将来自条件评估代码的中间结果传递到锁定脚本的门逻辑部分,最后传递给签名验证。根据本领域的已知技术,执行签名验证过程。应当注意,在这种特定情况下,由于没有对a和b的值进行散列,如果要求保密被测试的条件,则该方法不合适。技术2要求保护的发明的实施例可基本上如“技术2”所述。图13中提供了技术2的概况。关键的定义属性:·输入a和b包含在解锁脚本中,并(例如,由控制代理)呈现给单个交易输入的锁定脚本;·a和b为“真”或“假”,并可附有签名;·由a和b代表的条件在交易之外由专用的、基于计算机的代理预先评估,以导出真/假值,然后安全地传输到控制代理;·控制代理创建进一步交易,进一步交易包括解锁脚本,向锁定脚本呈现a和b值(以及签名)。因此,技术2与技术1相同,不同的只是其在将条件呈现给解锁脚本之前通过计算代理来评估条件。与技术1一样,在第一交易的锁定脚本中提供仿真逻辑门功能的代码,并且在验证期间,通过进一步交易的解锁脚本提供输入的实际值。技术3图14中提供了技术3的概况。关键定义属性:·将a和b呈现给(同一个交易的)两个独立的交易输入的锁定脚本;·a和b是“(比特币)谜题”,可附有签名;·使用相关的sighash标志的组合(例如anyonecanpay),两个独立的代理分别将a和b呈现给交易模板(其最终由控制代理完成);·在每个锁定脚本中,a和b均被评估为真/假,然后锁定脚本执行相关的门逻辑;·然后,每个脚本执行其他逻辑,例如根据现有技术的签名检查。要使整个交易有效,每个输入必须有效,这就实现了与“and”真值表。相同的技术可用于任何数量的输入,即,不是评估两个条件a和b,而是可以将任何数量的条件a,bc......设置为创建交易的要求。模板交易在一个或多个实施例中,可以提供交易模板,将其复制然后用a和b输入填充,以创建可以广播到区块链网络的交易。如果广播交易被网络接受为有效,则可以将其解译为如上所述的“真”输出,而也用于在区块链上提供永久的、不可改变的记录。a和b通常代表可以评估为真或假的条件。可以评估任何类型的条件,并且可以使用任何类型的数据来评估条件。例如,条件可能涉及现实世界中的事件、信号的接收或缺失、计算的成功完成等。尽管这个清单是无限的,但以下代表了不同类型条件的非常小的指示性样本,可以对该不同类型的条件进行测试。为了在区块链门中使用,可能测试为真/假的示例条件:1.现在的日期是2025年6月30日;2.已达到第1,000,000比特币区块;3.一个实体发送了一个编码信号(例如鲍勃(bob)刚刚说“go!”来花费交易);4.位置x的温度低于y℃;5.道琼斯指数目前在20,000以上;6.可识别为juanitashalalamorgensen-smythe的人刚刚结婚;7.(等)区块链门可由任何实体创建。但是,优选实施例是设置一个或多个自动软件代理以执行与区块链门的创建、维护和传输相关的功能。术语“自动化”可以理解为完全通过执行程序来完成,而无需人工干预来完成任务。在一个优选的实施方案中,这些代理能够执行多种功能,下文仅列出了其中的一个例子。可由代理执行的与区块链门相关的示例功能1.监测现实世界中的事件,一旦检测到“触发器”,则根据设定的规则执行某些动作;2.监测区块链中的触发器,一旦检测到“触发器”,则根据设定的规则执行某些动作;3.获取交易模板的副本,并根据设置规则,使用输入和/或输出对其进行填充,并将交易广播到区块链网络。4.触发时,执行其他类型的动作,例如向利益相关各方发送警报,或与其他代理通信以发送或接收数据等。在区块链交易中实施逻辑门有许多潜在的应用。如何创建和部署门或门的组合以实现应用的细节超出了本文的范围。然而,本发明可以用于例如电子设备的控制。其可能包括iot(物联网)设备,例如:报警系统、车辆解锁系统、家电开关、无线传感器网络、监测控制和数据采集(scada-supervisorycontrolanddataacquisition)(安全地)、工厂控制、逆变器、交易锁定系统、基于时间的保险箱、灌溉系统,(等等)。其还可用于开发自动支付系统和计算。例如:a.如果按时收到付款,则发送到输出1,否则发送到输出2并分别计算金额和利息;b.anyonecanpay区块链交易随着时间的推移而增加或减少.区块链交易中使用的“门”的一些可能的变形1.a和b可能是二进制的(如在经典的门中)。在交易是“真”(有效)或“假”(无效)的意义上说,x可能是二进制的;2.a和b可能是加密签名;3.a和b可能是任何数字,代表有意义的值,例如,日期;4.a和b可能是有意义值的散列;5.a和b可能是比特币意义上的“谜题”(特定散列的解决方案);6.a和b可能是上述两项或多项的组合(例如,签名+谜题);7.a和b可能为不同的类型(例如,a=签名+有意义的值;b=谜题)8.可能有多个输入,a,b,c,......9.x=真(有效)可能意味着支付给了第三方一些比特币。例如,当满足由a和b代表的某些条件时,然后门逻辑将比特币支付给受益人;10.x=真(有效)可能意味着输出比特币只是返回给付款人,而交易的目的与支付无关(示例如下);11.x=真(有效)可能意味着触发事件(例如,可能会触发正在监测的代理来执行规定动作,例如控制iot设备);12.x=真(有效)可能意味着注册事件,也就是说,交易的目的是充当事件的安全的、不可更改的、永久的记录;13.可以有多个输出,x,y,....这可能意味着给几个受益人支付了比特币,或者设置了几个触发器,或者是其组合。14.可能存在单个交易,其本身实施了一个门;在锁定脚本中完成。本发明的实施例的实施示例本发明使用上述技术2来实施异或门。下文提供了如何将本发明付诸实践的说明性示例。在该说明性示例中,我们使用锁定脚本来实现在设备控制应用中使用的异或门的功能。区块链iot设备(blockchainiotdevice,简称bid)是被设置为执行预定指令的计算代理,该预定指令安全地存储在bid之外(off-bid),且通过加密密钥对其进行访问。“off-bid”是指指令不是由bid本身提供,而是存储在别处,并在需要时被访问。选择和设置这些指令以执行所选任务或多个任务。执行时,指令可以控制和影响iot设备的行为。bid驻留在iot本身,这意味着bid安装在iot设备之中或之上的存储器中。然而,在其他实施例中,bid可驻留在设备之外,并且具有连接到该设备的互联网连接。iot设备有自己的加密密钥(以及ip地址),因此它可以安全地与其他设备或dht等进行通信和交互。其“操作系统”是一个简单的通用系统,具有一些嵌入式功能,(至少,但不限于)用于:·加密计算;·从外部源(例如dht)获取指令;·执行简单的操作,例如切换开关(即在实体的iot设备上)。因此,iot设备及与其相关的bid都不包含它们自己的内置指令,也都不“知道”其自身的用途或使用方式。bid仅包含用于从其他地方安全地获取指令的机制。bid只能执行一组简单的动作(以下仅是说明性的而非限制性的):·访问自身的主私钥和公钥对;其也有自身的(可导出的)btc地址;·将数据发送到ip地址或从ip地址接收数据的能力;·秘密共享协议计算(如下所述)——在优选实施例中,这些可以嵌入到机器代码中;·查找和解释区块链事件·操作和控制其所连接的实体设备(通过标准api,基本上只是一组开关)bid的传入和传出通信使用如下所述的安全机制加密,其使得能够使用共享的秘密创建密钥。这就允许:(i)更高的安全性,从而避免“黑客攻击”;(ii)简单的通用软件升级协议(iii)设备不可知论因此,本发明的这个实施例提供了一种可用于任何iot设备的通用操作系统。设备本身未被编程——所有程序单独存储并在设置时(或者,在一些实施例中,在执行时)加载到设备中。在该示例中,该系统包括第一和第二客户端设备以及bid控制系统,其可操作以从第一和第二客户端设备接收输入并将信息发送到第一和第二客户端设备。在该使用实例中,第一和第二客户端设备是射频识别设备(rfids-radiofrequencyidentificationdevices),其可由控制系统的bid检测。控制系统可运行以使用区块链以及可运行以发送输出到区块链。我们将使用卡罗尔(carol)的两只名为阿基米德(archimedes)(a)和伯特兰(bertrand)(b)的狗作为例子,来描述控制系统如何工作。阿基米德和伯特兰一整天都待在后院,后院只有它们两个。只要不一起吃饭,它们就彼此友好。只要一起吃饭,它们就会由于某种原因而变得好斗甚至打起架来。a和b都佩戴有识别rfid项圈,即第一rfid项圈和第二rfid项圈,可由物联网(iot)设备检测。该iot设备是自动喂食器,其分配定量食物供其中一只狗食用,即bid控制系统控制iot供食装置的操作。在该示例中,bid是提供于iot自动喂食器上的软件资源或元件,并且与喂食器交互以控制其功能。bid从dht下载并安装其指令,从而开始工作。在这些指令被修改之前,不需要再次执行此操作。例如,可能是当需要升级bid或者要完全修改bid的行为时,例如可以修改其指令集以检测三个或更多个rfid信号。控制代理使用由bid传输的值来创建区块链交易,并且还在每次迭代之后与bid共享新的秘密,如下所述。使用锁定脚本锁定区块链交易,使用区块链交易来实现bid控制系统的功能,该区块链交易使用锁定脚本锁定:op_hash160<unlockingscripthash>op_equal创建交易以(通过链接到分布式散列表(dht)的元数据)提供指令集来控制iot自动喂食器设备,可包括对根据下面描述的内容建立的至计算资源的指令。元数据可以包括指向可访问指令的位置的指针或引用,而不是存储指令在交易本身。因此,指令可保持“区块外(off-block)”。区块链不仅提供用于控制活动的机制,还记录已发生的事件的信息。例如,区块链提供了以下功能:计算喂食次数,喂食发生的时间、哪只狗吃的,以及判断是否已分配最大食物配给等。区块链还提供加密安全性。交易的一个重要功能是确保只有当一只狗出现在喂食器前的同时才分配食物。因此,需要在交易的脚本中构建一些条件,这是通过xor功能实现的,如图2所示的真值表:·如果a和b都没有在喂食器前,则不分配食物;·如果a在喂食器前而b不在,则分配食物;·如果b在喂食器前而a不在,则分配食物;·如果a和b都在喂食器前,则不分配食物。自动喂食器bid使用与bid的密钥/对相关的查找关键字从dht获取其指令。控制代理管理流向/来自bid的数据(即,与rfid信号有关、与bid的指令集无关的数据)。因此,自动喂食器bid监测其自身状态。当a或b在喂食器前时,rfid信号从各自的客户端设备——即第一rfid项圈或第二rfid项圈,发送到自动喂食器的控制系统。因此,控制系统不断地获知a和b的状态:如果a的rfid在范围内,则a的状态为“真”或“1”;如果不在范围内,则a的状态为“假”或“0”。b也是如此。如果状态改变(即a或b改变值),则控制系统相应地执行其指令。根据从适当的dht获取的指令,以及a和b的当前状态(以及其他条件,涉及每天的时间,先前的喂食次数,其他限制等),其使用a和b的值,输入到交易的解锁脚本,创建了交易。然后,自动喂食器bid:·自动喂食器检查交易的有效性,如果有效则将其广播到网络(或者,在一些实施例中,其可以简单地广播而不进行验证,并且可以通过检测区块中的交易来检测其有效性)。如果嵌入的xor测试已通过,则交易有效。如果没有通过,那么交易将是无效的,并且不会传播到区块链网络上的第一“中继段(hop)”之外。无论哪种方式,自动喂食器都能够在进行后续动作之前检测出交易是否有效。有效交易还保证所需信息已被存储并记录在区块链上,即关于喂食事件。·如果交易有效(对应于“真”的门输出),则bid执行其获取的指令,在这种情况下,它会分配一些食物。比特币交易的锁定脚本以下式表示:op_numequalop_notop_verifyop_1metadata1pubk-carolop_2op_checkmultsig其中:metadata1(元数据1)包含对存储在dht中的编码指令的引用;pubk-carol是卡罗尔的公钥。可以使用下文列出的流程安全地保存或重新创建卡罗尔的公钥。为了解锁上文示出的说明性区块链交易,将需要以下脚本:sig-carolba<unlockingscript>按照标准流程验证p2sh脚本,将脚本常量推送到堆栈顶部。此时,两个顶部堆栈项分别为0或1。op_numequal如果数字相等则返回1,否则返回0,这与xor真值表正相反。op_not则翻转堆栈的顶部项以产生所需的xor结果。op_verify则检查堆栈的顶部项是否为1,如果不是——即如果xor操作失败,则立即将交易标记为无效,因为来自第一和第二客户端设备的不止一个输入返回了匹配的谜题解决方案。其结果是由于iot分配器前的狗多于一只,没有食物被iot分配器分配,。也就是说,控制系统的输出由底层比特币交易的执行来控制。如果op_verify返回1,则控制系统104中的处理返回到脚本的多签名(multi-sig)部分,其中在步骤s310对卡罗尔的签名的存在进行检验。在解锁脚本分析中由控制系统执行的堆栈操作如下所示。首先,控制系统对解锁脚本进行散列,以使用op_equal,将散列与解锁脚本的散列进行比较。接下来,执行解锁脚本。示例2我们现在参考图1和图3来解释另一个例子,说明如何使用比特币交易来实现异或门的功能。鲍勃(bob)看到xyz公司股票呈上涨趋势,于是决定如果趋势持续,他将会买入股票。因此,他设定了股价的阈值,如果价格高于此值,他将买入(在他看来,上升趋势肯定是真实的并且将继续上升)。或者,他希望在市场整体低位时进入市场,因此即使xyz股票的价值低于他设定的阈,他也认为当市场指数低于另一个阈值时,将是买入xyz的另一触发因素。但是,如果这两个条件都为真——即如果超过阈值并且市场指数低于定义的阈值,则他不想购买xyz。这是因为(在他看来)市场整体低位加上xyz股价达到他的阈值的组合实际上表明股价即将下跌。输入a和b的实际值(与真值相反)如下:输入a=xyz股票的当前价格输入b=当前市场指数值真值,即a和b各自的阈值如下:a>$32.08/股评估为真b<5320.01评估为真在异或门中,输出x=真,意味着触发购买1000股xyz的订单。鲍勃设置代理以自动管理他的要求。代理a监测xyz的股价,代理b监测市场指数。代理c充当控制代理,并可以访问与a和b通信的鲍勃的私钥,以及执行与区块链相关的一些功能,例如创建比特币交易。代理a和b可以用于以指定的间隔(例如,每分钟或每小时等),将它们监测的值发送到c。如果鲍勃不关心他的策略是否透明,他可以设置控制代理c来创建比特币交易,以根据技术1直接在锁定脚本中评估a和b,如下所示:<32.08>op_greaterthanop_swap<5320.01>op_lessthanop_numequalop_notop_verifyop_1metadata1pubk-bobop_2op_checkmultsig然后,为了解锁此交易,需要以下脚本:sig-bobba<unlockingscript>也就是说,使用锁定脚本内的脚本命令,脚本评估是否已达到a和b的阈值,然后应用xor逻辑。当代理c接收来自a和b各自的监测代理的a和b值时,代理c使用交易输入中的上述脚本创建交易。如果通过xor逻辑,则触发购买(buy)请求。例如,交易输出可能会支付给交易所,以换取一定数量的xyz股份(如上文“区块链交易中使用的‘门’的一些可能的变形”一节中的示例9所述)。但是,鲍勃可能希望将该策略保密,因此技术1不适用。因此,他可根据本发明的实施例,使用技术2,如下文参考图3和1所作的说明。如果鲍勃想要将该策略保密,那么替代的是让计算代理根据图3的s300和s302安全地执行a和b的评估,然后每个代理可以根据s304将它们评估的布尔值发送给控制代理(用于交易的后续输入)。根据下文列出的过程,代理可被建立。因此,在步骤s300和s302中,交易的输入将已被代理评估为真或假,在s306中,t/f值呈现给解锁脚本。在这种情况下,解锁脚本将如下所示:op_numequalop_notop_verifyop_1metadata1pubk-bobop_2op_checkmultsig然后,要解锁此交易,交易输入脚本将与之前相同:sig-bobba<unlockingscript>然而,在这种情况下,a和b各自将已经是1或0,因为a和b上的条件将已经由计算代理进行评估。消费交易的有效性在s308确定。交易的有效性发生,将交易输出作为对xyz股票的付款发送到证券交易所。虽然关于鲍勃的示例涉及股票价格和市场指数,但是这两个值可以是任何物理上可测量的参数,也可以是上述两个示例的结合。例如,在用于监测比如制冷单元的控制系统中,a可为温度,b可为物理参数,如果门打开则该参数评估为真,如果门关闭则该参数评估为假。然后,如果a超过阈温度值,且b评估为假,则可解锁脚本,即温度高于阈值温度且门关闭,因为这可能表示制冷单元出了严重问题,即发生了泄漏。可以使用计算代理来评估a和b,该计算代理被建立以监测相应的变量。使用共享秘密创建密钥可以安全地保存或重新创建密钥。特别地,在私钥可以用于导出公钥的情况下,私钥可以分部分存储。用户——也就是爱丽丝(alice)或鲍勃(bob)可以保存他们的私钥的一部分,服务提供商可以保存第二部分,而第三部分可以保存在远程安全站点中。可以使用三个部分中的任何两个来重构私钥,或者更概括地,可以使用任意n个部分中的任意m个部分来重构私钥。如果私钥可以重构,那么私钥可以用于在使用时重新创建公钥,然后私钥和公钥可以在使用后再次丢弃。可以使用夏米尔秘密共享方案(shamir’ssecretsharingscheme)来达到拆分私钥的目的。可以使用以下方法从主密钥确定性地导出私钥-公钥对。该方法使得参与者可以共享秘密值而无需传输它们。系统可以使用子密钥生成方法为参与者生成公钥。如下所述:图4示出了系统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包括步骤330,至少基于第一节点主私钥(v1c)和生成器值(gv),确定第一节点第二私钥(v2c)。生成器值可以基于在第一和第二节点之间共享的消息(m),其可以包括通过通信网络5共享消息,对此,下文将进一步详述。方法300还包括步骤370,至少基于第二节点主公钥(p1s)和生成器值(gv)确定第二节点第二公钥(p2s)。方法300包括步骤380,基于第一节点第二私钥(v2c)和第二节点第二公钥(p2s)确定共同秘密(cs)。重要的是,同样的共同秘密(cs)也可以通过方法400在第二节点7上确定。方法400包括步骤430,基于第一节点主公钥(p1c)和生成器值(gv)确定第一节点第二公钥(p2c)。方法400还包括步骤470,基于第二节点主私钥(v1s)和生成器值(gv)确定第二节点第二私钥(v2s)。方法400包括步骤480,基于第二节点第二私钥(v2s)和第一节点第二公钥(p2c)确定公共密钥(cs)。通信网络5可能包括局域网、广域网、蜂窝网络、无线通信网络、互联网等等。在这些网络中,数据可以通过通信媒介传送,如电线、光纤、无线传输,数据容易被窃听,比如被窃听者11窃听。方法300、400允许第一节点3和第二节点7均独立地确定共同秘密,而无需通过通信网络5传输共同秘密。因此,一个优点是可以由每个节点安全且独立地确定共同秘密(cs),而不必通过可能不安全的通信网络5发送私钥。接着,共同秘密可以用作秘密密钥(或者作为秘密密钥的基础)。方法300、400可包括附加步骤。参见图8。方法300可以包括:在第一节点3处,基于消息(m)和第一节点第二私钥(v2c)生成签名消息(sm1)。方法300还包括步骤360,通过通信网络,将第一签名消息(sm1)发送到第二节点7。接着,在步骤440中,第二节点7可接收第一签名消息(sm1)。方法400还包括以下步骤:步骤450,用第一节点第二公钥(p2c)验证第一签名消息(sm1),以及步骤460,基于验证第一签名消息(sm1)的结果认证第一节点3。有利地,这允许第二节点7认证所声称的第一节点(其中生成第一签名消息)是第一节点3。这基于以下假设:仅第一节点3可以访问第一节点主私钥(v1c),因此只有第一节点3可以确定用于生成第一签名消息(sm1)的第一节点第二私钥(v2c)。应当理解的是,类似地,可以在第二节点7处生成第二签名消息(sm2)并将其发送到第一节点3,使得第一节点3可以认证第二节点7,例如在点对点(peer-to-peer)情境中。可以以各种方式实现在第一和第二节点之间共享消息(m)。在一个示例中,可以在第一节点3处生成消息,然后将其通过通信网络5发送给第二节点7。或者,可以在第二节点7处生成消息,然后将其通过通信网络5发送给第二节点7。在一些示例中,消息(m)可以是公开的,因此可以通过不安全的网络5发送。一个或多个消息(m)可以存储在数据存储13、17、19中。本领域技术人员将认识到,可以以各种方式实现消息的共享。有利地,可以保持允许重新创建共同秘密(cs)的记录,而记录本身不必私下存储或安全传输。注册方法100、200参考图6描述注册方法100、200的示例,其中方法100由第一节点3执行,方法200由第二节点7执行。这包括为相应的第一和第二节点3、7建立第一和第二非对称密码对。非对称密码对包括关联的私钥和公钥,例如在公钥加密中使用的密钥。在该示例中,使用椭圆曲线密码系统(ecc-ellipticcurvecryptography)和椭圆曲线运算的属性生成非对称密码对。在方法100、200中,这包括步骤110、210,第一和第二节点就共同ecc系统达成一致并使用基点(g)。(注意:基点可以称为共同生成器,但术语“基点”用于避免与生成器值gv混淆)。在一个示例中,共同ecc系统可以基于secp256k1,secp256k1是比特币使用的ecc系统。可以选择、随机生成、或分配基点(g)。至于第一节点3,方法100包括步骤110,选定共同ecc系统和基点(g)。这可以包括从第二节点7或第三节点9接收共同ecc系统和基点。或者,用户接口15可以与第一节点3相关,由此用户可以选择性地提供共同ecc系统和/或基点(g)。在另一可选方案中,共同ecc系统和/或基点(g)中的一个或他们一起可由第一节点3随机选择。通过通信网络5,第一节点3可发送通知给第二节点7,指示使用共同ecc系统和基点(g)。继而,在步骤210中,第二节点7可通过发送通知来确认,该通知指示认可使用共同ecc系统和基点(g)。方法100还包括步骤120,第一节点3生成第一非对称密码对,其包括第一节点主私钥(v1c)和第一节点主公钥(p1c)。这包括,至少部分地基于允许范围内的随机整数来生成第一节点主私钥(v1c),在共同ecc系统中规定了该允许范围。还包括基于第一节点主私钥(v1c)和基点(g)进行的椭圆曲线点乘(ellipticcurvepointmultiplication),确定第一节点主公钥(p1c),根据如下公式:p1c=v1cxg(公式1)因此,第一非对称密码对包括:v1c:由第一节点保密的第一节点主私钥。p1c:被公知的第一节点主公钥。第一节点3可以将第一节点主私钥(v1c)和第一节点主公钥(p1c)存储在与第一节点3相关的第一数据存储13中。为了安全起见,第一节点主私钥(v1c)可以存储在第一数据存储13的安全部分中,以确保密钥保持私密。方法100还包括步骤130,通过通信网络5,将第一节点主公钥(p1c)发送到第二节点7,如图6所示。在步骤220中,第二节点7接收第一节点主公钥(p1c),在步骤230中,第二节点7可将第一节点主公钥(p1c)存储在与第二节点7相关的第二数据存储17中。类似于第一节点3,第二节点7的方法200包括步骤240,生成第二非对称密码对,第二非对称密码对包括第二节点主私钥(v1s)和第二节点主公钥(p1s)。第二节点主私钥(v1s)也是允许范围内的随机整数。而第二个节点主公钥(p1s)由以下公式确定:p1s=v1sxg(公式2)因此,第二非对称密码对包括:v1s:由第二节点保密的第二节点主私钥。p1s:被公知的第二节点主公钥。第二节点7可以将第二非对称密码对存储在第二数据存储17中。方法200还包括步骤250,将第二节点主公钥(p1s)发送到第一节点3。而在步骤140和150中,第一节点3可以接收并存储第二节点主公钥(p1s)。应当理解的是,在一些替代方案中,可以在诸如可信的第三方等与第三节点9相关的第三数据存储19处,接收和存储相应的公共主密钥。这可能包括充当公共目录的第三方,例如证书颁发机构。因此,在一些示例中,只有当确定需要共同秘密(cs)时,才可由第二节点7请求和接收第一节点主公钥(p1c)(反之亦然)。注册步骤作为初始设置可只需进行一次。会话启动并由第一节点3确定共同秘密现在将参考图7说明确定共同秘密(cs)的示例。共同秘密(cs)可以用于第一节点3和第二节点7之间的特定会话、时间、交易或其他目的。人们可能不希望使用相同的共同秘密(cs),或者说这样做不安全。因此,可以在不同的会话、时间、交易等之间更换共同秘密(cs)。提供以下内容用以说明上述安全传输技术。生成消息(m)310在该示例中,由第一节点3执行的方法300,包括步骤310生成消息(message)(m)。消息(m)可以是随机的、伪随机的或用户定义的。在一个示例中,消息(m)基于unix系统时间(unixtime)和新鲜值(nonce)(和任意值)。例如,消息(m)可以为:message(m)=unixtime+nonce(公式3)在一些示例中,消息(m)是任意的。然而,应当理解,消息(m)可以具有在某些应用中可能有用的选择性值(例如unix系统时间等)。方法300包括步骤315,通过通信网络5将消息(m)发送到第二节点7。消息(m)可以在不安全的网络上发送,因为消息(m)不包含关于私钥的信息。确定生成器值(gv)320方法300还包括步骤320,基于消息(m)确定生成器值(gv)。在这个例子中,这包括确定消息的加密散列。加密散列算法的一个示例包括sha-256,以创建一个256位生成器值(gv)。即:gv=sha-256(m)(公式4)应当理解,其他散列算法也可以使用。其可以包括安全散列算法(securehashalgorithm,简称“sha”)系列中的其他散列算法。一些具体示例包括sha-3子集中的实例,包括sha3-224,sha3-256,sha3-384,sha3-512,shake128,shake256。其他散列算法可以包括race原始完整性基元评估消息摘要(raceintegrityprimitivesevaluationmessagedigest,简称“ripemd”)系列中的散列算法。具体示例可以包括ripemd-160。其他散列函数可以包括基于zemor-tillich的散列函数和基于背包(knapsack)的散列函数的系列。确定第一节点第二私钥330然后方法300包括步骤330,基于第二节点主私钥(v1c)和生成器值(gv)确定第一节点第二私钥(v2c)。根据以下公式,v2c可以基于第一节点主私钥(v1c)和生成器值(gv)的标量相加之和:v2c=v1c+gv(公式5)因此,第一节点第二私钥(v2c)不是随机值,而是确定性地从第一节点主私钥导出。加密对中的相应公钥,即第一节点第二公钥(p2c),具有以下关系:p2c=v2cxg(公式6)将公式5中的v2c代入公式6中,则:p2c=(v1c+gv)xg(公式7)其中,“+”运算符指椭圆曲线点加法。注意椭圆曲线密码学代数具有分配律,公式7可以表示为:p2c=v1cxg+gvxg(公式8)最后,公式1可以代入公式7,则:p2c=p1c+gvxg(公式9.1)p2c=p1c+sha-256(m)xg(公式9.2)因此,在已知第一节点主公钥(p1c)和消息(m)的情况下,可以导出对应的第一节点第二公钥(p2c)。第二节点7可以具有这样的知识以独立地确定第一节点第二公钥(p2c),这将在下文关于方法400的部分进一步进行详细讨论。基于消息和第一节点第二私钥生成第一签名消息(sm1)350方法300还包括步骤350,基于消息(m)和确定的第一节点第二私钥(v2c)生成第一签名消息(sm1)。生成签名消息包括应用数字签名算法对消息(m)进行数字签名。在一个示例中,这包括将第一节点第二私钥(v2c)应用于椭圆曲线数字签名算法(ellipticcurvedigitalsignaturealgorithm,简称“ecdsa”)中的消息以获得第一签名消息(sm1)。ecdsa的实例包括基于具有secp256k1、secp256r1、secp384r1、se3cp521r1的ecc系统的ecdsa。在第二节点7处,采用对应的第一节点第二公钥(p2c)来验证第一签名消息(sm1)。第二节点7可使用对第一签名消息(sm1)的验证来认证第一节点3,这将在下面的方法400中进行讨论。确定第二节点第二公钥370’然后,在步骤370中,第一节点3可以确定第二节点第二公钥(p2s)。如上所述,第二节点第二公钥(p2s)可以至少基于第二节点主公钥(p1s)和生成器值(gv)。在该示例中,由于公钥是由进行椭圆曲线点乘的私钥(步骤370’)和基点(g)确定的,所以可以以类似于公式6的方式表达第二节点第二公钥(p2s),如:p2s=v2sxg(公式10.1)p2s=p1s+gvxg(公式10.2)公式10.2的数学证明与上述用于导出第一节点第二公钥(p2c)的公式9.1的数学证明相同。应当理解,在步骤370中,第一节点3可以独立于第二节点7确定第二节点第二公钥。在第一节点3处,确定共同秘密380然后,在步骤380中,第一节点3可以基于所确定的第一节点第二私钥(v2c)和已确定的第二节点第二公钥(p2s)来确定共同秘密(cs)。共同秘密(cs)可以由第一节点3通过以下公式确定:s=v2cxp2s(公式11)在第二节点7处执行的方法400现在将描述在第二节点7处执行的对应方法400。应当理解,这些步骤中的一些步骤类似于上述由第一节点3执行的步骤。方法400包括步骤410,通过通信网络5,接收来自第一节点3的消息(m)。这可包括在步骤315由第一节点3发送的消息(m)。然后在步骤420中,基于消息(m),第二节点7确定生成器值(gv)。由第二节点7确定生成器值(gv)的步骤420类似于由上述第一节点执行的步骤320。在该示例中,第二节点7独立于第一节点3执行该确定步骤420。下一步骤包括步骤430,基于第一节点主公钥(p1c)和生成器值(gv)确定第一节点第二公钥(p2c)。在该示例中,由于公钥是由进行椭圆曲线点乘的私钥和基点(g)确定的,所以可以以类似于公式9的方式表达第一节点第二公钥(p2c),如:p2c=v2cxg(公式12.1)p2c=p1c+gvxg(公式12.2)公式12.1和12.2的数学证明与上述针对公式10.1和10.2所讨论的内容相同。第二节点7认证第一节点3方法400可以包括由第二节点7认证所声称的第一节点3是第一节点3的步骤。如前所述,这包括接收来自第一节点3的第一签名消息(sm1)的步骤440。然后,在步骤450,第二节点7可验证第一签名消息(sm1)上的签名,使用在步骤430确定的第一节点第二公钥(p2c)进行验证。验证数字签名可以根据如上所述的椭圆曲线数字签名算法(ecdsa)来完成。重要的是,使用第一节点第二私钥(v2c)签名的第一个签名消息(sm1)智能用相应的第一节点第二公钥(p2c)正确的验证,因为v2c和p2c来自一个密码对。由于这些密钥是由第一节点3注册时生成的第一节点主私钥(v1c)和第一节点主公钥(p1c)确定的,因此验证第一签名消息(sm1)可以用作认证的基础,即认证发送第一签名消息(sm1)的所谓第一节点是注册期间相同的第一节点3。因此,第二节点7还可以基于验证(450)第一签名消息的结果来执行认证(460)第一节点3的步骤。第二节点7确定共同秘密方法400还可包括步骤470,基于第二节点主私钥(v1s)和生成器值(gv),第二节点7确定第二节点第二私钥(v2s)。类似于第一节点3执行的步骤330,第二节点第二私钥(v2s)可基于第二节点主私钥(v1s)和生成器值(gv)的标量相加,根据以下公式:v2s=v1s+gv(公式13.1)v2s=v1s+sha-256(m)(公式13.2)然后,在步骤480中,第二节点7可以独立于第一节点3,基于第二节点第二私钥(v2s)和第一节点第二公钥(p2c),确定共同秘密(cs),基于以下公式:s=v2sxp2c(公式14)由第一节点3和第二节点7确定的共同秘密(cs)的证明由第一节点3确定的共同秘密(cs)与在第二节点7处确定的共同秘密(cs)相同。现在对公式11和公式14提供相同的共同秘密(cs)的数学证明进行说明。至于由第一节点3确定的共同秘密(cs),公式10.1可以代入公式11,如下所示:s=v2cxp2s(公式11)s=v2cx(v2sxg)s=(v2cxv2s)xg(公式15)至于由第二节点7确定的共同秘密(cs),公式12.1可以代入公式14,如下所示:s=v2sxp2c(公式14)s=v2sx(v2cxg)s=(v2sxv2c)xg(公式16)由于ecc代数是可交换的,因此公式15和公式16是等价的,因为:s=(v2cxv2s)xg=(v2sxv2c)xg(公式17)共同秘密(cs)和秘密密钥共同秘密(cs)现在可被用作秘密密钥,或者作为在第一节点3和第二节点7之间进行安全通信的对称密钥算法中的秘密密钥的基础。共同秘密(cs)可以是椭圆曲线点(xs,ys)的形式。这可转换成标准密钥格式,使用由节点3、7所达成一致的标准公开已知操作。例如,xs值可以是256位的整数,可以用作aes256加密的密钥。它也可以使用riremd160转换成160位的整数,用于任何需要这个长度密钥的应用程序。可以根据需要确定共同秘密(cs)。重要的是,第一节点3不需要存储共同秘密(cs),因为这可以基于消息(m)重新确定。在一些示例中,所使用的消息(m)可以存储在数据存储13、17、19(或其他数据存储)中,而不需要主私钥所要求的相同级别的安全性。在一些示例中,消息(m)可以是公开可用的。然而,根据某些应用,共同秘密(cs)可以存储在与第一节点相关的第一数据存储(x)中,前提是共同秘密(cs)与第一节点主私钥(v1c)一样安全被保管。有利地,基于单个主密钥加密对,该技术可用于确定多个共同秘密,该多个共同秘密对应于多个安全秘密密钥共同秘密。生成器值(密钥)的层级结构例如,可以确定一系列连续的生成器值(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’xg(公式20.1)v2c’=v1c+gv’(公式20.2)然后,第二节点7可以确定下一代第一节点第二公钥(p2c’)和第二节点第二私钥(v2s’),类似于上述步骤430和470,但是适用以下公式:p2c’=p1c+gv’xg(公式21.1)v2s’=v1s+gv’(公式21.2)然后,第一节点3和第二节点7可以各自确定下一代共同秘密(cs’)。特别地,第一节点3使用以下公式确定下一代共同秘密(cs’):cs’=v2c’xp2s’(公式22)第二节点7使用以下公式确定下一代共同秘密(cs’):cs’=v2s’xp2c’(公式23)可以以相同的方式计算更多代(cs”,cs”’等)以创建链层级结构。该技术要求第一节点3和第二节点7都跟踪原始消息(m)或原始计算的生成器值(gv)以及它所涉及的节点。由于这是公开信息,因此没有关于保留此信息的安全问题。因此,该信息可以保存在“散列表”(将散列值链接到公共密钥)上,并且通过网络5自由分发(例如使用流技术(torrent))。此外,如果层级结构中的任何单个共同秘密(cs)遭到破坏,不会影响层级结构中的任何其他共同秘密的安全性,前提是私钥v1c、v1s仍然安全。密钥的树结构除了如上所述的链(线性)层级结构之外,还可以创建树结构形式的层级。利用树结构,可以确定用于不同目的的各种密钥,例如认证密钥,加密密钥,签名密钥,支付密钥等,这些密钥都链接到单个安全地维护的主密钥。这在图12中得到最充分的说明,其示出了具有各种不同密钥的树结构901,其中的每一个都可用于与另一方创建共享密钥。树枝可以以几种方式完成,其中三种如下所述。(i)主密钥繁衍在链层级结构中,通过向原始主密钥添加大量繁衍的重新散列的消息,来创建每一个新的“链接”(公钥/私钥对)。例如,(为清楚起见,仅示出了第一个节点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)这提供了树结构903,使用如图13所示的主密钥衍生方法。(ii)逻辑关联在此方法中,树(公钥/私钥对)上的所有节点生成为链(或其它形式),树中节点之间的逻辑关系由表维护,使用指针,表中树中的每个节点仅与树中的其父节点相关。因此,可以使用指针来确定相关的公钥/私钥对,以确定会话的公共密钥(cs)。(iii)消息多重性可以通过链或树中的任何点引入新消息来生成新的私钥/公钥对。消息本身可以是任意的,或者可以带有一些含义或功能(例如,它可能与“真实的”银行帐号等有关)。可能希望安全地保留用于形成新的私钥/公钥对的这种新消息。编码方案交易的元数据可用于访问存储在块外文档中的指令。本文档可能被称为“合约”。用于引用合约的元数据可以以各种方式格式化。但是,这里描述的是合适的编码方案。如果合约所规定的权利赋予了合约持有人或所有者,则合约可以转移。不可转移的合约的一个例子是参与者被命名合约,也就是说,权利被赋予给有特定名字的实体而不是合约的持有者。本编码方案仅讨论可转移的合约。代币代表特定合约,该合约详述或定义了由合约转移的权利的。根据本发明,代币是比特币交易形式的合约的表示。该编码方法使用包括三个参数或数据项的元数据。此数据可以表明:i)合约规定的可用份额的数量(在本文中可以表示为“numshares”);ii)从发送方转移到至少一个接收方的一定数量的转移单元(在本文中可以表示为“shareval”);和iii)用于计算该数量的转移单元的值的因子(这在本文中可称为“挂钩率(peggingrate)”)。该编码方案的一个优点是它可以仅使用上述三个参数来封装合约,或将合约表示为区块链上的代币。实际上,可以至少使用这三个数据项来规定合约。由于该编码方案可用于任何类型的可转移的合约,因此可以设计和应用通用算法。这些元数据项的进一步细节具体如下。可分割代币是交易输出中的价值可被细分为更小的量的代币,该更小的量在多个代币中分配(即,在多个交易中分配)。原型是代币化的法定货币。可分割合约定义为指定非零挂钩率的合约。对于可分割的合约,在交易输出中转移的代币化价值通过挂钩率,与基础比特币(btc)价值相关联。也就是说,合约规定了持有人在挂钩率方面的权利。对于不可分割的代币,没有挂钩率,合约以固定价值规定了持有人的权利(例如不记名债券:“此合约可以赎回1000美元”或礼券:“此合约可用来理发一次”)。对于不可分割的合约,基础交易btc值与合约价值无关。“基础btc价值”是指附加到交易输出的比特币金额(btc)。在比特币协议中,每笔交易输出必须具有非零btc金额才被认为是有效的。实际上,btc金额必须大于设定的最小值(称为“尘埃(dust)”),在撰写本文时,目前设定为546聪(satoshis)。1比特币定义为等于1亿聪。由于比特币交易仅用作帮助所有权交换的手段,因此实际的基础btc金额是任意的:真正的价值由合约文件规定。从理论上讲,每一个代币都可以被尘埃携带。根据当前的编码方案,特别是对于可分割的代币,基础btc价值确实具有含义:它通过挂钩率具有合约的价值。挂钩率本身是任意的,并且选择挂钩率以便使基础btc价值保持较小。使用挂钩率而不是简单地使用尘埃基础化每个代币交易的原因是,因为本发明的协议帮助了可分割性:当代币被分成几个较小金额的交易输出时,不必调整原始合约。不如说,每个细分代币的合约价值仅根据挂钩率和基础btc价值的细分金额计算。有限代币是其中总发行价值由固定的非零数量的份额固定(或“限制”)的代币,其由称为numshares的量定义。因此,根据有限合约不可再发行进一步的份额。例如,赛马的部分所有权合约限于赛马的100%(例如每份额1%的100份额或每份额10%的10份额,等等)。无限合约意味着发行人能够包销进一步的份额发行,例如,将所需金额的法定货币加入其储备账户。必须在所有合约中明确说明numshares。有限合约必须满足numshares>0;通过设置numshares=0来表示无限合约。典型的例子是货币储备(类似于黄金储备),使得储备银行账户中持有的总价值与现有期票(即未赎回的代币)中的总价值相匹配。这一概念不仅限于货币储备,还包括库存。例如,持有印花t恤代币的发行者开始时可库存有10,000件t恤,并可以发行一个可分割的代币来代表这10,000件t恤(其中,例如,每份额=1件t恤)。可以细分原始代币,并且根据由挂钩率定义的交易输出的基础btc价值,每个细分的代币可以赎回多件t恤。然而,如果需求增加,发行人可能决定发行进一步的份额(即增加流通的份额数量(比如)另外10,000份额)。在这种情况下,发行人有责任在其储备账户(即库存仓库)中再存放10,000件t恤,以便包销进一步的发行。因此,任何时候库存中的t恤总数(其中库存充当“储备账户”)=未赎回的份额的总数。挂钩率仅适用于可分割的合约,其中份额的价值(由名为份额价值(shareval)的量表示)与基础btc金额挂钩。例如,合约可以指定发行人承诺以每个基础1btc10,000美元的费率赎回代币。这意味着(例如)具有代币化基础输出值15,400聪的交易将可赎回为1.54美元。挂钩率的值为0表示合约是不可分割的(即只能整体转移,如不记名债券)。当挂钩率设置为0(表示不可分割的代币)时,基础btc价值与合约的价值无关,可以设置为任何金额。通常在这种情况下,希望保持基础btc金额尽可能小(即设置为尘埃)以使操作成本最小化。numshares是(有限)合约下可用的总(固定)份额数。对于有限合约,numshares必须是大于零的整数。对于无限合约,numshares不是固定的,因为可以随时发行更多的份额(只要它们被包销),通过将值设置为0来表示。定义份额为转移单元,shareval是该单位的价值。例如,对于法定货币,转移单元可以设置为1美分。或者,例如,它可以设置为50美分,在这种情况下,转移只能以多个50美分的“批次”执行。shareval也可表示为百分比:例如,如果饲养员希望以10个相等的份额出售赛马,那么shareval=10%。shareval必须>0且必须在合约上定义。发行总额(totallssuance)代表已发行份额的总价值。该价值仅涉及有限合约,无限合约的发行是不固定的,可发行更多份额。如果份额以百分比表示,那么根据定义,totallssuance=100%。对于有限合约,numshares,shareval和totallssuance以下列方式相关联:numsharesxshareval=totallssuancetotallssuance的值为0表示它是无限合约。无限合约的一个例子是法定货币(因此totallssuance设为0);有限合约的例子有:(i)限量版纪念币(铸造1000枚,其中1份额=1枚硬币):totallssuance=1000x1=1000个硬币;(ii)在售票场地的座位,其中totallssuance=可用座位总数。将流通量定义为未花费的代币的总价值(即,由utxo中的交易确定-未花费的交易输出)。所有未花费的交易的完整集保存在可用于所有比特币节点的列表中。例如,如果发行人最初发行10,000美元作为法定货币类型代币,并且随着时间的推移,价值5500美元的代币被赎回,那么流通量=4500美元(即未赎回代币的价值)。此价值应与关联的储备帐户中的余额保持一致。适用于本发明实施例的计算资源(“代理”)的说明性示例本发明可以利用适当设置的计算资源(在本文中为“代理”)来执行所期望的过程的自动化方面。以下提供优选代理的示例(其他实施方式也可被使用)。代理可以与区块链一起操作,在图灵机(turingmachine)的实施方式中将其用作不可擦除的(只读的)纸带(tape)。该代理与区块链网络并行运行,监督和处理(循环)过程的执行。循环过程旨在执行给定任务,例如,过程的自动化,或设备或系统的控制。此并行资源监测区块链的状态,并可以将交易写入区块链。从某种意义上说,它利用区块链作为图灵机的不可擦除的纸带,其定义和特征如下:1.区块链充当图灵机的纸带。区块链中的每个交易代表纸带上的一个方格(cell)。该方格可以包含来自有限字母表的符号。2.带头(tapehead)可读取来自区块链的信息,该信息已被写入区块链。3.带头可以将包含许多交易的新区块写入区块链的末尾。但是,它们无法写入已存在的区块。因此,区块链带是不可擦除的。4.每个交易的元数据可以存储为多重签名支付到脚本散列(p2sh)交易的一部分。代理的一个重要功能是充当监测区块链当前状态的自动化实体。它还可以从任何块外(off-block)源接收信号或输入。根据区块链状态和/或接收的输入,代理可以执行某些动作。代理决定要执行哪个(或哪些)动作。这些可能涉及或不涉及“现实世界”(即块外(off-block))中的动作和/或区块链上的动作(例如创建和广播新交易)。代理所采取的动作可能由区块链状态触发。代理还可以决定要向比特币网络广播的下一组交易,并随后写入区块链。代理的动作并行且同时运行到区块链(例如比特币)网络。从某种意义上说,这扩展了区块链(例如比特币)脚本的功能。这种连续监测实施了“循环”控制流构造,使代理和区块链系统的结合具有图灵完备(turingcomplete)性。图灵机包括两个堆栈:·数据堆栈:这是由上述区块链表示的。·控制堆栈:这是由代理函数表示的。它存储了与重复控制流功能相关的信息。控制堆栈与数据堆栈的分离提供了防止比特币核心内发生无限循环、减轻拒绝服务攻击(denial-of-serviceattack)的优点。代理管理和运行子例程,这些子例程能够通过任何类型的循环构造(例如,for-next,repeatuntil等)进行循环。本文中描述的说明性实施例包括使用“重复”构造的一个示例的过程。用户可以指定索引(i)和限值(j)。这些分别表示当前迭代次数(通常从0开始计数)和重复循环的迭代总次数。对于每一次迭代:1.索引增量为1。对于退出条件,当索引达到限值时,迭代将停止;2.执行包含“如果条件就动作(ifconditionthenaction,简称“(icta)”语句的代码块;该动作可以是区块链上或链外的任何动作;3.计算该子例程的加密散列。这可以作为交易的一部分存储在区块链中。由于散列对每个代码都是唯一的,因此可以验证哪个代码已被使用。循环体包括代码块。每个代码块都包含“ifconditionthenaction”(icta)语句。这就为交易匹配监测了区块链的当前状态:·启动或触发条件(例如,达到特定日期时)。·重复条件(即与前一次迭代相关的元数据或散列)。·停止条件(即循环的最后一次迭代)。icta语句使代理能够根据区块链的当前状态决定下一个要进行的交易。进行下一个交易涉及将交易广播到比特币网络,并将新交易写入区块链。这充当了此迭代已被执行的记录。一旦将交易写入区块链,随后,管理器(manager)将发现前一次迭代已被执行并已被写入区块链,并将执行下一次迭代。后者继续,直到重复循环退出,当索引(i)达到代码块中指定的限值(j)时重复循环退出。每个交易都以可重复使用的方式保存在区块链中。在比特币实施方式中,交易中的每个签名都附加一个签名散列(sighash)标志。该标志可以采用不同的值,每个值指示在没有该签名的所有者参与的情况下,是否可以修改交易的其他部分。可重复使用的交易在各交易输入的一个中,具有sighash标志“签名散列_任何人可支付(sighash_anyonecanpay)”。这允许任何人为交易的输入做出贡献。此参数使代理的icta功能能够执行并重复多次,并使用不同的输入。该功能的使用可限制在已授权的各方——例如,通过可重复使用的交易的版权。icta代码块的“如果条件(ifcondition)”部分可以监测任何类型的条件。这与其他编程语言(例如c,c++,java)类似,并且不限于存储在区块链上的信息。例如,它可以监测日期和时间(即达到某个日期和时间)或监测天气(即当温度低于10℃且正在下雨时),监测合约或信托的条件(即当公司a购买公司b时)。icta代码块的“则行动(thenaction)”部分可以执行多个动作。本发明不限制可采取的动作的数量或类型。该动作不限于区块链上的交易,尽管包含与动作相关的元数据的交易可以写入区块链。元数据可以是任何形式的。然而,在一个实施例中,元数据可存储指向文件的超链接,该文件包含与动作相关的更多数据或指令。元数据也可存储指向散列表的超链接,该散列表包含与动作有关的更多数据或指令以及该动作的散列,该动作的散列作为散列表的查找关键字。代理的控制堆栈可以通过多种方式实施,这些方式属于每个用户的特定需求。例如,控制堆栈的重复循环可以基于任何图灵完备语言。一种可能的语言选择是forth风格的基于堆栈的语言。使用这种语言的一个优点是它在编程风格上使控制堆栈与比特币脚本保持一致,而比特币脚本已经广为人知、广泛使用。使用比特币脚本的备用堆栈作为数据存储空间比特币脚本包含命令,也称为操作码(opcodes),使用户能够将数据移动到称为“alt堆栈”的备用堆栈(alternativestack)。操作码为:·op_toaltstack表示将数据从主堆栈的顶部移动到alt堆栈的顶部。·op_fromaltstack表示将数据从alt堆栈的顶部移动到主堆栈的顶部。这使得来自计算的中间步骤的数据能够存储在alt堆栈中,类似于允许将数据存储在计算器上的“存储器”功能。在一个实施例中,alt堆栈用于配置比特币脚本以解决小的计算任务并将计算结果返回。使用代码注册表管理代理代理还管理其拥有并运行的所有代码的注册表。此注册表的结构类似于将特定键映射到特定值的查找表或词典。关键字和值对分别由代码块的散列(h1)和存储代码的ipv6(互联网协议第6版)地址表示。要使用关键字h1获取代码块,查找表用于获取相关的值(这是存储代码的位置)并相应地获取源代码。代码注册表的实现可多样化。代理的代码的交易元数据,以及循环的重新生成在特定迭代中重新生成代理循环所需的信息,作为元数据存储在区块链上记录的交易中。通过这种方式,区块链上的交易存储或提供对给定迭代循环信息的访问,该迭代循环在代理上被执行。该信息可包括与循环相关的任何变量的值,例如索引i,以及任何其他必要信息,例如代码块中使用的参数的值,或指定可以访问的其他所需信息的位置相关数据。元数据本身作为交易中多重签名支付到脚本散列脚本(p2sh)的一部分存储。跟随交易记录的元数据还能记录关于过去如何执行代码的审查跟踪。代理可以通过多种方式,在每次迭代时重新生成重复循环代码块。代码块可以硬编码到代理本身中,也可以存储在非公用或公用文件中,或者存储为非公用或公用散列表文件中的条目,或者上述的结合。代码块可以是带有硬编码变量的静态代码块,也可以是静态代码块但包含可以填充的参数。参数可以是任何数据格式的单个值,或者可以是小块代码,或者是上述的结合。可以通过直接从交易中的元数据(例如比特币交易)或从诸如内部数据库或私有/公共文件或散列表或上述的任何组合的外部源获取它们来填充参数。指向参数值的外部源的指针可能存储在交易中的元数据中。以下步骤提供了代理如何在第i次迭代中重新生成重复循环代码块的一个示例。在本示例中,代码注册表是散列表,散列值充当表的查找关键字,并存储在有关交易的元数据中。1.代理监测用于交易的区块链,该交易包含代码块的散列值,该代码块的散列值与代码注册表中的条目匹配。2.代理找到包含相应散列(h1)的交易。3.代理读取“元数据-代码散列(metadata-codehash)”,获取代码散列(codehash)字段,以获得h1并使用它来获取代码(c1)。如果ripemd-160(sha256(c1))等于h1,则代码还未更改,可以安全地继续进行下一步。4.代理读取存储索引i的“元数据-代码散列”,并在第i次迭代中重新生成代码。换句话说,在适当的迭代中“重新加载”循环。5.用户的签名包含在p2sh命令中,以验证元数据的来源。6.如果循环的此迭代需要这些数据,则代理读取“元数据-输出散列(metadata-outputhash)”和“元数据-输出指针(metadata-outputpointer)”,以获取前一步骤的输出。应当理解,基于上述变形的不同结合,存在许多不同的用于实施比特币门的模式。以下选择的模式仅用于说明,并非旨在进行限制。根据模式的具体属性和门逻辑的预期用途,每种模式可适用于实施一种类型的门,或几种类型的门,或适用于所有类型的门:应当说明的是,上述实施例说明而非限制本发明,在不脱离本发明的由所附权利要求限定的范围的情况下,本领域技术人员将能够设计出许多替代性实施例。在权利要求中,括号中的任何附图标记不应解释为对权利要求的限制。词语“包括(comprising)”和“包括(comprises)”等并非在整体上排除其他元件或步骤的存在,尽管这些元件和步骤并没有在任何权利要求或说明书中列出。在本说明书中,“包括(comprises)”意指“包括(includes)或由......组成(consistsof)”,“包括(comprises)”意指“包括(including)或由......组成(consistingof)”。元件的单数引用不意味着排除这些元件的复数引用,反之亦然。本发明可以借助于包括若干不同元件的硬件,以及借助适当编程的计算机来实施。在列举了若干装置的设备权利要求中,这些装置中的若干个可以由硬件的同一个部件来体现。不争的事实是,在相互不同的从属权利要求中列举了某些方法,并不代表这些方法的结合不能获得有益效果。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1