CN117044161A - 阻止敏感数据 - Google Patents

阻止敏感数据 Download PDF

Info

Publication number
CN117044161A
CN117044161A CN202180085917.4A CN202180085917A CN117044161A CN 117044161 A CN117044161 A CN 117044161A CN 202180085917 A CN202180085917 A CN 202180085917A CN 117044161 A CN117044161 A CN 117044161A
Authority
CN
China
Prior art keywords
message
blockchain
transaction
block
bit string
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202180085917.4A
Other languages
English (en)
Inventor
穆罕默德·萨比尔·基拉兹
刘卫
欧文·沃恩
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Blockchain Licensing Jsc
Original Assignee
Blockchain Licensing Jsc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Blockchain Licensing Jsc filed Critical Blockchain Licensing Jsc
Publication of CN117044161A publication Critical patent/CN117044161A/zh
Pending legal-status Critical Current

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/32Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials
    • H04L9/3236Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials using cryptographic hash functions
    • H04L9/3239Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials using cryptographic hash functions involving non-keyed hash functions, e.g. modification detection codes [MDCs], MD5, SHA or RIPEMD
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/32Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials
    • H04L9/3218Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials using proof of knowledge, e.g. Fiat-Shamir, GQ, Schnorr, ornon-interactive zero-knowledge proofs
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/32Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials
    • H04L9/3236Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials using cryptographic hash functions
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/50Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols using hash chains, e.g. blockchains or hash trees

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Storage Device Security (AREA)

Abstract

一种阻止消息中的敏感数据的方法,所述方法在计算设备上执行并且包括:创建所述消息的副本;生成至少一个零知识证明,所述至少一个零知识证明中的每个零知识证明的所述生成包括:获取掩码位串,所述掩码位串识别所述副本的位中的至少一个敏感位的位置;通过向所述至少一个敏感位分配预定值,修改所述副本的所述位,从而计算公共位串;确定秘密位串,所述秘密位串包括所述至少一个敏感位、并且满足要求,所述要求是所述副本的所述位等于使用所述公共位串、所述掩码位串和所述秘密位串的按位逻辑运算的输出;对所述消息的所述副本或其一部分进行哈希处理以生成输出哈希值;和,使用所述公共位串、所述掩码位串、所述输出哈希值、所述秘密位串生成零知识证明;从所述副本中移除所述至少一个敏感位中的每个敏感位以生成修改的消息;以及,将所述修改的消息与所述至少一个输出哈希值和所述至少一个零知识证明一起输出到接收者,以使所述接收者能够证明所述修改的消息是有效的。

Description

