一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

用于区块链的证明方法及装置、电子设备和存储介质与流程

2023-02-06 12:52:58 来源:中国专利 TAG:


1.本公开涉及区块链技术领域,具体涉及一种用于区块链的证明方法及装置、电子设备、计算机可读存储介质和计算机程序产品。


背景技术:

2.区块链技术,又称为“分布式账本技术”,是一种去中心化、集体维护分布式账本的技术。去中心化是指无需由中心化实体来确保实现系统的一个或多个属性,例如在某些公共区块链上,交易记录的保全由所有参与节点共同保障,而不需要经由特定的中央服务器来管理。集体维护分布式账本是指由分布在不同地方的多个节点共同参与并且以多方存储多方计算的方式来确保数据难以篡改且计算结果可信,例如,在参与方数量较大且分布较为分散的情况下,难以通过单个或少数节点篡改交易记录。
3.在此部分中描述的方法不一定是之前已经设想到或采用的方法。除非另有指明,否则不应假定此部分中描述的任何方法仅因其包括在此部分中就被认为是现有技术。类似地,除非另有指明,否则此部分中提及的问题不应认为在任何现有技术中已被公认。


技术实现要素:

4.本公开提供了一种用于区块链的证明方法及装置、电子设备、计算机可读存储介质和计算机程序产品。
5.根据本公开的一方面,提供一种用于区块链的证明方法,包括:获取地址控制者对该地址控制者的公开地址的一个或多个绑定声明,该一个或多个绑定声明指示公开地址和该地址控制者的一个或多个私密地址之间的绑定关系;针对该一个或多个私密地址中的每一个私密地址,获取对该一个或多个绑定声明中的对应绑定声明进行签名后的签名数据,其中,对该对应绑定声明进行签名是基于与该私密地址对应的私钥的;以及利用符合预设条件的零知识证明电路来生成用于验证该一个或多个绑定关系的第一证明数据,其中,零知识证明电路的输入包括签名数据。
6.根据本公开的另一方面,还提供一种用于区块链的证明装置,包括:第一获取模块,被配置为获取地址控制者对该地址控制者的公开地址的一个或多个绑定声明,该一个或多个绑定声明指示公开地址和该地址控制者的一个或多个私密地址之间的绑定关系;第二获取模块,被配置为针对该一个或多个私密地址中的每一个私密地址,获取对该一个或多个绑定声明中的对应绑定声明进行签名后的签名数据,其中,对该对应绑定声明进行签名是基于与该私密地址对应的私钥的;以及生成模块,被配置为利用符合预设条件的零知识证明电路来生成用于验证该一个或多个绑定关系的第一证明数据,其中,零知识证明电路的输入包括签名数据。
7.根据本公开的另一方面,还提供一种电子设备,包括:至少一个处理器;以及与所述至少一个处理器通信连接的至少一个存储器,其中,所述至少一个存储器存储有计算机程序,所述计算机程序在被所述至少一个处理器执行时实现上述用于区块链的证明方法。
8.根据本公开的另一方面,还提供一种存储有计算机程序的非瞬时计算机可读存储介质,其中,所述计算机程序在被处理器执行时实现上述用于区块链的证明方法。
9.根据本公开的另一方面,还提供一种计算机程序产品,包括计算机程序,其中,所述计算机程序在被处理器执行时实现上述用于区块链的证明方法。
10.根据本公开的一个或多个实施例,利用与私有地址对应的私钥对公开地址的绑定声明进行签名,并且将签名数据作为符合预设条件的零知识证明电路的输入。一方面,可以准确地证明地址控制者的私密地址与公开地址的绑定关系,另一方面,由于零知识证明电路符合预设条件(例如,在预设的安全运行环境中操作),因此可以同时确保无需披露私密地址与公开地址之间的关系。进一步地,鉴于零知识证明电路的“零知识”特性,外界无法基于零知识证明电路的输出恢复或推断私有地址本身。
11.根据本公开的另外一个或多个实施例,上述利用符合预设条件的零知识证明电路来证明私密地址与公开地址是否绑定,可以最大程度上去除对需要第三方提供证明的依赖,使得进一步提升整个系统的去中心化特性。
12.应当理解,本部分所描述的内容并非旨在标识本公开的实施例的关键或重要特征,也不用于限制本公开的范围。本公开的其它特征将通过以下的说明书而变得容易理解。
附图说明
13.附图示例性地示出了实施例并且构成说明书的一部分,与说明书的文字描述一起用于讲解实施例的示例性实施方式。所示出的实施例仅出于例示的目的,并不限制权利要求的范围。在所有附图中,相同的附图标记指代类似但不一定相同的要素。
14.图1示出了根据本公开的一些实施例的用于区块链的证明方法的流程图;
15.图2示出了根据本公开的实施例的绑定声明的结构化数据的示意图;
16.图3示出了根据本公开的实施例的签名的结构化数据的示意图;
17.图4示出了根据本公开的另一些实施例的用于区块链的证明方法的流程图;
18.图5示出了根据本公开的又一些实施例的用于区块链的证明方法的流程图;
19.图6示出了根据本公开的实施例的用于区块链的证明装置的结构框图;
20.图7示出了能够用于实现本公开的实施例的示例性电子设备的结构框图。
具体实施方式
21.以下结合附图对本公开的示范性实施例做出说明,其中包括本公开实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本公开的范围。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
22.在本公开中,除非另有说明,否则使用术语“第一”、“第二”等来描述各种要素不意图限定这些要素的位置关系、时序关系或重要性关系,这种术语只是用于将一个元件与另一元件区分开。在一些示例中,第一要素和第二要素可以指向该要素的同一实例,而在某些情况下,基于上下文的描述,它们也可以指代不同实例。
23.在本公开中对各种所述示例的描述中所使用的术语只是为了描述特定示例的目的,而并非旨在进行限制。除非上下文另外明确地表明,如果不特意限定要素的数量,则该
要素可以是一个也可以是多个。此外,本公开中所使用的术语“和/或”涵盖所列出的项目中的任何一个以及全部可能的组合方式。
24.区块链技术,又称为“分布式账本技术”,是一种去中心化、集体维护分布式账本的技术。去中心化是指无需由中心化实体来确保实现系统的一个或多个属性,例如在某些公共区块链上,交易记录的保全由所有参与节点共同保障,而不需要经由特定的中央服务器来管理。集体维护分布式账本是指由分布在不同地方的多个节点共同参与并且以多方存储多方计算的方式来确保数据难以篡改且计算结果可信,例如,在参与方数量较大且分布较为分散的情况下,难以通过单个或少数节点篡改交易记录。
25.在区块链上,每个地址可以用来标识一个账户。在一些情况下,区块链的参与者(个人或机构)可能拥有不止一个地址,并且这些地址中的一部分可能是未与该参与者完全公开绑定的私密地址。例如,地址控制者拥有与其完全公开绑定的公开地址a、以及未与其完全公开绑定的私密地址b和d。在这种情况下,经由区块链无法获知地址控制者对地址b和d的控制有效性,也无法获知地址a与地址b和d之间的关联。然而,在期望进一步开发应用(例如,将该地址控制者所拥有的地址名下的资产进行合并并颁发资产证明令牌、获知证明该地址控制者拥有某些加密资产等)的场景下,证明该地址控制者对私密地址b和d的控制有效性是期望的。
26.发明人发现,在现有技术中,通常采用如下两种方式来证明地址控制者对某个私密地址的控制有效性:
27.(1)使用与该私密地址对应的私钥来进行签名验证。例如,可以通过特定插件在浏览器中完成特定文本的签名,从而验证该地址控制者的身份。然而,通过签名来验证地址控制者对地址的控制,这将导致在证明过程中显式或隐式地公开了关于该私密地址的信息(例如,私密地址本身、私密地址与同一地址控制者控制的公开地址之间的关联等),而这实际上并不是地址控制者所期望的。
28.(2)通过第三方来证明地址控制者是否控制某个私密地址。使用这种方式虽然能够通过第三方确保地址控制者的私密地址等信息不被泄露,但是一方面,由于区块链的其他参与者必须信任该第三方,才能信任通过其获得的证明结果,因此,这使得整个系统更加中心化。另一方面,第三方将面临其他参与者对其的信任挑战,即其他参与者可能无法完全信任该第三方在整个证明过程中没有作弊或者泄露关于该私密地址的信息。作为结果,区块链技术的去中心化、去信任化等属性将可能受到影响。
29.有鉴于此,本公开的实施例提供了一种用于区块链的证明方法,该方法利用与私有地址对应的私钥对公开地址的绑定声明进行签名,并且将签名数据作为符合预设条件的零知识证明电路的输入。一方面,可以准确地证明地址控制者的私密地址与公开地址的绑定关系,另一方面,由于零知识证明电路符合预设条件(例如,在预设的安全运行环境中操作),因此可以同时确保无需披露私密地址与公开地址之间的关系。进一步地,鉴于零知识证明电路的“零知识”特性,外界无法基于零知识证明电路的输出恢复或推断私有地址本身。此外,利用符合预设条件的零知识证明电路来证明私密地址与公开地址是否绑定,可以最大程度上去除对需要第三方提供证明的依赖,使得进一步提升整个系统的去中心化特性。
30.下面将结合附图详细描述本公开的实施例。
31.图1示出了根据本公开的一些实施例的用于区块链的证明方法200的流程图。如图1所示,方法100可以包括:步骤s110、获取地址控制者对该地址控制者的公开地址的一个或多个绑定声明,该一个或多个绑定声明指示公开地址和该地址控制者的一个或多个私密地址之间的绑定关系;步骤s120、针对该一个或多个私密地址中的每一个私密地址,获取对该一个或多个绑定声明中的对应绑定声明进行签名后的签名数据,其中,对该对应绑定声明进行签名是基于与该私密地址对应的私钥的;以及步骤s130、利用符合预设条件的零知识证明电路来生成用于验证该一个或多个绑定关系的第一证明数据,其中,零知识证明电路的输入包括签名数据。
32.在一些示例中,地址控制者可以为controller,其公开地址可以为addrpublic并且其的私密地址可以为addrpriviate。与传统的通过地址控制者controller使用与addrprivate对应的私钥对特定的文本声明(例如,该文本声明中的某些字段指示当前正在进行验证的私密地址与公开地址是绑定的)进行签名来证明addrpriviate与addrpublic是绑定的相比,根据本公开的用于区块链的证明方法利用与私有地址对应的私钥对公开地址的绑定声明进行签名,并且将签名数据作为符合预设条件的零知识证明电路的输入。预设条件包括使得零知识证明电路可以安全操作的任何运行环境,例如,在地址控制者端运行零知识证明电路或者将在下文详细描述的在机密计算容器中运行零知识证明电路。由此,可以在证明地址控制者的私密地址与公开地址的绑定关系的同时无需向外界披露此绑定关系。同时,鉴于零知识证明电路的“零知识”特性,外界无法基于零知识证明电路的输出恢复或推断私有地址本身。进一步地,基于符合预设条件的零知识证明电路可以可靠地证明addrpriviate与addrpublic是否绑定,从而最大程度上去除了对需要第三方提供证明的依赖,使得进一步提升整个系统的去中心化特性。
33.根据本公开的一些实施例,地址用于标识区块链上对应的一个参与方。例如,可以通过如下方式获得地址:生成一个随机的私钥;生成与该私钥对应的公钥;以及由公钥通过特定算法(例如,keccak-256哈希)计算获得对应的地址。地址可以包括公开地址和私密地址。公开地址可以指代与地址控制者公开关联的地址,并且私密地址可以指代未与地址控制者公开关联的地址。
34.根据本公开的一些实施例,在步骤s110中,地址控制者对公开地址的绑定声明可以为结构化数据,并且其中,该结构化数据可以包括该公开地址。
35.在一些示例中,绑定声明可以为符合eip-712规范的结构化数据。eip-712是一种类型结构化消息签名标准,使得以结构化和可读的格式将待签名信息提供给签名方,允许签名方清楚地了解其将要签署的具体内容,从而可以避免误签名等情况的发生。另外,结构化数据也更利于应用于零知识证明电路。
36.根据本公开的一些实施例,针对每一个绑定声明,结构化数据还可以包括以下中的一个或多个:针对该绑定声明的有效起始时间;针对该绑定声明的有效终止时间;以及指示生成该绑定声明的时间的时间戳。
37.根据一些示例,起始时间和终止时间可以均以秒为单位,从utc 1970.1.1零时开始计算。通过设置结构化数据中表示起始时间和终止时间的数据的位数,可以提供长达数百年、数千年甚至数万年的有效绑定时间段。
38.根据一些示例,时间戳也可以以秒为单位,并且从utc 1970.1.1零时开始计算。通
过设置时间戳,可以有效防止诸如重放攻击等情况的发生。例如,如果生成该绑定声明的时间为2021年10月1日零时,并且服务方设置的有效阈值时间例如为1年,则在2022年10月1日零时之后(即从生成绑定声明的时间起超出有效阈值时间),地址控制器对该绑定声明进行签名的签名数据将自动失效,使得攻击者无法继续利用该数据作为零知识证明电路的输入来证明私密地址与公开地址之间的绑定关系
39.图2示出了根据本公开的实施例的为结构化数据的绑定声明的示意图。如图2所示,绑定声明的名称为addressbinding,并且函数struct指示了生成的绑定声明为结构化数据。该结构化数据包括表示将与私密地址进行绑定的公开地址的字段address base、表示该绑定声明的有效起始时间的字段validfrom、表示该绑定声明的有效终止时间的字段validto、以及时间戳timestamp。在该结构化数据中,mandatory表示该公开地址是必选字段,而optional表示起始时间、终止时间和时间戳是可选字段。其中,validfrom和validto可以是从utc 1970.1.1零时开始计算的,并且uint40确保了该结构化数据可以提供与起始时间和终止时间对应的长达数万年的计时。类似地,timestamp也可以是从utc 1970.1.1零时开始计算的,并且uint32确保了该结构化数据可以提供与时间戳对应的超过一百年的计时。
40.应当理解,出于说明性目的而示出了如图2所示的一种结构化的绑定声明,其也可以是任何其他格式的结构化数据。
41.根据本公开的一些实施例,其中,地址控制者对绑定声明进行签名后的签名数据可以为结构化数据,并且其中,该结构化数据可以包括绑定声明和指示地址控制者对该私钥的控制的数据两者。
42.通过设置签名数据为结构化数据并作为零知识证明电路的输入,可以更利于零知识证明电路进行操作。
43.根据本公开的一些实施例,其中,该结构化数据还包括与私钥对应的公钥。结构化的签名数据是否包括与私钥对应的公钥可以取决于采用的签名算法。
44.例如,当地址控制者通过诸如椭圆曲线数字签名算法(elliptic curve digital signature algorithm,ecdsa算法)等算法进行签名时,可以从签名数据计算出对应的公钥。在这种情况下,该结构化的签名数据中可以不包括公钥。
45.又例如,当地址控制者通过诸如sm2算法等算法进行签名时,无法从签名数据计算出对应的公钥。在这种情况下,该结构化的签名数据中需要包括公钥。
46.图3示出了根据本公开的实施例的结构化的签名数据的示意图。如图3所示,该签名的名称为addressbindingsignature,并且函数struct指示了生成的签名为结构化数据。该结构化数据包括如上所述的绑定声明、利用私钥进行签名的数据、以及公钥。在该结构化数据中,mandatory表示绑定声明和利用私钥进行签名的数据是必选字段,而optional表示公钥是可选字段(取决于采用的签名算法)。
47.应当理解,出于说明性目的而示出了如图3所示的一种结构化的签名数据,其也可以是任何其他格式的结构化数据。
48.根据本公开的一些实施例,步骤s130中的零知识证明电路可以是基于零知识证明技术方案的适用于本文的操作的任何合适的软件、程序或代码。虽然在本文中引用了“电路”,但应当理解,零知识证明电路并非实际的物理电路。
49.零知识证明技术方案是指使用该技术方案,证明方可以在不透露私密数据的前提下证明自己知晓该私密数据,或者在不透露私密数据的前提下完成某个计算并证明该计算过程的完整性(即,所得结果被证明确实是基于该私密数据通过既定算法计算得到的)。一般而言,零知识证明技术方案满足如下三个属性:(1)完备性,即如果证明方确实知晓某个或某些私密数据,则其能使验证方信服;(2)可靠性,即如果证明方并不知晓某个或某些私密数据,则无法使验证方信服其知晓该私密数据;(3)零知识,即验证方无法从证明方提供的证明数据中推断出该私密数据的具体细节(除了验证方事先知晓、不需要证明亦可知晓的数据、或者仅根据证明数据本身即可推断的信息)。
50.应当理解,零知识证明电路的输入可以包括一个签名数据或者多个签名数据,相应地,零知识证明电路可以针对每个签名数据输出单独的证明数据或者输出包括这些证明数据的数据集。本公开要求保护的范围在此方面不受限制。
51.根据本公开的一些实施例,继续参考图1,方法100还可以包括步骤s140、针对一个或多个私密地址中的每一个私密地址,利用零知识证明电路为该私密地址生成对应的别名以用于公开;以及步骤s150、基于该对应的别名确定是否存在针对该私密地址的作弊,其中,与每一个私密地址对应的别名之间彼此不同。
52.在区块链上可能会存在这样一些情况,即如果根据私密地址的资产而相应地授权与该私密地址绑定的公开地址的地址控制者某些特权或利益,则私密地址的地址控制者可能将其名下的某私密地址绑定到多个公开地址或者租借给他人使用,以获得相应的特权或利益。这种情况在本文中被称为“作弊”。
53.现有技术中可以通过第三方来确定是否存在作弊行为,即第三方可以收集包括私密地址和公开地址的所有绑定地址对,并从中确定是否有同一私密地址被绑定到多个不同的公开地址,如果确定某个私密地址与多个公开地址绑定,则可以确定该私密地址的地址控制者存在作弊行为。然而,如上所述,区块链的参与者必须信任第三方才能信任通过其获得的结果,而且第三方可能面临其他参与者对其的信任挑战,这将影响区块链的中心化、去信任化等属性。与之相比,通过利用零知识证明电路为每一个私密地址生成对应的别名予以公开,可以在不泄露地址控制者的隐私的同时确定一个私密地址是否与多个公开地址重复绑定,这是因为为每一个私密地址生成的对应的别名之间彼此是极大概率不同的(应当理解,出于更准确的目的,此处描述了每一个私密地址对应的别名之间彼此是极大概率不同的,但是在实际中,为多个不同私密地址生成相同别名的概率极低,因此此处也可以理解为为每一个私密地址生成的对应的别名之间彼此是不同的)。
54.根据本公开的一些实施例,可以采用任何适配于零知识证明电路的算法来为每一个私密地址生成对应的别名,使得例如满足以下特性:(1)不可逆性,即无法根据别名反向计算或推导出关于私密地址的具体细节;(2)外界不可用性,即基于某个秘密值为每一个私密地址生成对应的别名,使得不知晓该秘密值的参与方无法从私密地址正向计算出与其对应的别名;(3)防碰撞性,即几乎找不到具有相同别名的不同的两个私密地址(应当理解,出于更准确的目的,此处将防碰撞性限定为“几乎”找不到具有相同别名的不同的两个私密地址的特性,但是在实际中,为两个或更多个不同私密地址生成相同别名的概率极低,因此此处也可以理解为找不到具有相同别名的不同的两个私密地址的特性);以及(4)保密性,即少数私密地址及其对应的别名的泄露不会对上述特性(1)-(3)产生影响。
55.因此,就为私密地址生成对应的别名所采用的的算法而言,本公开要求保护的范围在此方面不受限制。在一些示例中,可以选择诸如零知识证明电路友好的哈希算法(例如,poseidon算法、rescue算法等)来为每一个私密地址生成对应的别名。
56.根据本公开的一些实施例,步骤s150、基于该对应的别名确定是否存在针对该私密地址的作弊可以包括:确定包括生成的对应的别名的绑定地址对,该绑定地址对还包括与该对应的别名绑定的公开地址;基于绑定地址对,确定与该对应的别名绑定的公开地址的数量;以及响应于确定与该对应的别名绑定的公开地址的数量大于1,确定存在针对该私密地址的作弊。
57.举例而言,地址控制者controller可以同时控制私密地址addrpriviate1、addrpriviate2和addrpriviate3、以及公开地址addrpublic。可以利用如上所述的零知识证明电路分别为addrpriviate1、addrpriviate2和addrpriviate3中的每一个生成对应的别名alias1、alias2和alias3以用于在链上公开。然后,可以分别确定包括alias1、alias2和alias3的绑定地址对,例如针对别名alias1的绑定地址对为(alias1,addrpublic),针对别名alias2的绑定地址对为(alias2,addrpublic)、(alias2,addrpublic1)、(alias2,addrpublic2),并且针对别名alias3的绑定地址对为(alias3,addrpublic)。在这种情况下,由于与alias2绑定的公开地址的数量大于1,则可以确定与alias2对应的私密地址addrpriviate2被绑定到多个公开地址上,由此确定地址控制者controller为作弊用户。
58.对于某个私密地址来说,通过确定包括与该私密地址对应的别名的绑定地址对,可以快速且直观地确定该私密地址是否与多个公开地址重复绑定,从而有效防止了区块链上的作弊行为。同时,由于不依赖于第三方来确定是否存在作弊,因此促进了区块链的去中心化、去信任化等属性。
59.根据本公开的一些实施例,继续参考图1,上述用于区块链的证明方法100还可以包括:步骤s160、确定能够与地址控制者正在使用的应用程序通信的机密计算容器,其中,零知识证明电路位于该机密计算容器中。
60.根据本公开的一些实施例,机密计算容器是机密计算技术的一种具体实施方式。机密计算技术的示例包括sgx技术。
61.应当理解,上述sgx技术仅出于说明性目的而被示出,机密计算技术的示例并不限于此,其可以为在硬件层面确保运行中的内存数据加密以使得即使在攻击者完全掌握了操作系统和底层硬件设备(例如,内存控制器、基本输入输出系统bios等)的情况下也无法获取该加密的受保护的内存内容的任何合适的技术。本公开要求保护的范围在此方面不受限制。
62.通过在符合如上所述的特定安全要求的机密计算容器中运行零知识证明电路,可以进一步确保输入到零知识证明电路中的数据、信息等不被任何用户或机构获取,即便是相关服务的开发商和运营商,,从而有效地保护了地址控制者的私密数据或商业机密。
63.根据本公开的一些实施例,确定能够与地址控制者正在使用的应用程序通信的机密计算容器可以包括:确定机密计算容器的第一身份id和第一版本;将第一身份id和第一版本分别与该应用程序中预先设置的第二身份id和第二版本进行比较;以及响应于确定第一身份id与第二身份id相同,并且第一版本与第二版本相同,确定该机密计算容器为能够与应用程序通信的机密计算容器。
64.根据本公开的一些实施例,每个机密计算容器可以具有身份id(如,序列号等)和版本(如,当前版本号等),并且在地址控制者的相应应用程序中预先存储有指示其可以进行连接的安全可信的机密计算容器的身份id、版本。
65.在建立应用程序与机密计算容器之间的通信通道之前,需要由该应用程序确认正在连接的是否是已知的安全可信的机密计算容器,这例如可以通过将上述应用程序中预先存储的指示安全可信的机密计算容器的身份id、版本分别与当前正在进行连接的机密计算容器的身份id、版本进行比较来实现。如果身份id和版本两者均匹配,则可以确定当前正在进行连接的机密计算容器为应用程序允许的安全可信的机密计算容器。
66.根据本公开的一些实施例,应用程序与机密计算容器之间的通信通道可以符合任何通用的安全标准,如transport layer security(tls)协议(tls 1.2版本、tsl 1.3版本)。
67.通过验证机密计算容器的身份和版本,能够在机密计算容器与正在使用的应用程序之间建立安全可靠的通信通道,从而保护输入到零知识证明电路的私密数据不被任何用户或机构获取,即便是相关服务的开发商和运营商。
68.图4示出了根据本公开的另一些实施例的用于区块链的证明方法400的流程图。如图4所示,方法400可以包括:与参考图1所描述的用于区块链的证明方法100中的步骤s110-s160类似的步骤s410-s460;以及步骤s470、在机密计算容器内利用随机数生成器生成第一盐值;步骤s480、利用机密计算容器对第一盐值进行加密;以及步骤s490、将加密后的第一盐值存储在机密计算容器外。
69.在本文中,盐值表示一种旨在提升操作安全性的随机数据,可以在对私密数据进行哈希处理时作为附加的输入信息。
70.根据本公开的一些实施例,在步骤s470中,可以在机密计算容器内使用安全的随机数生成器来生成第一盐值,并且生成的第一盐值可以具有足够的长度,例如256位、512位甚至更多位数,以防止攻击者通过穷举的方式对盐值及私密数据进行破解。
71.通过在机密计算容器内生成盐值,并在机密计算容器中运行零知识证明电路,可以确保盐值是机密而无法被任何用户或机构获取的,即便是相关服务的开发商和运营商。同时,将加密后的盐值存储于该机密计算容器外可以实现在机密计算容器进行重启、迁移的情况下不会导致生成的盐值灭失。另外地或可替代地,将加密后的盐值存储于该机密计算容器外还可以确保多个机密计算容器同时运行,从而提高可用性和稳定性。
72.根据本公开的一些实施例,步骤s440、针对一个或多个私密地址中的每一个私密地址,利用零知识证明电路为该私密地址生成对应的别名以用于公开可以包括:步骤s442、获取第二盐值,其中,第二盐值的存储位置与第一盐值的存储位置相同;以及步骤s444、将该签名数据和第二盐值作为零知识证明电路的输入来生成对应的别名。
73.通过在为每个私密数据(例如私密地址)计算别名的过程中使用机密盐值,可以使得攻击者通过穷举方式碰撞私密数据的计算量大到完全不可行的程度,从而有效地确保了别名的不可逆性。
74.根据一些示例,第二盐值可以与第一盐值相同。由此可以确定服务方未对盐值进行修改。在这种情况下,对于相同的私密地址而言,将经由零知识证明电路输出相同的别名值。
75.根据另一些示例,第二盐值可能与第一盐值不同。由此可以确定服务方对盐值进行了修改。在这种情况下,对于相同的私密地址(如addrprivate)而言,如果将上述不同的盐值和对应的签名数据输入到零知识证明电路,则将产生不同的别名值,例如alias1和alias2。这可能出现如下的情况:在alias1和alias2分别绑定到不同的公开地址而得到绑定地址对(alias1,addrpublic1)和(alias2,addrpublic2)时,导致无法识别出此作弊行为(即实际上alias1和alias2均对应于同一私密地址,且与其绑定的公开地址的数量超过1)。
76.为了解决该问题,上述用于区块链的证明方法还可以包括:利用零知识证明电路生成与第二盐值对应的当前哈希值;获取与第一盐值对应的先前哈希值;确定当前哈希值是否与先前哈希值相同;以及响应于确定当前哈希值与先前哈希值不同,确定存在作弊。
77.通过零知识证明电路输出与盐值对应的哈希值,可以及时发现是否存在对盐值进行修改的情况,从而有效避免了通过修改盐值进行作弊而不被发现的情况,如上所述,这是因为对于同一个私密地址而言,如果将不同的盐值和对应的签名输入到零知识证明电路,则将产生不同的别名值。
78.图5示出了根据本公开的又一些实施例的用于区块链的证明方法500的流程图。如图5所示,方法500可以包括:与参考图1和图4所描述的用于区块链的证明方法100和400中的步骤s110-s130和s410-s430类似的步骤s510-s530;以及步骤s540、获取与该一个或多个私密地址相关联的公开信息作为零知识证明电路的输入;以及步骤s550、利用零知识证明电路生成与该公开信息对应的用于验证零知识证明电路的输出结果的第二证明数据。
79.根据本公开的一些实施例,公开信息可以包括但不限于某种加密资产的分布情况、最近的成交价格、基于特定模型预估的价格等。
80.通过获取公开信息作为零知识证明电路的输入,可以对计算结果中与业务相关的部分(例如资产总数、该地址控制者是否拥有某资产等)进行公开验证,从而确保相关信息的准确性。
81.根据本公开的另外一些实施例,还可以根据实际情况对零知识证明电路的一个或多个输出进行模糊化处理,以防止私密数据或商业机密的泄露。执行模糊化处理的原因在于,尽管在零知识证明技术和机密计算技术的使用过程中不会将诸如私密地址等私密数据泄露给任何个人或机构,但是零知识证明电路可以输出诸如资产总数等信息,在某些特定的场景下,其他个人或机构有可能根据该输出的信息推算出私密地址。举例而言,在总资产为2999份并且分布在1000个地址中,其中一个地址拥有2000份资产而另外999个地址各自拥有一个地址的场景下,如果零知识证明电路输出的公开信息指示某个绑定地址对拥有2001份资产,则可以确定拥有2000份资产的私密地址与该绑定地址对中的公开地址是绑定的,从而造成了私密数据的泄露。模糊化处理例如可以包括:不输出资产总数等精确值,而输出例如指示该绑定地址对拥有资产是否超过设定值的值,其中,该设定值可以根据实际情况而进行更改。
82.根据本公开的一些实施例,地址控制者还可以将无资产的一个或多个私密地址与公开地址进行绑定以作为混淆信息。通过将无资产的私密地址与公开地址进行绑定,同时例如输出如上所述的指示该绑定地址对拥有资产是否超过设定值的值以进行模糊化处理,可以防止其他个人或机构从零知识证明电路的输出信息推算出与公开地址绑定的私密地址。
83.图6示出了根据本公开的实施例的用于区块链的证明装置600的结构框图。如图7所示,装置600可以包括:第一获取模块610,被配置为获取地址控制者对该地址控制者的公开地址的一个或多个绑定声明,该一个或多个绑定声明指示公开地址和该地址控制者的一个或多个私密地址之间的绑定关系;第二获取模块620,被配置为针对该一个或多个私密地址中的每一个私密地址,获取对该一个或多个绑定声明中的对应绑定声明进行签名后的签名数据,其中,对该对应绑定声明进行签名是基于与该私密地址对应的私钥的;以及生成模块630,被配置为利用符合预设条件的零知识证明电路来生成用于验证该一个或多个绑定关系的第一证明数据,其中,零知识证明电路的输入包括签名数据。
84.根据本公开的一些实施例,装置600还可以包括:生成别名模块,被配置为针对该一个或多个私密地址中的每一个私密地址,利用零知识证明电路为该私密地址生成对应的别名以用于公开;以及确定作弊模块,被配置为基于该对应的别名确定是否存在针对该私密地址的作弊,其中,与每一个私密地址对应的别名之间彼此不同。
85.根据本公开的一些实施例,其中,确定作弊模块可以包括:被配置为确定与该对应的别名相关联的绑定地址对的模块,绑定地址对还包括与该对应的别名绑定的公开地址;被配置为基于绑定地址对,确定与该对应的别名绑定的公开地址的数量的模块;被配置为响应于确定与该对应的别名绑定的公开地址的数量大于1,确定存在针对该私密地址的作弊的模块。
86.根据本公开的一些实施例,装置600还可以包括确定机密计算容器模块,被配置为确定能够与地址控制者正在使用的应用程序通信的机密计算容器,其中,零知识证明电路位于该机密计算容器中。
87.根据本公开的一些实施例,确定机密计算容器模块可以包括:被配置为确定机密计算容器的第一身份id和第一版本的模块;被配置为将第一身份id和第一版本分别与应用程序中预先设置的第二身份id和第二版本进行比较的模块;以及被配置为响应于确定第一身份id与第二身份id相同,并且第一版本与第二版本相同,确定该机密计算容器为能够与应用程序通信的机密计算容器的模块。
88.根据本公开的一些实施例,装置600还可以包括生成盐值模块,被配置为在机密计算容器内利用随机数发生器生成第一盐值;加密模块,被配置为利用机密计算容器对第一盐值进行加密的模块;以及存储模块,被配置为将加密后的第一盐值存储在机密计算容器外的模块。
89.根据本公开的一些实施例,生成盐值模块可以包括:被配置为获取第二盐值的模块,其中第二盐值的存储位置与第一盐值的存储位置相同;以及被配置为将签名数据和第二盐值作为零知识证明电路的输入来生成对应的别名的模块。
90.根据本公开的一些实施例,装置600还可以包括:被配置为利用零知识证明电路生成与第二盐值对应的当前哈希值的模块;被配置为获取与第一盐值对应的先前哈希值的模块;被配置为确定当前哈希值是否与先前哈希值相同的模块;以及被配置为响应于确定当前哈希值与先前哈希值不同,确定存在作弊的模块。
91.根据本公开的一些实施例,装置600还可以包括:被配置为获取与一个或多个私密地址相关联的公开信息作为零知识证明电路的输入的模块;以及被配置为利用零知识证明电路生成与该公开信息对应的用于验证零知识证明电路的输出结果的第二证明数据的模
块。
92.根据本公开的一些实施例,其中,该一个或多个绑定声明中的每一个绑定声明为结构化数据,并且其中,该结构化数据包括公开地址。
93.根据本公开的一些实施例,其中,针对每一个绑定声明,该结构化数据还包括以下中的一个或多个:针对该绑定声明的有效起始时间;针对该绑定声明的有效终止时间;以及指示生成该绑定声明的时间的时间戳。
94.根据本公开的一些实施例,其中,签名数据为结构化数据,并且其中,该结构化数据包括绑定声明和指示地址控制者对该私钥的控制的数据两者。
95.根据本公开的一些实施例,其中,该结构化数据还包括与私钥对应的公钥。
96.应当理解,图6中所示装置600的各个模块610-630可以与参考图1描述的方法100中的各个步骤s110-s130相对应。由此,上面针对方法100所描述的操作、特征和优点同样适用于装置600及其所包括的模块。为了简洁起见,某些操作、特征和优点在此不再赘述。
97.还应当理解,本文可以在软件硬件元件或程序模块的一般上下文中描述各种技术。上面关于图6描述的各个模块可以在硬件中或在结合软件和/或固件的硬件中实现。例如,这些模块可以被实现为计算机程序代码/指令,该计算机程序代码/指令被配置为在一个或多个处理器中执行并存储在计算机可读存储介质中。可替换地,这些模块可以被实现为硬件逻辑/电路。例如,在一些实施例中,第一获取模块610、第二获取模块620和生成模块630中的一个或多个可以一起被实现在片上系统(system on chip,soc)中。soc可以包括集成电路芯片(其包括处理器(例如,中央处理单元(central processing unit,cpu)、微控制器、微处理器、数字信号处理器(digital signal processor,dsp)等)、存储器、一个或多个通信接口、和/或其他电路中的一个或多个部件),并且可以可选地执行所接收的程序代码和/或包括嵌入式固件以执行功能。
98.根据本公开的另一方面,还提供一种电子设备,包括:至少一个处理器;以及与所述至少一个处理器通信连接的至少一个存储器;其中所述至少一个存储器存储有计算机程序,所述计算机程序在被所述至少一个处理器执行时实现上述用于区块链的证明方法。
99.根据本公开的另一方面,还提供一种存储有计算机程序的非瞬时计算机可读存储介质,其中,所述计算机程序在被处理器执行时实现上述用于区块链的证明方法。
100.根据本公开的另一方面,还提供一种计算机程序产品,包括计算机程序,其中,所述计算机程序在被处理器执行时实现上述用于区块链的证明方法。
101.参见图7,现将描述可以作为本公开的服务器的电子设备700的结构框图,其是可以应用于本公开的各方面的硬件设备的示例。电子设备可以是不同类型的计算机设备,诸如,膝上型计算机、台式计算机、工作台、个人数字助理、服务器、刀片式服务器、大型计算机、和其它适合的计算机。电子设备还可以表示各种形式的移动装置,诸如,个人数字处理、蜂窝电话、智能电话、可穿戴设备和其它类似的计算装置。本文所示的部件、它们的连接和关系、以及它们的功能仅仅作为示例,并且不意在限制本文中描述的和/或者要求的本公开的实现。
102.如图7所示,电子设备700可以包括能够通过系统总线730彼此通信的至少一个处理器710、工作存储器720、输入单元740、显示单元750、扬声器760、存储单元770、通信单元780以及其它输出单元790。
103.处理器710可以是单个处理单元或多个处理单元,所有处理单元可以包括单个或多个计算单元或者多个核心。处理器710可以被实施成一个或更多微处理器、微型计算机、微控制器、数字信号处理器、中央处理单元、状态机、逻辑电路和/或基于操作指令来操纵信号的任何设备。处理器710可以被配置成获取并且执行存储在工作存储器720、存储单元770或者其他计算机可读介质中的计算机可读指令,诸如操作系统720a的程序代码、应用程序720b的程序代码等。
104.工作存储器720和存储单元770是用于存储指令的计算机可读存储介质的示例,指令由处理器710执行来实施前面所描述的各种功能。工作存储器720可以包括易失性存储器和非易失性存储器二者(例如ram、rom等等)。此外,存储单元770可以包括硬盘驱动器、固态驱动器、可移除介质、包括外部和可移除驱动器、存储器卡、闪存、软盘、光盘(例如cd、dvd)、存储阵列、网络附属存储、存储区域网等等。工作存储器720和存储单元770在本文中都可以被统称为存储器或计算机可读存储介质,并且可以是能够把计算机可读、处理器可执行程序指令存储为计算机程序代码的非暂态介质,计算机程序代码可以由处理器710作为被配置成实施在本文的示例中所描述的操作和功能的特定机器来执行。
105.输入单元760可以是能向电子设备700输入信息的任何类型的设备,输入单元760可以接收输入的数字或字符信息,以及产生与电子设备的用户设置和/或功能控制有关的键信号输入,并且可以包括但不限于鼠标、键盘、触摸屏、轨迹板、轨迹球、操作杆、麦克风和/或遥控器。输出单元可以是能呈现信息的任何类型的设备,并且可以包括但不限于显示单元750、扬声器760以及其它输出单元790,其它输出单元790可以但不限于包括视频/音频输出终端、振动器和/或打印机。通信单元780允许电子设备700通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据,并且可以包括但不限于调制解调器、网卡、红外通信设备、无线通信收发机和/或芯片组,例如蓝牙
tm
设备、802.11设备、wi-fi设备、wimax设备、蜂窝通信设备和/或类似物。
106.工作寄存器720中的应用程序720b可以被加载执行上文所描述的各个方法和处理,例如图1中的步骤s110-s160、图4中的步骤s410-s490、图5中的步骤s510-s550。例如,在一些实施例中,上文描述的各种方法可被实现为计算机软件程序,其被有形地包含于机器可读介质,例如存储单元770。在一些实施例中,计算机程序的部分或者全部可以经由存储单元770和/或通信单元780而被载入和/或安装到电子设备700上。当计算机程序被加载并由处理器710执行时,可以执行上文描述的方法100、400、500的一个或多个步骤。备选地,在其他实施例中,处理器710可以通过其他任何适当的方式(例如,借助于固件)而被配置为执行方法100、400、500。
107.本文中以上描述的系统和技术的各种实施方式可以在数字电子电路系统、集成电路系统、场可编程门阵列(fpga)、专用集成电路(asic)、专用标准产品(assp)、芯片上系统的系统(soc)、负载可编程逻辑设备(cpld)、计算机硬件、固件、软件、和/或它们的组合中实现。这些各种实施方式可以包括:实施在一个或者多个计算机程序中,该一个或者多个计算机程序可在包括至少一个可编程处理器的可编程系统上执行和/或解释,该可编程处理器可以是专用或者通用可编程处理器,可以从存储系统、至少一个输入装置、和至少一个输出装置接收数据和指令,并且将数据和指令传输至该存储系统、该至少一个输入装置、和该至少一个输出装置。
108.用于实施本公开的方法的程序代码可以采用一个或多个编程语言的任何组合来编写。这些程序代码可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器或控制器,使得程序代码当由处理器或控制器执行时使流程图和/或框图中所规定的功能/操作被实施。程序代码可以完全在机器上执行、部分地在机器上执行,作为独立软件包部分地在机器上执行且部分地在远程机器上执行或完全在远程机器或服务器上执行。
109.在本公开的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的程序。机器可读介质可以是机器可读信号介质或机器可读储存介质。机器可读介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦除可编程只读存储器(eprom或快闪存储器)、光纤、便捷式紧凑盘只读存储器(cd-rom)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
110.为了提供与用户的交互,可以在计算机上实施此处描述的系统和技术,该计算机具有:用于向用户显示信息的显示装置(例如,crt(阴极射线管)或者lcd(液晶显示器)监视器);以及键盘和指向装置(例如,鼠标或者轨迹球),用户可以通过该键盘和该指向装置来将输入提供给计算机。其它种类的装置还可以用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的传感反馈(例如,视觉反馈、听觉反馈、或者触觉反馈);并且可以用任何形式(包括声输入、语音输入或者、触觉输入)来接收来自用户的输入。
111.可以将此处描述的系统和技术实施在包括后台部件的计算系统(例如,作为数据服务器)、或者包括中间件部件的计算系统(例如,应用服务器)、或者包括前端部件的计算系统(例如,具有图形用户界面或者网络浏览器的用户计算机,用户可以通过该图形用户界面或者该网络浏览器来与此处描述的系统和技术的实施方式交互)、或者包括这种后台部件、中间件部件、或者前端部件的任何组合的计算系统中。可以通过任何形式或者介质的数字数据通信(例如,通信网络)来将系统的部件相互连接。通信网络的示例包括:局域网(lan)、广域网(wan)和互联网。
112.计算机系统可以包括客户端和服务器。客户端和服务器一般远离彼此并且通常通过通信网络进行交互。通过在相应的计算机上运行并且彼此具有客户端-服务器关系的计算机程序来产生客户端和服务器的关系。
113.应该理解,可以使用上面所示的各种形式的流程,重新排序、增加或删除步骤。例如,本公开中记载的各步骤可以并行地执行、也可以顺序地或以不同的次序执行,只要能够实现本公开公开的技术方案所期望的结果,本文在此不进行限制。
114.虽然已经参照附图描述了本公开的实施例或示例,但应理解,上述的方法、系统和设备仅仅是示例性的实施例或示例,本发明的范围并不由这些实施例或示例限制,而是仅由授权后的权利要求书及其等同范围来限定。实施例或示例中的各种要素可以被省略或者可由其等同要素替代。此外,可以通过不同于本公开中描述的次序来执行各步骤。进一步地,可以以各种方式组合实施例或示例中的各种要素。重要的是随着技术的演进,在此描述的很多要素可以由本公开之后出现的等同要素进行替换。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献