侧链:私密交易

当前位置:首页 > 币圈百科 > 侧链:私密交易

侧链:私密交易

2022-12-17币圈百科242

私人交易

本文翻译自元素链官网:http://elementsproject.org?上的链接:

https://people.xiph.org/~格雷戈/confidential _ values.txt?2015/06/11

译者:申屠青年,新浪微博博士,深圳大学国防科学技术ATR重点实验室@我看比特币

注:本文可随意转发,请留下译者信息,如果您认为本文对您有用,请捐给译者,以便翻译更多比特币核心资料。捐赠地址:1 avjjjrchqdj 8 rhvz 9 xyc 422 ikuyja 12

译者前言

比特币在国内已广为人知,但技术研究并未有效开展。大部分人都是在知道和了解的层面。一个重要原因是比特币的核心资料大部分都是英文的,很少有人能在冥想中读懂这么复杂的英文资料。我打算在研究其英文技术的同时翻译一些重要资料,让更多业内人士对比特币有更好的了解。

本文涉及侧链技术,是元素链Alpha版本中重要特性“私有交易”的技术说明文章。

Text

1私密交易

元素链中最有用的新特性之一是私密交易,这是一种用于提高比特币隐私性和安全性的加密工具。此功能仅允许交易的参与者(或其指定人员)了解交易金额。

比特币区块链的安全性由统一验证来保证:每个参与者独立自动验证每笔交易的合法性,不信任第三方。另一个不利影响是,所有交易数据都必须公开,才能公开验证,这对于传统金融机构的正常需求来说,确实很奇怪。

不充分的金融隐私会给企业和个人带来严重的安全和隐私问题。如果没有足够的隐私保护,窃贼和欺诈者会将注意力集中在高价值的目标上,商业竞争对手会知道商业细节,他们的谈判地位也会被泄露。因为公共信息需要交易,隐私机制的缺失使得其他人可以免费获得相关信息。隐私不足还会导致可替代性的丧失——一些货币比其他货币更容易被接受——进一步削弱比特币作为货币的功能。

比特币使用地址部分来解决隐私问题。如果人们不知道哪个用户拥有某些地址,隐私就可以得到保证。但是只要和别人交易,至少知道对方一个地址。从这个地址,您可以追踪到其他相关地址,并评估交易金额和保留金额。举个例子,假设你的老板用比特币支付你的工资,你后来用这些比特币支付你的房租和食物。你的房东和超市知道你的收入。当你的收入增加时,他们可能会提高给你的价格,或者把你当作盗窃的目标。

目前有一些进一步提高比特币私密性的技术(比如CoinJoin,通过联合支付的方式组合交易),但是这些技术的应用并不多,因为可以追溯金额。

在竞争链中还提出了其他密码技术来改善隐私,但它们都破坏了“修剪”(比特币创建文章的第7部分),使得用户需要不断增长的数据库来验证新的交易,因为这些系统不知道硬币是否已经被花掉。大多数密码隐私系统的性能很差,负载很高或者需要很强的密码假设(并且不容易理解)。

私密交易使交易金额更加私密。同时,它允许公共网络验证剩余的区块链交易。要做到这一点,不需要在比特币系统中加入新的密码假设,系统开销可控。

CT(私密交易)由于加性同态承诺的密码技术是可行的。另一方面,CT还实现了额外私有“备忘录”数据(如发票号或取款地址)的交换,通过回收大部分CT密码证明的开销,交易规模不会增加。

2私人交易背后的技术

以下工作由亚当贝克(Adam Back)第一篇关于比特币的帖子《具有同态价值的比特币》完成:【https://bitcointalk.org/index.php?Topic=305791.0】。 为了创建CT,我们实现了几个新的密码系统,发明了环签名的推广和几个新的优化方法,使得结果更加高效。

2.1彼得森承诺

CT的基本密码工具是彼得森承诺。

promise场景允许您将一部分数据作为私有数据,但是要保证您以后不能更改这些数据。用hash函数构造一个简单的promise场景如下:

promise=SHA256(盲因子||数据)

如果你只告诉别人你的承诺,别人无法确定你承诺了什么数据(给定一些哈希表的性质假设)。但是你后来透露了致盲因素和数据,别人可以运行哈希函数来验证是否符合你之前的承诺。致盲因素肯定是存在的,不然别人也可以试着去猜测数据。如果你的数据少而简单,成功的概率就高。