阻止敏感数据
技术领域
本公开涉及阻止消息中的敏感数据。
背景技术
区块链是指一种分布式数据结构,其中在分布式对等(P2P)网络(以下称为“区块链网络”)中的多个节点中的每个节点处维护区块链的副本,并且广泛公开该副本。区块链包括一系列数据区块,其中每个区块包括一个或多个事务(transaction)。除所谓的“coinbase事务”外,每个事务都指向序列中的先前事务,该序列可以跨越一个或多个区块,回到一个或多个coinbase事务。coinbase事务将在下文进一步讨论。提交给区块链网络的事务包括在新区块中。新区块的创建过程通常称为“挖掘”,该过程涉及多个节点中的每个节点争相执行“工作量证明”,即,基于等待被包括在区块链的新区块中的一组定义的有序且核实有效的未决事务的表示解决加密难题。应当注意的是,区块链可以在一些节点处被修剪(prune),并且区块的发布可以通过仅发布区块头来实现。
区块链中的事务可用于以下目的中的一个或多个:传送数字资产(即,一定数量的数字通证);对虚拟化分类账或注册表中的一组条目进行排序;接收和处理时间戳条目;和/或对索引指针按时间排序。也可利用区块链实现区块链上的层级附加功能。例如,区块链协议可允许在事务中存储附加的用户数据或数据索引。能够存储在单个事务中的最大数据容量没有预先指定的限制,因此可以并入越来越复杂的数据。例如,这可用于在区块链中存储电子文档、音频或视频数据。
区块链网络的节点(通常称为“网络节点”)执行分布式事务注册和验证过程,这将后续更详细地描述。总之,在该过程中,节点核实事务并将这些事务插入到区块模板中,这些事务尝试为该区块模板标识有效的工作量证明解。一旦找到有效的解,新区块便会被传播到网络的其它节点,从而使得每个节点能够在区块链上记录新区块。为了将事务记录在区块链中,用户(例如,区块链客户端应用程序)将该事务发送到网络中的节点中的一个节点进行传播。接收该事务的节点可以争相寻找将核实有效的事务并入新区块的工作量证明解。每个节点被配置为执行相同的节点协议,该协议将包括用于确认事务有效的一个或多个条件。无效事务将不会传播或并入到区块中。假定事务已经核实有效,从而在区块链上被接受,则该事务(包括任何用户数据)将因此在区块链网络中的每个节点上作为不可改变的公共记录进行注册和索引。
成功解决工作量证明难题可创建最新区块的节点通常被奖励一个称为“coinbase事务”的新事务,该事务分发数字资产数额,即通证数量。无效事务的检测和拒绝是通过竞争节点的行动来执行的,这些竞争节点充当网络的代理并且通过激励报告和阻止不正当行为。信息的广泛发布使得用户可以连续地审计节点的性能。仅发布区块头使得参与者可以确保区块链具有持续完整性。
在“基于输出的”模型(有时称为基于UTXO的模型)中,给定事务的数据结构包括一个或多个输入和一个或多个输出。任何可花费输出包括指定数字资产数额的元素,该元素可从进行中的事务序列导出。可花费输出有时称为UTXO(“未花费事务输出”)。输出还可以包括锁定脚本,该锁定脚本指定输出的未来赎回条件。锁定脚本是限定核实和传送数字通证或资产所必需的条件的谓词。事务(除coinbase事务之外)的每个输入包括指向先前事务中的此类输出的指针(即引用),并且还可以包括解锁脚本,用于解锁指向输出的锁定脚本。因此,考虑一对事务,将其称为第一事务和第二事务(或“目标”事务)。第一事务包括指定数字资产数额的至少一个输出,并且包括定义解锁该输出的一个或多个条件的锁定脚本。第二目标事务包括至少一个输入和解锁脚本,该至少一个输入包括指向第一事务的输出的指针;该解锁脚本用于解锁第一事务的输出。
在此类模型中,当第二目标事务被发送到区块链网络以在区块链中传播和记录时,在每个节点处应用的有效性条件之一将是解锁脚本满足在第一事务的锁定脚本中定义的一个或多个条件中的所有条件。另一条件将是第一事务的输出尚未被另一早期有效事务赎回。根据这些条件中的任何一个条件发现目标事务无效的任何节点都不会传播该事务(作为有效事务,但可能注册无效事务),也不将该事务包括在要记录在区块链中的新区块中。
另一种事务模型是基于账户的模型。在这种情况下,每个事务均不通过参考过去事务序列中先前事务的UTXO来定义转移的数额,而是通过参考绝对账户余额进行定义。所有账户的当前状态由节点单独存储到区块链中,并不断更新。
发明内容
人们一直认为,区块链的不可变性意味着,任何数据一旦上传到公共分类账都将是不可审查的。在一个或多个区块链事务内的一些数据有效载荷(例如,银行账号、护照号码)的分发已被管理机构阻止的情况下,区块链网络上的参与者将面临两难境地:要么阻止所述数据在所述网络上传播,要么允许所述相同的数据在所述网络上传播。第一种情况将打破所述区块链的所述不可变性,而后者可能最终会损害其他人,并导致共享所述数据的参与者承担法律后果。
在本公开的实施例中,提供了一种机制,所述机制用于阻止区块链事务中的某些数据(根据需要尽可能多或尽可能少),同时保持所述区块链的不可变性。也就是说,尽管所述数据被阻止,参与者仍然能够验证所述区块链的历史记录的完整性。
本公开的实施例可以用于阻止(即,隐藏)包括在区块链事务的任何字段的任何部分中的敏感数据。例如,本公开的实施例可以用于阻止包括在区块链事务的OP_FALSE OP_RETURN字段中的敏感数据。
零知识证明(ZKP)是一种方法,通过这种方法,被称为证明者的一方可以向被称为验证者的另一方证明某一语句为真,而不揭露除所述语句为真之外的任何信息。在本公开的实施例中,生成一个或多个ZKP以提供关于所修改的消息(已移除敏感数据)仍然有效的证明,而不揭露证明所述修改的消息的有效性所需的敏感数据。也就是说,本文使用的术语“零知识证明”是指证明者与验证者之间的知识证明,所述知识证明可证明未揭露关于敏感/秘密数据的任何信息。在区块链事务的上下文中,使用所述ZKP来证明语句“这些字段是具有给定事务ID的事务的一部分”,但不会泄露证明所述语句所需的信息,即所述被阻止的数据。因此,可以验证所修改的区块链事务输出的有效性,而不公开所述被阻止的数据。
根据本文公开的一个方面,提供了一种用于阻止消息中的敏感数据的方法,所述方法在计算设备上执行并且包括:创建所述消息的副本;生成至少一个零知识证明,所述至少一个零知识证明中的每个零知识证明的所述生成包括:获取掩码位串(mask bitstring),所述掩码位串识别所述副本的位中的至少一个敏感位的位置;通过向所述至少一个敏感位分配预定值,修改所述副本的所述位,从而计算公共位串(public bit string);确定秘密位串(secret bit string),所述秘密位串包括所述至少一个敏感位、并且满足要求,所述要求是所述副本的所述位等于使用所述公共位串、所述掩码位串和所述秘密位串的按位逻辑运算的输出;对所述消息的所述副本或其一部分进行哈希处理以生成输出哈希值;和,使用所述公共位串、所述掩码位串、所述输出哈希值、所述秘密位串生成零知识证明;从所述副本中移除所述至少一个敏感位中的每个敏感位以生成修改的消息;以及,将所述修改的消息与所述至少一个输出哈希值和所述至少一个零知识证明一起输出到接收者,以使所述接收者能够证明所述修改的消息是有效的。
根据本文公开的一个方面,提供了一种用于验证修改的消息有效的方法,所述修改的消息对应于从中移除敏感数据的原始消息,所述方法在计算设备上执行并且包括:获取所述修改的消息,其中所述修改的消息对应于所述原始消息,其中所述原始消息的每个敏感位已被分配有预定值;获取所述修改的消息的输出哈希值,并使用存储在所述计算设备的存储器中的数据来验证所述输出哈希值;从发送者设备接收与所述修改的消息的位相关联的至少一个零知识证明;使用以下各项来验证所述至少一个零知识证明中的每个零知识证明:(i)按位逻辑运算的知识、或与其相关联的验证密钥,其被由所述发送者设备用来导出用于生成所述零知识证明的秘密位串;(ii)所述修改的消息的所述位;(iii)掩码位串,所述掩码位串识别所述修改的消息的所述位中的至少一个敏感位的位置;(iv)所述修改的消息的所述位或其一部分的哈希值;和(v)所述修改的消息的所述位的输入哈希值。
虽然本文结合充当区块链事务的消息来描述实施例,但是本公开的实施例扩展到区块链的上下文之外,并且可以用于阻止任何长度的任何消息的任何部分。如下所述,实施例可以通过并发执行(即,并行计算)来高效地阻止具有较大数据量的消息的各部分。
附图说明
为了帮助理解本公开的实施例并示出如何实施此类实施例,现将仅通过举例的方式参考附图进行说明,其中:
图1是一种用于实现区块链的系统的示意性框图;
图2示意性地示出了可记录在区块链中的事务的一些示例;
图3A示出了客户端应用程序的示意性框图;
图3B示出了可由图3A的客户端应用程序表示的示例性用户界面的示意性模型;
图4示出了用于处理事务的一些节点软件的示意性框图;
图5示出了哈希函数的输入和输出;
图6a至图6d示出了阻止消息中的数据的过程;
图7示出了所修改的消息的生成;
图8示出了用于生成应用单次压缩的零知识证明的电路;
图9示出了用于生成应用多轮压缩的至少一个零知识证明的电路;
图10a和图10b示出了用于验证所修改的消息是否有效的过程。
具体实施方式
示例性系统概述
图1示出了一种用于实现区块链150的示例性系统100。系统100可以包括分组交换网络101,通常是诸如互联网的广域互联网。分组交换网络101包括多个区块链节点104,该多个区块链节点可以被设置成在分组交换网络101内形成对等(P2P)网络106。虽然未示出,但是区块链节点104可以被设置为近完全图。因此,每个区块链节点104高度连接到其它区块链节点104。
每个区块链节点104包括对等体的计算机设备,不同的节点104属于不同的对等体。每个区块链节点104包括处理装置,该处理装置包括一个或多个处理器,例如一个或多个中央处理单元(CPU)、加速器处理器、专用处理器和/或现场可编程门阵列(FPGA),以及其它设备,例如专用集成电路(ASIC)。每个节点还包括存储器,即采用非暂时性计算机可读介质形式的计算机可读存储器。存储器可包括一个或多个存储器单元,其采用一个或多个存储器介质,例如诸如硬盘等磁介质、诸如固态硬盘(SSD)、闪存或电可擦可编程只读存储器(EEPROM)等电子媒介和/或诸如光盘驱动器等光学介质。
区块链150包括一系列数据区块151,其中在分布式或区块链网络106中的多个区块链节点104中的每个节点处维护区块链150的相应副本。如上所述,维护区块链150的副本不一定意味着完全存储区块链150。相反,只要每个区块链节点150存储每个区块151的区块头(下面讨论),区块链150就可以进行数据修剪。区块链中的每个区块151均包括一个或多个事务152,其中该上下文中的事务是指一种数据结构。数据结构的性质将取决于用作事务模型或计划的一部分的事务协议类型。给定的区块链全程使用一个特定的事务协议。在一种常见的事务协议中,每个事务152的数据结构至少包括一个输入和至少一个输出。每个输出指定将数字资产的数量表示为财产的数额,其一个示例是输出被密码锁定到的用户103(需要该用户的签名或其它解进行解锁,从而进行赎回或花费)。每个输入指向先前事务152的输出,从而链接这些事务。
每个区块151还包括区块指针155,其指向区块链中先前创建的区块151,以定义区块151的顺序。每个事务152(除coinbase事务之外)包括指向先前事务的指针,以定义事务序列的顺序(注:事务152的序列可进行分支)。区块151的区块链一直追溯到创始区块(Gb)153,该创始区块是区块链中的第一区块。区块链150中早期的一个或多个原始事务152指向创始区块153,而非先前事务。
每个区块链节点104被配置为将事务152转发到其它区块链节点104,从而使得事务152在整个网络106中传播。每个区块链节点104被配置为创建区块151,并将相同区块链150的相应副本存储在其相应的存储器中。每个区块链节点104还维护等待并入到区块151中的事务152的有序集(或“池”)154。有序池154通常称为“内存池”。在本文中,该术语并不意在限制于任何特定的区块链、协议或模型。该术语是指节点104已接受为有效的有序事务集,并且对于该有序事务集,强制节点104不接受试图花费相同输出的任何其它事务。
在给定的当前事务152j中,输入(或每个输入)包括指针,该指针引用事务序列中先前事务152i的输出,指定该输出将在当前事务152j中被赎回或“花费”。通常,先前事务可以是有序集154或任何区块151中的任何事务。尽管为了确保当前事务有效,将需要存在先前事务152i并核实其有效,但是在创建当前事务152j甚至向网络106发送当前事务152j时,不必存在先前事务152i。因此,在本文中,“先前”是指由指针链接的逻辑序列中的前任,而不一定是时间序列中的创建时间或发送时间,因此,不一定排除无序创建或发送事务152i、152j的情况(参见下面关于孤立事务的讨论)。先前事务152i同样可以称为先行事务或前任事务。
当前事务152j的输入还包括输入授权,例如先前事务152i的输出被锁定到的用户103a的签名。反过来,当前事务152j的输出可以加密锁定到新用户或实体103b。因此,当前事务152j可将先前事务152i的输入中定义的数额转移到当前事务152j的输出中定义的新用户或实体103b。在某些情况下,事务152可具有多个输出,以在多个用户或实体间分割输入数额(其中一个可以是原始用户或实体103a,以便进行变更)。在某些情况下,事务还可以具有多个输入,将一个或多个先前事务的多个输出中的数额汇总在一起,并重新分配到当前事务的一个或多个输出。
根据基于输出的事务协议,当诸如个体用户或组织这类的一方103希望颁布新的事务152j时(由该方采用的自动程序或人为地),该颁布方将该新事务从其计算机终端102发送到接收者。颁布方或接收者将最终向网络106的一个或多个区块链节点104(现在通常是服务器或数据中心,但原则上也可以是其它用户终端)发送该事务。另外还不排除颁布新事务152j的一方103可以将事务直接发送到一个或多个区块链节点104,并且在一些示例中,可以不将事务发送到接收者。接收事务的区块链节点104根据在每个区块链节点104处应用的区块链节点协议来检查事务是否有效。区块链节点协议通常要求区块链节点104检查新事务152j中的加密签名是否与预期签名相匹配,这取决于事务152的有序序列中的先前事务152i。在这种基于输出的事务协议中,这可以包括检查新事务152j的输入中包括的一方103的密码签名或其它授权是否与新事务分配的先前事务152i的输出中定义的条件匹配,其中该条件通常包括至少检查新事务152j的输入中的密码签名或其它授权是否解锁新事务的输入所链接到的先前事务152i的输出。条件可以至少部分地由包括在先前事务152i的输出中的脚本来定义。或者,这可仅由区块链节点协议单独确定,或可通过其组合确定。无论采用哪种方式,如果新事务152j有效,区块链节点104会将其转发到区块链网络106中的一个或多个其它区块链节点104。这些其它区块链节点104根据相同的区块链节点协议应用相同的测试,并因此将新事务152j转发到一个或多个其它节点104等等。通过这种方式,新事务在区块链节点104的整个网络中进行传播。
在基于输出的模型中,给定输出(例如,UTXO)是否分配(例如,花费)的定义是,根据区块链节点协议,其是否通过另一个随后事务152j的输入有效赎回。事务有效的另一个条件是其试图赎回的先前事务152i的输出尚未被另一个事务赎回。同样,如果无效,则事务152j将不会在区块链150中传播(除非被标记为无效并且被传播用于提醒)或记录。这可防止重复花费,即事务处理者对同一个事务的输出分配超过一次。另一方面,基于账户的模型通过保持账户余额防止重复花费。因为同样存在定义的事务顺序,账户余额在任何时候均具有单一定义的状态。
除了核实事务有效之外,区块链节点104还争相成为创建事务区块的第一个节点,而该过程由“工作量证明”支持。在区块链节点104处,新事务被添加到尚未出现在记录在区块链150上的区块151中的有效事务的有序池154。然后,区块链节点争相通过尝试解决加密难题以组装有序事务集154中事务152的新有效事务区块151。通常情况下,这包括搜索“随机数”值,从而当随机数与未决事务有序池154的表示并置且进行哈希处理时,哈希值的输出满足预定条件。例如,预定条件可以是哈希值的输出具有某个预定义的前导零数。注意,这仅仅是一种特定类型的工作量证明难题,并且不排除其它类型。哈希函数的特性是,相对于其输入,其具有不可预测的输出。因此,该搜索只能通过强力执行,从而在试图解决难题的每个区块链节点104处消耗大量的处理资源。
解决难题的第一区块链节点104在网络106上宣布难题解决,提供解决方案作为证明,然后网络中的其它区块链节点104则可以轻松检查该解决方案(一旦给出哈希值的解决方案,就可以直接检查该解决方案是否使哈希值的输出满足条件)。第一区块链节点104将一个区块传播到接受该区块的其它节点达成阈值共识,从而执行协议规则。然后,有序事务集154被每个区块链节点104记录为区块链150中的新区块151。区块指针155还分配给指向该区块链中先前创建的区块151n-1的新区块151n。创建工作量证明解所需的大量工作(例如采用哈希的形式)发出信号通知第一节点104的意图以遵循区块链协议。这些规则包括如果它分配与先前核实有效的事务相同的输出,则不接受事务为有效,否则称之为重复花费。一旦创建,区块151就不能修改,因为它在区块链网络106中的每个区块链节点104处进行标识和维护。区块指针155还向区块151施加顺序。由于事务152记录在网络106中每个区块链节点104处的有序区块中,因此提供了事务的不可改变公共分类账。
应当注意的是,在任何给定时间争相解决难题的不同区块链节点104可以基于在任何给定时间尚未发布的事务的池154的不同快照来这样做,具体取决于它们何时开始搜索解或接收事务的顺序。解决相应难题的人员首先定义新区块151n中包括的事务152及其顺序,并且更新当前的未发布事务池154。然后,区块链节点104继续争相从新定义的未发布事务有序池154中创建区块,等等。此外,还存在解决可能出现的任何“分叉”的协议,其中两个区块链节点104彼此在很短的时间内解决难题,从而在节点104之间传播区块链的冲突视图。简言之,分叉方向最长的成为最终区块链150。应当注意的是,这不会影响网络的用户或代理,因为同一事务将出现在两个分叉中。
根据一些区块链,成功构造新区块104的节点被授予在分配附加限定数量数字资产的新特殊类型事务中新分配附加的、接受的数额的数字资产的能力(与代理间或用户间事务相反,该事务将一定数量的数字资产从一个代理或用户转移到另一个代理或用户)。这种特殊类型的事务通常称为“coinbase事务”,但是也可以称为“启动事务”或“产生事务”。它通常形成新区块151n的第一事务。工作量证明发出信号通知构造新区块的节点的意图以遵循协议规则,从而允许稍后赎回该特定事务。在可以赎回该特殊事务之前,区块链协议规则可能需要成熟期,例如100个区块。通常,常规(非生成)事务152还将在其输出中的一个输出中指定附加事务费用,以进一步奖励创建其中发布该事务的区块151n的区块链节点104。该费用通常称为“事务费用”,并在下文中讨论。
由于事务核实和发布中涉及的资源,通常至少每个区块链节点104采用包括一个或多个物理服务器单元的服务器的形式,或者甚至整个数据中心。但是,原则上来说,任何给定区块链节点104均可采用一个用户终端或联网在一起的一组用户终端的形式。
每个区块链节点104的存储器均存储被配置为在区块链节点104的处理装置上运行的软件,以根据区块链节点协议执行其相应的角色并处理事务152。应当理解的是,在本文中归因于区块链节点104的任何动作均可通过在相应计算机设备的处理装置上运行的软件执行。节点软件可以在应用层或诸如操作系统层或协议层的较低层或这些层任意组合的一个或多个应用中实现。
扮演消费用户角色的多方103中的每一方的计算机设备102也连接到网络101。这些用户可以与区块链网络106交互,但不参与核实事务或构造区块。其中一些用户或代理103可以充当事务中的发送者和接收者。其它用户可以与区块链150交互,而不必充当发送者或接收者。例如,一些当事方可以充当存储区块链150的副本(例如,已经从区块链节点104获得区块链的副本)的存储实体。
各方103中的一些或所有当事方可以作为不同网络的一部分连接,例如覆盖在区块链网络106之上的网络。区块链网络的用户(经常称为“客户端”)可以被称为是包含区块链网络106的系统的一部分;然而,这些用户不是区块链节点104,因为它们不执行区块链节点所需的角色。相反,每一方103可以与区块链网络106交互,从而通过连接到区块链节点106(即,与区块链节点106通信)来利用区块链150。出于说明目的,示出了双方103及其相应的设备102:第一方103a及其相应的计算机设备102a,以及第二方103b及其相应的计算机设备102b。应当理解的是,更多此类当事方103及其相应的计算机设备102可能存在并参与系统100,但为了方便起见,未进行说明。每一方103均可以是个人或组织。仅出于说明目的,在本文中,第一方103a称为爱丽丝,第二方103b称为鲍勃,但应当理解的是,这并不仅限于爱丽丝或鲍勃,且本文对爱丽丝或鲍勃的任何引用均可分别用“第一方”和“第二方”替换。
每一方103的计算机设备102包括相应的处理装置,其包括一个或更多个处理器,例如一个或更多个CPU、图形处理单元(GPU)、其他加速器处理器、特定应用程序处理器和/或FPGA。每一方103的计算机设备102还包括存储器,即采用非暂时性计算机可读介质形式的计算机可读存储器。该存储器可包括一个或更多个存储器单元,其采用一个或更多个存储器介质,例如诸如硬盘等磁介质、诸如SSD、闪存或EEPROM等电子媒介和/或诸如光盘驱动器等的光学介质。每一方103的计算机设备102上的存储器存储软件,其包括被设置为在处理装置上运行的至少一个客户端应用程序105的相应实例。应当理解的是,在本文中归因于给定方103的任何行动均可通过在相应计算机设备102的处理装置上运行的软件执行。每一方103的计算机设备102包括至少一个用户终端,例如台式或笔记本电脑、平板电脑、智能手机或诸如智能手表等的可穿戴设备。给定方103的计算机设备102还可包括一个或更多个其他网络资源,诸如通过用户终端访问的云计算资源。
客户端应用程序105最初可通过例如从服务器下载的适当计算机可读存储介质,或通过诸如可移动SSD、闪存密钥、可移动EEPROM、可移动磁盘驱动器、软盘或磁带等的可移动存储设备、诸如CD或DVD ROM等的光盘或可移动光驱等提供至任何给定方103的计算机设备102。
客户端应用程序105至少包括“钱包”功能。这有两个主要功能。其中一个功能是使相应方103能够创建、授权(例如签名)事务152并将其发送到一个或多个区块链节点104,然后在区块链节点104的网络中传播,从而包括在区块链150中。另一个功能是向相应方汇报其目前拥有的数字资产数额。在基于输出的系统中,该第二功能包括整理分散在区块链150中属于相关方的各种事务152的输出中定义的数额。
注意:虽然各种客户端功能可以描述为集成到给定客户端应用程序105中,但这不一定是限制性的,相反,在本文中所描述的任何客户端功能可以在由两个或更多个不同应用程序组成的套件中实现,例如经由API进行接口连接或一个应用程序作为另一个应用程序的插件。更通俗地说,客户端功能可以在应用层或诸如操作系统的较低层或这些层的任意组合实现。下面将根据客户端应用程序105进行描述,但应当理解的是,这不是限制性的。
每个计算机设备102上的客户端应用程序或软件105的实例可操作地耦合到网络106的区块链节点104中的至少一个。这可以启用客户端105的钱包功能,以将事务152发送至网络106。客户端105还可联络区块链节点104,以在区块链150中查询相应方103作为接收者的任何事务(或实际上在区块链150中检查其它方的事务,因为在实施例中,区块链150是在某种程度上通过其公开可见性提供事务信任的公共设施)。每个计算机设备102上的钱包功能被配置为根据事务协议制定和发送事务152。如上所述,每个区块链节点104运行软件,该软件被配置为根据区块链节点协议核实事务152并转发事务152以便在区块链网络106中传播。事务协议和节点协议相互对应,给定事务协议和给定节点协议一起实现给定的事务模型。相同的事务协议用于区块链150中的所有事务152。网络106中的所有节点104使用相同的节点协议。
当给定方103(比方说爱丽丝)希望发送拟包含在区块链150中的新事务152j时,她将根据相关事务协议(使用其客户端应用程序105中的钱包功能)制定新事务。然后,她将事务152从客户端应用程序105发送到她所连接的一个或多个区块链节点104。例如,这可能是与爱丽丝的计算机102最佳连接的区块链节点104。当任何给定区块链节点104接收新事务152j时,其将根据区块链节点协议及其相应的角色进行处理。这包括首先检查新接收的事务152j是否满足变为“有效”的特定条件,具体示例稍后将详细讨论。在一些事务协议中,有效条件可通过事务152中包含的脚本在每个事务的基础上进行配置。或者,条件可仅仅是节点协议的内置功能,或通过组合脚本和节点协议进行定义。
如果新接收的事务152j通过有效性测试(即:“有效”的条件下),接收事务152j的任何区块链节点104将向在区块链节点104处维护的有序事务集154中添加新的核实有效事务152。进一步地,接收事务152j的任何区块链节点104随后将核实有效事务152传播至网络106中的一个或多个其它区块链节点104。由于每个区块链节点104应用相同的协议,因此假定事务152j有效,这意味着事务很快将在整个网络106中传播。
一旦进入在给定区块链节点104处维护的未决事务有序池154,该区块链节点104将开始争相解决其各自的包含新事务152的池154的最新版本上的工作量证明难题(请记住,其它区块链节点104可以尝试基于不同的事务池154来解决难题。但是,首先解决难题的人将定义包括在最新区块151中的事务集合。最终,区块链节点104将解决有序池154的一部分的难题,该有序集154包括爱丽丝的事务152j)。一旦包括新事务152j的池154完成工作量证明,其将不可变地成为区块链150中区块151中的一个区块的一部分。每个事务152包括指向早前事务的指针,因此事务的顺序也被不可变地记录下来。
不同的区块链节点104可以首先接收给定事务的不同实例,并且因此在一个实例被发布到新区块151中之前具有关于哪个实例“有效”的冲突视图,此时所有区块链节点104同意所发布的实例是唯一的有效实例。如果区块链节点104将一个实例接受为有效实例,然后发现第二实例已记录在区块链150中,则区块链节点104必须接受这一点,并将丢弃(即,视为无效)其最初接受的实例(即,在区块151中尚未公布的实例)。
作为基于账户的事务模型的一部分,由一些区块链网络操作的另一种类型的事务协议可称为“基于账户的”协议。在基于账户的情况下,每个事务均不通过参考过去事务序列中先前事务的UTXO来定义转移的数额,而是通过参考绝对账户余额进行定义。所有账户的当前状态由网络的节点单独存储到区块链中,并不断更新。在此类系统中,事务使用账户的运行事务记录(也称为“头寸”)进行排序。该值由发送者签名作为其加密签名的一部分,并作为事务引用计算的一部分进行哈希处理。此外,可选的数据字段也可以在事务中签名。例如,如果数据字段中包含先前事务的ID,该数据字段可指向先前事务。
基于UTXO的模型
图2示出了示例性事务协议。这是基于UTXO的协议的示例。事务152(简称“Tx”)是区块链150的基本数据结构(每个区块151包括一个或多个事务152)。下面将通过参考基于输出或基于“UTXO”的协议进行描述。但这并不限于所有可能的实施例。应当注意的是,虽然参考特定区块链描述了示例性基于UTXO的协议,但是它同样可以在其它示例区块链网络上实现。
在基于UTXO的模型中,每个事务(“Tx”)152包括数据结构,其包括一个或多个输入202和一个或多个输出203。每个输出203可包括未花费事务输出(UTXO),其可用作另一新事务的输入202的来源(如果UTXO尚未赎回)。UTXO包括指定数字资产数额的值。这表示分布式分类账上的一组通证。UTXO还可包含其来源事务的事务ID以及其它信息。事务数据结构还可包括标头201,其可包括输入字段202和输出字段203的大小指示符。标头201还可包括事务的ID。在实施例中,事务ID是事务数据(不含事务ID本身)的哈希值,且存储在提交至节点104的原始事务152的标头201中。
比方说爱丽丝103a希望创建转移相关数字资产数额至鲍勃103b的事务152j。在图2中,爱丽丝的新事务152j标记为“Tx1”。该新事务获取在序列中先前事务152i的输出203中锁定至爱丽丝的数字资产数额,并至少将此类数额中的一部分转移至鲍勃。在图2中,先前事务152i标记为“Tx0”。Tx0和Tx1只是任意的标记,其不一定意味着Tx0指区块链151中的第一事务且Tx1指池154中的后续事务。Tx1可指向仍具有锁定至爱丽丝的未花费输出203的任何先前(即先行)事务。
当爱丽丝创建其新事务Tx1时,或至少在她将该新事务发送至网络106时,先前事务Tx0可能已经有效并包括在区块链150的区块151中。该事务此时可能已包括在区块151中的一个区块中,或者可能仍在有序集154中等待,在这种情况下,该事务将很快包括在新区块151中。或者,Tx0和Tx1可以创建并一起发送至网络106;或者,如果节点协议允许缓冲“孤立”事务,Tx0甚至可以在Tx1之后发送。本文事务序列上下文中使用的“先前”和“后续”一词是指由事务中指定的事务指针定义的序列中的事务顺序(哪个事务指向哪个其他事务等等)。它们同样可以替换为“前任”和“继任”、“先行”和“后代”或“父项”和“子项”等。这不一定指其创建、发送至网络106或到达任何给定区块链节点104的顺序。然而,指向先前事务(先行事务或“父事务”)的后续事务(后代事务或“子事务”)不会有效除非父事务有效。在父事务之前到达区块链节点104的子事务被视为孤立事务。根据节点协议和/或节点行为,其可被丢弃或缓冲一段时间,以等待父事务。
先前事务Tx0的一个或更多个输出203中的一个包括特定的UTXO,标记为UTXO0。每个UTXO包括指定UTXO表示的数字资产数额的值以及锁定脚本,该锁定脚本定义后续事务的输入202中的解锁脚本必须满足的条件,以使后续事务有效,从而成功赎回UTXO。通常情况下,锁定脚本将数额锁定至特定方(该数额的事务的受益人)。即,锁定脚本定义解锁条件,该解锁条件通常包括以下条件:后续事务的输入中的解锁脚本包括先前事务被锁定到的一方的加密签名。
锁定脚本(亦称scriptPubKey)是节点协议识别的域特定语言中写入的一段代码。此类语言的特定示例称为“脚本(Script)”(S大写),其可由区块链网络所使用。锁定脚本指定花费事务输出203所需的信息,例如爱丽丝签名的要求。解锁脚本出现在事务的输出中。解锁脚本(亦称scriptSig)是提供满足锁定脚本标准所需信息的域特定语言中写入的一段代码。例如,其可包含鲍勃的签名。解锁脚本出现在事务的输入202中。
因此在示出的示例中,Tx0的输出203中的UTXO0包括锁定脚本[Checksig PA],该锁定脚本需要爱丽丝的签名Sig PA,以赎回UTXO0(严格来说,是为了使试图赎回UTXO0的后续事务有效)。[Checksig PA]包含爱丽丝的公私密钥对中的公钥PA的表示(即哈希)。Tx1的输入202包括指向Tx1的指针(例如,通过其事务ID(TxID0),其在实施例中是整个事务Tx0的哈希值)。Tx1的输入202包括在Tx0中标识UTXO0的索引,以在Tx0的任何其他可能输出中对其进行标识。Tx1的输入202进一步包括解锁脚本<Sig PA>,该解锁脚本包括爱丽丝的加密签名,该签名由爱丽丝通过将其密钥对中的私钥应用于预定的部分数据(有时在密码学中称为“消息”)创建。爱丽丝需要签名以提供有效签名的数据(或“消息”)可通过锁定脚本、节点协议或其组合进行定义。
当新事务Tx1到达区块链节点104时,该节点应用节点协议。这包括一起运行锁定脚本和解锁脚本,以检查解锁脚本是否满足锁定脚本中定义的条件(其中该条件可包括一个或更多个标准)。在实施例中,这涉及并置两个脚本:
<Sig PA><PA>||[Checksig PA]
其中“||”表示并置,“<…>”表示将数据放在堆栈上,“[…]”表示由锁定脚本组成的函数(在该示例中指基于堆栈的语言)。同样,脚本可以使用公共堆栈一个接一个地运行,而不是并置脚本。无论采用哪种方式,当一起运行时,脚本使用爱丽丝的公钥PA(包括在Tx0的输出的锁定脚本中),以认证Tx1的输入中的解锁脚本是否包含爱丽丝签名预期部分的数据时的签名。也需要包括预期的部分数据本身(“消息”),以便执行此认证。在实施例中,签名的数据包括整个Tx1(因此不需要包括一个单独的元素来明文指定签名的部分数据,因为其本身便已存在)。
本领域技术人员将熟悉通过公私密码进行验证的细节。基本上而言,如果爱丽丝已使用其私钥加密签署消息,则给定爱丽丝的公钥和明文中的消息,诸如节点104等其它实体可验证消息必须已经由爱丽丝签名。签署通常包括对消息进行哈希,签署哈希值和将此标记到消息作为签名,从而使公钥的任何持有者能够验证签名。因此,应当注意的是,在实施例中,在本文中对签名特定数据片段或事务部分等的任何引用可以意味着对该数据片段或事务部分的哈希值进行签名。
如果Tx1中的解锁脚本满足Tx0的锁定脚本中指定的一个或多个条件(因此,在所示示例中,如果在Tx1中提供了爱丽丝的签名并进行验证),则区块链节点104认为Tx1有效。这意味着区块链节点104会将Tx1添加到待定事务有序池154。区块链节点104还会将事务Tx1转发到网络106中的一个或多个其它区块链节点104,以便其会在整个网络106中传播。一旦Tx1有效并包括在区块链150中,这会将UTXO0从Tx0定义为已花费。应当注意的是,Tx1仅在花费未花费事务输出203时才有效。如果其试图花费另一事务152已经花费的输出,则即使满足所有其它条件,Tx1也将无效。因此,区块链节点104还需要检查先前事务Tx0中引用的UTXO是否已经花费(即,其是否已经形成另一有效事务的有效输入)。这是为何区块链150对事务152施加定义的顺序很重要的原因之一。在实践中,给定区块链节点104可维护单独的数据库,标记已花费事务152的UTXO 203,但最终定义UTXO是否已花费取决于是否在区块链150中形成了另一有效事务的有效输入。
如果给定事务152的所有输出203中指定的总数额大于其所有输入202所指向的总数额,则这是大多数事务模型中的另一失效依据。因此,此类事务不会传播或包括在区块151中。
请注意,在基于UTXO的事务模型中,给定UTXO需要作为一个整体使用。不能“留下”UTXO中定义为已花费的一部分数额,而同时又花费另一部分。但UTXO的数额可以在后续事务的多个输出之间分割。例如,Tx0的UTXO0中定义的数额可以在Tx1中的多个UTXO之间分割。因此,如果爱丽丝不想将UTXO0中定义的所有数额都给鲍勃,她可以使用剩余部分在Tx1的第二输出中自己找零,或者支付给另一方。
在实践中,爱丽丝通常还需要包括用于区块链节点104的费用,该区块链节点104在区块151中成功包含爱丽丝的事务104。如果爱丽丝未包括此类费用,则Tx0可能会被区块链节点104拒绝,并且因此尽管在技术上有效,但可能不会传播并且包括在区块链150中(如果区块链节点104不希望接受事务152,节点协议不强迫区块链节点104接受)。在一些协议中,事务费用不需要其自身的单独输出203(即不需要单独的UTXO)。相反,输入202指向的总数额与给定事务152的输出203指定的总数额之间的任何差额都将自动提供给发布事务的区块链节点104。例如,假设指向UTXO0的指针是Tx1的唯一输入,并且Tx1仅具有一个输出UTXO1。如果在UTXO0中指定的数字资产数额大于在UTXO1中指定的数额,则可以由赢得工作量证明竞赛以创建包含UTXO1的区块的节点104分配该差值。替代地或附加地,这不一定排除可以在其自身事务152的其中一个UTXO 203中明确指定事务费用。
爱丽丝和鲍勃的数字资产由区块链150中任何位置的任何事务152中的锁定至他们的UTXO组成。因此,通常情况下,给定方103的资产分散在整个区块链150的各种事务152的UTXO中。区块链150中的任何位置均未存储定义给定方103的总余额的一个数字。客户端应用程序105的钱包功能的作用是将锁定至相应方且在其它随后事务中尚未花费的各种UTXO值整理在一起。为实现这一点,其可以查询存储在任何一个区块链节点104处的区块链150的副本。
应当注意的是,脚本代码通常用示意图表示(即使用非精确语言)。例如,可以使用操作码(opcode)来表示特定功能。“OP_...”是指脚本语言的特定操作码。举例来说,OP_RETURN是脚本语言操作码,当在锁定脚本的开始处在操作码前加上OP_FALSE时,操作码创建事务的不可花费输出,该输出可以在事务内存储数据,从而将数据不可改变地记录在区块链150中。例如,数据可包括需存储在区块链中的文件。
通常,事务的输入包含对应于公钥PA的数字签名。在实施例中,这基于使用椭圆曲线secp256k1的ECDSA。数字签名对特定的数据段进行签名。在实施例中,对于给定事务,签名将对部分事务输入以及部分或全部事务输出进行签名。对输出的特定部分进行签名取决于SIGHASH标志。SIGHASH标志通常是包含在签名末尾的4字节代码,用于选择签名的输出(并因此在签名时固定)。
锁定脚本有时称为“scriptPubKey”,指其通常包括相应事务被锁定到的当事方的公钥。解锁脚本有时称为“scriptSig”,指其通常提供相应的签名。但是更通俗地说,在区块链150的所有应用中,UTXO赎回的条件并不一定包括对签名进行验证。更通俗地说,脚本语言可用于定义任何一个或多个条件。因此,可以优选更为通用的术语“锁定脚本”和“解锁脚本”。
客户端软件
图3A示出了用于实现本公开方案的实施例的客户端应用程序105的示例性实施方式。客户端应用程序105包括事务引擎401和用户界面(UI)层402。根据上文讨论的方案以及稍后将进一步详细讨论的内容,事务引擎401被配置为实现客户端105的基础事务相关功能,诸如制定事务152,发送事务至一个或更多个节点104以通过区块链网络106传播。
该UI层402被配置为通过相应用户的计算机设备102的用户输入/输出(I/O)方式呈现用户界面,包括通过设备102的用户输出方式向相应用户103输出信息,和通过设备102的用户输入方式接收来自相应用户103的输入。例如,用户输出方式可包括提供视觉输出的一个或显示多个屏(触摸或非触摸屏)、提供音频输出的一个或更多个扬声器、和/或提供触觉输出的一个或更多个触觉输出设备等。用户输入方式可包括例如一个或更多个触摸屏的输入阵列(可与用于输出方式的那个/那些相同或不同);一个或更多个基于光标的设备,诸如鼠标、轨迹板或轨迹球;一个或更多个麦克风和语音或声音识别算法,用于接收语音或声音输入;一个或更多个基于手势的输入设备,用于接收手动或身体手势形式的输入;或者一个或更多个机械按钮、开关或控制杆等。
注:虽然本文中的各种功能可以被描述为集成到同一客户端应用程序105中,但这并不一定构成限制,相反,它们可以在两个或更多个不同应用程序组成的一套程序中实现,例如一个应用程序作为另一个应用程序的插件或经由API(应用程序编程接口)进行接口。比如,事务引擎401的功能可以在单独的应用程序中实现,而不是在UI层402中实现,或者诸如事务引擎401的给定模块的功能可以在多个应用程序之间分割。同时,也不排除部分或全部描述的功能可以在比如操作系统层实现。在本文任何位置引用单个或给定应用程序105或诸如此类的情况下,应当理解的是这只是作为示例,并且更通俗地说,所描述的功能可以在任何形式的软件中实现。
图3B给出了用户界面(UI)500的示例的模型,该UI可由客户端应用程序105a的UI层402在爱丽丝的设备102a上呈现。应当理解的是,类似的UI可以由客户端105b在鲍勃的设备102b或任何其他方的设备上呈现。
通过图示的方式,图3B从爱丽丝的角度示出了UI 500。该UI 500可包括一个或更多个UI元素501、502、503,该一个或更多个UI元素通过用户输出方式呈现为不同的UI元素。
例如,UI元素可包括一个或更多个用户可选择的元素501,这些元素可以是屏幕上的不同按钮、菜单中的不同选项或者诸如此类。用户输入方式被设置成使用户103(在这种情况下为爱丽丝103a)能够选择或以其它方式操作这些选项中一个选项,诸如通过点击或触摸屏幕上的UI元素,或者说出所需选项的名称(注:本文使用的“手动”一词仅用于与自动进行对比,而不一定限于用手执行操作)。这些选项使得用户(爱丽丝)能够制定事务152以及发送事务至一个或更多个节点104以通过区块链网络106传播。
此外/或者,UI元素可包括一个或更多个数据输入字段502,用户能够通过其来制定事务152以及发送事务至一个或更多个节点104以通过区块链网络106传播。这些数据输入字段通过用户输出方式呈现,例如屏幕上,并且数据可通过用户输入方式输入到字段中,例如键盘或触摸屏。或者,数据可以例如基于语音识别口头地接收。
此外/或者,UI元素可包括向用户输出信息的一个或更多个信息元素503。例如,这/这些可以在屏幕上呈现或可听见。
应当理解的是,呈现各种UI元素、选择选项和输入数据的特定方式并不重要。这些UI元素的功能稍后将进行更详细地讨论。还应当理解的是,图3中示出的UI 500只是一个图示模型,在实践中,它可包括一个或更多个进一步的UI元素,为了简洁起见,未对其进行说明。
节点软件
图4示出了在基于UTXO或基于输出的模型的示例中,在网络106的每个区块链节点104上运行的节点软件450的示例。应当注意的是,另一实体可以运行节点软件450,而不被分类为网络106上的节点104,即,不执行节点104所需的动作。节点软件450可以包含但不限于协议引擎451、脚本引擎452、堆栈453、应用级决策引擎454以及一个或多个区块链相关功能模块455的集合。每个节点104可以运行节点软件,该节点软件包含但不限于以下所有三个:共识模块455C(例如,工作量证明)、传播模块455P和存储模块455S(例如,数据库)。协议引擎401通常被配置为识别事务152的不同字段,并根据节点协议处理此类字段。当接收到具有指向另一先前事务152i(Txm-1)的输出(例如,UTXO)的输入的事务152j(Txj)时,协议引擎451标识Txj中的解锁脚本并将其传递给脚本引擎452。协议引擎451还基于Txj的输入中的指针来标识和检索Txi。Txi可以在区块链150上发布,在这种情况下,协议引擎可以从存储在节点104处的区块链150的区块151的副本中检索Txi。或者,Txi还可以在区块链150上发布。在这种情况下,协议引擎451可以从节点104维护的未发布有序事务集154中检索Txi。无论采用哪种方式,脚本引擎451都会标识Txi的引用输出中的锁定脚本,并将其传递给脚本引擎452。
因此,脚本引擎452具有Txi的锁定脚本和来自Txj的相应输入的解锁脚本。例如,在图2中示出了事务标记的Tx0和Tx1,但是同样的事务也可以应用于任何事务对。如前所述,脚本引擎452一起运行两个脚本,这将包括根据所使用的基于堆栈的脚本语言(例如脚本)将数据放置到堆栈453上和从堆栈453检索数据。
通过同时运行脚本,脚本引擎452确定解锁脚本是否满足锁定脚本中定义的一个或多个标准,即解锁脚本是否对包括锁定脚本的输出进行解锁?脚本引擎452将该确定的结果返回给协议引擎451。如果脚本引擎452确定解锁脚本确实满足在相应的锁定脚本中指定的一个或多个标准,则返回结果“TRUE”。否则,返回结果“FALSE”。
在基于输出的模型中,来自脚本引擎452的结果“TRUE”是事务有效性的条件之一。通常,还必须满足由协议引擎451评估的一个或多个进一步协议级条件;例如,Txj的输入中所指定的数字资产的总数额不超过其输出中指向的总数额,并且Txi的指向输出尚未被另一有效事务花费。协议引擎451评估来自脚本引擎452的结果以及一个或多个协议级条件,并且只有当它们都为TRUE时,协议引擎才核实事务Txj有效。协议引擎451将事务是否有效的指示输出到应用级决策引擎454。只有在Txj确实有效的条件下,决策引擎454才可以选择同时控制共识模块455C和传播模块455P,以执行其就Txj.的相应区块链相关功能。这包括共识模块455C,向节点的相应有序事务集154添加Txj,用于并入区块151中;以及传播模块455P,将Txj转发到网络106中的另一个区块链节点104。可选地,在实施例中,应用级决策引擎454可以在触发这些函数中的一个或两个函数之前应用一个或多个附加条件。例如,决策引擎可以只选择在事务有效且预留足够事务费用的条件下发布事务。
此外,还应当注意的是,在本文中,术语“TRUE”和“FALSE”不一定限于返回仅以单个二进制数(位)形式表示的结果,尽管这确实是一种可能的实现方式。更通俗地说,“TRUE”可以指指示成功或肯定结果的任何状态,而“FALSE”可以指指示不成功或不肯定结果的任何状态。例如,在基于账户的模型中,可以对签名的隐式协议级核实和智能合约的附加肯定输出的组合来指示结果为“TRUE”(如果两个单独的结果均为TRUE,则认为总体结果为TRUE)。
阻止数据
如上所述,脚本模式OP_FALSE OP_RETURN有助于将要上传到区块链的数据包括在不可花费输出中。为此,用户通常需要支付一小笔费用,该费用取决于他们要上传的数据的大小。例如,在一些区块链中,事务数据有效载荷大小几乎是无限制的,因此用户可以上传从简单文本到完整视频的任何内容。在其他区块链上,只使用脚本模式OP_RETURN就可以使输出不可花费。
可以用于在分类账上存储任意数据的脚本操作码OP_FALSE OP_RETURN的组合和脚本操作码OP_RETURN会导致区块链的大小增加,并消耗存储全部数据所需的区块链节点的磁盘空间。
在一些区块链事务内的一些数据有效载荷(例如,银行账号、护照号码)的分发被管理机构阻止的情况下,乍看之下这不是大问题:有效载荷位于不可花费输出中,因此阻止该数据不会限制币的移动。因此,UTXO集不受此操作的影响。然而,当第三方想要验证UTXO集时,就会出现挑战。这是因为需要事务的所有字段来产生事务ID(等于该事务中所有数据的双重哈希)。因此,如果没有被阻止的数据,第三方无法核实该事务的可花费输出的完整性。此外,第三方将无法核实包含该事务的区块有效,因为在计算存储在区块头中的所有事务的默克尔根时需要事务ID。例如,当新网络节点进入区块链网络时,就会面临这种挑战。他们必须下载整个区块链,并核实每个事务有效才能构建UTXO集。当且仅当所有数据对他们可用且未被篡改时,他们才能做到这一点。这就是所谓的区块链的不可变性。
本公开的实施例使得网络参与者能够阻止数据,同时仍然能够验证区块链的历史记录的完整性。本公开的实施例可以用于阻止区块链事务或其一部分中存在的任何数据。
图5示出了哈希函数,其接收初始化向量和输入消息(原像)作为输入,并提供哈希输出(哈希摘要)。哈希函数H是将任意大小的数据映射到固定大小的数据的函数。即,k位哈希函数H是如下定义的函数:
H:{0,1}*→{0,1}k
其中k是正整数。
加密哈希函数必须具有以下属性:
·确定性:哈希函数必须为相同的原像产生相同的摘要。
·快速:哈希摘要必须能够快速计算。
·单向(抗原像特性):在给定摘要的情况下,找到原像肯定是不可行的。
·弱抗碰撞性(第二抗原像特性):在给定哈希值的情况下,生成产生相同哈希的任意消息应该是不可行的。
·强抗碰撞性:两个原像将产生相同的哈希应该是不可行的。
·扩散性:原像的至少一个位的改变导致摘要中的每个位以50%的概率改变。
哈希函数提供了一种检查某些数据的完整性的方法。对于作为哈希摘要的原像的任何给定数据,可以稍后通过将该数据的当前哈希摘要与该数据的先前哈希摘要进行比较来检查该数据的完整性。
通常,为了核实哈希输出有效,第三方需要输入消息的所有内容。本公开的实施例使得第三方能够核实哈希输出有效,而无需访问消息的敏感部分。“敏感”数据在本文中是指用户或管理实体可能想要阻止的任何数据。敏感数据可以是用户的私有数据(例如,银行账户、护照号码),也可以是具有非法、恶意、诽谤、损害名誉或不雅性质的数据。如图5所示,与已知技术相比,在本公开的实施例中,使用输入消息(原像)来确定公共消息、敏感消息以及识别输入消息中的一个或多个公共位和一个或多个敏感位的位置的掩码。确定敏感消息,使得当将其作为输入提供给逻辑电路(该逻辑电路还接收公共消息和掩码作为输入)时,该逻辑电路将输入消息(原像)作为输出提供给哈希函数。如下面更详细地说明的,该逻辑电路的输入用于生成零知识证明,该零知识证明允许阻止/隐藏输入消息的敏感位,同时允许公开访问输入消息中的其他数据。位于输入消息中任何位置的敏感位对接收者来说可能是被阻止/隐藏的。本公开的实施例使得能够灵活地生成不同的掩码,以使得能够在不同时间向不同实体选择性地公开相同数据的信息的不同部分。
图6a至图6d是示出根据本公开的实施例的用于阻止消息中的数据的过程600的流程图。过程600可以由计算设备执行。
首先结合包括区块链事务数据的消息以及由区块链节点104执行的过程600来描述本公开的实施例。在这些示例中,消息可以是一个或多个区块链事务的全部或部分区块链事务。
在步骤S602中,区块链节点104接收区块链事务形式的消息;在步骤S604中,创建区块链事务的副本,在这里称为RealContent。如图7所示,RealContent的长度为L位。该副本作为真实数据传送,但是区块链节点104控制在该特定副本上实际应当可见的信息。
在步骤S604中,区块链节点104根据哈希算法用填充位702填充消息串RealContent,以生成在这里称为RealContentPad的消息串。作为填充的结果,消息串RealContentPad的长度是由哈希算法定义的输入消息大小的正整数倍。一个示例性哈希算法是SHA256哈希函数。
在一些区块链方面,使用SHA256哈希函数来导出事务的TxID。具体地,事务ID(TxID)是序列化区块链事务(例如,32位版本、32位锁定时间、事务输入列表、包括数据的事务输出列表)的双重SHA256哈希(或SHA256d=SHA256(SHA256(.)))。
SHA256的压缩函数如下:
F:{0,1}256×{0,1}512→{0,1}256
其中,它将256位链接值和512位消息块压缩为256位输出值。因此,如图7所示,消息串RealContentPad的长度可以为512n位,其中n是正整数。
假设消息RealContent的长度是l(≤447位),则在步骤S604中执行的填充包括将具有值1的单个位附加到RealContent的末尾。然后,添加k个零位,其中k是方程式l+1+k=448 mod 512 的最小正解。最后,添加64位的块,其是以二进制形式编写的消息长度l的表示。例如,假设消息RealContent的长度为24位。首先用1填充消息RealContent,然后将448-(24+1)=423个零位与64位块相加,以将RealContent转换为512位填充的消息RealContentPad。
常见的哈希函数遵循迭代方法(称为默克尔-达姆加德结构)来处理更长的消息M(大于或等于448位);它们将M分为n个k位块,即M=M0,…,Mn-1,其中|Mi|=k,i=0,…,n-1。各个消息块由压缩函数迭代地处理,该函数被定义为F:{0,1}k×{0,1}m→{0,1}k,其中m、k是正整数值,k表示链接值的大小,并且m表示消息块的大小。
如果RealContentPad的长度等于512位(参见步骤S608),则过程600转到图6b所示的步骤S610。
在步骤S610中,区块链节点104识别512位填充消息RealContentPad的位中的至少一个敏感位的位置。区块链节点104通过查询区块链节点104的存储器来执行步骤S610。
例如,区块链节点104的存储器可以存储与先前已识别为敏感的内容对应的一个或多个位串。
在另一个示例中,区块链节点104的存储器可以存储定义敏感数据的一个或多个预定义规则。例如,存储器可以存储预定义规则,该预定义规则声明应阻止包括特定域名的任何URL。在另一个示例中,存储器可以存储预定义规则,即应阻止跟随在单词“护照号码”之后的任何9位数字。
在步骤S612中,区块链节点104生成掩码位串Mask,其识别512位填充消息RealContentPad中的一个或多个公共位和一个或多个敏感位的位置。具体地,区块链节点104根据以下各项生成掩码位串Mask:
Mask[i]=1,条件是RealContentPad[i]是秘密位串;以及
Mask[i]=0,条件是RealContentPad[i]是公共位串,适用于RealContentPad的每个第i位。
在其他实施例中,作为步骤S610和步骤S612的替代方案,区块链节点104可以通过从区块链节点104的存储器中检索掩码位串来获取掩码位串Mask。无论如何获取掩码位串Mask,在该实施例中,掩码位串Mask的长度为512位。
在步骤S614中,区块链节点104通过为一个或多个敏感位中的全部敏感位分配相同的预定值(例如,0或1)并保留公共位值来修改RealContentPad,从而计算公共位串PublicData。因此,在该实施例中,公共位串PublicData的长度为512位。为了说明可以如何计算公共位串PublicData,在这里是指通过为一个或多个敏感位中的全部敏感位分配零值来修改RealContentPad,然而这只是一个示例。
在步骤S614中,区块链节点104还计算长度为512位并且包括一个或多个敏感位的秘密位串SecretData。区块链节点104可以通过获取RealContentPad并保留其中包括的一个或多个敏感位来计算秘密位串SecretData,其中SecretData的剩余位可以取任意值。
秘密位串SecretData满足以下要求,即RealContentPad等于使用公共位串PublicData和秘密位串SecretData以及掩码位串Mask作为输入的按位逻辑运算(涉及多个逻辑运算)的输出。
作为一个示例,秘密位串SecretData可以满足以下要求:
RealContentPad=PublicDataXOR(SecretDataANDMask)。
具体地,秘密位串SecretData满足以下要求,即RealContentPad等于以下两项的按位异或(XOR)运算:(i)公共位串;以及(ii)掩码位串和秘密位串的按位与(AND)运算的结果。该结构在图8中作为虚线所示电路的一部分示出。应当理解的是,可以采用上述和图8中示出的逻辑电路结构,前提是该逻辑电路结构将以下各项作为输入:(i)公共位串PublicData;(ii)秘密位串SecretData;以及(iii)掩码位串Mask,并且其中包括的按位逻辑运算提供RealContentPad作为输出。
在步骤S616中,区块链节点104通过对消息串RealContentPad进行哈希处理来计算哈希值Hashvalue,其中Hashvalue=SHA256(RealContentPad)。在使用SHA256哈希算法的实施例中,在步骤S616中使用的公共初始化向量将来自安全散列标准(SHS)。对于SHA256,初始哈希值/>应由以下八个32位字/>组成:
在步骤S618中,区块链节点104使用以下各项来生成零知识证明:
·公共位串,PublicData
·掩码位串,Mask
·输出哈希值,Hashvalue
·秘密位串SecretData
零知识证明(ZKPs)是一种加密构建块,其允许一方(证明者)向另一方(验证者)证明语句为真,而不揭露除该语句为真之外的任何信息。
在步骤S618中生成的零知识证明是一种证明类型,其中证明者不仅证明该语句的有效性,而且确保知道一条秘密信息,而不揭露任何相关信息。
虽然交互式零知识证明需要证明者与验证者之间的交互,但也存在非交互式零知识(Non-Interactive Zero-Knowledge,NIZK)证明,其中证明者仅产生一条称为“证明”的消息来让验证者相信该语句为真。在步骤S618中生成的零知识证明可以是NIZK证明。
zkSNARK(零知识简洁非交互式知识论证Zero-Knowledge Succinct Non-Interactive Argument of Knowledge)是一种简洁的NIZK知识证明,其证明非常简短且易于验证。该语句以用于生成该语句的证明的逻辑电路来表示。在最高效的结构中,验证者只需执行恒定数量的群运算。在步骤S618中生成的零知识证明可以是zkSNARK证明。
在步骤S618中生成的零知识证明是zkSNARK证明的示例中,证明密钥(从区块链节点104的存储器中检索)附加地用于生成zkSNARK证明。
zkSNARK协议通常包括三个阶段:
a.设置:给定一个语句,证明者和验证密钥对通过包括代数电路生成、R1CS(一阶约束系统Rank-1 Constraint System)和QAPs(二次张成程序Quadratic Span Programs)的若干内部步骤来计算。私有信息必须销毁,并且永远不会再存在,因为访问这些信息的任何人都可能造成攻击。
b.证明生成:在给定公共信息、证明者密钥、公共和私有输入的情况下,证明者生成证明并将其发送给验证者。
c.验证:在给定公共信息、验证密钥和公共输入的情况下,验证者执行验证。
zkSNARK协议应满足以下属性:
·完整性:如果语句为真,并且验证者和证明者诚实,则接受证明。
·合理性:如果语句为假,则作弊证明者无法让诚实的验证者相信语句为真,除非概率可以忽略不计。
·零知识:除语句为真之外,零知识证明不会向验证者揭露任何信息。
·简洁:证明的长度小于电路尺寸,并且验证者必须进行比电路尺寸更少的加密运算。
·非交互式:只需一步即可将证明发送给验证者。
·知识论证:证明被视为在计算上是合理的。也就是说,无界证明者(如量子计算机)可以在不被检测到的情况下证明语句为假。
·知识:证明者确实知道见证,在未获得该见证(这是证明语句所需的私有输入)的情况下无法构造证明,即存在与证明者交互并输出该见证的提取算法。
在步骤S618中生成的零知识证明可以是任何其他已知类型的零知识证明,例如基于多方计算(multi-party computation,MPC)的零知识证明(例如,zkBOO)、zkSNARK、STARK或Bulletproofs。
如本领域技术人员所知的,证明和验证密钥在zkSNARK的上下文中工作,但不适用于其他类型的零知识证明,例如基于MPC的证明(例如,zkBOO)、STARK或Bulletproofs。
在步骤S620中,区块链节点104从消息串RealContentPad中移除一个或多个敏感位以生成所修改的消息(例如,所修改的区块链事务)RealContentPublic。在一个示例中,区块链节点104通过为一个或多个敏感位中的全部敏感位分配相同的预定值(例如,0)并保留RealContentPad的公共位值来执行步骤S620。应当理解的是,在RealContentPad的长度等于512位的该示例中,所修改的消息RealContentPublic的长度也等于512位。
一旦生成所修改的消息(例如,所修改的区块链事务),就可以从计算设备的存储器中移除原始消息,并使用所修改的消息来替换。或者,可以在生成所修改的消息(例如,所修改的区块链事务)之后,将原始消息保留在计算设备的存储器中。
然后,将所修改的区块链事务RealContentPublic输出给接收者。例如,可以将所修改的区块链事务RealContentPublic发送到区块链网络106中的接收者区块链节点104。
为了使接收者区块链节点104能够证明所修改的区块链事务RealContentPublic有效,区块链节点104附加地发送以下各项:
·零知识证明
·输出哈希值Hashvalue
如果掩码位串Mask是公知的,则区块链节点104不需要将掩码位串Mask发送到接收者区块链节点104。然而,如果掩码位串Mask不是公知的,则区块链节点104会附加地将掩码位串Mask发送到接收者区块链节点104。
图10a示出了当RealContentPublic的长度为512位时由验证者计算设备执行的验证过程1000。在计算设备是接收者区块链节点104的实施例中,在步骤S1002中,接收者区块链节点104获取所修改的区块链事务RealContentPublic。在一个示例中,接收者区块链节点104从发送者区块链节点104(其执行过程600)接收所修改的区块链事务RealContentPublic。如果所修改的区块链事务RealContentPublic的长度为512位(在步骤S1004中确定),则过程1000转到步骤S1006。
在步骤S1006中,接收者区块链节点104通过计算输出哈希值Hashvalue的SHA256哈希来验证输出哈希值Hashvalue,以检查SHA256(Hashvalue)是否等于与所修改的区块链事务RealContentPublic相关联的公共事务ID。如果该验证失败,则过程1000结束。如果接收者区块链节点104成功验证了输出哈希值Hashvalue,则过程1000转到步骤S1008。
在步骤S1008中,接收者区块链节点104使用以下各项验证零知识证明:
·零知识证明
·所修改的消息RealContentPublic
·在步骤S616中使用的输入哈希值(在这种情况下,初始化向量)
·输出哈希值Hashvalue
·掩码位串Mask
如果接收者区块链节点成功验证了零知识证明,则接收者区块链节点104能够验证所修改的区块链事务RealContentPublic有效。
在步骤S618中生成的零知识证明是zkSNARK证明的示例中,验证密钥(从接收者区块链节点104的存储器中检索)附加地用于验证zkSNARK证明。
如本领域技术人员所知的,验证零知识证明包括使用输入信息的一个或多个检查,并且验证的输出是指示零知识证明有效或无效的决定。所执行的检查特定于零知识证明的类型,并且是本领域技术人员已知的。对于所有类型的零知识证明,验证者仅在所有检查都通过时才接受零知识证明。
在zkSNARK证明的上下文中,电路(例如,如图8所示)在设置阶段使用,这意味着设置参数(证明密钥和验证密钥)确保确实使用专用电路。证明者使用证明密钥以及电路来生成zkSNARK证明。验证者将使用验证密钥来执行检查。验证密钥将确保验证者确实正在核实预定义语句(这意味着电路)有效,而无需验证者直接使用电路。相比之下,在Bulletproofs的上下文中,证明者和验证者首先就电路达成一致。接下来,基于电路,证明者生成证明,然后将其发送给验证者进行核实。验证者还使用电路的知识来核实证明有效。其他基于MPC的证明与Bulletproofs的相似之处在于,验证者在验证过程中直接使用电路。
可以任意顺序执行步骤S1006和步骤S1008;然而,有利的是首先执行步骤S1006,然后仅在步骤S1006中的检查成功通过时继续执行步骤S1008,因为执行步骤S1006的计算强度低于步骤S1008。
下面参考一个简单的示例来说明掩码位串Mask的效果。假设爱丽丝具有RealContent=“1101 1011”,其中前四位“1101”对应于她可以与其他人共享的公共数据,而“1011”是她的私有数据。此外,还假设爱丽丝需要与鲍勃共享RealContent,但只想公开前四位。因此,对于该特定示例,Mask=“0000 1111”。此外,还假设鲍勃知道Output=SHA256(RealContent)=SHA256(1101 1011)。
如果没有掩码位串Mask,则结构将为:
RealContent=PublicDataXORRealContent
如果爱丽丝不诚实,则她可以向鲍勃隐瞒公共数据,如下所示(例如,通过将1101更改为0110)。
1.爱丽丝选择伪公共数据作为PublicData=0110 0000,其中敏感位“1011”中的每个敏感位已设置为0。
2.她还选择全部8位1011 1011作为秘密数据。
a.应当注意的是,1101 1011=0110 0000 XOR 1011 1011,其中电路的输出哈希值将与真实的Output=SHA256(1101 1011)相同。
因此,在没有掩码的情况下,她可以在证明仍然有效的情况下隐瞒数据的公开部分。
然而,如果该掩码已使用并公开已知,则不可能进行这种攻击,原因如下:
a.她选择伪输入PublicData=0110 0000,并将其共享给鲍勃。1011 1011是部分伪造(即,最左边四位)的秘密数据。
b.鲍勃知道掩码值0000 1111。
c.在给定0110 0000、0000 1111和Output(=SHA256(1101 1011))的情况下,鲍勃将不会核实zkSNARK证明有效,原因如下:
1101 1011≠0110 0000 XOR(0110 1011 AND 0000 1111)
1101 1011≠0110 0000 XOR 0000 1011
1101 1011≠0110 1011
因此,不诚实的爱丽丝将无法在不被检测到的情况下操纵内容。
虽然在上面的示例中,敏感位“1011”中的每个敏感位设置为0,但这只是一个示例。作为替代方案,敏感位“1011”的每个敏感位可以设置为1,使得PublicData=01101111。这将导致逻辑计算更改为:
RealContent=(PublicData AND NOT(Mask))XOR(SecretData AND Mask)
在上述情况下使用0的结果是:
0110 1111 AND NOT(0000 1111)
这会导致
0110 0000
然而,由于需要额外的运算(与运算),因此将每个敏感位设置为1的效率低于将每个敏感位设置为0的效率。
现在,再次参考图6a。
如果RealContentPad的长度大于512位,即其长度为512n位,其中n≥2(参见步骤S608),则过程600转到图6c所示的步骤S622。也就是说,如果RealContent的大小大于447位,则过程600转到图6c所示的步骤S622。
在步骤S622中,区块链节点104将消息串RealContentPad分成多个消息块RealContenti,每个消息块的长度为512位,对应于由哈希函数定义的输入消息大小:
RealContentPad=RealContent1||…||RealContentt
其中,|RealContenti|=512位,i=1,…,t。
图7示出了RealContentPad的长度为3072位并被分成长度为512位的6个消息块的示例。
在步骤S624中,i的值设置为1;在步骤S626中,区块链节点104检索RealContenti。应当理解的是,第一次执行步骤S626时,区块链节点104检索第一512位消息块RealContent1
在步骤S628中,区块链节点104检索输入哈希值。应当理解的是,在使用SHA256哈希算法的实施例中,在第一次执行步骤S628时,区块链节点104检索将来自安全散列标准(SHS)的预定公共初始化向量。对于后续执行,执行步骤S628,区块链节点104检索先前输出哈希值,即Hashvaluei-1。在SHA256算法的上下文中,输入哈希值的长度为256位。
在步骤S630中,区块链节点104通过对消息块RealContenti进行哈希处理来计算哈希值Hashvaluei,其中Hashvaluei=SHA256(RealContenti)。在步骤S630中执行的压缩中使用在步骤S628中检索的输入哈希值。在下一次执行步骤S628时,检索哈希值Hashvaluei-1作为输入哈希值。例如,将哈希值Hashvalue1用作第二消息块RealContent2的压缩的输入哈希值。
如果消息块RealContenti不包括敏感位(在步骤S632中确定),则该过程转到图6d所示的步骤S644。如果存在包括要处理的敏感数据的其他消息块(在步骤S644中确定),则该过程转到步骤S646,其中区块链节点104将i的值递增1,然后过程600循环回到步骤S626,在该步骤中,区块链节点104检索下一个RealContenti
如果消息块RealContenti包括敏感位(在步骤S632中确定),则区块链节点104执行图6d所示的步骤S634、步骤S636、步骤S638、步骤S640和步骤S642。步骤S634、步骤S636、步骤S638、步骤S640和步骤S642对应于步骤S610、步骤S612、步骤S614、步骤S618和步骤S620。
在步骤S642中,区块链节点104从RealContentPad中移除RealContenti中的任何敏感位。在一个示例中,区块链节点104通过为RealContentPad中的一个或多个敏感位中的全部敏感位分配相同的预定值(例如,0)并保留RealContentPad的公共位值来执行步骤S642。
作为步骤S634和步骤S636的替代方案,区块链节点104可以通过从区块链节点104的存储器中检索掩码位串来获取掩码位串Maski。无论如何获取掩码位串Maski,在该实施例中,掩码位串Maski的长度为512位。
在执行步骤S642之后,过程600转到上述步骤S644。
如果不存在包括要处理的敏感数据的其他消息块(在步骤S644中确定),则过程600结束。在过程600结束时,区块链节点104将从消息串RealContentPad中移除全部敏感位以生成所修改的消息(例如,所修改的区块链事务)RealContentPublic。
从上面可以明显看出,在使用SHA256哈希算法的实施例中,在过程600中,使用将来自安全散列标准(SHS)的预定公共初始化向量X0来压缩第一消息块RealContent1。将第一压缩的摘要Hashvalue1用作第二消息块RealContent2的压缩中的输入哈希值X1。将第二压缩的摘要Hashvalue2用作第三消息块RealContent3的压缩中的输入哈希值X2,依此类推。图9示出了用于上述递归哈希的示例性电路。如上所述,用于导出秘密位串SecretDatai的精确按位逻辑运算可以与图9所示不同。对于每个消息块,PublicDatai、Maski和SecretDatai的长度为512位,使得按位逻辑运算的最终输出RealContenti的长度为512位。
从上面可以明显看出,在过程600中,对于包括敏感位的任何消息块RealContenti,区块链节点104使用以下各项来生成零知识证明:
·公共位串PublicDatai
·掩码位串Maski
·输出哈希值Hashvaluei
·秘密位串SecretDatai
在步骤S640中生成的零知识证明是zkSNARK证明的示例中,证明密钥(从区块链节点104的存储器中检索)附加地用于生成zkSNARK证明。
在多个消息块具有敏感数据的情况下,尽管图6c和6d示出了迭代过程,但在一些实施例中,并行地执行证明生成过程。在这些实施例中,使用与上一个块的哈希输出(摘要)对应的输入哈希值(或如上在第一消息块的情况下讨论的预定初始化向量X0)对每个消息块进行哈希处理。然后,可以使用与包括敏感数据的消息块相关联的所计算的哈希值Hashvaluei来为这些消息块彼此独立且并行地生成零知识证明。通过这种并行执行,假设有足够的计算资源,可以在与生成单个零知识证明所花费相同的时间内创建N个零知识证明。这种并行证明生成有利地允许高效地处理大量消息。
然后,将所修改的区块链事务RealContentPublic输出给接收者。例如,可以将所修改的区块链事务RealContentPublic发送到区块链网络106中的接收者区块链节点104。
为了使接收者区块链节点104能够证明所修改的区块链事务RealContentPublic有效,对于包括敏感位的每个RealContenti,区块链节点104附加地发送以下各项:
·零知识证明
·输出哈希值Hashvaluei
如果掩码位串Maski是公知的,则区块链节点104不需要将掩码位串Maski发送到接收者区块链节点104。然而,如果掩码位串Maski不是公知的,则区块链节点104会附加地将掩码位串Maski发送到接收者区块链节点104。
图10b示出了当RealContentPublic的长度大于512位(即,其长度为512n位,其中n≥2)时由验证者计算设备执行的验证过程1050。
在步骤S1010中,计算设备(例如,接收者区块链节点104)获取RealContentPublic的最终消息块RealContentt的哈希值Hashvaluet,并计算Hashvaluet的SHA256哈希,以检查SHA256(Hashvaluet)是否等于与所修改的区块链事务RealContentPublic相关联的公共事务ID。
在最终消息块RealContentt包括敏感位的示例中,接收者区块链节点104从发送者计算设备接收最终消息块RealContentt的哈希值Hashvaluet。在最终消息块RealContentt不包括敏感位的示例中,接收者区块链节点104可以从发送者计算设备接收最终消息块RealContentt的哈希值Hashvaluet。或者,接收者区块链节点104可以计算最终消息块RealContentt的SHA256哈希(使用从前一个消息块RealContentt-1的哈希处理中输出的哈希值作为输入哈希值)以生成输出哈希值Hashvaluet
如果该验证失败,则过程1050结束。一旦不存在要处理的其他消息块,就可以在过程1050结束时执行步骤S1010;然而,有利的是首先执行步骤S1010,然后仅在步骤S1010中的检查成功通过时继续执行零知识证明验证,因为执行步骤S1010的计算强度低于零知识证明验证。
如果接收者区块链节点104成功验证了输出哈希值Hashvaluet,则过程1000转到步骤S1012。
在步骤S1012中,区块链节点104将消息串RealContentPublic分成多个消息块RealContenti,每个消息块的长度为512位,对应于由哈希函数定义的输入消息大小:
RealContentPublic=RealContent1||…||RealContentt
其中,|RealContenti|=512位,i=1,…,t。
在步骤S1014中,i的值设置为1;在步骤S1016中,区块链节点104检索RealContenti。应当理解的是,第一次执行步骤S626时,区块链节点104检索第一512位消息块RealContent1
在步骤S1018中,区块链节点104使用掩码位串Maski来确定消息块RealContenti中是否存在敏感位。
如果消息块RealContenti不包括敏感位,则过程1050转到步骤S1020,在该步骤中,接收者区块链节点104检索输入哈希值。应当理解的是,在使用SHA256哈希算法的实施例中,在第一次执行步骤S1020时,区块链节点104检索将来自安全散列标准(SHS)的预定公共初始化向量。对于后续执行,执行步骤S1020,区块链节点104检索先前输出哈希值,即Hashvaluei-1
在步骤S1022中,区块链节点104通过对消息块RealContenti进行哈希处理来计算哈希值Hashvaluei,其中Hashvaluei=SHA256(RealContenti)。在步骤S1022中执行的压缩中使用在步骤S1020中检索的输入哈希值。
如果消息块RealContenti包括敏感位,则过程1050转到步骤S1024,在该步骤中,接收者区块链节点104使用以下各项来验证RealContenti的零知识证明:
·RealContenti的零知识证明
·消息块RealContenti
·输出哈希值Hashvaluei
·RealContenti的输入哈希值(Hashvaluei-1),即上一个块的哈希输出(摘要)
·用于压缩所修改的消息的输入哈希值
·掩码位串Maski
在步骤S640中生成的零知识证明是zkSNARK证明的示例中,验证密钥(从接收者区块链节点104的存储器中检索)附加地用于验证zkSNARK证明。
如上所述,优选地,在步骤S1022之前执行步骤S1020,但是可以任意顺序执行步骤1020和步骤S1022。
如果存在要处理的其他消息块(在步骤S1026中确定),则该过程转到步骤S1026,其中区块链节点104将i的值递增1,然后过程1050循环回到步骤S1016,在该步骤中,区块链节点104检索下一个RealContenti
如果接收者区块链节点成功验证了每个零知识证明,则接收者区块链节点104能够验证所修改的区块链事务RealContentPublic有效。
在多个消息块具有敏感数据的情况下,尽管图10b示出了迭代过程,但在一些实施例中,并行地执行证明验证过程。如上所述,对于包括敏感位的每个消息块RealContenti,接收者区块链节点104具有该消息块的零知识证明和该消息块的输出哈希值Hashvaluei。区块链节点104可以通过使用与上一个块的哈希输出(摘要)对应的输入哈希值(或如上在第一消息块的情况下讨论的预定初始化向量X0)对消息块进行哈希处理,来计算不包括敏感数据的块的剩余哈希值Hashvaluei。计算所有哈希值Hashvaluei之后,即可并行地执行与包括在步骤S1024执行的敏感数据的消息块相关联的每个零知识证明的验证。通过这种并行执行,假设有足够的计算资源,可以在与验证单个零知识证明所花费相同的时间内验证N个零知识证明。
图7示出了RealContentPad的长度为3072并被分成六个消息块RealContent1–RealContent6的示例。在图7所示的示例中,消息块RealContent4和RealContent5包括敏感位704。
通过实现过程600,对包括公共数据RealContent1–RealContent3的每个消息块进行哈希处理以生成相应的输出哈希值;然而,由于它们仅包含公共数据,因此不为消息块RealContent1–RealContent3生成零知识证明。
消息块RealContent4包括敏感数据,因此区块链节点104将使用以下各项为RealContent4生成零知识证明:
·公共位串PublicData4
·掩码位串Mask4
·输出哈希值Hashvalue4(使用消息块RealContent3的压缩的摘要Hashvalue3作为输入哈希值进行计算)
·秘密位串SecretData4;和
·从区块链节点104的存储器中检索的证明密钥(如果零知识证明使用zkSNARK证明中的类似可信设置)。
消息块RealContent5包括敏感数据,因此区块链节点104将使用以下各项为RealContent5生成零知识证明:
·公共位串PublicData5
·掩码位串Mask5
·输出哈希值Hashvalue5(使用消息块RealContent4的压缩的摘要Hashvalue4作为输入哈希值进行计算)
·秘密位串SecretData5;和
·从区块链节点104的存储器中检索的证明密钥(如果零知识证明使用zkSNARK证明中的类似可信设置)。
在过程600结束时,敏感位704将从RealContentPad中移除,以生成所修改的区块链事务RealContentPublic。
然后,将所修改的区块链事务RealContentPublic输出给接收者。例如,可以将所修改的区块链事务RealContentPublic发送到区块链网络106中的接收者区块链节点104。
为了使接收者区块链节点104能够证明所修改的区块链事务RealContentPublic有效,区块链节点104附加地发送以下各项:
·为RealContent4生成的零知识证明
·输出哈希值Hashvalue4
·为RealContent5生成的零知识证明
·输出哈希值Hashvalue5
如果掩码位串Mask4是公知的,则区块链节点104不需要将掩码位串Mask4发送到接收者区块链节点104。然而,如果掩码位串Mask4不是公知的,则区块链节点104会附加地将掩码位串Mask4发送到接收者区块链节点104。同样地,如果掩码位串Mask5是公知的,则区块链节点104不需要将掩码位串Mask5发送到接收者区块链节点104。然而,如果掩码位串Mask5不是公知的,则区块链节点104会附加地将掩码位串Mask5发送到接收者区块链节点104。
为了验证所修改的区块链事务RealContentPublic有效,在使用SHA256哈希算法的实施例中,接收者区块链节点104使用将来自安全散列标准(SHS)的预定公共初始化向量X0来压缩第一消息块RealContent1。将第一压缩的摘要Hashvalue1用作第二消息块RealContent2的压缩中的输入哈希值X1。将第二压缩的摘要Hashvalue2用作第三消息块RealContent3的压缩中的输入哈希值X2
接收者区块链节点104使用以下各项来验证RealContent4的零知识证明:
·RealContent4的零知识证明
·RealContentPad的消息块RealContent4
·输出哈希值Hashvalue4
·RealContent4的输入哈希值(Hashvalue3),即上一个块的哈希输出(摘要)
·掩码位串Mask4
·从接收者区块链节点104的存储器中检索的验证密钥(如果零知识证明使用zkSNARK证明中的类似可信设置)。
接收者区块链节点104使用以下各项来验证RealContent5的零知识证明:
·RealContent5的零知识证明
·RealContentPad的消息块RealContent5
·输出哈希值Hashvalue5
·RealContent5的输入哈希值(Hashvalue4),即上一个块的哈希输出(摘要)
·掩码位串Mask5
·从接收者区块链节点104的存储器中检索的验证密钥(如果零知识证明是zkSNARK证明)。
在该示例中,由于最终消息块RealContent6不包括敏感数据,因此接收者区块链节点104能够计算最终消息块RealContent6的SHA256哈希(使用与第五消息块RealContent5相关联的输出哈希值Hashvalue5作为输入哈希值)以生成输出哈希值Hashvalue6
然后,接收者区块链节点104计算Hashvalue6的SHA256哈希,以检查SHA256(Hashvalue6)是否等于与所修改的区块链事务RealContentPublic相关联的公共事务ID。
图6c和图6d示出了为包括敏感数据的每个消息块生成零知识证明。在其他实施例中,可以合并包括敏感数据的RealContentPad的相邻消息块,并为合并块生成单个零知识证明。
再次参考图7所示的示例,其中RealContentPad的长度为3072并且被分成六个消息块RealContent1–RealContent6,消息块RealContent4和RealContent5包括敏感位704。在这些其他实施例中,区块链节点104将通过级联RealContent4和RealContent5来生成1024位的合并块,即RealContentmerged=RealContent4││RealContent5
在这些其他实施例中,区块链节点104将使用以下各项为合并块生成零知识证明:
·公共位串PublicDatamerged,其是通过为一个或多个敏感位分配零值并保留公共位值来修改RealContentmerged而计算得出的。在该示例中,PublicData的长度为1024位。
·掩码位串Maskmerged,其识别合并块RealContentmerged中的一个或多个敏感位的位置。在该示例中,Maskmerged的长度为1024位,因为Maskmerged=Mask4||Mask5(级联的)。
·合并块RealContentmerged中的结束消息块的哈希值(该示例中)、输出哈希值Hashvalue5(使用消息块RealContent4的压缩的摘要Hashvalue4作为输入哈希值来计算的),其中结束消息块是合并块RealContentmerged的一部分。
·秘密位串SecretDatamerged,其包括合并块RealContentmerged的一个或多个敏感位。区块链节点104将通过获取RealContentmerged并保留其中包括的一个或多个敏感位来计算秘密位串SecretDatamerged,其中SecretDatamerged的剩余位可以取任意值。秘密位串SecretDatamerged满足以下要求:
RealContentmerged
PublicDatamergedXOR(SecretDatamergedANDMaskmerged)。
在该示例中,SecretDatamerged的长度为1024位。
·从区块链节点104的存储器中检索的证明密钥(如果零知识证明使用zkSNARK证明中的类似可信设置)。
接收者区块链节点104使用以下各项来验证RealContentmerged的零知识证明:
·RealContentmerged的零知识证明
·合并块RealContentmerged
·合并块RealContentmerged的输入哈希值,在该示例中为Hashvalue3
·输出哈希值Hashvalue5
·掩码位串Maskmerged
·从接收者区块链节点104的存储器中检索的验证密钥(如果零知识证明使用zkSNARK证明中的类似可信设置)。
接收者区块链节点104将知道对第三消息块RealContent3进行哈希处理的哈希输出,并将其用作RealContentmerged的输入哈希值。RealContentmerged的哈希值为Hashvalue5,用作第六消息块RealContent6的压缩的输入哈希值。
当消息块RealContenti不具有足够的熵并且因此可能受到恶意方的暴力攻击时,可以使用上述合并相邻块的技术,以获取消息块RealContenti中存在的一个或多个敏感位。如果消息块RealContenti中敏感位的数量小于预定阈值,则消息块RealContenti可以被认为不具有足够的熵。预定阈值可以是与在本公开的实施例中使用的哈希函数相关联的抗碰撞性安全级别。例如,与SHA256哈希函数相关联的抗碰撞性安全级别为128位。这意味着需要最多2128次操作才能通过暴力攻击来破坏系统。
因此,在本公开的实施例中,区块链节点104可以被配置为确定包括敏感数据的消息块包括小于预定阈值的多个敏感位,并将该消息块与包括敏感数据的至少一个相邻消息块合并以生成合并块RealContentmerged。该合并可以被实现为使得合并块RealContentmerged中敏感位的数量超过预定阈值。
例如,如果512位消息块RealContent4包括56个敏感位,并且512位消息块RealContent5包括100个敏感位,则RealContentmerged合并将包括156个敏感位,这些敏感位超过与SHA256哈希函数相关联的128位抗碰撞性安全级别。
为合并块生成单个零知识证明(通过级联两个消息块来生成)所产生的计算成本与为两个消息块中的每个消息块生成零知识证明所产生的计算成本相同;然而,生成该单个零知识证明所花费的时间将是原来的两倍。这是因为可以并行地计算为两个消息块中的每个消息块生成零知识证明,即可以单独计算每个消息块,因为拥有所需的所有输入,包括来自原始内容的所有中间状态(哈希值)。
此外,区块链节点104可以被配置为确定包括敏感数据的消息块包括小于预定阈值的多个敏感位,并将公共位中的一个或多个公共位指定为敏感位以增加熵。
如上所述,消息可以是计算设备接收的区块链事务。
在一种示例性实现方式中,计算设备是区块链节点104。区块链节点104可以从区块链网络106的用户的计算机终端102接收区块链事务。计算机终端102请求在区块链上传播和记录区块链事务。在将所修改的区块链事务与核实所修改的区块链事务有效所需的信息一起传播到网络106中的其他区块链节点104之前,区块链节点104可以执行本文所述的方法以从区块链事务中移除敏感数据。
在另一种示例性实现方式中,计算设备是区块链节点104。区块链节点104可以从区块链网络106或另一区块链节点104的用户的计算机终端102接收区块链事务,从而将该事务记录在区块链上。在将所接收的事务添加到内存池之前,区块链节点104可以执行本文所述的方法以从区块链事务中移除敏感数据。然后,将所修改的区块链事务添加到内存池。如果区块链节点104识别出有效的工作量证明解,则区块链节点104生成包括所修改的区块链事务的新区块链区块151。然后,将新区块151与核实所修改的区块链事务正确所需的信息一起传播到该网络的其他节点,从而使每个节点能够将新区块151记录在区块链上。
在另一种示例性实现方式中,计算设备可以从另一区块链节点104接收已记录在区块链上的区块151,该区块包括事务。
计算设备可以是区块链节点104。响应于接收到区块151,区块链节点104可以执行本文所述的方法以从区块链事务中移除敏感数据。然后,将包括所修改的区块链事务的区块151与核实所修改的区块链事务有效所需的信息一起发送到该网络的其他节点,从而使每个节点能够将新区块151记录在区块链上。或者,响应于从接收者区块链节点104接收到对区块151的请求,区块链节点104将包括所修改的区块链事务以及核实所修改的区块链事务有效所需的信息的区块151发送到接收者区块链节点104。例如,接收者区块链节点104可以是已进入区块链网络的新网络节点,其必须下载整个区块链,并核实每个事务有效才能构建UTXO集。
在上述变体中,响应于接收到区块151,区块链节点104可以将该区块存储在存储器中。响应于从接收者区块链节点104接收到对该区块的请求,区块链节点104可以执行本文所述的方法以从区块链事务中移除敏感数据。然后,将包括所修改的区块链事务的区块与核实所修改的区块链事务有效所需的信息一起发送到该网络的其他节点。例如,接收者区块链节点104可以是已进入区块链网络的新网络节点,其必须下载整个区块链,并核实每个事务有效才能构建UTXO集。
在另一种示例性实现方式中,计算设备不是区块链网络106上的区块链节点104(即,不是区块链网络106上的活动节点)。也就是说,计算设备在区块链网络106的外部。然而,计算设备可以耦合到区块链网络106。计算设备维护区块链150的副本,并向客户端设备102提供区块链数据(例如,记录在区块链150上的区块151)。计算设备可以从区块链节点104中的一个或多个区块链节点接收记录在区块链150上的区块。响应于接收到该区块,计算设备可以执行本文所述的方法以从区块链事务中移除敏感数据。然后,将包括所修改的区块链事务的区块与核实所修改的区块链事务有效所需的信息一起发送到客户端设备。或者,响应于从客户端设备接收到对该区块的请求,计算设备将包括所修改的区块链事务以及核实所修改的区块链事务有效所需的信息的区块发送到客户端设备。在上述变体中,响应于接收到该区块,计算设备可以将该区块存储在存储器中。响应于从客户端设备接收到对该区块的请求,计算设备然后可以执行本文所述的方法以从区块链事务中移除敏感数据。然后,将包括所修改的区块链事务的区块与核实所修改的区块链事务有效所需的信息一起发送到客户端设备。
上面参考了一个示例,其中计算设备可以通过从计算设备的存储器中检索掩码位串来获取掩码位串。如果政府实体或监管实体确定已经记录在区块链上的区块的事务包括敏感(例如,非法)数据,则这是可能的。在这种情况下,政府/监管实体可以将事务ID和掩码位串发布到计算设备,例如网络106的区块链节点104。
虽然本文结合充当区块链事务的消息来描述实施例,但是本公开的实施例扩展到区块链的上下文之外,并且可以用于阻止哈希原像的任何部分。
作为一个示例,该消息可以是个人的护照信息。也就是说,在图7所示的示例中,RealContentPad的长度为3072并且被分成六个消息块RealContent1–RealContent6,每个消息块可以包括此人的相应身份属性(例如,姓名、出生日期、出生地点、护照号码、签发日期、到期日期)。
在该示例中,消息块RealContent1–RealContent6可以与政府对结束消息块RealContent6的哈希值Hashvalue6的签名一起存储在电子护照上。电子护照可以采用物理护照文档的形式,该物理护照文档包括用于存储和处理数据的嵌入式集成电路(例如,计算设备)。也就是说,物理护照文档上的嵌入式集成电路可以被配置为执行本公开的实施例。
或者,电子护照可以采用电子护照文档的形式,该电子护照文档存储在计算设备(例如,移动电话)的存储器中。该电子护照可以是虚拟移动身份,其可以从已经签发的政府凭证(例如,电子护照)导出。该电子护照可以安全地加载到电话或令牌等移动设备上。
如果消息块RealContent4和RealContent5包括敏感位,则计算设备可以执行本文所述的方法以从护照信息的副本中移除敏感数据,从而生成所修改的护照信息,所修改的护照信息仅包括原始护照信息的选定属性。然后,将所修改的护照信息与核实所修改的护照信息有效所需的信息一起输出给接收者。例如,计算设备可以将所修改的护照信息与核实所修改的护照信息有效所需的信息一起发送到远程设备(例如,机场计算机终端)。在另一个示例中,计算设备可以在计算设备的显示器上输出所修改的护照信息以及核实所修改的护照信息有效所需的信息,以便接收者可以看到该信息,然后可以验证所显示的信息。
在生成所修改的消息(例如,所修改的护照信息)之后,不会从存储器中移除原始消息(个人的护照信息),因为稍后需要该信息与其他实体进行验证。
为了使远程设备能够证明所修改的护照信息有效,对于包括敏感位的每个RealContenti,计算设备附加地发送以下各项:
·零知识证明
·输出哈希值Hashvaluei
如果掩码位串Maski是公知的,则计算设备104不需要将掩码位串Maski发送到远程设备。然而,如果掩码位串Maski不是公知的,则计算设备会附加地将掩码位串Maski发送到远程设备。
远程设备能够通过以下方式使用过程1050来验证所修改的护照信息有效:
1)获取RealContentPad的最终消息块RealContentt的哈希值Hashvaluet,并将所获取的哈希值Hashvaluet与预先存储在远程设备的存储器中的可信哈希值进行比较,以检查Hashvaluet是否等于预先存储在远程设备的存储器中的可信哈希值。在该示例中,Hashvaluet对应于结束消息块RealContent6的哈希值Hashvalue6。因此,与事务ID是可信值的区块链场景(上面结合步骤S1010描述)相反,在护照信息的上下文中,可信值是预先存储在远程设备的存储器中的可信哈希值。
如上所述,如果最终消息块RealContentt包括敏感位,则计算设备将Hashvaluet发送到远程设备。如果最终消息块RealContentt不包括敏感比特,则计算设备不必将Hashvaluet发送到远程设备,因为远程设备将能够从其执行的验证过程中获取Hashvaluet
2)使用以下各项来验证每个RealContenti的零知识证明:
·RealContenti的零知识证明
·RealContenti输出哈希值,Hashvaluei
·RealContenti的初始化向量(Hashvaluei-1)掩码位串,Maski
·从远程设备的存储器中检索的验证密钥(如果零知识证明是zkSNARK证明)。
其他示例也是可能的。例如,本公开的实施例将使得能够选择性地公开存储在驾驶执照上的一些信息(例如,以证明一个人超过18岁),而不必公开个人住址和/或手写签名等其他信息。驾驶执照可以是物理文档或卡片,或者以电子方式存储在计算设备的存储器中。
在另一个示例中,本公开的实施例将使得能够选择性地公开存储在身份证上的一些信息,以证明一个人是伦敦居民,而不公开任何其他信息。身份证可以是物理对象,或者以电子方式存储在计算设备的存储器中。
本公开的实施例使得能够灵活地生成不同的掩码,以使得能够在不同时间向不同实体选择性地公开相同数据的信息的不同部分。
结论
一旦给出本文的公开内容,所公开技术的其它变体或用例对于本领域技术人员可能变得显而易见。本公开的范围不受所描述的实施例限制,而仅受随附权利要求限制。
例如,虽然上面参考SHA256哈希函数(在本文中也称为哈希算法)描述了实施例,但是本公开的实施例可以利用任何哈希函数。仅作为示例,可以使用其他类型的哈希函数,例如Pedersen或MiMC哈希函数。
此外,本公开的实施例并不限于使用特定类型的零知识证明。仅作为一个示例,零知识证明可以利用Jens Groth在论文中提出的算法,该论文标题为“On the size ofpairing-based non-interactive arguments.In Advances in Cryptology”(基于配对的非交互式零知识论证),《密码学进展》-2016年欧洲密码年会(EUROCRYPT 2016)-第35届密码技术理论和应用年度国际会议,2016年5月8日至12日,奥地利维也纳,《汇刊》,第二部分,第305-326页,2016年。
虽然已经结合为一个或多个敏感位中的全部敏感位分配相同的预定值(例如,0)并保留RealContentPad的公共位值来描述在步骤S620和步骤S642中从RealContentPad中移除一个或多个敏感位,但是在其他实施例中,这些步骤可以包括从RealContentPad中完全移除一个或多个敏感位的位置,使得RealContentPad的该修改版本仅包括公共位。然后,将RealContentPad的修改版本的消息串输出给接收者。例如,可以将RealContentPad的修改版本发送到区块链网络106中的接收者区块链节点104。因此,在这些示例中,接收者区块链节点104不从发送者区块链节点104(其执行过程600)接收所修改的区块链事务RealContentPublic,但是可以使用RealContentPad的修改版本和掩码位串Mask来重建所修改的区块链事务RealContentPublic(其中一个或多个敏感位中的全部分配有相同的预定值)。
应当理解的是,上述描述通常可以应用于任何区块链。也就是说,本发明决不限于特定区块链。更一般地,以上对特定的网络106、区块链150和节点104的任何引用可以分别参考区块链网络106、区块链150和区块链节点104来替换。区块链、区块链网络和/或区块链节点可以共享如上所述的特定的区块链150、网络106和节点104的部分或全部所述特性。
在本发明的优选实施例中,区块链节点104至少执行对区块链150的区块151进行创建、发布、传播和存储中的所有所述功能。不排除可能存在仅执行这些功能中的一个或部分功能但不是全部功能的其它网络实体(或网络元件)。也就是说,网络实体可以执行传播和/或存储区块的功能,而不创建和发布区块(请记住,这些实体不被认为是优选的区块链网络106的节点)。
在这些实施例中,不排除节点可以执行对区块链150的区块151进行创建、发布、传播和存储中的至少一个或部分功能但不是所有功能。例如,在这些其它区块链网络上,“节点”可用于指被配置为创建和发布区块151但不存储和/或传播这些区块151到其它节点的网络实体。
甚至更通俗地说,上面对术语“区块链节点”104的任何引用可以用术语“网络实体”或“网络元件”代替,其中这样的实体/元件被配置为执行对区块进行创建、发布、传播和存储中的一些或全部角色。这种网络实体/元件的功能可以在硬件中实现,方法与上面参照区块链节点104所述的方式相同。
应当理解的是,上述实施例仅通过示例的方式进行描述。更通俗地说,可根据下述任何一个或多个语句提供一种方法、装置或程序。
下面结合以下条款来定义本公开的各方面:
1.一种用于阻止消息中的敏感数据的方法,所述方法在计算设备上执行并且包括:
创建所述消息的副本;
生成至少一个零知识证明,所述至少一个零知识证明中的每个零知识证明的所述生成包括:
获取掩码位串,所述掩码位串识别所述副本的位中的至少一个敏感位的位置,
通过向所述至少一个敏感位分配预定值,修改所述副本的所述位,从而计算公共位串,
确定秘密位串,所述秘密位串包括所述至少一个敏感位、并且满足要求:所述副本的所述位等于使用所述公共位串、所述掩码位串和所述秘密位串的按位逻辑运算的输出,
对所述消息的所述副本或其一部分进行哈希处理以生成输出哈希值,和,
使用所述公共位串、所述掩码位串、所述输出哈希值、所述秘密位串生成零知识证明;
从所述副本中移除所述至少一个敏感位中的每个敏感位以生成修改的消息;以及,
将所述修改的消息与所述至少一个输出哈希值和所述至少一个零知识证明一起输出到接收者,以使所述接收者能够证明所述修改的消息是有效的。
2.根据条款1所述的方法,所述方法还包括:
在生成至少一个零知识证明之前,填充所述消息的所述副本,以使得所述副本具有由在所述哈希处理中使用的哈希函数定义的输入消息大小的正整数倍的长度;以及
如果所述副本的所述长度对应于由所述哈希函数定义的所述输入消息大小,则通过使用公共初始化向量对所述消息的所述副本进行哈希处理以生成所述输出哈希值来生成单个零知识证明。
3.根据条款1所述的方法,所述方法还包括:
在生成至少一个零知识证明之前,填充所述消息的所述副本,以使得所述副本具有由在所述哈希处理中使用的哈希函数定义的输入消息大小的正整数倍的长度;以及
如果在所述填充之后所述副本的所述长度大于由所述哈希函数定义的所述输入消息大小,则所述方法包括:
将所述消息的所述副本分成多个消息块,每个消息块具有与由所述哈希函数定义的所述输入消息大小对应的长度;
识别包括敏感数据的一个或多个消息块;
其中,为包括敏感数据的所述一个或多个消息块中的每个消息块生成零知识证明。
4.根据条款3所述的方法,其中对于所述至少一个零知识证明中的一个或多个零知识证明,所述副本的所述位对应于所述一个或多个消息块中的消息块的位,并且所述零知识证明是通过对所述消息块进行哈希处理以生成所述输出哈希值来生成的。
5.根据条款4所述的方法,其中所述多个消息块包括第一消息块以及一个或多个其他消息块,并且如果所述第一消息块包括敏感数据,则所述第一消息块的所述哈希处理使用公共初始化向量,并且如果一个其他消息块包括敏感数据,则所述其他消息块的所述哈希处理使用从对紧接在所述其他消息块之前的消息块进行哈希处理而输出的哈希值。
6.根据条款3至5中任一项所述的方法,其中所述多个消息块中的多个消息块包括敏感数据,所述方法包括:为所述多个消息块中的每个消息块并行地生成零知识证明。
7.根据条款3至6中任一项所述的方法,其中对于所述至少一个零知识证明中的一个零知识证明,所述副本的所述位对应于合并块(merged block)的位,所述合并块包括多个相邻消息块,每个相邻消息块包括敏感数据,并且所述零知识证明是通过迭代地对所述合并块中的所述消息块中的每个消息块进行哈希处理而生成的,并且所述输出哈希值是通过以下方式生成的:使用从对紧接在结束消息块之前的所述多个相邻消息块中的消息块进行哈希处理而输出的哈希值,来对所述合并块中的所述结束消息块进行哈希处理。
8.根据条款7所述的方法,所述方法还包括:
确定一消息块,所述消息块包括敏感数据,其包括小于预定阈值的多个敏感位;
将所述消息块与包括敏感数据的至少一个相邻消息块合并以生成所述合并块。
9.根据条款8所述的方法,其中所述预定阈值由所述哈希函数的抗碰撞性定义。
10.根据前述任一项条款所述的方法,其中所述秘密位串满足以下要求:所述副本的所述位等于以下两项的按位异或(bitwise XOR)运算:(i)所述公共位串,和(ii)所述掩码位串和所述秘密位串的按位与(bitwise AND)运算的结果。
11.根据前述任一项条款所述的方法,其中获取所述掩码位串包括:从存储器中检索所述掩码位串。
12.根据条款1至10中任一项所述的方法,其中获取所述掩码位串包括:
识别所述消息的所述副本的所述位中的至少一个敏感位的位置;以及
生成所述掩码位串,所述掩码位串识别所述副本中的所述至少一个敏感位的所述位置。
13.根据前述任一项条款所述的方法,所述方法还包括:将所述至少一个掩码位串输出到所述接收者。
14.根据前述任一项条款所述的方法,其中所述输出包括:将所述修改的消息与所述至少一个输出哈希值、所述至少一个公共位串和所述至少一个零知识证明一起发送到与所述接收者相关联的远程设备。
15.根据条款13所述的方法,其中所述消息包括区块链事务数据,并且所述修改的消息包括修改的区块链事务数据。
16.根据条款14所述的方法,其中所述计算设备是区块链网络中的区块链节点。
17.根据条款16所述的方法,其中所述区块链事务数据是从客户端设备接收的,所述客户端设备请求将所述区块链事务记录在区块链上,并且所述远程设备是所述区块链网络中的另一区块链节点,其中所述修改的区块链事务数据被发送到所述另一区块链节点以在所述区块链网络中传播。
18.根据条款16所述的方法,其中所述远程设备是所述区块链网络中的另一区块链节点,所述方法包括:
接收所述区块链事务;
生成待要记录在区块链上的区块,所述区块包括所述修改的区块链事务数据;以及
将包括所述修改的区块链事务数据的所述区块发送到所述区块链网络中的所述另一区块链节点。
19.根据条款15所述的方法,其中所述计算设备在所述区块链网络外部,并且所述远程设备是客户端设备。
20.根据条款16或19所述的方法,所述方法包括:接收记录在区块链上的区块,所述区块包括所述区块链事务数据。
21.根据条款20所述的方法,其中响应于接收到所述区块,执行所述生成、所述移除和所述发送。
22.根据条款20所述的方法,其中响应于接收到所述区块,执行所述生成和所述移除,并且响应于从所述远程设备接收到对所述区块的请求,执行所述发送。
23.根据条款20所述的方法,其中响应于从所述远程设备接收到对所述区块的请求,执行所述生成、所述移除和所述发送。
24.根据前述任一项条款所述的方法,其中所述至少一个零知识证明是zkSNARK(零知识简洁非交互式知识论证Zero-Knowledge Succinct Non-Interactive Argumentof Knowledge)证明。
25.根据条款24所述的方法,其中生成所述零知识证明还包括:使用证明密钥。
26.根据前述任一项条款所述的方法,所述方法还包括:在生成所述修改的消息之后,从存储器中移除所述消息,并将所述修改的消息存储在存储器中。
27.一种计算机程序产品,所述计算机程序产品包含在计算机可读存储器上并且包括指令,所述指令被配置为当在计算机装置上运行时,执行根据前述任一项条款所述的方法。
28.一种计算机装置,所述计算机装置包括处理器和存储器,所述存储器存储指令,所述指令在由所述处理器执行时,使所述计算机装置执行根据条款1至26中任一项所述的方法。
29.一种用于验证修改的消息有效的方法,所述修改的消息对应于从中移除敏感数据的原始消息,所述方法在计算设备上执行并且包括:
获取所述修改的消息,其中所述修改的消息对应于所述原始消息,其中所述原始消息的每个敏感位已被分配有预定值;
获取所述修改的消息的输出哈希值,并使用存储在所述计算设备的存储器中的数据来验证所述输出哈希值;
从发送者设备接收与所述修改的消息的位相关联的至少一个零知识证明;
使用以下各项来验证所述至少一个零知识证明中的每个零知识证明:(i)由所述发送者设备用来导出用于生成所述零知识证明的秘密位串的按位逻辑运算的知识或与其相关联的验证密钥;(ii)所述修改的消息的所述位;(iii)识别所述修改的消息的所述位中的至少一个敏感位的位置的掩码位串;(iv)所述修改的消息的所述位或其一部分的哈希值;和(v)所述修改的消息的所述位的输入哈希值。
30.根据条款29所述的方法,其中获取所述修改的消息包括:从所述发送者设备接收所述修改的消息。
31.根据条款29所述的方法,其中获取所述修改的消息包括:
接收所述原始消息的一个版本,所述版本仅包括所述原始消息的公共位;以及
使用所述原始消息的所述版本和所述掩码位串来生成所述修改的消息。
32.根据条款29至31中任一项所述的方法,其中所述修改的消息的所述位对应于整个所述修改的消息,并且所述修改的消息的长度对应于由用于生成所述修改的消息的所述输出哈希值的哈希函数定义的输入消息大小。
33.根据条款29至31中任一项所述的方法,其中所述修改的消息包括多个消息块,所述输出哈希值是所述多个消息块中的结束消息块的哈希,其中所述多个消息块的长度对应于由用于生成所述输出哈希值的哈希函数定义的输入消息大小。
34.根据条款33所述的方法,其中所述修改的消息的所述位对应于所述多个消息块中的一个消息块。
35.根据条款29至31中任一项所述的方法,其中所述副本的所述位对应于合并块的位,所述合并块包括多个相邻消息块,所述多个相邻消息块包括敏感数据,并且所述的验证所述零知识证明使用所述合并块中的结束消息块的哈希值。
36.根据条款29至35中任一项所述的方法,其中所述原始消息是区块链事务,并且存储在所述计算设备的存储器中的所述数据是与所述区块链事务相关联的事务标识符,其中验证所述输出哈希值包括:对所述输出哈希值进行哈希处理,并将所述哈希处理的输出与所述事务标识符进行比较。
37.根据条款29至36中任一项所述的方法,其中从所述发送者设备接收与所述修改的消息的位相关联的多个零知识证明,并且并行地执行对所述多个零知识证明的验证。
38.一种计算机程序产品,所述计算机程序产品包含在计算机可读存储器上并且包括指令,所述指令被配置为当在计算机装置上运行时,执行根据条款29至37中任一项所述的方法。
39.一种计算机装置,所述计算机装置包括处理器和存储器,所述存储器存储指令,所述指令在由所述处理器执行时,使所述计算机装置执行根据条款29至37中任一项所述的方法。

