利用现有的 PKI 进行去信任和隐私保护的身份验证方案

本文为机器翻译
展示原文

感谢AndyJay在这个项目中提供的所有帮助

匿名的 Adhaar

adhaar 计划是世界上最大的数字身份计划之一。它拥有 12 亿注册人口,约占印度人口的 90%。

Adhaar 卡携带人口统计和生物识别数据,包括持有人的出生日期和指纹。它们用于各种情况,例如贷款协议或住房申请。

我们介绍如何利用零知识来验证 adhaar 卡的有效性。这一成果具有多种潜在应用。利用现有的公钥基础设施,我们可以廉价地提供可靠的身份证明。此外,我们验证的零知识属性提供了一种进行身份验证的隐私保护方式。使用groth16证明方案可以将有效的 adhaar 卡证明持有人数据移植到链上。

我们开发了一个示例 webapp ,它允许任何 adhaar 持卡人生成有效 adhaar 卡的证明。我们今天将其开源,供任何人使用、分叉或在其之上构建。如果您有兴趣使用我们构建的内容开发应用程序或为其他身份方案实施类似设置,请随时与我们联系。

零知识设置

为了验证 adhaar 卡的有效性,电路设置非常简单。我们希望检查用户提供的签名是否对应于一张有效的 adhaar 卡。我们对有效性的定义将要求提供的消息对应于输入签名和公钥。我们考虑检查公钥是否对应于作为“业务逻辑”的特定实体。因此,我们会将此类检查留给证明验证实体——例如 KYC 提供商后端或智能合约。

我们的电路将执行两项检查:

  1. RSA 签名正确。我们将签名提高到公共指数幂,对公钥取模并获得提供的文档哈希。
  2. SHA1 填充是正确的。当提供的消息被提升到公共指数幂,模数公钥时,我们检查是否遵循了 RFC 8017 的第 9.2 节。

我们的电路由四个输入组成:

 signal input sign [nb] ; // Signature; private signal input hashed [hashLen] ; // Adhaar card's hash; private signal public input exp [nb] ; // RSA public exponent signal public input modulus [nb] ; // RSA modulus

首先,我们检查提供的 RSA 签名在提升到公共指数时是否与输入哈希相对应。我们重新使用了在此处找到的实现。然后,我们确保解密的消息填充(即填充的哈希)是正确的。 Adobe 的 pdf 签名过程遵循EMSA-PKCS1-v1_5规则,详见本 RFC 。 Adhaar 卡在签名前使用 SHA1 作为散列函数。因此,我们不得不调整最初为 SHA256 编写的参考电路,以验证填充的正确性。我们提供了电路的修改版本。

尽管它可能会引入限制,但我们希望将签名和文档的哈希值保密。我们只透露任何公共验证程序所需的内容:公共指数和公共密钥。在验证有效 Adhaar 卡证明的情况下,这将使链上合约能够要求使用印度政府发出的密钥执行签名。

应用

可验证但匿名的身份方案使有趣的结构成为可能。

首先,它可以提供一个有趣的途径来重新思考需要大量数据的 KYC 程序。尽管我们意识到仅凭有效的 adhaar 卡证明不足以构成敏感应用程序的足够信息,但它仍然可以作为更完整的 KYC 隐私尊重流程的组成部分。

另一个有趣的含义是关于可验证的演讲。在过去的几个月里,不同的协议和应用程序,如SemaphoreHeyAnoun提出了零知识证明方案的能力,以证明属于具有可验证属性的组,同时不会泄露任何用户敏感信息。在这种情况下,证明 Adhaar 卡的有效性可以作为可验证但匿名投票系统的一个要素。这方面的一个具体例子可能是印度公共产品项目中对二次投票的女巫抵抗。

最后,使用 groth16 证明方案可以使用去中心化后端(例如以太坊)来实现这些想法。可以想象一个注册合约,存储哪些地址发布了有效的 adhaar 卡证明。这将允许启动可组合性,使 adhaar 卡 pki 可以用于 DeFi 协议或社交应用程序。

未来方向和应用领域

一个重要的限制仍然是将我们的电路扩展到大输入的能力。 SHA1 仍然是非 zk 友好哈希,会产生重要的性能成本。典型的 Adhaar pdf 卡大小徘徊在 650Kb 左右,超出了当今电路的能力。尽管如此,能够对此类文档进行散列处理还是很有趣的,因为它不仅可以证明卡片的有效性,还可以证明其内容。像Nova这样的折叠方案是探索这种选择的主要候选方案。

更一般地说,证明时间仍然是无缝用户体验的瓶颈。在 8Gb RAM 和 2.3GHz 2017 Macbook Pro(与印度使用的日常设备相比高于平均水平的机器)上,生成证明需要 10 分钟的等待时间。同样,在这里,利用不同的零知识证明后端,例如halo2或方案,如Nova ,可以提供改进的性能指标。

在Dapp层面上,如果我们要求用户只使用一次他们的 adhaar 证明,这意味着将一张卡片绑定到一个地址。这样的要求并不少见,去中心化应用程序通常会寻找女巫攻击抵抗机制,以保护自己免受垃圾邮件的侵害。如果我们要将一张 adhaar 卡链接到一个地址,则需要一个 nullifier 构造。然而,这将需要代理能够访问完整的 adhaar 数据库,以检测哪些人已经在链上验证了他们的 adhaar 卡,从而打破匿名性。在监管不确定的情况下,这可能会给用户带来风险。

来源
免责声明:以上内容仅为作者观点,不代表Followin的任何立场,不构成与Followin相关的任何投资建议。
喜欢
收藏
评论