【译】Privacy on the Blockchain

区块链是一种强大的技术,因为博客的常规读者已经同意了。 它们允许以大大提高可靠性的方式编写和执行大量交互,从而消除与中央实体管理的流程相关的业务和政治风险,并减少对信任的需求。 他们创建了一个平台,来自不同公司甚至不同类型的应用程序可以在这个平台上运行,实现极其高效和无缝的交互,并留下任何人都可以检查的审计跟踪,以确保正确处理所有内容。

但是,当我和其他人与公司谈论在区块链上构建应用程序时,总会出现两个主要问题:可扩展性和隐私。 可伸缩性是一个严重的问题; 目前的区块链,每秒处理3-20个交易,与运行主流支付系统或金融市场所需的处理能力数量相差无几,远远低于分散式论坛或物联网的全球微支付平台。 幸运的是, 解决方案 ,我们正在积极制定实现路线图的路线图。 区块链的另一个主要问题是隐私。 像区块链的其他优点一样诱人,公司或个人都不会特别热衷于将所有信息发布到公共数据库中,可以在不受任何政府,外国政府,家庭成员,同事和商业竞争对手的任何限制的情况下任意阅读。

与可扩展性不同,隐私解决方案在某些情况下更容易实现(尽管在其他情况下要困难得多),其中许多与现有的区块链兼容,但它们也不太令人满意。 创建一种“圣杯”技术要困难得多,这种技术允许用户在区块链上完成他们现在可以做的所有事情,但保护隐私; 相反,在许多情况下,开发人员将被迫与部分解决方案,启发式和机制相抗衡,旨在为特定类别的应用程序带来隐私。

圣杯

首先,让我们从圣洁技术开始,因为它们实际上提供了将任意应用程序转换为完全保护隐私的应用程序的承诺,允许用户从区块链的安全性中受益,使用分散的网络来处理事务,但以这样的方式“加密”数据,即使所有事情都在明显的计算中,信息的潜在“含义” 也是完全混淆的

当然,最有力的技术是加密安全混淆。 一般来说,混淆是一种将任何程序转换为程序的“黑盒子”的方式,这样程序仍然具有相同的“内部逻辑”,并且仍为相同的输入提供相同的输出,但是无法确定有关该计划如何运作的任何其他细节。


可以把它想象成“加密”盒子内部的电线,使加密自身取消并最终对输出没有影响,但确实会让人无法看到里面发生的事情。

不幸的是,绝对完美的黑盒混淆在数学上已知是不可能的 ; 事实证明,除了它在特定输入集上给出的输出之外,至少总有一些东西可以从程序中提取出来。 然而,我们可以满足一个称为不可区分混淆的较弱标准:基本上,给定两个使用该算法进行混淆的等效程序(例如, x = (a + b) * cx = (a * c) + (b * c) ),无法确定两个输出中的哪一个来自哪个原始来源。 要了解它对于我们的应用程序如何仍然足够强大,请考虑以下两个程序:

  1. y = 0
  2. y = sign(privkey, 0) - sign(privkey, 0)

一个只返回零,另一个使用内部包含的私钥对消息进行加密签名,再次执行相同的操作,相互减去(显然相同的)结果并返回结果,保证为零。 即使一个程序只返回零,另一个程序包含并使用加密私钥 ,如果满足不可分辨性,那么我们就知道两个混淆程序无法相互区分,因此拥有混淆程序的人肯定没有提取私钥的方法 - 否则,这将是区分两个程序的一种方式。 那是一个相当强大的混淆 - 大约两年我们已经知道如何做到这一点!

那么,我们如何在区块链中使用它呢? 这是数字令牌的一种简单方法。 我们创建一个混淆的智能合约,其中包含一个私钥,并接受使用相应公钥加密的指令。 合同将存储中的帐户余额加密存储,如果合同想要读取存储,则在内部对其进行解密,如果合同要写入存储,则会在写入之前加密所需的结果。 如果有人想要读取他们帐户的余额,那么他们会将该请求编码为交易,并在他们自己的机器上进行模拟; 混淆的智能合约代码将检查交易上的签名,以查看该用户是否有权阅读余额,如果他们有权阅读余额,则将返回解密余额; 否则代码将返回错误,并且用户无法提取信息。

然而,与这种类型的其他几种技术一样,存在一个问题:进行这种混淆的机制极其低效。 十亿因素开销是常态,通常甚至非常乐观; 最近的一篇论文估计“在同一个CPU上执行[2位乘法]电路需要1.3 * 10 8年”。 此外,如果要防止对存储的读取和写入成为数据泄漏向量,则还必须设置合同,以便读取和写入操作始终修改合同的整个状态的大部分 - 另一个开销来源。 最重要的是,你有数百个节点在区块链上运行代码的开销,不幸的是,很快就能看到这种技术如何不会随时改变。