Claims (39)

1.一种用于阻止消息中的敏感数据的方法,所述方法在计算设备上执行并且包括:
创建所述消息的副本;
生成至少一个零知识证明,所述至少一个零知识证明中的每个零知识证明的所述生成包括:
获取掩码位串,所述掩码位串识别所述副本的位中的至少一个敏感位的位置;
通过向所述至少一个敏感位分配预定值,修改所述副本的所述位,从而计算公共位串;
确定秘密位串,所述秘密位串包括所述至少一个敏感位、并且满足要求,所述要求是所述副本的所述位等于使用所述公共位串、所述掩码位串和所述秘密位串的按位逻辑运算的输出;
对所述消息的所述副本或其一部分进行哈希处理以生成输出哈希值;和
使用所述公共位串、所述掩码位串、所述输出哈希值、所述秘密位串生成零知识证明;
从所述副本中移除所述至少一个敏感位中的每个敏感位以生成修改的消息;以及
将所述修改的消息与所述至少一个输出哈希值和所述至少一个零知识证明一起输出到接收者,以使所述接收者能够证明所述修改的消息是有效的。
2.根据权利要求1所述的方法,所述方法还包括:
在生成至少一个零知识证明之前,填充所述消息的所述副本,以使得所述副本具有由在所述哈希处理中使用的哈希函数定义的输入消息大小的正整数倍的长度;以及
如果所述副本的所述长度对应于由所述哈希函数定义的所述输入消息大小,则通过使用公共初始化向量对所述消息的所述副本进行哈希处理以生成所述输出哈希值来生成单个零知识证明。
3.根据权利要求1所述的方法,所述方法还包括:
在生成至少一个零知识证明之前,填充所述消息的所述副本,以使得所述副本具有由在所述哈希处理中使用的哈希函数定义的输入消息大小的正整数倍的长度;以及
如果在所述填充之后所述副本的所述长度大于由所述哈希函数定义的所述输入消息大小,则所述方法包括:
将所述消息的所述副本分成多个消息块,每个消息块具有与由所述哈希函数定义的所述输入消息大小对应的长度;
识别包括敏感数据的一个或多个消息块;
其中,为包括敏感数据的所述一个或多个消息块中的每个消息块生成零知识证明。
4.根据权利要求3所述的方法,其中对于所述至少一个零知识证明中的一个或多个零知识证明,所述副本的所述位对应于所述一个或多个消息块中的消息块的位,并且所述零知识证明是通过对所述消息块进行哈希处理以生成所述输出哈希值来生成的。
5.根据权利要求4所述的方法,其中所述多个消息块包括第一消息块以及一个或多个其他消息块,并且如果所述第一消息块包括敏感数据,则所述第一消息块的所述哈希处理使用公共初始化向量,并且如果一个其他消息块包括敏感数据,则所述其他消息块的所述哈希处理使用从对紧接在所述其他消息块之前的消息块进行哈希处理而输出的哈希值。
6.根据权利要求3至5中任一项所述的方法,其中所述多个消息块中的多个消息块包括敏感数据,所述方法包括:为所述多个消息块中的每个消息块并行地生成零知识证明。
7.根据权利要求3至6中任一项所述的方法,其中对于所述至少一个零知识证明中的一个零知识证明,所述副本的所述位对应于合并块的位,所述合并块包括多个相邻消息块,每个相邻消息块包括敏感数据,并且所述零知识证明是通过迭代地对所述合并块中的所述消息块中的每个消息块进行哈希处理而生成的,并且所述输出哈希值是通过以下方式生成的:使用从对紧接在结束消息块之前的所述多个相邻消息块中的消息块进行哈希处理而输出的哈希值,来对所述合并块中的所述结束消息块进行哈希处理。
8.根据权利要求7所述的方法,所述方法还包括:
确定包括敏感数据的消息块包括小于预定阈值的多个敏感位;
将所述消息块与包括敏感数据的至少一个相邻消息块合并以生成所述合并块。
9.根据权利要求8所述的方法,其中所述预定阈值由所述哈希函数的抗碰撞性定义。
10.根据前述任一项权利要求所述的方法,其中所述秘密位串满足以下要求:所述副本的所述位等于以下两项的按位异或运算:(i)所述公共位串,和(ii)所述掩码位串和所述秘密位串的按位与运算的结果。
11.根据前述任一项权利要求所述的方法,其中获取所述掩码位串包括:从存储器中检索所述掩码位串。
12.根据权利要求1至10中任一项所述的方法,其中获取所述掩码位串包括:
识别所述消息的所述副本的所述位中的至少一个敏感位的位置;以及
生成所述掩码位串,所述掩码位串识别所述副本中的所述至少一个敏感位的所述位置。
13.根据前述任一项权利要求所述的方法,所述方法还包括:将所述至少一个掩码位串输出到所述接收者。
14.根据前述任一项权利要求所述的方法,其中所述输出包括:将所述修改的消息与所述至少一个输出哈希值、所述至少一个公共位串和所述至少一个零知识证明一起发送到与所述接收者相关联的远程设备。
15.根据权利要求14所述的方法,其中所述消息包括区块链事务数据,并且所述修改的消息包括修改的区块链事务数据。
16.根据权利要求14所述的方法,其中所述计算设备是区块链网络中的区块链节点。
17.根据权利要求16所述的方法,其中所述区块链事务数据是从请求将区块链事务记录在区块链上的客户端设备接收的,并且所述远程设备是所述区块链网络中的另一区块链节点,其中所述修改的区块链事务数据被发送到所述另一区块链节点以在所述区块链网络中传播。
18.根据权利要求16所述的方法,其中所述远程设备是所述区块链网络中的另一区块链节点,所述方法包括:
接收所述区块链事务;
生成待要记录在区块链上的区块,所述区块包括所述修改的区块链事务数据;以及
将包括所述修改的区块链事务数据的所述区块发送到所述区块链网络中的所述另一区块链节点。
19.根据权利要求15所述的方法,其中所述计算设备在所述区块链网络外部,并且所述远程设备是客户端设备。
20.根据权利要求16或19所述的方法,所述方法包括:接收记录在区块链上的区块,所述区块包括所述区块链事务数据。
21.根据权利要求20所述的方法,其中响应于接收到所述区块,执行所述生成、所述移除和所述发送。
22.根据权利要求20所述的方法,其中响应于接收到所述区块,执行所述生成和所述移除,并且响应于从所述远程设备接收到对所述区块的请求,执行所述发送。
23.根据权利要求20所述的方法,其中响应于从所述远程设备接收到对所述区块的请求,执行所述生成、所述移除和所述发送。
24.根据前述任一项权利要求所述的方法,其中所述至少一个零知识证明是零知识简洁非交互式知识论证zkSNARK证明。
25.根据权利要求24所述的方法,其中生成所述零知识证明还包括:使用证明密钥。
26.根据前述任一项权利要求所述的方法,所述方法还包括:在生成所述修改的消息之后,从存储器中移除所述消息,并将所述修改的消息存储在存储器中。
27.一种计算机程序产品,所述计算机程序产品包含在计算机可读存储器上并且包括指令,所述指令被配置为当在计算机装置上运行时,执行根据前述任一项权利要求所述的方法。
28.一种计算机装置,所述计算机装置包括处理器和存储器,所述存储器存储指令,所述指令在由所述处理器执行时,使所述计算机装置执行根据权利要求1至26中任一项所述的方法。
29.一种用于验证修改的消息有效的方法,所述修改的消息对应于从中移除敏感数据的原始消息,所述方法在计算设备上执行并且包括:
获取所述修改的消息,其中所述修改的消息对应于所述原始消息,其中所述原始消息的每个敏感位已被分配有预定值;
获取所述修改的消息的输出哈希值,并使用存储在所述计算设备的存储器中的数据来验证所述输出哈希值;
从发送者设备接收与所述修改的消息的位相关联的至少一个零知识证明;
使用以下各项来验证所述至少一个零知识证明中的每个零知识证明:(i)按位逻辑运算的知识、或与其相关联的验证密钥,其被由所述发送者设备用来导出用于生成所述零知识证明的秘密位串;(ii)所述修改的消息的所述位;(iii)掩码位串,所述掩码位串识别所述修改的消息的所述位中的至少一个敏感位的位置;(iv)所述修改的消息的所述位或其一部分的哈希值;和(v)所述修改的消息的所述位的输入哈希值。
30.根据权利要求29所述的方法,其中获取所述修改的消息包括:从所述发送者设备接收所述修改的消息。
31.根据权利要求29所述的方法,其中获取所述修改的消息包括:
接收所述原始消息的一个版本,所述版本仅包括所述原始消息的公共位;以及
使用所述原始消息的所述版本和所述掩码位串来生成所述修改的消息。
32.根据权利要求29至31中任一项所述的方法,其中所述修改的消息的所述位对应于整个所述修改的消息,并且所述修改的消息的长度对应于由用于生成所述修改的消息的所述输出哈希值的哈希函数定义的输入消息大小。
33.根据权利要求29至31中任一项所述的方法,其中所述修改的消息包括多个消息块,所述输出哈希值是所述多个消息块中的结束消息块的哈希,其中所述多个消息块的长度对应于由用于生成所述输出哈希值的哈希函数定义的输入消息大小。
34.根据权利要求33所述的方法,其中所述修改的消息的所述位对应于所述多个消息块中的一个消息块。
35.根据权利要求29至31中任一项所述的方法,其中所述副本的所述位对应于合并块的位,所述合并块包括多个相邻消息块,所述多个相邻消息块包括敏感数据,并且所述的验证所述零知识证明使用所述合并块中的结束消息块的哈希值。
36.根据权利要求29至35中任一项所述的方法,其中所述原始消息是区块链事务,并且存储在所述计算设备的存储器中的所述数据是与所述区块链事务相关联的事务标识符,其中验证所述输出哈希值包括:对所述输出哈希值进行哈希处理,并将所述哈希处理的输出与所述事务标识符进行比较。
37.根据权利要求29至36中任一项所述的方法,其中从所述发送者设备接收与所述修改的消息的位相关联的多个零知识证明,并且并行地执行对所述多个零知识证明的验证。
38.一种计算机程序产品,所述计算机程序产品包含在计算机可读存储器上并且包括指令,所述指令被配置为当在计算机装置上运行时,执行根据权利要求29至37中任一项所述的方法。
39.一种计算机装置,所述计算机装置包括处理器和存储器,所述存储器存储指令,所述指令在由所述处理器执行时,使所述计算机装置执行根据权利要求29至37中任一项所述的方法。
CN202180085917.4A 2020-12-22 2021-12-22 阻止敏感数据 Pending CN117044161A (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
GB2020414.5 2020-12-22
GBGB2020414.5A GB202020414D0 (en) 2020-12-22 2020-12-22 Blocking sensitive data
PCT/IB2021/062201 WO2022137173A1 (en) 2020-12-22 2021-12-22 Blocking sensitive data

Publications (1)

Publication Number Publication Date
CN117044161A true CN117044161A (zh) 2023-11-10

Family

ID=74183458

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202180085917.4A Pending CN117044161A (zh) 2020-12-22 2021-12-22 阻止敏感数据

Country Status (8)

Country Link
US (1) US20240064020A1 (zh)
EP (1) EP4268421A1 (zh)
JP (1) JP2023554148A (zh)
KR (1) KR20230121133A (zh)
CN (1) CN117044161A (zh)
GB (1) GB202020414D0 (zh)
TW (1) TW202231012A (zh)
WO (1) WO2022137173A1 (zh)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2024017798A1 (en) * 2022-07-22 2024-01-25 Nchain Licensing Ag Proving and verifying input data
GB202213915D0 (en) * 2022-09-23 2022-11-09 Nchain Licensing Ag Zero-kowledge proof
CN118158021A (zh) * 2024-04-12 2024-06-07 天津市瑞晟电子科技有限公司 一种基于Glink总线协议的数据传输处理方法及系统

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB201720946D0 (en) * 2017-12-15 2018-01-31 Nchain Holdings Ltd Computer-implemented system and method

Also Published As

Publication number Publication date
US20240064020A1 (en) 2024-02-22
JP2023554148A (ja) 2023-12-26
KR20230121133A (ko) 2023-08-17
WO2022137173A1 (en) 2022-06-30
TW202231012A (zh) 2022-08-01
GB202020414D0 (en) 2021-02-03
EP4268421A1 (en) 2023-11-01

Similar Documents

Publication Publication Date Title
CN117044161A (zh) 阻止敏感数据
CN115997369A (zh) 用于在区块链网络中验证数据的方法和装置
CN116547945A (zh) 默克尔证明实体
CN116508291A (zh) 默克尔证明实体
CN118451682A (zh) 基于零知识证明的子密钥真实性
CN116113921A (zh) 区块链上的伪随机选择
CN116830085A (zh) 生成区块链事务以及核实区块链事务
CN116157796A (zh) 警报账户
CN118592006A (zh) 脚本中的椭圆曲线算术
CN117136527A (zh) 用于区块链实现的数据应用程序中的签名验证的改进方法和系统
CN118302989A (zh) 签名验证
CN117280653A (zh) 多方区块链地址方案
CN118805360A (zh) 区块链事务
CN117751550A (zh) 分层共识
CN117652124A (zh) 区块链区块和存在证明
CN117561697A (zh) 部分基于sha的哈希函数
CN118044151A (zh) 传播锁定脚本
CN117546167A (zh) 多级区块链
CN116671061A (zh) 节点版本控制
CN116057920A (zh) 连接到区块链网络
CN117337436A (zh) 多方区块链地址方案
CN117280349A (zh) 多方区块链地址方案
CN117693926A (zh) 区块链区块和存在证明
CN117941317A (zh) 生成区块链事务
CN118476186A (zh) 基于签名的原子交换

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination