使用分布式散列表和区块链保护计算机软件的方法及系统与流程

文档序号:16368758发布日期:2018-12-22 08:34阅读:163来源:国知局
本发明涉及区块链技术、安全机制和资产转移。本发明特别适于用作下述机制:所述机制用于保护诸如计算机软件等数字资产,并用于通过使用分布式散列表和点对点分布式分类账(例如,区块链)来授权/控制对资产(例如,计算机软件)的访问。
背景技术
:在本文中,使用术语“区块链”来包括所有形式的电子的、基于计算机的分布式分类账。这些包括但不限于基于共识的区块链和交易链技术、许可和未许可的分类账、共享分类账及其变形。区块链技术最广为人知的应用是比特币分类账,尽管已经提出并开发了其他区块链实施方案。虽然本文出于方便和说明的目的可以引用比特币,但是应当指出的是,本发明并不限于以比特币区块链的方式实施,其他替代性区块链实施方案和协议也均落入本发明的范围内。区块链是点对点的电子分类账,该电子分类账被作为基于计算机的分散的分布式系统,该系统由块构成,而这些块又由交易构成。每一笔交易都是一种数据结构,该数据结构对区块链系统中的参与者之间的数字资产的控制权的转移进行编码并且包括至少一个输入和至少一个输出。每个块均包含前一个块的散列,这些块被链接在一起,创建了一个永久的、不可更改的记录,记录了自创建以来已被写入区块链的所有交易。交易包含嵌入其输入和输出中的称为脚本的小程序,这些小程序指定了如何以及通过何人可访问交易的输出。在比特币平台上,这些脚本是使用基于堆栈的脚本语言来编写的。为了将交易写入区块链,交易必须经过“验证”。网络节点(矿工)执行操作以确保每比交易都是有效的,无效交易从网络中被拒绝。安装在节点上的软件客户端通过执行其锁定和解锁脚本而对未耗尽的交易(utxo)执行此验证工作。如果执行锁定脚本,然后解锁脚本的计算结果为真,则该交易是有效的并且交易被写入区块链。因此,为了将交易写入区块链,该交易必须i)由接收交易的第一节点验证--如果交易被验证,则该节点将该交易中继至网络中的其他节点;并且ii)添加至由矿工建造的新的块;并且iii)被开采,即添加至过去交易的公共分类账。尽管区块链技术最广为人知的是用于加密货币的实施方案,但是数字企业家已经开始探索比特币所基于的加密安全系统和可存储在区块链上以实现新系统的数据这两者。如果区块链可用于不限于加密货币领域的自动化任务和过程,则将是非常有利的。这样的解决方案将能够利用区块链的好处(例如,永久的防篡改的事件记录、分布式处理等)同时在其应用中更通用。目前研究的一个领域是使用区块链来实施“智能合约”。这些是设计成自动执行机器可读合约或协定的条款的计算机程序。与区块链相关的引起关注的另一领域是使用“令牌”(或“彩色硬币”)来通过区块链表示和转移现实世界的实体。潜在的敏感或秘密项目可由没有可辨别的含义或价值的令牌来表示。因此,令牌充当了允许从区块链中引用真实世界的项目的标识符,从而提供增强的安全性。能够使用诸如密码技术和区块链技术之类的与安全相关的特征来传输、共享或控制对诸如计算机软件等数字资产的访问,将是有利的。保护计算机软件的完整性和共享的传统方法涉及计算机软件的可执行文件的数字签名。例如,使用如公钥和私钥等加密密钥对可执行文件或其他相关代码进行签名。公钥通常是从如认证机构等可信的中心机构获得的。计算机软件通常附带有包含合同义务的许可证。许可证可能包含对软件的使用或再分配进行管理的条款。在计算机软件或相关许可证被非法转移给另一个用户的情况下可能会出现问题。对已经包括在本说明书中的对于文件、行为、材料、设备、物品等的任何论述不应被视为承认:任何或所有这些事项形成现有技术基础的一部分,或者任何或所有这些事项是与本发明相关领域中的公知常识,即使其存在于本发明的每个权利要求的优先权日之前。在整个说明书中,词语“包括(comprise)”或其变形比如“包括(comprises)”或“包括(comprising)”将被理解为意味着包括所陈述的元件、整体或步骤,或者元件、整体或步骤的组,但并不排除任何其他元件、整体或步骤,或者元件、整体或步骤的组。技术实现要素:本发明的各实施方式可包括用于控制访问和/或传输受控的数字资源或资产的方法及相应的系统。本发明可包括计算机实现方法,该方法使用分布式散列表和点对点分布式分类账(例如区块链)来确定用于保护受控数字资源的元数据(m)。本发明可被描述为安全方法/系统或控制方法/系统。本发明可被描述为一种方法/系统,用于保护受控数字资源的完整性、控制和/或访问。本发明可包括认证或授权方法/系统。在一个实施方式中,受控数字资源可以是计算机软件。此后,可使用术语“软件”或“计算机软件”代替“受控数字资产”。该方法可包括以下步骤:确定与计算机软件相关的数据(d1);确定计算机软件的第一散列值(h1);基于数据(d1)和计算机软件来确定第二散列值(h2);通过通信网络将数据(d1)、第一散列值(h1)和第二散列值(h2)发送到条目,以便存储在分布式散列表中,其中,第二散列值(h2)是关键字--值对中的关键字,数据(d1)和第一散列值(h1)是关键字--值对中的值;以及确定包括第二散列值(h2)的元数据(m),以便存储在点对点分布式分类账上。该方法还可包括确定第一赎回脚本(rs1),其中,第一赎回脚本基于:数据(m);以及与代理(a)相关的代理公钥(pa)。赎回脚本可为用于区块链交易(tx)的赎回脚本。该方法还可包括:通过通信网络,通过通信网络,发送第一数据输出(o1),以便存储在点对点分布式分类账上,该步骤基于:待传送的第一数量的加密货币(c1)的指示,其中,第一数量的加密货币(c1)与第一赎回脚本(rs1)相关;以及第一赎回脚本(rs1)。在该方法中,数据(d1)可包括与计算机软件相关的许可证。许可证与第一用户(u1)或第二用户(u2)相关,并且许可证还包括与第一用户(u1)相关的第一用户公钥(pu1)或者与第二用户(u2)相关的第二用户公钥(pu2)。许可证还包括与第一用户(u1)或第二用户(u2)的至少一个电子设备相关的散列值。许可证还包括第一散列值(h1)在该方法中,第二散列值(h2)可包括默克尔树的顶部散列值。本发明可提供一种用于授权第一用户(u1)访问计算机软件的计算机实现方法,该方法包括:根据以上所描述的方法,确定用于保护计算机软件的元数据(m);确定第二赎回脚本(rs2),其中,第二赎回脚本(rs2)基于:元数据(m);与代理(a)相关的代理公钥(pa);以及与第一用户(u1)相关的第一用户公钥(pu1);通过第二通信网络,将第二数据输出(o2)发送到点对点分布式分类账,该步骤基于:来自第一数据输出(o1)的第一数量的加密货币(c1)将被转移的指示;以及第二赎回脚本(rs2)。该方法还可包括确定指示计算机软件或许可证的位置的标识符;将标识符分配给关键字--值对中的值;以及通过通信网络;将标识符发送到分布式散列表中的条目。一种确定计算机软件或许可证的位置的方法,该方法包括:根据以上所描述的方法,确定用于保护计算机软件的元数据(m);确定指示计算机软件或许可证的位置的标识符;将标识符分配给关键字--值对中的值;通过通信网络将标识符发送到分布式散列表上的条目;根据第一赎回脚本(rs1),确定元数据(m);从元数据(m)中,获取第二散列值(h2);通过通信网络将第二散列值(h2)发送到与分布式散列表的参与节点相关的处理器;以及从参与节点的处理器中,确定指示计算机软件或许可证的位置的标识符。在上述方法中,加密货币可为比特币,并且点对点分布式分类账是可为比特币区块链。本发明的各实施方式可包括元数据被提供到赎回脚本中的一位置的步骤,该位置在区块链协议中指定为加密密钥的位置。本发明的一个或多个实施方式可包括在区块链交易中嵌入元数据的方法,基本上如下面标题为“元数据”的部分中所描述。该方法可包括以下步骤:生成具有与数字资产相关的输出(txo)和赎回脚本的散列的区块链交易(tx),该赎回脚本包括:包括令牌的元数据,该令牌是令牌化实体的代表或指代;以及至少一个公共加密密钥。数字资产可为一定数量的加密货币。元数据可被提供到赎回脚本中的一位置,该位置在区块链协议中指定为加密密钥的位置。交易tx可提交给区块链网络。一种计算机软件程序,包括机器可读指令,以使处理设备实施以上所描述的方法。一种用于使用分布式散列表来确定用于保护计算机软件的元数据(m)的计算机系统,该系统包括与节点相关的处理设备,该处理设备配置为:确定与计算机软件相关的数据(d1);确定计算机软件的第一散列值(h1);基于数据(d1)和计算机软件,确定第二散列值(h2);通过通信网络,将数据(d1)、第一散列值(h1)和第二散列值(h2)发送到条目,以便存储在分布式散列表中,其中,第二散列值(h2)被分配给关键字--值对中的关键字,并且数据(d1)和第一散列值(h1)是关键字--值对中的值;以及确定包括第二散列值(h2)的元数据(m)。附图说明图1示出了散列表的示例。将参照下列附图对本发明的各示例进行描述:图2示出了使用分布式散列表来确定用于保护计算机软件的元数据(m)的示例系统的示意图;图3示出了使用分布式散列表来确定用于保护计算机软件的元数据(m)的计算机实现方法的流程图;图4示出了默克尔树的示例;图5示出了参考计算机软件和与计算机软件相关的许可证的默克尔树的示例;图6示出了使用分布式散列表来确定指示计算机软件的位置的标识符的计算机实现方法的流程图;以及图7示出了示例处理设备的示意图。具体实施方式本发明总体上涉及利用分布式散列表和点对点(p2p)分布式分类账—比如比特币区块链—来实现保护计算机软件的方法及系统。虽然下面所描述的各实施方式可具体指在比特币区块链(本文中称为区块链)上发生的交易,但应当理解的是,本发明可使用其他p2p分布式分类账来实现。出于简单性考虑,下面使用区块链来对本发明的各方面进行描述,仅因为其标准化程度很高并且有大量相关的公开文档。分布式散列表在典型的客户端/服务器模型中,中央服务器可能负责大部分资源。这意味着在中央服务器受到攻击或出现故障的情况下,存储在中央服务器上的大多数资源可能会受到危害。相反,在分布式模型中,资源在参与节点之间共享(“分布式”)。以这种方式,利用所有参与节点的容量,一个服务器的故障不会损害大部分资源。图1示出了散列表的示例。散列表由关键字--值对构成。每个关键字--值对的关键字均通过散列函数映射至索引。索引定义了关键字--值对的存储的值的位置。分布式散列表(dht-distributedhashtable)是将分布式模型应用于散列表的示例。类似于散列表,dht包括关键字--值对并且提供一种在仅给出关键字的情况下,定位(“查找”)关键字--值对中的值的有效方法,。然而,与散列表相比,关键字--值对分布并存储于许多参与节点中。以这种方式,存储和维护关键字--值对的责任由参与节点共享。以与散列表相同的方式,dht中的每个关键字--值对被映射至一个索引。通过对关键字执行散列函数来为每个关键字--值对确定索引。例如,加密安全散列算法sha-1可用于确定索引。通过密钥空间分区为每个参与节点分配至少一个索引。对于被分配给参与节点的每个索引,参与节点存储该关键字--值对中的值。有利的是,可有效地获取关键字--值对中的值。为了获取与关键字相关的值,一个节点可执行“查找”来确定责任节点(通过索引)。然后可访问责任节点以确定该值。比特币和区块链如本领域所公知的,区块链是交易类型分类账,存储容量遍布于网络节点上,这些网络节点参与基于比特币协议的系统。每个比特币交易均被广播至网络,交易被确认然后聚合成块。通过将这些块存储在多个参与节点上,而将这些块随后包括在区块链上。加密货币的p2p分布式分类账的完整版本包含以加密货币执行的每笔交易。因此,提供了不断增长的交易数据记录列表。由于输入到区块链上的每笔交易都是加密联合执行的,因此区块链对于篡改和修改是很强硬的,即使该篡改和修改来自参与节点的操作人员。由于区块链的透明性,对于每笔交易,历史都公开可用。区块链的另一优点是交易也是交易的记录,即,交易被嵌入在区块链内。以这种方式,与交易有关的信息在实际交易中被捕获。这个记录是永久性的且不可变的,因此取消了需要第三方将交易记录保存在单独的数据库中的要求。有利地,本发明可使用技术来促进经由区块链的诸如软件等资产的这些控制或转移,并且本发明可使得能够以结合使用加密密钥的安全方式执行转移,而不需要对底层区块链协议进行任何修改。付费脚本散列和多重签名虽然下面的各实施方式可具体涉及使用比特币协议的付费脚本散列(p2sh-pay-to-script-hash)方法的交易,但是应当理解的是,本发明也可使用区块链比特币协议的另一功能等同的方法来实现。区块链上的每个交易记录包括脚本,该脚本包括指示交易的信息和一些公钥。这些公钥可与加密货币的发送者和接收者相关。p2pkh输入包括发送者的公钥。p2pkh输出包括接收者的公钥的散列。p2sh多输入包括多发送者的签名。脚本可被视为记录有区块链上所记录的每笔交易的指令列表,其描述了用户可如何获得对交易记录中指定的加密货币的访问权。作为背景,在比特币协议的标准p2sh方法中,输出脚本或赎回脚本可采取以下形式:<numsigspubklpubk2...pubk15numkeysop_checkmultisig>其中,numsigs是满足赎回脚本以解锁交易所需的有效签名的数量“m”;pubkl,pubk2...pubk15是对应于解锁交易的签名的公钥(最多高达15个公钥),并且numkeys是公钥的数量“n”。在比特币协议中,基于用户私钥的签名可使用椭圆曲线数字签名算法来生成。然后,签名用于赎回与输出脚本或赎回脚本相关的加密货币。当用户赎回输出脚本或赎回脚本时,用户提供其签名和公钥。输出脚本或赎回脚本随后将根据公钥验证签名。为了赎回以上赎回脚本,至少需要与公钥相对应的数量“m”的签名。在一些示例中,公钥的顺序是重要的,并且用于签名的数量“n”中的“m”个签名必须按顺序完成。例如,考虑“m”为2且“n”为15的情况。如果有两个签名可供使用,sigl(对应于pubkl)和sig15(对应于pubk15),则必须首先由sigl签署赎回脚本sigl5紧随其后。系统概述现在将对用于对用以保护计算机软件的元数据(m)进行确定的方法、设备和系统进行描述。图2示出了系统1,该系统1包括第一节点3和第二节点7,其中,第一节点3通过通信网络5与第二节点7通信。第一节点3具有相关的第一处理设备21,第二节点5具有相关的第二处理设备27。第一节点3和第二节点7的示例包括电子设备,比如计算机、平板计算机、移动通信设备、计算机服务器等。用以记录和存储关键字--值对的dht13也在图2中示出。dht13可与一个或多个处理设备19相关以接收、记录和存储关键字--值对的值。处理设备19可由dht13的“参与节点”使用。如上所述,dht13提供了用以对关键字--值对的值进行定位的有效方法。图2还示出了用以记录交易的p2p分布式分类账14。p2p分布式分类账14可与一个或更多个处理设备20相关以接收和记录交易。如上所述,p2p分布式分类账14的示例是比特币区块链。因此,在区块链的环境中,与p2p分布式分类账14相关的处理设备20可为被称为“矿工”的处理设备。第一节点3与第一用户23相关,第二节点7与第二用户24相关。在一个示例中,第一节点3可代表计算机软件的供应商。在另一示例中,第一节点3可代表代理或服务提供商。在又一示例中,第一节点3可表示计算机软件的用户。类似地,第二节点7可代表代理、服务提供商、计算机软件的供应商或者计算机软件的用户。在一个示例中,第一节点3实施如图3和图6所示的方法100、500。在另一示例中,第二节点7实施方法100、500。虽然下面的示例性实施例可涉及作为实施方法的第一节点3,但是应当理解的是,本发明还可被调整或修改以由其他节点实施。如图3所示的方法100包括确定110与计算机软件相关的数据(d1)。数据(d1)还可包括与计算机软件相关的许可证。方法100还包括确定120基于计算机软件的第一散列值(h1)。在一个示例中,第一散列值(h1)可与计算机软件的可执行文件有关。方法100还包括确定130基于数据(d1)和计算机软件的第二散列值(h2)。在一个示例中,第二散列值(h2)可表示计算机软件的细节以及与计算机软件相关的许可证。在另一示例中,第二散列值(h2)可包括附加信息。方法100还包括通过通信网络5,将数据(d1)、第一散列值(h1)和第二散列值(h2)发送140到分布式散列表13上的条目,其中,第二散列值(h2)被分配给关键字--值对中的关键字,数据(d1)和第一散列值(h1)被分配给关键字--值对中的值。关键字--值对中的值还可包括指示计算机软件或许可证的位置的标识符。方法100还包括基于第二散列值(h2)对元数据(m)进行确定150,以使该元数据包括在点对点分布式分类账14中。在一个示例中,元数据(m)可包括在第一赎回脚本(rs1)中,以包含在点对点分布式分类账14中。现在将对该方法的详细示例进行描述。确定与计算机软件相关的数据110如上所述,方法100包括确定与计算机软件相关的数据(d1)110。确定110数据(d1)可包括从用户、节点或数据存储器接收数据(d1)。确定110数据(d1)还可包括在第一节点3处生成数据(d1)。在一个示例中,第一节点3可经由用户接口15从第一用户23接收数据(d1)。在另一示例中,第一节点3可从第二用户24接收数据(d1)。在又一示例中,第一节点3可从数据存储器17接收数据(d1)。数据(d1)与计算机软件相关,在该计算机软件中,数据(d1)可识别计算机软件、附加信息、计算机软件的许可证或者可指示计算机软件的位置。例如,数据(d1)可包括对计算机软件进行识别的字符串或数据结构。字符串或数据结构可包括识别关键字的集合和/或关于计算机软件的附加信息。附加信息的示例可为计算机软件的版本的标识符,例如数字。例如,如果计算机软件被授权bobsoftware,版本是3.0,则字符串或数据结构(d1)可包括“bobsoftware/3.0”。在另一示例中,数据(d1)可包括与计算机软件相关的许可证的标识符。这可能是软件许可证标识号(id)或软件许可证密钥。在另一示例中,许可证的标识符可包括许可证内容的加密散列。数据(d1)还可包括指示计算机软件的存储位置的标识符。在一个示例中,标识符可包括用于因特网上对象的url。在另一示例中,可提供至诸如散列表或分布式散列表之类的存储库中计算机软件的存储位置的链接。在又一示例中,数据(d1)可包括对计算机软件的供应商进行识别的信息。这可能包括个人详细信息,比如与供应商相关的姓名、地址、联系方式或公钥。基于计算机软件,确定第一散列值(h1)120还如上所述,方法100还包括确定120计算机软件的第一散列值(h1)。确定120第一散列值(h1)可包括从用户处接收第一散列值(h1)或者从数据存储器中访问第一散列值(h1)。确定120第一散列值(h1)还可包括计算第一节点3处的散列值。在一个示例中,第一节点3可经由用户接口15从第一用户23处接收第一散列值(h1)。在另一示例中,第一节点3可从第一用户23处接收第一散列值(h1)。在又一示例中,第一节点3可从本地数据存储器17或远程数据存储器中访问第一散列值(h1)。在一个示例中,第一散列值(h1)是计算机软件的可执行文件。计算机软件的可执行文件可从如因特网等的通信网络5中获取。在另一示例中,可执行文件可由第一用户23或第二用户24提供。在又一示例中,可执行文件可从数据存储器17中获取。在又一示例中,可执行文件可从如散列表或dht等的存储库中获取。软件的可执行文件的散列可使用sha-256算法来确定,以创建信息的256位表示。应当理解的是,可使用其他散列算法,包括安全散列算法(sha)家族中的其他算法。一些特定示例包括sha-3子集中的示例,所述sha-3子集包括sha3-224、sha3-256、sha3-384、sha3-512、shake128、shake256。其他散列算法可包括race完整性基元评估消息摘要(ripemd-raceintegrityprimitivesevaluationmessagedigest)家族中的散列算法。特定示例可包括ripemd-160。其他散列函数可包括基于zemor-tillich散列函数和基于背包的散列函数的家族。基于数据(d1)和计算机软件,确定第二散列值(h2)130方法100还包括基于数据(d1)和计算机软件,确定130第二散列值(h2)。在一个示例中,第二散列值(h2)可基于数据(d1)的级联的散列和计算机软件的可执行文件(或可执行文件的散列,也就是,第一散列值(h1))来确定。在另一示例中,第二散列值(h2)可基于数据(d1)的级联的散列和计算机软件的可执行文件(或可执行文件的散列)以及附加信息来确定。附加信息可包括第一用户23(pu1)或第二用户24(pu2)的公钥。在另一示例中,附加信息可包括与第一用户23或第二用户24相关的实体的标识符。例如,实体可为第一用户23或第二用户24的雇主。在另一示例中,实体可为第一用户23或第二用户24的雇主。附加信息还可包括与第一节点3、第二节点7、第一用户23或第二用户24相关的设备的设备标识符。设备的示例是如图2所示的第一处理设备21。设备标识符可包括下述各项中的至少一项:mac地址、主板序列号或设备标识号。设备标识符还可为mac地址、主板序列号或设备标识号中的至少两者的级联。在另一示例中,设备标识符可包括与mac地址、主板序列号或设备标识号或上述级联相关的散列值。在又一示例中,附加信息可包括与计算机软件相关的许可证的到期日期。与计算机软件相关的许可证在另一示例中,第二散列值(h2)可基于数据(d1)的级联、计算机软件的可执行文件(或可执行文件的散列)、附加信息或与计算机软件相关的许可证的来确定。许可证的表示可为指定许可证内容的文件或文档,例如纯asc1i文本、pdf文档或word文档。第二散列值(h2)可包括原始形式的许可证,或者例如第二散列值(h2)可提供许可证在诸如因特网的公共可访问通信网络上的位置的链接。在另一示例中,第二散列值(h2)可提供许可证在诸如散列表或dht之类的存储库中的位置的链接。在又一示例中,第二散列值(h2)可提供许可证在诸如数据存储器17等基于计算机的资源中的位置的链接。在一个示例中,许可证可包括与计算机软件相关的第一散列值(h1)。与计算机软件相关的许可证还可包括如上所述的附加信息。在一个示例中,许可证可与第一用户23或第二用户24相关。许可证可包括第一用户23(pu1)或第二用户24(pu2)的公钥。在另一示例中,许可证可包括与第一用户23或第二用户24相关的实体的标识符。与计算机软件相关的许可证还可包括与第一节点3、第二节点7、第一用户23或第二用户24相关的设备的设备标识符。设备的示例是如图2所示的第一处理设备21。设备标识符可包括下述各项中的至少一项:mac地址、主板序列号或设备标识号。设备标识符还可为mac地址、主板序列号或设备标识号中的至少两者的级联。在另一示例中,设备标识符可包括与mac地址、主板序列号或设备标识号或上述级联相关的散列值。第一用户23可为计算机软件的供应商,第二用户24可为计算机软件的接收者(“终端用户”)。在另一示例中,第二用户23可为计算机软件的供应商,第二用户24可为计算机软件的终端用户。在一个示例中,与计算机软件相关的许可证仅可授权一个终端用户(“单用户许可证”)。在另一示例中,与计算机软件相关的许可证可授权终端用户的一个设备(“单设备许可证”)。在另一示例中,与计算机软件相关的许可证可授权终端用户的一个以上的设备(“多设备许可证”)。在另一示例中,可存在一个以上的终端用户(“多用户许可证”)。在另一示例中,与计算机软件相关的许可证可为每个终端用户授权一个设备。在另一示例中,与计算机软件相关的许可证可为每个终端用户授权一个以上的设备。在许可证与第一用户23或第二用户24相关的情况下,许可证可包括与第一用户23相关的第一用户公钥(pu1)以及与第二用户24相关的第二用户公钥(pu2)。默克尔(merkle)树在另一示例中,许可证可为默克尔树的顶部散列值。默克尔树的示例在图4中示出。在默克尔树中,每个节点的散列值是其相应的“子”节点的散列。例如,散列值hash-a305是两个“子”节点309和311的散列值的散列。可以看出,默克尔树的顶部散列值hash-ab303包括默克尔树中的所有散列值。也就是说,默克尔树的顶部散列值hash-ab303捕获树的底部的四片“叶子”的散列值,即,al317,a2319,bl321和b2323。在本发明的示例中,默克尔树的每片“叶子”可代表许可证的一方面信息。图5中示出了示例性许可证。数据(d1)417在散列值hash-d409中被捕获,软件419的可执行文件在散列值hash-s411(h1)中被捕获,用户23和/或用户24的公钥421在散列值hash-p413中被捕获,以及到期日期423在散列值hash-e415中被捕获。可以看出,节点405和节点407分别捕获与数据(d1)417和软件419以及公钥421和到期日期423的叶子相关的散列值。应当理解的是,上面未另外描述的其他信息可包括第二散列值(h2)所基于的附加信息。将数据(d1)、第一散列值(h1)和第二散列值(h2)发送到分布式散列表140方法100还包括通过通信网络5将数据(d1)、第一散列值(h1)和第二散列值(h2)发送140到分布式散列表13上的条目。在一个示例中,第二散列值(h2)可为关键字--值对中的关键字,数据(d1)和第一散列值(h1)可为关键字--值对中的值。在另一示例中,如上所述的附加信息也可为关键字--值对中的值的一部分。这包括但不限于:第一用户23或第二用户24的公钥;与第一节点3,第二节点7、第一用户23或第二用户24相关的设备的设备标识符;指示计算机软件或许可证的位置的标识符;或与许可证相关的附加信息。如上所述,dht13由关键字--值对构成,其中,每个关键字--值对被分配给一个索引。在一个示例中,第二散列值(h2)可用于生成索引。可对第二散列值(h2)执行散列函数或加密散列函数。例如,可使用加密函数sha-1:索引=sha-1(h2)第二散列值(h2)是dht13中的关键字--值对中的关键字,数据(d1)和第一散列值(h1)是关键字--值对中的值,关键字和值被发送到dht13的任意参与节点。在一个示例中,诸如输入(关键字,值)的消息可被发送到dht13的参与节点,其中,关键字是第二散列值(h2),而值是数据(d1)和第一散列值(h1)。可围绕所有参与节点发送消息,直到被分配给索引的参与节点接收到该消息为止,该节点被分配到如秘钥空间分区所指示的那样的索引。在消息中示出的被分配给索引的参与节点可随后将关键字--值对存储在dht13上并且承担对与关键字--值对相关的条目进行维护的责任。有利的是,任何给定关键字的值都可从dht13中获取。在一个示例中,第一用户23或第二用户24可能希望获取该值。经由第一节点3、第二节点7或另一未另外示出的节点,第一用户23或第二用户24可向dht13的任意参与节点提供诸如获取(关键字)的请求消息。随后可围绕所有参与节点发送请求消息,直到被分配给索引的参与节点接收到该请求消息为止,该节点被分配到如秘钥空间分区所指示的那样的索引。确定元数据(m)150方法100还包括确定150元数据(m),该元数据(m)包括第二散列值(h2)。确定元数据(m)可包括从用户、节点或数据存储器接收元数据(m)。元数据(m)可包括在例如p2p分布式分类账(区块链)14上的交易的p2sh多重签名第一赎回脚本(rs1)中的公钥可用的15个位置中的一个或多个位置上。p2p分布式分类账14上的交易的第一赎回脚本(rs1)可表示令牌化交易(“发行令牌”)的发行或创建,该令牌化交易代表包括在元数据(m)中的内容。在一个示例中,令牌可由代理(a)发出。在比特币协议的p2sh方法中,元数据可通过下面所描述的方法包括在赎回脚本中。元数据元数据(m)可嵌入在p2sh多重签名赎回脚本(rs1)中可用于公钥的15个位置中的一个或多个。例如,赎回脚本(rs1)可采取以下形式:<numsigs元数据1元数据2...pubklpubk2...numkeysop_checkmultisig>其中,元数据1和元数据2各自都包括在赎回脚本中取代公钥的元数据,而pubkl和pubk2是公钥。换言之,元数据可提供至赎回脚本中的一位置,该位置是通过区块链协议指定的作为应当提供给加密密钥的位置。这提供了以下优点:不对底层区块链协议进行任何修改,即可将元数据合并到交易(tx)中。元数据(m)可包括第二散列值(h2)。元数据(m)还可包括用以描述与计算机软件或许可证相关的条件的描述或关键字,例如许可证的日期、名称、出生日期、地址、联系方式或与许可证相关的用户的其他详细信息。在另一示例中,可包括与加密货币的数量相关的信息。元数据(m)可以多种方式包括信息。在一个示例中,可包括信息的内容。在另一示例中,可包括信息的加密散列。信息的散列可使用sha-256算法来确定,以创建信息的256位表示。应当理解的是,可使用其他散列算法,包括安全散列算法(sha)家族中的其他算法。一些特定示例包括sha-3子集中的示例,所述sha-3子集包括sha3-224、sha3-256、sha3-384、sha3-512、shake128、shake256。其他散列算法可包括race完整性基元评估消息摘要(ripemd-raceintegrityprimitivesevaluationmessagedigest)家族中的散列算法。特定示例可包括ripemd-160。其他散列函数可包括基于zemor-tillich散列函数和基于背包的散列函数的家族。在本发明的另外的实施方式中,包括以上方面中的一者或多者的组合可包括在元数据(m)中。由于元数据(m)可通过诸如区块链的p2p分布式分类账14公开或者通过不安全的网络传输,因此出于隐私原因可能希望掩饰或隐藏元数据(m)的特定细节。因此,在本发明的实施方式中多重签名p2sh比特币交易的使用具有优点,这使得能够传输和永久记录与计算机软件和许可证相关的信息。该记录通过在交易的输出脚本——例如,赎回脚本——中包含元数据来实现。第一赎回脚本如上所述,赎回脚本是比特币协议的标准p2sh方法中的输出脚本的示例,赎回脚本描述了用户可如何获得对交易记录中指定的加密货币的访问。在本发明中,用于发行令牌的第一赎回脚本(rs1)可基于元数据(m)。第一赎回脚本(rs1)还可包括与代理私钥(va)形成密码对的代理公钥(pa)。以这种方式,代理私钥(va)需要“解锁”或花费与该交易相关的加密货币。在一个示例中,用于发行令牌的第一赎回脚本(rs1)可包括元数据(m)。第一赎回脚本(rs1)还可包括代理公钥(pa)。在该示例中,第一赎回脚本(rs1)可为以下形式:<op_lpa元数据1元数据2op_3op_checkmultisig>其中,op_l表示满足第一赎回脚本(rs1)解锁交易而所需的签名的数量(“numsigs”),op_3表示赎回脚本中的公钥的数量(“numkeys”)。在该示例中,第一赎回脚本(rs1)可包括用于元数据--元数据1和元数据2--的两个指定字段。元数据1和元数据2的具体示例在下面的表1中示出。表1该示例包括向元数据1中的许可证提供指针,在许可证的尺寸排除了包括在元数据(m)中的这样的细节的情况下,元数据1可能是有用的。此外,由于元数据(m)可公开或者通过不安全的网络传输,因此出于隐私原因可能希望掩饰或隐藏令牌的特定细节。元数据的前4个字节表示许可证类型。例如,许可证类型可代表诸如bobsoftware之类的计算机软件的名称。在另一示例中,许可证类型可表示许可证的授权类型,比如如上所述的“单用户”或“多设备”。接下来的16个字节保存实际电子许可证文件的位置的ip地址,从而使得ipv6地址得以使用。应当指出的是,在一些实施方式中,这个值可指向种子文件的种子,使得许可证文件可分布在云上而不是被集中。接下来的12个字节包含特定于许可证类型的数据。元数据2的前20个字节是实际许可证文件的散列,在应用于许可证文件的实际内容的sha256上使用ripemd-160。由于实际许可证文件是可获取的,这允许根据合同验证交易。应当指出的是,取决于特定实施方式的要求,许可证文件本身可是完全公开的(未加密的和人类可读的)或者可加密以保护隐私。可根据许可证类型来使用元数据2的剩余12个字节的内容。从以上提供的第一赎回脚本(rs1)的示例可以看出,发行令牌必须由代理(a)签名以便使用。表2中提供了发行令牌的交易的示例,为简洁起见,未示出矿工的费用。表2表2的第4行至第8行表示交易的输入,是包括在发行令牌(即,“令牌化”)中的第一数量的加密货币(c1)。在该示例中,第一数量的加密货币(c1)是将第一数量的加密货币转移至代理(a)的利益上的先前交易(id-110)的结果,因此先前交易(id-110)输出脚本(赎回脚本id-110)包括代理的公钥(pa)。相应地,要解锁该先前输出,必须使用第一用户的私钥(va)对脚本(赎回脚本id-110)进行签名。表2的第10行至第12行表示交易(id-600)的第一(且唯一)输出,在这种情况下,交易(id-600)的第一(且唯一)输出表示发行令牌正在被创建并被转移回代理。第10行显示输出值,该输出值是第一数量的加密货币(c1)。第12行显示输出脚本,该输出脚本包括如在比特币协议的p2sh方法中使用的“<赎回脚本的散列>”。在该示例中,赎回脚本是呈如上所述的形式的第一赎回脚本(rs1)。表2中示出的交易(id-600)的输出随后以第一数据输出(o1)记录在p2p分布式分类账14上。具体地,第一数据输出(o1)可包括在交易中转移的第一数量的加密货币(c1)。第一数据输出(o1)还可包括第一赎回脚本(rs1)的散列。在第一数量的加密货币(c1)的未来交易——例如令牌向第一用户23或第二用户24的转移——中,用以对第一数量的加密货币(c1)进行解锁的脚本(例如,未来交易的输入脚本签名)可采取以下形式:op_0sig-vasig-vul<op_lpapu1元数据1元数据2op_4op_checkmultisig>其中,sig-vu1指示第一用户23的签名。应当指出的是,以上脚本假定仅需要来自代理(a)或第一用户23的一个签名来解锁第一数量的加密货币(c1)。发行令牌可通过第二赎回脚本(rs2)被转移至另一用户。变形第二赎回脚本与计算机软件和许可证相关的令牌可被从代理(a)转移至另一用户,例如第一用户23或第二用户24。在一个示例中,令牌的转移可代表授权用户对计算机软件或许可证进行访问。转移可通过第二赎回脚本(rs2)来实现。在一个示例中,代理(a)希望将发行令牌转移给第一用户23。第一用户23可代表例如计算机软件的供应商。在该示例中,第二赎回脚本(rs2)可基于元数据(m)、与代理(a)相关的代理公钥(pa)、以及与第一用户23相关的第一用户公钥(pu1)。第二赎回脚本(rs2)可以是以下形式:<op_lpapul元数据1元数据2op_4op_checkmultisig>在该示例中,第二赎回脚本(rs2)包括与第一赎回脚本(rs1)相同的两个元数据字段。第二赎回脚本(rs2)还包括与代理相关的代理公钥(pa)和与第一用户相关的第一用户公钥(pu1)。从上面提供的第二赎回脚本(rs2)的示例可以看出,被转移的令牌必须由代理(a)或第一用户23签名以便使用。表3提供了用于发行令牌的该转移的交易的示例,其中,为简洁起见,未示出矿工的费用。表3与表2类似,表3的第4至第8行表示交易(id-610)的输入。在该示例中,输入是发行令牌,即表2中示出的交易(id-600)的输出。可以看出,第7行中的赎回脚本对应于发行令牌的赎回脚本,即第一赎回脚本(rs1)。相应地,为了对交易(id-600)的输出进行解锁,必须用代理的公钥(pa)签署第一赎回脚本(rs1)。表3的第10至第12行表示交易(id-610)的输出,在这种情况下,交易(id-610)的输出表示发行令牌被转移至代理(a)或者第一用户23(u1)。第10行显示输出值,该输出值是第一数量的加密货币(c1)。第12行显示输出脚本,该输出脚本包括如在比特币协议的p2sh方法中使用的“<赎回脚本的散列>”。在该示例中,赎回脚本是呈如上所述的形式的第二赎回脚本(rs2)。交易(id-610)的输出随后以第二数据输出(o2)记录在p2p分布式分类账14上。第二数据输出(o2)可包括来自第一数据输出(o1)的第一数量的加密货币(c1)将在交易中被转移的指示。第二数据输出(o2)还可包括第二赎回脚本(rs2)的散列。指示计算机软件或许可证的位置的标识符如上所述,数据(d1)或许可证可包括分别指示计算机软件或许可证的位置的标识符。在一个示例中,标识符可独立于数据(d1)或许可证被确定,并且与数据(d1)或许可证保持分离。如上面的方法100中所描述的那样,标识符可进一步与数据(d1)和第一散列值(h1)一起被分配给关键字--值对的值。以这种方式,标识符可包括在消息输入(关键字,值)的值字段中并且被发送到dht13中的参与节点,如上所述。在一个示例中,指示位置的标识符可包括因特网上的对象的url。在另一示例中,指示位置的标识符可包括诸如散列表或dht13之类的存储库的地址。在又一示例中,指示位置的标识符可包括基于计算机的存储库——比如设置在基于计算机的资源上的服务器、数据库或存储设施——的地址,该基于计算机的资源比如为与第一节点3的第一处理设备21相关的数据存储器17。图6示出了用于确定计算机软件或许可证的位置的方法500。方法500包括从第一赎回脚本(rs1)中确定510元数据(m)。如上所述,元数据(m)可嵌入第一赎回脚本(rs1)中的用于公钥的15个位置中的一个或多个。在比特币协议的p2sh方法中,当交易的输出在后续交易中被使用时,赎回脚本在后续交易中变得可见。如上所述并参照表2,用于交易(id-600)的发行令牌被返还给代理(a)。以这种方式,代理(a)可使用该发行令牌以暴露第一赎回脚本(rs1)。因此,基于第二散列值(h2)的元数据(m)在p2p分布式分类账14上可见。以这种方式,在第一赎回脚本(rs1)中,能够从元数据(m)中获取520第二散列值(h2)。在一个示例中,使用请求消息获得(关键字),与关键字--值对的关键字相关的值能够从dht13中获取。方法500还包括通过通信网络5将第二散列值(h2)发送530到与dht13的参与节点相关的处理器。如上所述,第二散列值(h2)可为关键字--值对中的关键字。还如上所述,给定关键字的值可通过向dht13的任意参与节点提供包含该关键字的消息来获取。因此,在标识符被包含在关键字--值对的值字段中的示例中,方法500能够从参与节点的处理器中确定540指示计算机软件或许可证的位置的标识符。处理设备如上所述,第一节点3和第二节点7可为电子设备,比如计算机,平板计算机、移动通信设备、计算机服务器等。电子设备可包括处理设备21、27、数据存储器17和用户接口15。图7示出了处理设备21、27的示例。处理设备21、27可在第一节点3、第二节点7或其他未另外示出的节点处使用。处理设备21、27包括经由总线1530彼此通信的处理器1510、存储器1520和接口设备1540。存储器1520存储计算机软件程序,该计算机软件程序包括用于执行上述方法100和方法500的机器可读指令和数据,处理器1510执行来自存储器1520的指令以实施方法100和方法500。接口设备1540可包括促进与通信网络5进行通信的通信模块,一些示例中,该通信模块也促进与用户接口15和诸如数据存储器17的外围设备进行通信。应当指出的是,尽管处理设备1510可为独立的网络元件,但是处理设备1510也可为另一网络元件的一部分。此外,由处理设备1510执行的一些功能可在多个网络元件之间进行分配。例如,在与第一节点3相关的安全局域网中第一节点3可具有多个处理设备21以实施方法100、方法500。在本发明描述了用户、雇主、雇员、发行者、商家、提供者或其他实体实施特定动作(包括签名、发布、确定、计算、发送、接收、创建等)的情况下,使用这些措辞是为了表达的清楚性。应该理解的是,这些动作是通过由这些实体操作的计算设备来完成。本领域技术人员将理解的是,在不脱离本发明的广泛一般性范围的情况下,可以对上述实施方式进行多种变化和/或修改。因此,现有的实施方式在所有方面都被认为是说明性的而非限制性的。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1