主页 > imtoken官方app > 区块链上的隐私

区块链上的隐私

imtoken官方app 2023-04-04 05:36:59

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

808比特币创始人颜万卫 炮制比特币风险大_比特币开源代码公开_比特币账本怎么公开

很多人误解了比特币和区块链,认为比特币解决了隐私问题,其实不然,比特币是一个公开透明的账本。 Vitalik明确梳理了目前区块链隐私的几种解决方案,未来还有很长的路要走。

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

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

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

可扩展性是一个严重的问题。 目前的区块链每秒处理 3-20 笔交易,这与运行主流支付系统或金融市场所需的处理能力相差几个数量级,更不用说去中心化论坛或全球物联网小额支付平台了。 幸运的是,有变通办法,并且正在根据路线图进行积极的工作。

区块链的另一个主要问题是隐私。 与区块链的其他优势一样诱人的是,无论是公司还是个人都不愿意将其所有信息发布到公共数据库中,这些数据库可以不受本国政府、外国政府、家庭成员、同事等的限制访问。商业竞争对手也无所顾忌读书。

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

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

圣杯

首先,让我们从“圣杯”技术开始,因为它们实际上承诺将任意应用程序转变为完全保护隐私的应用程序,让用户受益于区块链的安全性,使用分布式网络处理交易,数据是“加密”,虽然一切都是公开可见的,但信息的潜在“含义”却完全模糊不清。

当然,获得方位的最强大技术是加密安全混淆。 一般来说,混淆是一种将任何程序变成程序等效“黑匣子”的方法,即程序仍然具有相同的“内部逻辑”,对于相同的输入仍然给出相同的输出,但无法确定这一点。程序内部工作的细节。

比特币账本怎么公开_808比特币创始人颜万卫 炮制比特币风险大_比特币开源代码公开

(将其视为“加密”盒子内的电线,这样加密就会自行抵消,对输出没有最终影响,但它确实让你完全不可能看到里面发生了什么。)

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

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

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

y=0y=sign(privkey, 0) -sign(privkey, 0)

一个只返回零,另一个使用包含在其中的私钥对消息进行加密签名,下一次它做同样的事情,从彼此中减去(显然相同的)结果,并返回保证为零的结果。

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

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

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

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

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

比特币开源代码公开_比特币账本怎么公开_808比特币创始人颜万卫 炮制比特币风险大

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

另外,为了防止读写存储成为数据泄露的载体,还必须设置合约,让读写操作总是修改合约整个状态的很大一部分,这也是一个很大的开销。

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

退后一步

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

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

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

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

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

因此,安全的多方计算可能更适合私有区块链而不是公共链,后者的激励可能来自协议外部。

另一种具有强大属性的技术是零知识证明,尤其是最近发展起来的 SNARKs。 零知识证明允许用户构建一个数学证明,当一个给定的程序在用户已知的一些(可能隐藏的)输入上执行时,它有一个特定的(公开的)输出,同时没有透露其他信息。

有许多专门类型的零知识证明非常容易实现; 例如,您可以将数字签名视为一种零知识证明。 您知道私钥的值,在使用标准算法处理时可以将其转换为特定的公钥。 ZK-SNARKs 允许你为任何函数做这样的证明。

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

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

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

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

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

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

该方案中的账户变为一次性使用:每次发送资产时都会创建一个“账户”,并且发送者账户被完全消耗。

如果你不想完全消耗一个给定的账户,那么你必须创建两个账户,一个由接收者控制,一个由发送者自己控制,用于剩下的“零钱”。 这实际上是 ZCash 的解决方案。

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

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

808比特币创始人颜万卫 炮制比特币风险大_比特币开源代码公开_比特币账本怎么公开

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

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

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

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

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

另外,如果你向别人的账户 C 发送了 13 个币,从而创建了第四个账户 D,而你从其中一个账户发送了剩余的 37 个币作为“剩余资金”,其他用户甚至无法分辨transaction 两个输出哪个是“支付”,哪个是“剩余资金”。

比特币账本怎么公开_808比特币创始人颜万卫 炮制比特币风险大_比特币开源代码公开

但是,有一个问题。 如果在未来的任何时候,你同时从两个账户进行交易,你将不可撤销地“链接”这些账户,让每个人都很容易发现他们属于同一个用户。