pedersen的承诺与上述场景中的类似,但增加了一个特性:承诺可以相加,多个承诺的和等于数据的和(盲化因子的集合是盲化因子的和):

C (BF1,DATA1) C (BF2,DATA2)==C (BF1BF2,DATA1 DATA2) C (

if data _ n={1,1,2} and BF _ n={5,10,15}则:C (BF1

通常,ECC公钥是由私钥X乘以基点g生成的

PUB=xG

结果通常保存为33字节的数组。

ECC公钥服从之前描述的加法同态:

pub1publ2=(x1x2 (mod n)) g

(以上特性被BIP32分层确定性钱包用来允许第三方生成新的比特币地址)

pedersen承诺了额外的基点(我们称之为H点)生成方法所以没有人知道H vs G我们用g hash选择H:

H=to _ point(sha 256(encode(g))]

Here to _ point取

给定两个基点,我们可以构造如下承诺场景:

promise=xgah

其中x是隐私致盲因子,a是我们想要承诺的金额。可以用加法交换律来验证加法同态许诺场景中的相关性。

彼得森的承诺是信息理论的隐私。你看到的所有承诺,总能找到一些致盲的因素,这些因素可以配以任何数额的金钱。如果你的致盲因子真的是随机的,就算是拥有无限计算能力的攻击者也说不出你承诺的数量。这些承诺对于假承诺在计算上是安全的,实际上你不能计算任意的映射。如果你做到了,就意味着你可以找到两个基点相对于彼此的离散对数,也就意味着承诺组的安全性受到了损害。

2.2彼得森承诺应用

借助这个工具,我们将比特币交易中的8字节整数替换为32字节彼得森承诺的金额。

如果交易的发起者仔细选择它们的盲因子以便正确地添加它们,则网络可以通过将承诺添加到0来验证交易。

(in 1in 2 in 3 lain text _ input _ amount * h.)-(out1out2out3.费用* h)==0

以上公式要求交易成本明确,在实际交易中没有问题。

生成承诺和承诺验证非常简单。不幸的是,如果没有额外的措施,这种情况是不安全的。

问题是群是循环群,加法需要mod 蓑衣网小编2022 P(一个用来定义群秩的256位素数)。这样一来,大数相加就会“溢出”,从而类似于负数。因此,当一些输出量为负时,承诺加起来为0的特征仍然存在,导致凭空产生了5个比特币。

(1 ^ 1)-(-5 ^ 7)==0

上面的公式可以解释为“有人花了2个比特币,得到了-5个比特币,7个比特币”。

为了防止这种情况发生,当交易中有多个产出时,我们必须证明每个承诺的产出量都在允许的范围内(如[0,2 64]),并且没有溢出。

我们可以公开金额和致盲因子,以便网络进行检查,但这样我们就失去了所有隐私。因此,我们必须证明承诺的金额在允许的范围内,不要透露任何信息,除了:我们需要一个额外的密码系统来证明彼得森的承诺范围。我们使用了一种类似于Schoenmakers的二进制分解的技术,但是做了很多优化(包括不使用二进制)。

我们从基本的EC签名开始。如果生成了签名,签名的“消息”就是公钥的散列,证明签名人知道私钥,也就是公钥对某些基点的离散对数。

对于P=xG这样的“公钥”啊,因为基点H的存在,没有人知道P对基点g的离散对数,因为除非a为0,否则没有人知道x使xG=H。如果a是0,那么P=xG,离散对数正好是x,会有人签署公钥的。

以承诺为公钥,对承诺的哈希值进行签名。通过这种方法,可以证明彼得森承诺是一个零价值的承诺。在签名中使用公钥是为了防止签名被设置为任何值,以及破解承诺。签名的私钥是盲因子。

进一步,假设我想证明C是对1的量的承诺,但是不告诉你致盲因子。你能做的就是计算:

C'=C-1H

然后向我要公钥C '(相对于基点G的签名)的签名。如果我能做到,那么C一定是对金额1的承诺(否则我就破解EC离散对数)

2.3环签名

为了避免给出金额,我们还需要另一种密码学技术:环签名。环是存在两个(或多个)公钥的签名场景,签名证明签名人知道至少一个公钥的离散对数。

使用环签名,我们可以构造另一蓑衣网小编2022个场景。我证明承诺是金额为0或1的承诺。我们称这种情景为“或证明”。

首先,我给你C,你计算C'

C'=C-1H

。然后我提供{c,c'}上的环签名。

如果C是对金额1的承诺,那么我不知道它的离散对数,但是C '变成了对金额0的承诺,我知道它的离散对数(也就是致盲因子)。如果C是承诺量0,我知道它的离散对数;我不知道C '是对1的量的承诺时的离散对数。如果这是其他任何金额的承诺,没有一个结果是0,所以我不能签。

以上机制对任何数对都有效,只需将量经过适当预处理后放入环中,或者2个以上的数。

假设我要证明C在区间[0,32]内。现在我们有证据了。想象一下,我给你发一组承诺,每个承诺都有一个或证明:

C1 is 0或1c 2 is 0或2c 3 is 0或4c 4 is 0或8 C5 is 0或16

如果我为C1-C5选择正确的盲因子,它可以使我建立一些有效的二进制数,以及一个只能在[0,32]范围内的5位数。

侧链:私密交易

许多优化方法可以使证明过程更有效:

首先,我提出一个新的更有效的环签名公式,Borromean环签名,每个公钥只需要32个字节,加上其他不同环可以共享的32个字节。与以前的构造方法相比,这种环签名可以提供两倍的效率。

https://github.com/blockstream/borromean _ paper/raw/master/borromean _ draft _ 0.01 _ 34241bb.pdf

CT金额不是直接用金额表示,而是用十进制浮点数表示。每个数都要乘以一个基数为10的指数,

例如:11.2345和0.0112345可以有相同大小的证书,即使这两个数相差一千倍。

还有一种非私送“最低金额”。如果用户愿意披露一些最低金额信息(最低金额信息将被公开),它允许较小的证据覆盖更大范围的金额,也允许在使用指数时最小有效数字为非零。将最小金额减去交易中的第一笔蓑衣网小编2022金额,然后证明该值不为负。

浮点尾数采用四进制编码,而不是二进制编码,因为可以降低要发送的承诺的值,使签名数据大小相当于二进制。

对最后一个尾数的承诺可以跳过,对证明值的承诺可以从前到后创建,其他数也可以。

最后,通过在证明中小心地使用非随机化签名,硬币的接收者(由于ECDH密钥协议,接收者与发送者共享一个秘密)可以“倒回”证据,并使用它来提取发送者发送的消息,这是证据大小的80%。我们利用这个原理向接收方提供金额和盲因子,但也可以用来加载参考号或取款地址等信息。

2.4实现

结果,32位量的证明长2564字节,同时传输2048字节的报文。一个32位的证据最多可以覆盖42.94967296BTC,精度为1e-8,429.29629947476我的代码在i7-4770R计算机上每秒可以验证1300个32位的证书,可以进行多方面的优化。

该实现支持任何尾数大小或指数大小。通过发送方掌握的参数,性能和大小通过尾数位数线性相关;支持奇数位(最后一位转换为基数2)。

在要素链中,只有在导出多个私有金额(包括费用)时才需要范围证明。将多个私有金额合并为一个输出的事务不需要范围证明,因为所有的输入金额都是正确的。

扫描密钥用于验证可重写作用域证书的共享私钥。通过共享扫描密钥,这种方法与监控钱包完全兼容,用户可以与审计人员共享这些密钥,以便他们可以看到交易金额。

证据可以支持最低金额。如果只有一个私有输出,甚至在支付后,允许跳过范围证明,或允许节点跳过或使用欺诈性证据来延迟大规模证据的验证。以上事实将用于今后的工作中。

这里描述的系统不依赖于任何基本的新同态密码学假设,只有secp256k1椭圆曲线离散对数问题的难度假设,以及随机预言假设,就像比特币的正常签名一样。

当证明范围的大小非常规时,与其他替代方案(如零币)相比,它们占用的空间更少,验证速度更快。它们占用的大部分空间可以回收用于用户之间的额外数据通信,这是公共通信网络中经常需要但难以验证的功能。与签名类似,范围证明可以单独放在区块链的分支机构上,这样客户就不必关注(例如,以前的区块)以避免收到这些区块。

最重要的是,这个场景兼容区块链剪枝,不会让比特币的验证状态永远增长;同时兼容CoinJoin和CoinSwap,允许交易链的隐私性,纠正这些技术在隐私性方面的严重缺陷(交易金额泄露隐私)

与其他建议不同,本系统不仅是技术预测,也不是是纯密码学研究,而是已经与比特币系统整合。

私密交易在元素链中启用,并且作为常规交易的默认形式。

侧链:私密交易 | 分享给朋友: