首页 / 其他 / 区块链上的隐私

区块链上的隐私

标题:区块链上的隐私

区块链中的隐私保护协议主要面临两大挑战:一是统计方面的挑战,二是开发者体验方面的挑战。

很多人对比特币和区块链存在误解,认为比特币解决了隐私问题,但事实上并非如此。比特币是一个公开透明的账本。 Buterin明确梳理了当前区块链隐私的几种解决方案,未来还有很长的路要走。

许多人都认为区块链是一项强大的技术。它们允许对大量交互进行编码和实施,从而提高可靠性,消除与中央实体管理的流程相关的商业和政治风险,并减少对信任的需求。

他们创建了一个平台,来自不同公司甚至不同类型的应用程序可以一起运行,从而实现极其高效和无缝的交互,并留下任何人都可以检查的审计跟踪,以确保一切都得到正确处理。

然而,当我与其他公司谈论如何在区块链上构建应用程序时,总是会出现两个主要问题:可扩展性和隐私性。

可扩展性是一个严重的问题。当前的区块链每秒处理3-20 笔交易,这与运行主流支付系统或金融市场所需的处理能力相差几个数量级,更不用说去中心化论坛或物联网的全球小额支付平台了。幸运的是,目前正在积极制定解决方案和路线图计划。

区块链的另一个主要问题是隐私。虽然区块链的其他优势很诱人,但无论是公司还是个人都不愿意将所有信息发布到公共数据库中,让自己的政府、外国政府、家庭成员、同事等不受限制地使用,商业竞争对手也可以随意使用。读。

与可扩展性不同,隐私解决方案在某些情况下更容易实现(尽管在其他情况下要困难得多),并且其中许多解决方案与当前现有的区块链兼容,但它们也不太理想。

创建一种“圣杯”技术要困难得多,该技术允许用户在区块链上做他们现在能做的一切,同时又拥有隐私;相反,开发人员在许多情况下将不得不处理部分解决方案、启发式方法以及旨在为特定应用程序带来隐私的机制。

圣杯

首先,让我们从“圣杯”技术开始,因为它们实际上提供了将任意应用程序转变为完全保护隐私的应用程序的承诺,允许用户从区块链的安全性中受益,使用去中心化网络处理交易,数据“加密”,虽然所有内容都是公开可见的,但信息的潜在“含义”完全被混淆了。

当然,获取方位的最强大技术是加密安全混淆。一般来说,混淆是一种将任何程序转换为程序等效的“黑匣子”的方法,即程序仍然具有相同的“内部逻辑”,并且仍然为相同的输入提供相同的输出,但无法确定这一点程序内部运作的详细信息。

(可以将其视为“加密”盒子内的电线,以便加密自行取消并最终对输出没有影响,但它确实使您完全不可能看到里面发生了什么。)

不幸的是,绝对完美的黑盒混淆在数学上是不可能的。事实证明,通过提供输出和一组特定的输入,总是可以从程序中提取一些线索。

然而,我们能满足的是一个较低的标准:不可区分性的混乱。本质上,给定使用该算法混淆的两个等效程序(例如X=(a+b)*c 和X=(a*c)+(b*c)),无法确定哪个输出来自哪个原始输出来源。

要了解这对于我们的应用程序来说是否仍然足够强大,请考虑以下两个程序:

y=0 y=sign(privkey,0) -sign(privkey,0) 一个只返回零,另一个使用内部包含的私钥对消息进行加密签名,下一次做同样的事情,互相减去(显然相同) 结果,并返回结果,保证为零。

即使一个程序仅返回零,而另一个程序返回包含并使用加密私钥的程序,如果能够满足不可区分性,那么这两个混淆后的程序将无法区分。

所以使用混淆程序的人肯定无法提取私钥,否则,这将是区分这两个程序的一种方法。这是一个相当强大的混淆——我们已经知道如何做到这一点大约两年了!

那么,我们如何在区块链上使用它呢?这是数字代币的一种简单方法。我们创建一个模糊的智能合约,其中包含私钥并接受使用相应公钥加密的指令。

合约以加密方式存储账户余额,如果合约想要读取存储,它会在内部解密,如果合约想要写入存储,则所需的结果在写入之前会被加密。

如果有人想要读取帐户的余额,那么他们会将请求编码为交易并在自己的机器上进行模拟;混淆后的智能合约代码会检查交易的签名,看看该用户是否有读取余额的权限,如果有权限读取余额,则返回解密后的余额;否则,代码将返回错误,用户将无法提取信息。

