(茂盛的栗树花,梵高) 前言:椭圆曲线加密是区块链的基础技术之一,而Mimblewimble是对它的优雅应用,它使用Pedersen commitment实现完全保密交易,并消除了对地址和私钥的依赖。同时,它与Bulletproofs相结合,带来了更轻量的匿名和隐私,这对于物联网同时实现扩展性和隐私保护来说有重要的意义。本文作者Grayblock,由“蓝狐笔记”社群的“鑫鑫”翻译。 2017年和18年主要关注可扩展性的话题。各种分叉和项目都把“扩展性”作为他们专属的口头禅。这场辩论给我们带来了解决方案,并向我们表明,当和未来的计划结合在一起的时候,就可以满足当前的需求。未来几年的重点将是匿名性和同质性的大规模采用。 在快速发展的互联数据世界中,隐私正成为一个非常重要的话题。事实上,我们将隐私权委托给中心化的公司,其安全性通过你的密码强度以及攻击者破解密码需要付出的努力来保证。 随着我们进入互联网的新时代,所有东西都是相互连接的,无须中介的信任和加密隐私必须成为其所依赖一切的基础。 在未来,面临风险的不仅仅是照片和信用卡号码,而是你与之交互的一切,以及它所收集的数据。 如果目标是在一个去中心化和无须中介信任的网络中做到这一点,那么面临的挑战将是找到一系列适用性的解决方案,这些解决方案具有生态系统的多样性并能匹配所预测的规模。 了解到这一点,INT已经开始研究如何在其网络中实施两种不同的隐私协议,以及搞定物联网的两个主要需求:可扩展的隐私交易和隐私智能合约。 Mimblewimble Mimblewimble是和椭圆曲线加密技术具有相同元素的一种全新的实现,后者是大多数加密货币的基础。 2016年8月,在bitcoin-wizards IRC频道,一位匿名用户发布了一个白皮书的Tor链接,声称它是“一种改进比特币隐私的想法”。 紧接着是一个区块链提案,它使用的交易结构与今天看到的任何方案都完全不同,创造了迄今为止看到的椭圆曲线加密技术最优雅的用途之一。 虽然发布的白皮书足以阐述支持该理论的想法和推理,但它不包含明确的数学或者安全性分析。Blockstream的数学家兼研究总监Andrew Poelstra立即开始分析它的价值,在接下来的两个月里,他创建了一份详细的白皮书,概述了创建独立区块链所涉及的密码学、基本定理和协议。 作为一个协议,它所要做的是完全隐藏交易中的值,并消除对地址的需求,同时解决扩展性问题。 保密交易 假设你想隐藏发送的金额。一个众所周知而且快速的隐藏信息的好方法:哈希!哈希允许你确定性地生成一个长度恒定的随机字符串,而不用管输入的长度,并且不可逆转。然后我们可以对金额进行哈希并在交易中把它发送出去。 X = SHA256(amount) 或者 4A44DC15364204A80FE80E9039455CC1608281820FE2B24F1E5233ADE6AF1DD5 = SHA256(10) 但是由于哈希是确定性的,有人会把所有可能金额的哈希编成一个目录,这样就无法达到隐藏的目的了。所以,我们不只是对金额进行哈希,而是先用一个私有的盲因子乘以金额。如果保持盲因子私有,就无法知道哈希中的金额。 X = SHA256(blinding factor * amount) 这被称为承诺(commitment),你承诺一个值而不去透露它,并且在不更改承诺的结果值的情况下,它是无法更改的。 但是,节点如何使用这种承诺方式来验证交易呢?最起码,需要证明你满足两个条件:一是你有足够的币,二是你没有在这个过程中造币。 大多数协议验证这一点的方法是消耗之前的一个(或多个)输入交易,并且在该过程中创建不超过输入总和的输出。如果我们对这些值进行哈希,而没有办法验证这种情况,那么就可以凭空造币。 input(commit(bf,10), Alice) -> output(commit(bf,9), BOB), outputchange(commit(bf,5), Alice) Or input(4A44DC15364204A80FE80E9039455CC1608281820FE2B24F1E5233ADE6AF1DD5, Alice) -> output(19581E27DE7CED00FF1CE50B2047E7A567C76B1CBAEBABE5EF03F7C3017BB5B7, Bob) output(EF2D127DE37B942BAAD06145E54B0C619A1F22327B2EBBCFBEC78F5564AFE39D, Alice) 如上图所示,后面的进行哈希过的值看起来和其他内容一样有效,却导致Alice创造了4个币作为交易找零。在任何交易中,输入之和必须等于输出之和。我们需要某种方法对这些进行哈希过的值进行数学运算,以证明: commit(bf1,x) = commit(bf2,y1) + commit(bf3,y2) 如果是有效的交易,则: commit(bf1,x) - commit(bf2+bf3,y1+y2) = commit(bf1-(bf2+bf3),0) 或者仅仅是剩下的盲因子的承诺。 由于哈希算法的特性,这是不可能实现的。为了验证这一点,我们必须公开所有的盲因子和金额。但是这样做,就没有秘密可言了。 那么,我们如何才能公开一个由私有值生成的值,既不能逆向推导私有值,又仍然能验证它满足某些条件?听起来有点像公钥和私钥加密… 我们在椭圆曲线密码学入门中学到的是,通过使用椭圆曲线来定义我们的数字空间,可以使用曲线上的一个点G,将其乘以任意数字x,得到的是同一曲线上的另一个有效点P。这个计算是很快的,但是根据结果点和公开的生成元点G,几乎不可能计算出使用了什么乘数。这样我们就可以用点P作为公钥,数字x作为私钥。有趣的是,它们还具有可加和可沟通的奇妙特性。 如果取点P等于x ? G,点Q等于y ? G,它们相加的结果点W=P+Q等于用数字组合x+y创建的一个新点: 这个性质称为同态,允许我们用我们不知道的数字做数学运算。 因此,如果在承诺中不使用原始的金额和盲因子,而是将它们乘以椭圆曲线上的已知生成元点,我们的承诺现在可以定义为: 这被称为Pedersen承诺,是所有保密交易的核心。 我们把盲因子称为r,金额称为v,并使用同一椭圆曲线上的生成元点H和G(不深入讨论Schnorr签名,出于验证的目的,我们只接受在盲因子和金额的承诺中使用两个不同的点)。代入我们之前的承诺中: 使用沟通属性: 对于一个有效交易,等价于: (其中ri、vi是输入值,ro、vo是输出值,rco、vco是找零输出值) 这个差值仅仅是对剩余的盲因子的承诺,也称为对零承诺: 你会发现,在任意选择盲因子的情况下,对零承诺将是非零的,事实上,它仍然是公钥对应的椭圆曲线上的一个有效点。 而私钥则是盲因子之间的差值。 所以,如果输入之和减去输出之和在曲线上产生了一个有效的公钥,则表明这些值已经平衡到了零,并且没有币被创造出来。如果结果差值不是这种形式: 对于某个剩余盲因子,它将不是曲线上的有效公钥,我们会知道它不是一个平衡的交易。为了证明这一点,用这个公钥对交易进行签名以证明交易是平衡的,并且所有的盲因子都是已知的,在这个过程中,没有泄露交易的任何信息。 以上所有的讨论都假设这些数字是正的。使用负数同样可以创建一个有效的平衡的交易,允许用户在每笔交易中创造新币。这被称为范围证明,每笔交易必须伴随一个零知识论证以证明私有承诺值位于预定的取值范围内。 Mimblewimble和Monero都使用了Bullet Proofs,这是一种新的计算证明的方法,它将交易的大小减少了80-90%。 (当前网络中看到的平均交易大小,假设MW的交易大小平均是2个输入2.5个输出) 到目前为止,所描述的协议在Mimblewimble和Monero之间或多或少是相同的。差异点是如何对交易进行签名。 在Monero中,有两组密钥/地址,即支付密钥和查看密钥。支付密钥用于生成签名交易,而查看密钥用于“接收”交易。交易是用一种被称为环签名的方法进行签名的,该签名由花费的输出产生,证明密钥组中的一个密钥拥有支付密钥。 这是通过使用你的私钥创建一个组合的Schnorr签名,以及使用以前交易的公钥创建的混合诱饵签名者来完成。这些诱饵签名者在数学上都是等效的,从而导致无法确定哪个是真正的签名者。由于Monero使用了上面提到的Pedersen承诺,因此这些地址从不公开可见,仅用于索赔、交易签名和产生盲因子。 另一方面,Mimblewimble不使用任何类型的地址。没错,没有地址。这是协议的真正亮点。Jedusor证明了Pedersen承诺和对零承诺中的盲因子可以作为一次性公钥/私钥对来创建和签名交易。 使用椭圆曲线加密的所有基于地址的协议都以基本相同的方式生成公钥-私钥对。通过将一个非常大的随机数(k_priv)乘以椭圆曲线上的一个点(G),其结果(K_pub)是同一曲线上的另一个有效点。 这是所有地址生成的核心。看起来熟悉吗? 回忆一下上面的承诺: 每个盲因子乘以生成元点G(红色)就是它!r?G是私钥r的公钥!因此,我们可以使用这些盲因子来构建签名以证明我们拥有输入和输出,而不是使用地址。 这种看似微小的变化消除了地址的关联性以及对使用scriptSig过程来检查签名有效性的需求,大大简化了保密交易的结构和大小。当然,这意味着(此时)交易过程需要各方之间的交互来创建签名。 CoinJoin 尽管所有地址和金额现在都隐藏起来了,但仍然有一些信息可以从交易中收集。在上面的交易格式中,仍然可以清楚地看到哪些输出被消耗,交易产生了哪些输出。这个“交易图”可以揭示有关盲因子所有者的信息,并根据所看到的交易活动构建用户画像。 为了进一步隐藏和压缩信息,Mimblewimble实现了来自Greg Maxwell的叫做CoinJoin 的想法,它最初是为比特币开发的。 CoinJoin是一种将多个交易的多个输入和输出组合在一起的无信任方法,将它们连接到一个交易中。这样做是为了掩盖哪个发送者支付给哪个接收者。要在比特币中实现这一点,用户或钱包必须进行交互以加入相同数量的交易,这样你就无法区分两者。 如果能够在不共享私钥的情况下组合签名,那么就可以为许多交易(类似于环签名)创建组合签名,而不需要受到相同数量的约束。 (在这个CoinJoin交易中,3个地址拥有4个输出,无法把地址和输出关联起来) 在Mimblewimble中,对一个或多个交易执行余额计算仍然可以得到有效的对零承诺。我们需要做的是为合并的交易创建一个组合签名。Mimblewimble天生就能够为这些使用Schnorr签名构造的承诺构建组合签名。使用“单向聚合签名”(OWAS),节点可以在创建区块的同时将交易组合为具有聚合签名的单个交易。 使用该方法,Mimblewimble将区块级别的所有交易连接起来,将每个区块作为包含所有消耗的输入和创建的输出的一个大交易来创建。这同时模糊了交易图,并且具有移除区块内消耗的中间交易的能力,减小了区块的总大小和区块链的大小。 切断(Cut-through) 我们可以更进一步。为了验证这个完全“连接”的区块,节点将把所有的输出承诺加在一起,然后减去所有的输入承诺,并验证结果是否是有效的对零承诺。 为什么我们只连接同一个区块内的交易呢?理论上,我们可以组合两个区块,删除在这些块中创建和使用的任何交易,结果还是一个有效的交易,它只包含未消耗的承诺,而没有其他内容。然后我们可以一路回到创世块,将整个区块链缩减到一个未消耗承诺的状态。这被称为切断。 在执行该操作时,我们不需要保留已消耗输出的范围证明,它们已经经过了验证,可以丢弃。这将会导致区块链增长的大幅减少,将增长从O*(交易数量)减少到O(未消耗输出数量)。 为了说明这一点的影响,让我们设想一下,如果Mimblewimble从一开始就在比特币网络中实施,网络位于576000高度,区块链大约为210 GB,总交易量为413675000,总未花费输出量为55400000。 在Mimblewimble中,交易输出约为5 kB(包括范围证明~5 kB和Pedersen承诺~33字节),交易输入约为32字节,交易证明约为105字节(对零承诺和签名),区块头约为250字节(Merkle证明和PoW),非保密交易可以忽略不计。 对于完全同步所有信息的区块链来说,这意味着高达惊人的5.3 TB,其中“只有”279 GB是UTXOs。 当我们执行“切断”时,不希望丢失交易的所有历史记录,因此我们保留所有交易以及UTXO集合和所有区块头的证明。这将区块链减小到322 GB,大小减少了94%。结果基本上是一个完全一致的状态,只有那些拥有完整历史证明的未花费承诺,大大减少了新节点的同步时间。 如果实现了Bulletproofs,范围证明可以从5 kB减小到1 kB,从而将上例中的UTXO集合从279 GB缩减到57 GB。 (基于上面的假设和计算) 在具有明确最终性的PoS区块链中也有一个有趣的含义。一旦获得了最终性,或者在超过它的任意区块链深度上,就不再需要保留范围证明。这些交易已经过验证,并在其之上构建了共识状态,它们占据区块链大小的绝大部分。 在这个例子中,最终性发生在100区块深度上,并且假设UTXO集合的10%处于准最终状态,这将使区块链大小再减少250 GB,使得完全同步只需要73 GB,减少了98.6%(就算和当前状态相比也减少了65%)。想象一下吧。一个73 GB的区块链,用于10年的完全匿名比特币交易,是当前区块链大小的三分之一。 需要注意的是,切断不会影响隐私或者安全性。每个节点可以选择是否存储整个链,而不执行任何切断操作,唯一的成本是增加了磁盘存储需求。切断纯粹是一种可扩展性功能,使得基于Mimblewimble的区块链平均比比特币小三倍,比Monero小十五倍(即使最近实现了Bulletproofs)。 ------ 风险警示:蓝狐笔记所有文章都不构成投资推荐,投资有风险,投资应该考虑个人风险承受能力,建议对项目进行深入考察,慎重做好自己的投资决策。 通往区块链的新世界:关注“蓝狐笔记”公众号:lanhubiji 加入蓝狐笔记的知识星球:https://t.zsxq.com/iaQNnIq 加入蓝狐笔记群微信:pacinoli —- 编译者/作者:蓝狐笔记 玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。 |
椭圆曲线加密技术的优雅应用
2020-05-01 蓝狐笔记 来源:区块链网络
LOADING...
相关阅读:
- 比特币在2020年留下了黄金!2020-05-01
- 5.1行情分析外,人民币不断升值,钱越来越“值钱”,究竟是好事还是2020-05-01
- Samsung Pay已激活Swipe的加密货币Visa卡-2020-05-01
- 星云现在可与分类帐一起使用2020-05-01
- 你的态度很重要!2020-05-01