在过去几年中,以太坊和比特币网络依靠自身网络的力量已经进行了大量的公钥身份注册,使数百万人参与到构建用户可控数字身份的活动中,任何人都可以创建公钥对和私钥对以持有数字资产,并使用签名和身份验证工具参与到去中心化应用程序的生态系统中。
但是,仅靠公钥密码学还不足以构建富有表达力的完整身份系统。应用程序开发者和基础设施构建者需要更丰富的加密工具,来帮助用户证明和书写有关私钥知识、组中成员身份、拥有证明等任意声明。这些声明可能如下所示:
我是“黑暗森林行星”(Dark Forest planet) NFT 的所有者,但我不透露我具体拥有哪一个 NFT。即,我知道一个私钥与已知高信誉帐户中的 1024 个公钥之一相对应。
我已经获得了足够的选票以通过一个 DAO 资助的提案,但我不会展示出完整的投票信息。即,我获得了 5 个公钥中的 3 个 “赞成” 投票的消息签名。
实现此类声明的一种方法是在 zkSNARK 中实现以太坊的密钥生成和数字签名算法。zkSNARKs 是一种新的加密原语,允许用户证明执行任意计算的声明。从理论上讲,这将允许开发人员将任意身份声明嵌入到其应用程序中。
在 zkSNARKs 中实现现有签名算法需要克服许多挑战。当前的 zkSNARK 证明系统通常使用特定的椭圆曲线,这些椭圆曲线只能对特定素数进行模运算。这将 zkSNARK 证明中使用的最大寄存器位数位限制在 254-bit 。但像以太坊和比特币这样的网络使用的 ECDSA(Elliptic Curve Digital Signature Algorithm)和 secp256k1 曲线,是一条 NIST 标准曲线,并不是 SNARK 友好的。对 secp256k1 椭圆曲线点的操作涉及对 256 位数字的算术运算,这会使 SNARK 系统中的 254-bit 寄存器发生溢出。在内部实现 ECDSA 算法需要我们使用 254-bit 寄存器为 BigInt 算法和 secp256k1 操作构建 ZK 电路;所以说,我们必须想办法执行非原生的有限域代数算法。
在本系列文章中,我们将介绍 circom 中 ECDSA 电路的概念验证实现。circom 是一种用于特定 ZK 电路的编程语言,这些 ZK 电路可用于生成 zkSNARKs。我们详细介绍用于优化非原生的有限域代数算法的技术,并为基于 ECDSA 寄存器的 ZK 身份声明创建了一条产品级的工具栈路径。
我们的主要贡献是 circom-ecdsa 代码,其中包括一组可用于以下操作的 ZK 电路(未经审计):
bigint:用于大整数和非原生有限域代数的电路。
secp256k1:用于 secp256k1 曲线运算的电路。
Secp256k1AddUnequal使用椭圆曲线群加法定律将两个不同的点相加
Secp256k1Double将一个点加倍
- 分享至:
作者:zCloak 隐私网络
本文为PANews入驻专栏作者的观点,不代表PANews立场,不承担法律责任。
文章及观点也不构成投资意见
图片来源:zCloak 隐私网络如有侵权,请联系作者删除。
关注PANews官方账号,一起穿越牛熊推荐阅读2022-02-22 07:46 2022-02-22 07:40 2022-02-22 07:37 2022-02-22 07:24 2022-02-22 07:15 2022-02-22 07:05