然而,与其他几种此类技术一样,存在一个问题:这种混淆机制效率极低。 10 亿美元的管理费用是正常的,甚至还不够;最近的一篇论文估计“在同一个CPU 上执行[2 位乘法] 电路将需要1.3 * 108 年的时间”。

另外,如果想要防止读写存储成为数据泄露向量,还必须对合约进行设置,让读写操作总是修改合约整个状态的很大一部分,这也是一个很大的问题。开销。

最重要的是,当您在区块链上运行代码时,有数百个节点运行代码,您可以快速了解该技术是如何工作的。不幸的是,这项技术不会很快改变任何事情。

退一步说

然而,尽管安全模型存在重大妥协,但有两个技术分支可以让您实现近乎混淆的效果。首先是安全多方计算。安全的多方计算允许程序(及其状态)被分成N 方,这样你就需要其中M(例如,N=9,M=5)合作才能完成计算,或者显示表示程序或状态中的任何内部数据。

因此,如果你可以相信大多数参与者都是诚实的,那么这个计划就和混淆一样好。如果做不到,那就毫无价值。

安全多方计算背后的数学很复杂,但比混淆简单得多。 SMPC 也比混淆更有效,混淆是你实际上可以用来进行计算的东西,但它仍然非常低效。加法运算可以相当快地处理,但每次SMPC 实例执行一些非常小的、固定数量的乘法运算时,它需要执行一个“缩减”步骤,该步骤涉及从每个节点向网络中的每个节点发送消息。

最近的工作已将通信开销从二次减少到线性,但即使每个乘法运算也会引入一些不可避免的网络延迟。

对于参与者来说,需要信任也是一项艰巨的任务;请注意,与许多其他应用程序一样,参与者可以保存数据,然后在未来的任何时候进行串通。此外,不可能知道他们做了这件事,因此无法激励参与者维护系统的隐私。

因此,安全多方计算可能比公链更适合私有链,在这种情况下,激励可能来自协议外部。

另一种具有强大特性的技术是零知识证明,特别是最近开发的SNARK。零知识证明允许用户构造一个数学证明,当对用户已知的某些(可能是隐藏的)输入执行时,会产生特定的(公共)输出,同时不泄露任何其他信息。

有许多专门类型的零知识证明相当容易实现;例如,您可以将数字签名视为一种零知识证明。您知道私钥的值,并且当使用标准算法处理时,私钥可以转换为特定的公钥。 ZK-SNARK 允许您为任何函数进行此类证明。

首先我们通过一些案例来说明。这项技术的一个自然用例是身份系统。例如,假设您想向系统证明您是(i) 某个国家的公民,并且(ii) 年满19 岁。

假设您的政府技术先进,并颁发加密签名的数字护照,其中包括个人姓名和出生日期以及私钥和公钥。您需要构建一个函数,将使用护照中的私钥签名的数字护照和签名作为输入,如果(i) 出生日期在1996 年之前,(ii) 护照是使用政府公钥签名的,并且(iii) 签名正确,否则输出0。

然后,您将制作一个零知识证明,证明您有一个输入,当该输入通过此函数时,返回1,并使用您希望用于将来与此服务交互的另一个私钥对该证明进行签名。该服务将验证证明,如果证明正确,它将接受由您的私钥签名的消息有效。

您还可以使用相同的方案来验证更复杂的声明,例如“我是这个国家的公民并且我的身份证号码不在这组已经使用过的身份证号码中”,或者“我正在从他们那里购买”我在购买了价值至少10,000 美元的产品后得到了一些商家的好评”,或者“我持有价值至少250,000 美元的资产”。

该技术的另一个应用是数字代币所有权。为了构建有效的数字代币系统,您并不严格需要拥有可见的账户和余额;事实上,你所需要的只是一种解决“双重支出”问题的方法——如果你有100 单位的资产,你应该能够花费这100 单位,但不能两次。

有了零知识证明,我们当然可以做到这一点;声称你将拥有零知识证明就像“我知道这组账户中的一个账户背后有一个秘密数字,并且它与任何已披露的秘密数字都不匹配”。

在这种情况下,帐户将成为一次性使用:每次发送资产时都会创建一个“帐户”,并且发送者帐户将被完全消耗。

如果您不想完全耗尽给定帐户,那么您必须创建两个帐户,一个由收件人控制,另一个由发件人本人控制,发件人自己控制其余的“更改”。这实际上是ZCash的计划。

对于涉及两方的智能合约(例如,像两方之间协商的金融衍生品合约),零知识证明的应用相当容易理解。当合约第一次协商时,不要创建一个包含最终释放资金的实际公式的智能合约(例如,在二元期权中,公式是“如果某个数据源释放大于X 的索引I,则发送全部发送到A,否则全部发送到B”),而是创建包含公式的哈希。

