就在不久前,NEAR宣布与ZeroPool建立合作关系,后者将在NEAR协议中增加对私密交易功能的支持。目前,在NEAR的平台上,所有交易都和比特币和以太坊一样,全部公开可查。也就是说,对于每笔交易,发起方、接收方和交易金额等信息都是对外公开的。采用这种方式能够保证每个人都有权利审计账簿,确认交易的有效性,同时还可以有效杜绝双花现象的发生。
在很多情况下,理想的交易方式是:只有交易的参与者才能看到交易的详细内容。而要满足这一要求,同时保证账簿仍然是可被验证的是一项复杂的工作,需要用到高深的密码学技术。在这篇文章中,笔者将从技术的角度深度解析如何在NEAR系统中实现私密交易功能,即在保证验证交易正确性的工作不受到任何损害的情况下,使交易的各个参与方与交易金额等信息处于隐藏状态。下面我们切入主题:
未经花费的输出
在NEAR生态里,我们一般使用账户模型作为记账方式,私密交易使用的则是UTXO(未经花费的输出)模型。每一个UTXO都是一个元组,包含数额,接收方,salt三个元素,其中数额指交易金额,接收方其实是通证接收方的公钥,而“salt”只是一些随机数。
所有的UTXO都储存在一个默克尔树上,该默克尔树有一个预设高度,高度值的大小决定了在该默克尔树存在的整个生命周期内,交易池可以处理的交易数量的上限/下限。
图:UTXO默克尔根
默克尔树上的每一个分支(树叶)或是一个UTXO,或是null(空值)。每一个null代表一个空位,未来可以填充进一个新的UTXO。一旦一个空值被填满后,便不可回归到初始状态。所有的分支最初都是空值状态,即都为null。
BMEX与布拉格社区达成深度战略合作关系:据官方消息,目前BMEX与布拉格社区达成深度战略合作关系,旨在为合约交易者普及更多行业知识,提升区块链交易生态整体质量。 布拉格社区是一家专注于资本市场交易领域的服务机构,通过沉淀区块链知识普及、数字金融行情分析、策略指导等知识,为旗下团队给到系统化运作赋能支持。
BMEX是一家数字资产综合服务平台,致力于为用户提供安全、信赖的数字资产交易及资产管理服务。[2021/3/19 19:01:27]
除了接收方,真正的UTXO不会透露给任何人。因此,默克尔树上的分支实际上是UTXO的哈希值,这也是为什么“salt”需要存在的原因。如果没有了它,一旦Alice知道了Bob的公钥,就可以使用不同的数字,来验证Bob的公钥(哈希值)是否出现在了默克尔树上,从而暴力破解交易金额。此时,Bob的交易也就不再匿名了。
图: 默克尔根
交易
假设Alice想私下里给Bob转一些通证。属于Alice的通证存放在UTXO里,通证的接收者相当于Alice的公钥。为了让交易保持私密状态,Alice用如下形式创建了一次交易:
这笔交易有2个输入和2个输出(输入和输出的确切数量不一定为2,但是必须要相同——所有交易都是如此),这里的输入是一些既有的UTXO,对应默克尔树上的分支;输出则是全新的UTXO,未来将被添加至默克尔树。
当Alice发起交易时,如果她发布的恰好是两个正在被花费的UTXO,就会将该交易链接至生成这两个UTXO的交易上。而建立交易池的目的恰恰是为了保证这样的链接不能被建立,以确保输入型UTXO不会被发布出去。那么问题来了,如何才能确保在交易的过程中,验证节点可以确认一笔交易花费的是已有的UTXO,同时又不会对外公布正在被花费的真实的UTXO呢?
全球金融科技实验室专家顾问:区块链+智能制造成推进工业化和信息化深度融合战略举措:业内专家普遍认为,区块链在生物医药、新能源、新材料等产业上的应用前景比较广阔。对此,全球金融科技实验室专家顾问郑磊博士表示,目前还没听说过有区块链技术的应用,在新材料领域有落地的项目,但区块链+智能制造成为加快推进落实工业化和信息化深度融合、打造制造强国的战略举措。智能制造的价值之一就是重塑价值链的透明度、灵活性,并能够更敏捷的应对生产、物流、仓储、营销、销售、售后等环节存在的问题。(证券日报)[2020/4/12]
与众多隐私保护交易引擎一样,ZeroPool使用了一种非交互性的零知识证明(zk-SNARK)来实现私密交易。针对某种特定计算的零知识证明能够支持以下形式的密码证明:
给定的公开输入1,公开输入2…
已知某种私密输入1,私密输入2…
可得到[某种结论]
此类知识证明的工作原理不在本文讨论范围之内。有关此问题的更多信息,可以点击该博客链接查询。如果想以一种最简单的方式达成私密交易,知识论证可以具有以下形式:
给定默克尔根以及两个哈希值OUT_HASH1和OUT_HASH2,
已知有四个这样的UTXO:IN1,IN2,OUT1,OUT2,两个默克尔证明P1和P2以及一个私钥x,
OUT1和OUT2对应的哈希值分别为OUT_HASH1和OUT_HASH2;IN1和IN2中的接收者相当于与x对应的公钥X;merkel证明P1和P2是在默克尔根已确定的默克尔树中包含IN1和IN2的有效证明;IN1和IN2中的数量之和等于OUT1和OUT2中的数量之和。
交易则包含merkle_root,out_hash1,out_hash2,以及知识证明。交易中的任何内容都不会暴露输出型UTXO的接收者,也不会将输出型UTXO链接到特定的输入型UTXO。并且,连交易金额这样的信息也不会在交易过程中对外展示。
声音 | 中国智能交通产业联盟理事长:交通需要与区块链等新技术深度融合:金色财经报道,12月10日,在“智无界·共生长” 2019百度地图生态大会上,中国智能交通产业联盟理事长、国家智能交通系统研究中心首席科学家王笑京表示,交通是个完整的体系,既包括基础设施建设,又包括运输服务网发展,更需要与大数据、互联网、人工智能、区块链等新技术的深度融合。[2019/12/11]
举例说明:如上图所示,假设该默克尔树的第一个和第三个UTXO以Alice为接收者,对应的金额分别为$100和$17,Alice知道这两个UTXO,但是对树上的其他任何UTXO都未知。如果她想向Bob发送$42,通常的做法是她会首先创建一笔交易,这笔交易会使用她的两个UTXO作为输入,同时创建两个输出:——一个向Bob发送$42,另一个将剩下的75$返给她自己。她将属于Bob的UTXO告诉了对方,但是其余的UTXO只有她自己知道,旁人无从知晓。并且,甚至连输入型的UTXO的哈希值也是保密的。
智能合约负责对交易池进行日常维护,一旦该合约收到了一笔这样的交易,便会对知识证明进行验证。验证无误后,就会将两个新的UTXO添加至默克尔树上。
Bob从Alice处收到UTXO后,会等待一段时间,直到UTXO的哈希值被默克尔树收录之后,他才从真正意义上获得了这些通证。
这种方式虽看似简单,但存在一个问题,即相同的UTXO可能会被重复使用。由于除了Alice没有人知道输入型UTXO的哈希值,交易池便无法将已消耗的UTXO从默克尔树上移除,因为连它也不知道先从哪个开始移除。
声音 | 山东省委常委:推动区块链和人工智能等前沿信息技术深度融合:金色财经报道,11月27日,第十期山东干部讲堂在济南开讲。山东省委常委、秘书长孙立成主持干部讲堂。他表示,要着力推进创新发展,充分发挥我省科技资源优势,推动区块链和人工智能、大数据、物联网等前沿信息技术深度融合,为加快新旧动能转换提供新的技术支撑。要着力做好融合文章,把提高区块链应用管理能力作为推进治理体系和治理能力现代化的重要手段,将流程再造与区块链技术有机结合起来,以区块链技术应用的实际成效助推山东高质量发展。[2019/11/28]
如果Alice创建2个不同的零知识证明,但是消耗了同样的2个输入,每个人都能验证两笔交易消耗了一些原本存在于默克尔树上的UTXO,但是却无法得知两笔交易中消耗的UTXO其实是一样的。为了解决这个问题,我们引入了nullifier的概念。简单来说,nullifier是UTXO的哈希值,同时也是UTXO接收者的私钥。然后,我们将交易的知识证明更改为以下内容:
给定默克尔根,以及两个哈希值OUT_HASH1和OUT_HASH2,另外两个哈希值NULLIFIER1和NULLIFIER2,
OUT1和OUT2对应的哈希分别是OUT_HASH1和OUT_HASH2;IN1和IN2中的接收者相当于与x对应的公钥X;默克尔证明P1和P2是在有确定的默克尔根的树中包含IN1和IN2的有效证明;IN1和IN2中的总和等于OUT1和OUT2中的总和;并且hash(IN1,x)等于NULLIFIER1,hash(IN2,x)等于NULLIFIER2
请注意,任何花费特定UTXO的交易计算的都是相同的NULLIFIER值,因为NULLIFIER仅取决于UTXO的哈希值和UTXO中公钥对应的私钥。由于上述知识证明中的NULLIFIER是在公开的“给定”语句(Clause)中,因此如果曾经发布过使用相同UTXO的两笔交易,每个人都可以得知它们具有相同的NULLIFIER,并舍弃后出现的那笔交易。同样值得注意的是,只要用于计算它的哈希是抗原像攻击的,NULLIFIER就不会显示有关输入型UTXO或接收方私钥的任何信息。
动态 | 中电互联将与圣湘生物将共同推动云和大数据平台区块链应用的深度合作:据长沙晚报网报道,4月24日,记者获悉,中电工业互联网有限公司和湖南圣湘生物科技有限公司签订战略合作协议,双方将共同推动云和大数据平台区块链应用的深度合作。[2019/4/25]
通证充提
上述类型的交易可用于池内资产的转移,但对于一个功能完善的交易池来说,必须同时支持池内外的资金转移。因此,我们在私密交易的格式中加入了一个额外的字段,称为delta,如此一来,输入型UTXO的总量就等于输出型UTXO数量+delta。
给定默克尔树,两个哈希值OUT_HASH1和OUT_HASH2,另外两个哈希值NULLIFIER1和NULLIFIER2,以及一个delta值。
已知对于IN1,IN2,OUT1,OUT2计4个UTXO,两个默克尔证明P1和P2,还有一个私钥x,
则OUT1与OUT2对应的哈希值分别为OUT_HASH1和OUT_HASH2;IN1和IN2中的交易接收方相当于与私钥x对应的公钥X;默克尔证明P1和P2是有给定哈希根的包含IN1和IN2的merkel树的有效证明;IN1和IN2数量等于OUT1,OUT2数量总和再加上delta值;hash(IN1,x)等于NULLIFIER1;hash(IN2,x)等于NULLIFIE2R。
需要注意的是,delta在给定语句中,因此是公开的。NEAR在处理上述类型的交易时,若delta值为负(即一笔私密交易中输入通证比输出通证少),多出来的通证会存入交易发起方的账户中;若delta值为正(即一笔私密交易中输入通证比输出通证多),则只有在剩余通证被补足时交易才有效。
交易手续费
私密交易禁止在新创建的UTXO和曾被用作交易输入的UTXO之间建立联系。不过对于任何将被记录在NEAR链上的交易而言,交易的发出者都必须支付gas费。也正是因为这个原因,该发出者的账户中必须有一定数量的NEAR通证。该账户可能不知通过什么手段获得了一些NEAR通证,从而在上文提到的两种UTXO之间创建了某种联系,私密交易的目的会因此大为受挫。
为了解决这个问题,我们在系统中引入了中继者(Relayer)的概念。假设Alice想给Bob发送一笔交易,并打算让Ryan充当中继者。这笔交易的gas费用小于?1,而Alice愿意支付给Ryan?1,让Ryan帮他把交易上链。
Alice甚至可能都没有NEAR账户,此时的她创建了一笔私密交易。在这笔交易中,作为交易输入的两个UTXO的资金总额比作为交易输出的UTXO的资金总额正好少?1。剩余的?1被提取至交易提交方的账户中。Ryan从Alice处收集到这笔交易信息,验证其有效性,并用自己的账户提交交易。整个过程消耗的gas费小于?1,但是他最后却得到了?1的酬劳 。
Alice最终在没有暴露自己身份的情况下提交了一笔交易,Ryan则获得了一笔小额的回报。请注意在交互中,任何一方都无需取得他人的信任:Ryan不能以任何形式篡改交易,留给他的只有两个选择:要么提交,要么放弃。因此,对于Alice来说最大的风险就是她的交易可能没有被提交(这种情况下她可以请另一个中继人)。由于Ryan在交易提交之前就验证了交易,因此除非另一个中继人捷足先登,否则Ryan便不会有花费了gas却得不到回报的风险。
未来发展
上文描述的这种模型已经是一个可以完全满足私密交易的交易池了。接下来,笔者会从几个方面简要描述一下如何提高交易池的安全性或使用性。
在我们描述如上交易的过程中,笔者曾提到当Alice悄悄将通证发给Bob的同时,也将新创建的UTXO分享给了对方。这一过程的实现需要Alice与Bob在链下交流,而这是我们不希望看到的。为了解决这一问题,我们可以对交易池进行扩展,使其可以存储所有的用交易接收方的公钥加密的UTXO。当Alice将资产转给Bob并创建2个新的UTXO后,Bob作为接收方,其公钥会被Alice用来对UTXO加密。
再来看Bob,他监控着所有新创建的UTXO,并试着用自己的私钥对其逐个解密。一旦他试到Alice创建的UTXO,则解密成功——这样,Bob就完全通过NEAR特有的链上沟通的方式发现了他们的UTXO。
解耦签名与证明
当Alice创建一笔交易后,她需要使用自己的私钥信息,设计一个复杂的证明。因此,计算该证明的机器需要获取她的私钥,而这是我们不愿意看到的。总的来说,私钥最好用某些外部的硬件设备加以存储,这类硬件的功能通常会比较单一,比如有些产品只有消息签名这一个功能。对于这种硬件来说,运算知识证明通常在他们的功能之外。
为了适配这些硬件,我们生成3个密钥,而不是传统的公私钥对:私钥,解译钥和公钥。在这种情况下,用公钥加密的某条信息可以使用解译钥来解密。同理,私钥签名可以通过解译钥来验证。只有公钥是大家都能看到的。解译钥被储存在一个运算交易证明的设备上,而私钥被储存在外接设备中,该设备只能对信息进行签名。
我们可以使用以下方式对知识证明做一些修改:
给定默克尔根,两个哈希值OUT_HASH1和OUT_HASH2,以及另外两个哈希值NULLIFIER1和NULLIFIER2
已知有IN1,IN2,OUT1,OUT2四个UTXO,两个默克尔证明P1和P2,一个解译钥d和一个签名s。
OUT1,OUT2对应的哈希值为OUT_HASH1和OUT_HASH2;IN1和IN2中的接收方相当于和d对应的公钥X;默克尔证明P1和P2是给定哈希根的默克尔树包含IN1,IN2的有效证明;IN1与IN2数量之和等于OUT1与OUT2的数量之和;hash(IN1,d)等于NULLIFIER1;hash(IN2,d)等于NULLIFIER2,s是message(IN1,IN2,OUT1,OUT2)的签名、并对于d有效。
当Alice想要创建一笔交易时,她会使用硬件设备签名(IN1,IN2,OUT1,OUT2),然后使用签名s在只能获取解译钥的机器上生成证明。需要注意的是,如果无法使用硬件设备,Alice就无法生成签名s,也就不能花出这笔钱——即使获取了用于生成证明的机器的使用权限也不行。
支持更多通证
私密交易并不仅仅局限于NEAR通证。开发人员只需作轻微调整,便可让交易池可以支持任何发行在NEAR平台上的通证。具体的实现方式本文不再赘述。
昨日提示,行情持续向上试探三角压制线,指标上也显示即将金叉,接近变盘的节点,今日早间BTC大幅向上拉涨,突破三角压制点位9800美金阻力,突破斐波那契0.618压制位10100美金多重阻力,直线涨至10299高点在回落.
1900/1/1 0:00:00金色财经讯,5月28日,IOHK首席执行官Charles Hoskinson表示,Cardano将在下个月上线 Shelley网络.
1900/1/1 0:00:00上图为BTC三次产量减半对应的时间点,图中标注的是每次减半完成后所经历的区间震荡时间周期以及相应的区间振幅,这一过程完成后,前两次BTC突破这一震荡区间开启了新的上涨波段,后面迎来了大牛行情.
1900/1/1 0:00:00前面提示,日线连续两日上拉后,价格偏离日均线系统较远,乖离率较高,短期有区间震荡等待均线上移的需求,后面周末至今天持续的小范围震荡,5日线逐步上移,日线MACD指标线0轴上方也开始逐步粘合,成交量持续萎缩,又快到了变盘的时刻.
1900/1/1 0:00:006 月 10 日,Kava 的 DeFi 借贷平台将正式上线,首次向 BNB 持有者提供 DeFi 服务.
1900/1/1 0:00:00联盟链BSN正在高速发展。据官方消息,截止至4月25日,区块链服务网络(BSN)全球节点共部署了128个,国内120个,国际8个,分布在除南极洲外的六大洲,从官方的节点实时监测工具上可以看到,监测中的85个节点的运行的符合状态、地理位.
1900/1/1 0:00:00