后量子时代,我们如何保护隐私

  • zkdragon
  • 发布于 6小时前
  • 阅读 40

本文讨论了在后量子时代保护区块链隐私的问题,特别是针对“收获后解密”攻击。文章提出了一种通过哈希ID服务、私有信息检索(PIR)和支付链接相结合的解决方案,以解决量子计算对隐私支付地址长度的影响,旨在在不牺牲可用性的前提下,保持Zcash的核心隐私保障。

我们需要使区块链具有后量子隐私。但没有人谈论这会造成的地址长度灾难。最迫切需要解决的量子威胁是量子隐私泄露,这是由于“现在收集,以后解密”的攻击造成的。对于 Zcash 来说,唯一的 PQ 隐私泄露 发生在你的屏蔽地址被泄露时,因为它的使用椭圆曲线公钥加密。“太棒了,让我们直接改为 PQ 加密。”

今天的支付需要发送你的地址。但是 PQ 加密密钥非常大,你不能将它发送给朋友:

Image

为什么这是一个问题?对于私有支付,发送者必须向接收者发送一些加密数据。这使用了公钥加密,而公钥加密又要求发送者知道接收者的公钥。今天,这些公钥很小(约 43 字节),因此地址仅包含完整的公钥。在 ML-KEM(最先进的 PQ 加密)中,公钥在编码前为 800 字节。转换为可打印字符后,至少为 1 千字节。这不是一个地址......

对于透明支付,我们没有这个问题,地址只需要提交一个用于签名的公钥。当你花钱时,你会检查这个承诺。这个承诺只需要是多重原像抗性。(因此,比特币和以太坊使用 20 字节的地址)因此,即使 PQ 公钥对于签名来说非常大,地址长度也不会受到影响(因此也不会影响用户体验)。

地址长度的增加是 PQ 隐私特有的问题。由于发送者必须知道接收者(大得多)的公钥,我们该如何解决这个问题?

其他项目是怎么做的?

你可能已经听说过一些应用程序已经是后量子安全的,例如 Signal 或 SSH。它们进行公钥加密,并且是后量子安全的,那么它们是如何做到的呢?在消息应用程序(如 Signal)中,它们有一个基于用户名或电话号码的命名服务。当你输入联系人的用户名时,你的手机会查询 Signal 的后端以获取他们的(大的)量子密钥交换公钥。

在我们的区块链上下文中,这将是创建一个命名服务(类似于 ENS)。你给别人你的名字。当发送者将名字放入目标字段时,钱包会查询链以找到你的地址。

这带来了 3 个隐私问题:

  1. 你选择的名字会泄露关于你的数据

  2. 你的名字存在手续费市场问题,这会泄露你愿意支付的数据。

  3. 每次你支付给别人时,你都会向 RPC 泄露你正在支付给谁。

这些都是不可接受的;

Image

Signal 和所有消息应用程序都接受这些问题。(如果 TEE 被攻破,它们的服务器将知道你所有的交易对手)这是我们将如何解决所有这些问题的方法。

(1), (2) 名字选择和手续费市场

这很简单,我们不构建命名服务,而是构建 ID 服务。我们将 ID 设置为你公钥的哈希值。我们使哈希具有抗碰撞性,因此长度为 32 字节。因此,不存在碰撞的风险,也不会损失身份。

这样做的成本很低,因此我们可以将其设置为固定的成本,以便添加到 ID 服务中。(例如,在交易费用之上的一小笔额外费用)

以下是一个支付请求的样子(Solana 风格的 base58 编码),它比今天的 Zcash 更小!

Image

(3) 私有获取 ID

当我支付给 Alice 时,我必须从她的 ID 私下获取她的公钥。

为了解决这个问题,我们使用了密码学技术“私有信息检索”。PIR 允许客户端询问服务器“给我数据库中给定键的值,而不让你知道我查询了什么。”因此,我们使用 PIR 让客户端私下检索 ID 的公钥。

PIR 已经存在很长时间了,瓶颈在于它对服务器来说成本很高。在 2022 年末的一项突破性工作中,simplePIR 展示了如何简单地实现这一点。瓶颈在于,几乎根据定义,为了使 PIR 工作,服务器必须对数据库的每个元素进行一些加密。SimplePIR 展示了使用 LWE 的巧妙技巧,使每个 DB 元素的一个 u32 乘法和加法,并将其组织成矩阵乘法。(更多细节 https://x.com/zkDragon/status/1875440941093314924)这个矩阵乘法在 CPU 上已经很快了,并且就像我们所有的 LLM 一样,可以完美地在 GPU 上运行 😄。simplePIR 的约束在随后的工作中得到了进一步的优化。

我们需要一种新型的索引服务节点,即“PIR 索引器”。每当有人第一次收到资金时,他们按照惯例将他们的“通信密钥”ID 注册到区块链上,然后由 PIR 索引器接收。(将它们视为 RPC)

引导新用户

剩下的一个问题是如何处理新用户的引导,在他们拥有任何资金之前。他们尚未将其 ID 注册到 ID 服务提供商。

如果你通过转入自己的资金或付款人扫描二维码的方式进行引导,我们无需担心。

但是,通过聊天支付给一个全新的用户的地址的用户流程与我们试图避免的 NGMI 流程相同:

Image

因此,我们只是使用支付链接,这已经是加密原生和 web2 支付都已转向的方式。发送者向接收者发送一条消息,例如:

Image

用户点击链接,系统会提示他们安装 Zashi。该链接包含一个私钥,该私钥不会传递给网站,但会在安装后发送到应用程序。(井号之后的所有内容都是 URL 片段,可在 JS 中使用,但不会发送到服务器。)

然后,在用户将资金存入他们的钱包后,他们的钱包会在链上建立他们的 ID。

牺牲多样化的地址

这将删除当今 Zcash 支付的一个属性——多样化的地址。每次我将我的地址发送给某人时,我都会随机选择一个地址。因此,如果我给 Alice 和 Bob 不同的地址,并且他们都支付给我,他们就无法通过加密证明他们都支付给我了。

这是一个完全可以牺牲的属性。原因如下:

  • 如果我在意,我只需让我的钱包软件维护两个钱包。多样化的地址使我在我的终端上管理起来稍微便宜一些。这没关系。

  • 你的钱包软件可以维护相同的签名密钥/无效密钥(因此支持 keystone/ledger)。这仅改变了“传输密钥”,并且每个传输密钥都需要一个链上支付来启动它。

  • Alice 和 Bob 发现他们都支付给我了,假设他们可以互相交谈,在大多数实际情况下不需要加密的证据。(“嘿,我付了这个叫 Dev 的人”,“嘿,我也是”)

结论

用于后量子隐私的密码学已经存在。这从来都不是问题。你必须重新思考地址的用户体验,并意识到现有的解决方案(例如 Signal 的)不够私密。

真正的约束是具有匿名性的地址能力。私有支付要求发送者知道接收者的加密密钥,并且后量子密钥本质上很大。如果你将这些密钥视为“地址”,则会直接导致无法接受的用户体验。

解决方案是更新身份、地址和密钥传输:

  • 基于哈希的 ID 服务,具有固定成本,不会泄露关于身份或支付意愿的任何信息

  • 私有信息检索,以便接收者可以传递一个短 ID,并保持隐私

  • 用于新用户引导的支付链接,与加密和 Web2 支付都已经融合的方向保持一致

结果是什么?后量子私有支付,它将保留 Zcash 的核心保证,而不会牺牲可用性。地址保持简短。支付保持简单。即使在 PQ 世界中,隐私也保持完整。作为奖励,我们现在可以放心地将更多内容打包到地址中。更多关于我们很快想这样做原因的信息 :^)

这就是我们如何实现后量子隐私的方法。而不是仅仅孤立地修补密码学。

感谢 @arjunkhemani , @ebfull , @J33UNIT 提供的有益编辑!

  • 原文链接: x.com/zkdragon/status/20...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
zkdragon
zkdragon
江湖只有他的大名,没有他的介绍。