当合约终止时,任何一方都可以自行计算A 和B 应收到的金额,并提供结果以及零知识证明,即提供该结果的正确哈希值的公式。区块链可以查出A和B各自投资了多少以及他们收到了多少,但它不知道他们为什么投资或收到这笔金额。

这种模型可以应用于N方智能合约,而Hawk项目正是在尝试这样做。

从另一面开始:低技术含量的方法

当试图增加区块链上的隐私时,另一种途径是从技术含量非常低的方法开始,除了简单的散列、加密和公钥加密之外,不使用任何密码。这就是比特币自2009 年以来所走的道路;尽管它在实践中提供的隐私级别很难量化和限制,但它仍然显然提供了一些价值。

比特币增强隐私的最简单步骤是它使用一次性账户(类似于zcash)来存储资金。就像zcash 一样,每笔交易都必须清除一个或多个帐户并创建一个或多个新帐户,并且建议用户为他们打算从中接收资金的每个新帐户生成一个新的私钥(尽管可以拥有多个帐户)相同的私钥)。

这样做的主要好处是,默认情况下,用户资金不会相互关联:如果您从来源A 收到50 个币,从来源B 收到50 个币,其他用户无法知道这些资金属于同一个人。

此外,如果您将13 个币发送到其他人的账户C,从而创建了第四个账户D,则您从其中一个账户发送剩余的37 个币作为“剩余资金”,其他用户甚至无法分辨该交易是两个账户中的哪一个输出是“付款”,输出是“剩余资金”。

然而,有一个问题。如果将来的任何时候您同时从两个账户进行交易,您将不可撤销地“链接”这些账户,使每个人都很容易发现它们属于同一用户。

而且,这些连接是传递性的:如果在任何时候你将A 和B 连接在一起,然后在任何其他时间你将A 和C 连接起来,那么你就创建了一系列证据,证明统计分析可以将所有资产链接起来。

比特币开发者迈克·赫恩(Mike Hearn)提出了一种缓解策略,可以降低这种情况发生的可能性,称为“避免合并”:本质上是通过同时支出来最大程度地减少账户连接在一起的次数。

这肯定有帮助,但即便如此,比特币系统内的隐私已被证明是高度漏洞和启发式的,离高质量的隐私保证还很远。

更先进的技术称为CoinJoin。基本上,CoinJoin 协议的工作原理如下:

N方聚集在一些匿名渠道上,例如Tor。它们各自提供目标地址D [1] … D [N]。一方创建一笔交易,向每个目标地址发送1 个币。 N方退出,然后分别登录频道,各向支出账户贡献1coin。如果N个币存入账户,则分配到目标地址,否则返回。如果所有参与者诚实地贡献1 个币,那么每个人都会投入1 个币并得到1 个币,但没有人知道哪个输入映射到哪个输出。如果至少有一名参与者未投入1 个币,则该过程将失败,将退回1 个币,所有参与者可以重试。

Amir Taaki 和Pablo Martin 为比特币实现了类似的算法,Gavin Wood 和Vlad Gluhovsky 为以太坊实现了类似的算法。

到目前为止,我们只讨论了代币匿名化的问题。两方智能合约怎么样?在这里,我们使用与Hawk 相同的机制,但我们用更简单的密码经济学代替密码学——即“可审计计算”技巧。

参与者将资金发送到存储代码哈希的合约。在发送资金时,任何一方都可以提交结果。另一方可以发送交易来同意结果,允许资金被发送出去,或者可以将实际代码发布到合约中,此时代码将正确运行并分发。

保证金可用于激励各方诚实参与。因此,该系统是私密的,任何信息只有在出现争议时才可以泄露给外界。

这种技术抽象称为状态通道,在隐私保护方面也是可扩展的。

环签名

环签名是技术上复杂但对于令牌匿名和识别应用非常有前途的一种技术。环签名本质上是一种签名,证明签名者拥有与特定公钥之一对应的私钥,但不透露是哪一个。

这个数学的一个简单解释是,环签名算法由一个数学函数组成,可以使用公钥正常计算,但是知道私钥,您可以在输入中添加种子以生成各种使用任何值的输出你想要的。

签名本身包含一个值列表,其中每个值都设置为应用于前一个值(加上一些种子)的函数;生成有效签名需要使用私钥知识来“关闭循环”,迫使您计算最终的One 值是否等于第一个值。

如果以这种方式生成一个有效的“环”,任何人都可以验证它确实是一个“环”,因此每个值都等于根据前一个值加上给定种子计算出的函数,但无法分辨哪个环就是在“链接”中使用了私钥。