退一步

但是,有两个技术分支可以使您几乎达到混淆,尽管对安全模型有重要的妥协。 首先是安全的多方计算。 安全的多方计算允许程序(及其状态)在N方之间分配,使得您需要M个(例如,N = 9,M = 5)进行协作以完成计算或透露程序或州内的任何内部数据。 因此,如果您可以信任大多数参与者是诚实的,那么该方案就像混淆一样好。 如果你做不到,那就没用了。

安全的多方计算背后的数学是复杂的,但比混淆简单得多; 如果您对技术细节感兴趣,那么您可以在这里阅读更多内容(以及Enigma的文章,这是一个寻求实际实现秘密共享DAO概念的项目, 在这里 )。 SMPC也比混淆更有效,你可以用它进行实际计算,但即使效率低下也非常大。 可以相当快速地处理加法运算,但每次SMPC实例执行一些非常小的固定数量的乘法运算时,它需要执行“降低程度”步骤,该步骤涉及从每个节点向网络中的每个节点发送消息。 最近的工作将通信开销从二次减少到线性,但即使每次乘法运算都会带来一定的不可避免的网络延迟。

对参与者的信任要求也是一个繁重的要求; 请注意,与许多其他应用程序的情况一样,参与者可以保存数据,然后串通以发现历史中的任何未来点。 此外,不可能说他们已经这样做了,因此不可能激励参与者维护系统的隐私; 出于这个原因,安全的多方计算可以说更适合私有区块链,其中激励可以来自协议之外,而不是公共链。

另一种具有非常强大属性的技术是零知识证明,特别是“ 简洁的知识论证 ”(SNARKs)的最新发展。 零知识证明允许用户构造数学证明,当给定程序在用户已知的某些(可能是隐藏的)输入上执行时,具有特定(公知)输出, 而不泄露任何其他信息 。 有许多特殊类型的零知识证明很容易实现; 例如,您可以将数字签名视为一种零知识证明,表明您知道私钥的值,当使用标准算法处理时,私钥可以转换为特定的公钥。 另一方面,ZK-SNARKs允许您为任何功能做出这样的证明。

首先,我们来看一些具体的例子。 该技术的一个自然用例是身份系统。 例如,假设您想向系统证明您是(i)某个国家的公民,并且(ii)超过19岁。 假设您的政府在技术上是进步的,并签发加密签名的数字护照,其中包括一个人的姓名和出生日期以及私人和公钥。 您将构建一个功能,该功能将护照上的私人密码签名的数字护照和签名作为输入,如果(i)出生日期是1996年之前,则输出1,(ii)护照是与政府签订的公钥,以及(iii)签名是正确的,否则输出0。 然后,您将创建一个零知识证明,表明您有一个输入,当通过此函数时,返回1,并使用您希望用于将来与此服务交互的另一个私钥对证明进行签名。 该服务将验证证明,如果证明是正确的,它将接受使用您的私钥签名的消息作为有效。

您也可以使用相同的方案来验证更复杂的声明,例如“我是这个国家的公民,我的身份证号码不在这套已经使用过的身份证号码”中,或者“我收到了来自一些商人在从他们那里购买至少价值10,000美元的产品后,“或者”我拥有价值至少25万美元的资产“。

该技术的另一类用例是数字令牌所有权。 为了拥有一个功能正常的数字代币系统,您不一定需要拥有可见的帐户和余额; 事实上,你所需要的只是一种解决“双重支出”问题的方法 - 如果你拥有100个单位的资产,你应该能够花费这100个单位一次,而不是两次。 凭借零知识证明,我们当然可以这样做; 您将无知识证明的声明类似于“我知道已创建的这组帐户中的一个帐户背后的密码,并且它与已经显示的任何密码都不匹配” 。 此方案中的帐户变为一次性使用:每次发送资产时都会创建“帐户”,并且完全使用发件人帐户。 如果您不想完全使用给定帐户,则必须创建两个帐户,一个由收件人控制,另一个帐户由发件人自己控制剩余的“更改”。 这基本上是Zcash使用的方案(更多关于它如何在这里工作 )。