而且,这些联系是传递性的:如果在任何时候,你把 A 和 B 联系在一起,然后在任何其他时间把 A 和 C 联系起来,你就创建了一个庞大的证据体,统计分析可以把你所有的资产都联系起来。

比特币账本怎么公开_808比特币创始人颜万卫 炮制比特币风险大_比特币开源代码公开

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

这绝对有帮助,但即便如此,比特币系统内的隐私已被证明是高度多孔和启发式的,离高质量的隐私保证有点远。

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

N 方聚集在某个匿名频道上,例如 Tor。 它们各自提供目的地地址 D[1]...D[N]。 一方创建一个交易,向每个目标地址发送 1 个硬币。 N方退出,然后分别登录频道,每人贡献1coin到消费账户。 如果账户存入N个币,则分配到目的地址,否则退还。

比特币开源代码公开_比特币账本怎么公开_808比特币创始人颜万卫 炮制比特币风险大

如果所有参与者都诚实地提供 1 个硬币,那么每个人都会投入 1 个硬币并获得 1 个硬币,但没有人会知道哪些输入映射到哪个输出。 如果至少有一个参与者没有投入1个硬币,则该过程失败,将退还1个硬币,所有参与者都可以重试。

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

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

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

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

808比特币创始人颜万卫 炮制比特币风险大_比特币开源代码公开_比特币账本怎么公开

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

环签名

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

这个数学的简单解释是,环签名算法包括一个可以从公钥正常计算的数学函数,但是知道私钥比特币账本怎么公开,你可以在输入中添加一个种子来生成一个输出,输出各种你想要的值想。

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

如果这样生成了一个有效的“环”,那么任何人都可以验证它确实是一个“环”,这样每个值都等于一个由之前的值加上一个给定的种子计算出来的函数,但是没有办法分辨哪个环的“链接”使用私钥。

比特币开源代码公开_808比特币创始人颜万卫 炮制比特币风险大_比特币账本怎么公开

环签名还有一个升级版,称为可链接环签名。 它增加了一个额外的属性:如果你用同一个私钥签名两次,这个事实可以被检测到——但不会透露其他信息。

在token匿名的情况下,应用很简单:当用户要花钱的时候,不是让他们提供一个正规的签名来直接证明他的公钥的所有权,而是把公钥组合成一个集合,然后用户只是组成员的证明。

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

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

环签名也可以用于识别程序:如果你想证明你属于一组授权用户而不透露是哪些用户,环签名非常适合这种情况。 环签名比简单签名在数学上涉及更多,但它们实现起来非常实用。

秘密共享和加密

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

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

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

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

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

另一个有用的技术是秘密共享,它允许用户在给定数量的 N 个用户(例如,M = 5,N = 9)中的 M 个合作下解密数据。

隐私的未来

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

其中一个挑战是统计上的:对于任何在计算上可行的隐私保护方案,该方案必须在每次交易中只改变区块链状态的一小部分。 但是,即使更改的内容是私有的,也难免会有一些元数据。

所以统计分析总能剖析出其中的联系; 至少,他们将能够捕捉交易发生时间的模式,并且在许多情况下,他们将能够缩小身份范围并弄清楚谁在与谁互动。

第二个挑战是开发者体验挑战。 图灵完备的区块链对开发者来说效果很好,而且对于完全不了解去中心化底层机制的开发者来说非常友好:他们创建了一个分布式的“世界计算机”,他们看到它就像一个中心化的计算机。

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

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

就隐私而言,正如我们所见,没有灵丹妙药。 尽管针对特定用例存在部分解决方案,而且这些部分解决方案通常提供高度的灵活性,但它们提供的抽象与开发人员习惯的非常不同。

从“从发送方余额中删除 Xcoin 并将 Xcoin 添加到接收方余额中的 10 行 python 脚本”到“使用可链接环签名的高度匿名数字令牌”,事情并没有那么简单。

像 Hawk 这样的项目是向前迈出的非常受欢迎的一步:它们承诺将任何 N 方协议转变为零知识协议,只信任区块链的真实性和隐私特定方:本质上,集中化和两种权力下放方式中最好的。

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