还有环签名的升级版本,称为可链接环签名。它添加了一个额外的属性:如果您使用相同的私钥签名两次,则可以检测到这一事实- 但不会显示其他信息。

在令牌匿名的情况下,应用程序非常简单:当用户想要花钱时,我们不是让他们提供常规签名来直接证明其公钥的所有权,而是将公钥合并到一个组中,然后用户只需证明该组的成员身份即可。

由于可链接性属性,在一个组中拥有公钥的用户只能在该组中使用一次;冲突的签名将被拒绝。

环签名也可以用于投票应用程序:我们不使用环签名来验证一组代币的支出,而是使用它们来验证投票。

环签名还可以用于身份识别程序:如果您想证明自己属于一组授权用户而不透露是哪一个,那么环签名非常适合这种情况。环签名比简单签名涉及更多数学知识,但实现起来非常实用。

秘密共享和加密

有时,区块链应用不仅仅解决数字资产的传输,或者只是记录身份信息或处理智能合约,而是将其用于更多以数据为中心的应用:时间戳、高价值数据存储、存在证明(或者在这种情况下)证书撤销、证明证据不存在等)。一个常见的副作用是使用区块链构建用户控制自己数据的系统的想法。

在这些情况下,需要再次注意的是,区块链并不是隐私问题的解决方案,它只是真实性的解决方案。因此,将医疗记录以明文形式放在区块链上是一个非常糟糕的主意。

然而,它们可以与其他提供隐私的技术结合使用,为许多行业创建完整的解决方案,以实现预期目标。区块链是一个供应商中立的平台,可以存储一些数据以提供真实性保证。

那么什么是隐私保护技术呢?对于简单的数据存储(比如病历),我们可以使用最简单、最古老的一种:加密!在区块链上散列的文档可以首先被加密,因此即使数据存储在IPFS之类的东西上,也只有拥有私钥的用户才能查看该文档。

如果用户想要授予其他人查看解密形式的某些特定记录(但不是全部)的权利,他们可以使用确定性钱包之类的东西为每个文档派生不同的密钥。

另一种有用的技术是秘密共享,它允许用户解密数据,以便M 个给定的N 个用户(例如,M=5,N=9)可以协作。

隐私的未来

区块链中的隐私保护协议面临两大挑战:

挑战之一是统计方面的:为了使任何隐私保护方案在计算上可行,该方案必须在每次交易时仅更改区块链状态的一小部分。然而,即使改变的内容是隐私,也不可避免地存在一些元数据。

因此,统计分析总是能够梳理出联系;至少,他们将能够捕获交易发生时间的模式,并且在许多情况下,他们将能够缩小身份范围并找出谁与谁进行了互动。

第二个挑战是开发者体验挑战。图灵完备的区块链对于完全不了解去中心化底层机制的开发人员来说非常有用:他们创建了一个分布式“世界计算机”,他们认为它看起来像一台中心化计算机。

实际上,“看,开发人员,你可以编写任何你想要的代码,它只是该层之上的一个新层,允许在上面开发各种去中心化应用程序。”

当然,抽象并不完美:交易费用高、延迟高、gas 和区块重组对程序员来说都是新鲜事,但障碍并不大。

正如我们所见,当谈到隐私时,没有灵丹妙药。虽然针对特定用例有部分解决方案,并且通常这些部分解决方案提供了高度的灵活性,但它们提供的抽象与开发人员习惯的抽象非常不同。

从“一个10 行Python 脚本,从发送者的余额中删除Xcoin 并将Xcoin 添加到接收者的余额中”到“使用可链接的环签名高度匿名化数字代币”并不是那么简单。

像Hawk 这样的项目迈出了非常受欢迎的一步:它们承诺将任何N 方协议转换为零知识协议,只信任区块链的真实性,以及特定于隐私的一方:本质上,将集中化和最佳的结合起来。权力下放的两个世界。

我们能否更进一步,创建一个不需要信任任何一方的隐私协议?这仍然只是一个活跃的研究方向,我们只需要等待,看看我们能走多远。

风险提示:蓝狐所有文章不构成投资建议。投资有风险。建议对项目进行深入考察,谨慎做出自己的投资决策。

原作者:Vitalik Buterin

原文地址:blog.ethereum.org

译者:由Blue Fox Notes 社区的“Carlo”等人翻译

本文由@Blue Fox Notes 社区“Carlo”等人翻译发布在人人都是产品经理上。未经许可禁止转载。

题图来自Unsplash,基于CC0协议

上一篇
下一篇

为您推荐

手机访问
手机扫一扫打开网站

手机扫一扫打开网站

返回顶部