对于双方智能合约(例如,想到两方之间协商的金融衍生合约),零知识证明的应用相当容易理解。 当合同首次协商时,而不是创建包含最终将释放资金的实际公式的智能合约(例如,在二元期权中,公式将是“如果某些数据源发布的索引I大于X,将所有内容发送到A,否则将所有内容发送到B“),创建包含公式哈希值的合同。 当合同要结束时,任何一方都可以自己计算A和B应该收到的金额,并提供结果和零知识证据,证明具有正确散列的公式提供了该结果。 区块链找出A和B各自放入多少,以及它们取出多少,但不知道为什么他们放入或取出该数量。

这个模型可以推广到N方智能合约, Hawk项目正在努力做到这一点。

从另一端开始:低技术方法

在尝试增加区块链隐私时要采取的另一条途径是从非常低技术的方法开始,除了简单的哈希,加密和公钥加密之外不使用加密。 这是比特币从2009年开始的路径; 虽然它在实践中提供的隐私水平很难量化和限制,但它仍然显然提供了一些价值。

比特币在某种程度上增加隐私的最简单步骤是使用类似于Zcash的一次性账户来存储资金。 就像使用Zcash一样,每个交易必须完全清空一个或多个帐户,并创建一个或多个新帐户,建议用户为他们打算接收资金的每个新帐户生成一个新的私钥(尽管它是可能有多个具有相同私钥的帐户)。 这带来的主要好处是用户的资金默认情况下没有相互关联:如果您从源A收到50个硬币,从源B收到50个硬币,则其他用户无法告知这些资金属于同一个人。 此外,如果您将13个硬币投入其他人的帐户C,从而创建第四个帐户D,其中您将其中一个帐户中剩余的37个硬币作为“更改”发送,其他用户甚至无法分辨其中的两个输出中的哪一个交易是“付款”,也就是“变更”。

但是,有一个问题。 如果在将来的任何时候,您同时使用两个帐户进行交易,那么您会不可逆转地“链接”这些帐户,这使得他们来自一个用户显而易见。 而且,更重要的是,这些联系是可传递的:如果,在任何时候,你将A和B连接在一起,然后在任何其他点将A和C链接在一起,依此类推,那么你已经通过以下方式创建了大量证据:哪种统计分析可以链接您的整套资产。

比特币开发商迈克赫恩提出了一种缓解策略,可以降低发生这种情况的可能性,即避免合并 :实质上,这是一个非常难以理解的术语,可以最大限度地减少您通过同时支出将帐户链接在一起的次数。 这绝对有帮助,但即便如此,比特币系统内部的隐私已被证明是高度多孔的和启发式的,甚至没有接近高保证。

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

  1. N个聚会通过一些匿名渠道聚集在一起,例如。 Tor的。 它们各自提供目的地地址D[1] ... D[N]
  2. 其中一方创建了一个交易,该交易将一个硬币发送到每个目的地地址。
  3. N方注销然后单独登录到频道,每个投入一个硬币到账户,资金将从中支付。
  4. 如果N币被支付到账户中,它们将被分配到目的地地址,否则它们将被退还。

如果所有参与者都诚实并提供一枚硬币,那么每个人都会放入一枚硬币并输出一枚硬币,但没有人会知道哪个输入映射到哪个输出 。 如果至少有一个参与者没有放入一枚硬币,则该过程将失败,硬币将被退还,并且所有参与者都可以再次尝试。 类似于此的算法由Amir Taaki和Pablo Martin为比特币实施Gavin Wood和Vlad Gluhovsky为以太坊实施

到目前为止,我们只讨论了令牌匿名化。 两党智能合约怎么样? 在这里,我们使用与Hawk相同的机制,除了我们用更简单的加密经济学代替密码学 - 即“可审计计算”技巧。 参与者将他们的资金发送到存储代码散列的合同中。 在发送资金时,任何一方都可以提交结果。 另一方可以发送交易以同意结果,允许发送资金,或者可以将实际代码发布到合同,此时代码将运行并正确分配资金。 保证金可用于激励各方诚实参与。 因此,默认情况下系统是私有的,并且只有在存在争议时才会将任何信息泄露给外界。

这种技术的概括称为状态 通道 ,并且还具有可扩展性优势以及其隐私性的改进。

环签名

对于令牌匿名化和身份应用而言技术上适度复杂但非常有希望的技术是环签名。 环签名本质上是签名,证明签名者具有对应于特定公钥集之一的私钥, 而不揭示哪一个 。 关于这在数学上是如何工作的两句话解释是环签名算法包括一个数学函数,该函数只需公钥即可正常计算,但知道私钥允许你在输入中添加种子以产生输出无论你想要什么具体价值。 签名本身由一个值列表组成,其中每个值都设置为应用于前一个值的函数(加上一些种子); 生成有效签名需要使用私钥的知识来“关闭循环”,强制计算的最后一个值等于第一个。 给定以这种方式产生的有效“环”,任何人都可以验证它确实是“环”,因此每个值等于在先前值加上给定种子计算的函数,但是没有办法告诉哪个环中的“链接”使用了私钥。

还有一个称为可链接环签名的环签名的升级版本,它增加了额外的属性:如果您使用相同的私钥签名两次,则可以检测到该事实 - 但不会显示其他信息。 在令牌匿名化的情况下,应用程序非常简单:当用户想要花钱时,而不是让他们提供常规签名来直接证明他们的公钥的所有权,我们将公钥组合成组,并询问用户只需证明该组的成员资格。 由于可链接性属性,在组中具有一个公钥的用户只能从该组中花费一次; 冲突的签名被拒绝。

戒指签名也可用于投票申请:我们使用它们来验证投票,而不是使用戒指签名来验证一组硬币的支出。 它们也可用于身份识别应用程序:如果您想证明自己属于一组授权用户,而没有透露哪一个,那么环签名就非常适合。 环签名在数学上比简单签名更复杂,但它们实现起来非常实用; 可在此处找到以太坊顶部的环签名示例代码。

秘密共享和加密

有时,区块链应用程序并不试图调解数字资产的转移,记录身份信息或处理智能合约,而是用于更多以数据为中心的应用程序:时间戳,高价值数据存储,存在证据(或不存在的证明 ,如证书撤销的情况)等。一个常见的副词是使用区块链来构建“用户控制自己的数据”的系统。

在这些情况下,再次注意区块链不能解决隐私问题,并且只是真实性解决方案。 因此,将明文医疗记录放入区块链是一个非常糟糕的想法。 但是,它们可以与其他提供隐私的技术相结合,以便为许多行业创建一个完整的解决方案,实现预期目标,区块链是供应商中立的平台,可以存储一些数据以提供真实性保证。

那么这些隐私保护技术是什么? 那么,在简单的数据存储(例如医疗记录)的情况下,我们可以使用最简单和最老的一个:加密! 区块链上散列的文档可以先加密,因此即使数据存储在IPFS之类的东西上,只有拥有自己私钥的用户才能看到文档。 如果用户想要授予其他人以解密形式查看某些特定记录的权利,而不是所有这些记录,则可以使用诸如确定性钱包之类的东西来为每个文档导出不同的密钥。

另一种有用的技术是秘密共享( 这里更详细地描述),允许用户以这样的方式加密一条数据:给定N个用户的M(例如,M = 5,N = 9)可以合作解密数据,但不会少。

隐私的未来

区块链中的隐私保护协议存在两个主要挑战。 其中一个挑战是统计:为了使任何隐私保护方案在计算上实用,该方案必须仅在每次交易时改变区块链状态的一小部分。 然而,即使改变的内容是隐私,也不可避免地存在一些量的元数据 。 因此,统计分析总能找出一些东西 ; 至少,他们将能够捕捉交易发生时的模式,并且在许多情况下,他们将能够缩小身份并找出与谁交互的人。

第二个挑战是开发者体验挑战。 Turing-complete区块链对开发人员非常有用,因为它们对开发人员非常友好,对于分散的底层机制完全无能为力:他们创建了一个分散的“世界计算机”,看起来就像一台集中式计算机,实际上是在说“看,开发人员” ,你可以编写你计划编码的代码,除了底部的这个新图层现在可以为你做一切神奇的分散“。 当然,抽象并不完美:高交易费,高延迟,天然气和大块重组对程序员来说是一个新的挑战,但障碍并不是那么大。

有了隐私,正如我们所见,没有这样的神奇子弹。 虽然对于特定用例存在部分解决方案 ,并且这些部分解决方案通常提供高度灵活性,但它们呈现的抽象与开发人员习惯的抽象有很大不同。 从“10行python脚本中获取一些代码,用于从发送者的余额中减去X币并将X币添加到接收者的余额”到“使用可链接环签名的高度匿名化的数字令牌”,这并非易事。

像Hawk这样的项目在正确的方向上是非常受欢迎的步骤:它们提供了将任意N方协议转换为零知识协议的承诺,该协议仅信任区块链的真实性,以及一个特定的隐私方:基本上,组合两个世界中最好的集中和分散的方法。 我们可以更进一步,并创建一个信任零方以保护隐私的协议吗? 这仍然是一个积极的研究方向,我们只需要等待,看看我们能走多远。

https://blog.ethereum.org/2016/01/15/privacy-on-the-blockchain/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值