原文:https://0xparc.org/blog/zk-id-1
翻译:Kurt Pan
上个月我们启动了 0xPARC 零知识-身份工作组:一个尝试使用 zkSNARKs 构建数字身份工具的工作组。这篇文章是关于解释为什么密码学的进步对新的身份原语很重要系列文章中的第一篇。此篇涵盖了“Why”的部分;未来的文章将涵盖“How”。
在过去的几年里,在线身份系统的设计一直是一个激烈争论的主题。现代数字身份系统已经使得崭新且复杂的在线互动和社区成为了可能。然而不幸的是,许多这些系统也有明显的弱点。
其中许多弱点可归因于中心化身份系统设计的固有局限性。首先,这些系统通常是围绕中心化的控制点构建的,当然这些控制点也会成为中心故障点。现代电子商务、社交媒体和消息平台容易受到强大势力(如威\权政府)的压力或干扰,或受到来自恶意黑客的技术攻击;当中\央运营商受到胁迫或黑客攻击时,除中\央运营商之外的许多各方也都会处于危险之中。其次,这些系统依赖于运营商手中的权力集中,这些运营商不可能与所有用户完全一致(在财务、社会或道德上)——例如,拥有全球多样受众的私人社交媒体公司必须经常做出关于“什么是不必要的审查行为,而什么是维护公共安全的行为”的决策,尽管他们往往并没有能力这样做。
去中心化和密码学方案并非万能药水,但它们确实提供了一些有用的工具,并且扩展了数字身份系统的设计空间。随着我们将越来越多的社会和经济生活转移到网上,设计一个安全的、保护隐私的和由用户控制的身份系统将变得越来越重要。在这篇文章中,我们将论述诸如 zkSNARK 之类的新型密码学原语对于构建具有这些属性的身份系统将会非常重要。
zkSNARK 之所以有用,其核心在于它使得数字系统的用户能够产生任意复杂性的可信声明,而不依赖于一个可信第三方。所有身份系统都是围绕着某种生成身份和声誉的可信声明的机制而构建的——通常,相当复杂的声明附在来自政府或公司等受信任机构的证明之上。通过将 zkSNARK 构造应用于关于身份和声誉的声明上,我们可以重新构建数字身份系统,并将控制权和数据保管权留在用户手中。
由于 zkSNARK 要对具有精确的数学定义的“声明”进行操作,我们必须首先准确地分析身份系统中所涉及的声明的性质。
很难与完全未知且不受信任的交易对手做生意。常识告诉我们,随着交易对手之间的信任度降低,合作的可能性也会降低;博弈论告诉我们,一次性囚徒困境中的最优策略总是背叛。你会更愿意从与你的社交圈紧密联系的密友那里购买二手车,还是从某个不知道是谁的看起来很扯的淘宝卖家那里买?
为了彼此建立信任,我们需要能够做出可信声明:即那些关于我们的身份和声誉的,使得我们与之互动的人会认为可信的声明。如果上面的那个淘宝卖家向你保证他“以前卖过很多车,而且每个人都喜欢我的车——相信我的话!”,这并不是一个真正可信声明。” 但是,如果此声明与你所知道的某个经过验证的买家的五星好评相绑定,那么它肯定会令人感觉更可信。

可信声明的想法听起来很显然,但是建立一个机制(在这个例子中是做一个流行的上市网站)来产生可信声明并不是一件容易的事。在传统模型中,我们通常的解决方案是将记录的保存管理委托给受信任的机构,这样他们就可以证明我们关于身份和声誉的声明,并逐渐为其积累信誉。随着时间的推移(通常在对抗性环境中),该机构必须证明其合法性和可信赖性,并维护用于大规模生成和分发证明的基础设施。至关重要的是,在大多数模型中,中\央权威的证明是使声明可信的原因。这是一张有效的政府颁发的身份证,所以我是一个公民;那是我的粉丝的准确名单,所以我是一个社会影响者;这些是经过审核的评论和评级,所以我是一个值得信赖的在线零售商。
可信声明的另一个应用位于堆栈的更低层级。首先一点是你怎么知道与你互动的人或企业向你展示的是关于他们自己的而不是其他人的声明?在依赖于可信权威的系统中,这些权威自己就承担了证明身份本身这项最基本的功能。当你访问网站时, API访问令牌、政府颁发的护照或着证书颁发机构生成的签名链都是关于身份声明的证明。
一个有用的身份系统允许参与者提出各种各样复杂的可信声明:
(数字的)当你用美团订外卖时,美团的网络服务器向你做出可信声明(通过 DNS 签名链:“我是美团的网络服务器”);你通过第三方身份提供商就你的身份向美团做出可信声明(通过支付宝:“我是美团用户,应该被允许访问此帐户链接的银行卡的钱”,);你通过各种金融机构对即将给美团支付的款项做出可信声明(通过不拒绝交易的银行:“我有钱支付订单,且这笔款项将很快到达”)。
(物理的)当你通过抵押贷款购买房屋时,你已经隐含地向银行、房地产经纪人、卖方和政府提出了大量的关于你身份和声誉的可信声明。
(混合的)当你申请工作时,你通过使用许多不同的证明系统向潜在雇主给出可信声明。你声称你有足够的训练和合适的性格来胜任这份工作,并引用了来自教育机构或专业认证机构、与你共事过的其他同事以及以前的公司的证明(学位、证书)。社交媒体和其他在线帐户提供者为隐含的关于你是哪种人的声明提供了进一步的证明。
几乎所有身份系统都需要隐私才能按预期运行,这一事实使情况进一步复杂化。
出于有时会引起争议的道德和意识形态原因,隐私是很重要的;但更根本的是,作为系统设计的简单组分,它通常是必要的。例如,几乎所有的身份系统都依赖于秘密数据的概念来生成关于身份的可信声明——口令、身份证号、私钥、信用卡 PIN、帐户恢复问题等。显而易见,这些数据必须保密。此外,使用完全透明的数据生成可信声明的过程可能具有负面的副作用,或者至少是难以想到的副作用;隐私保证可以防止这些。例如,如果你只是为了在在线市场上买卖一件商品——银行对账单、信用卡交易、贷款支付、和作品集等——就必须展示全部财务历史,交易对手可以使用这些信息来发起与原始交易无关的超出范围的行动(负面例子包括广告,甚至骚扰和勒索)。隐私“沙盒”化了一次性交互,清晰地定义和限制了其范围,以便我们可以从简单易懂的构建块构建更复杂的系统。
在需要隐私的传统系统中,我们必须将更多权力委托给中\央机构——在此类系统中,中\央机构存储私有数据,并去证明几乎无法验证的有关这些数据的可信声明。
目前为止我们为可信声明生成和身份系统讨论的所有模型都涉及一个中心化的参与者。正如我们已经讨论过的,有很多理由让我们想要去探索不依赖强大的记录保管员或管理者的系统。
很快我们就遇到了明显的问题:当我没有你的数据时,我怎么能相信你的声明?如果你把你的数据发给我,我怎么知道数据是有效的?如果你试图对私有数据进行声明,我们该怎么办? 这正是密码学的用武之地。
在我们看来,过去 50 年中的大部分应用密码学方案(和共识算法)都是一个,在各种资源限制和隐私条件下的,逐渐扩大在无可信权威下可做出的可信声明的范围的项目:
这些密码学原语历史上进展一直很缓慢——每一个都定义了一种新的、范围狭窄的声明类别,其结构被高度指定。然而,这种情况在过去几年中发生了变化。
今天令人兴奋的是,由于 SNARK,我们现在拥有了高效地提出任意可信声明的机制。并且借助 zkSNARKs 的零知识属性,我们还可以根据自己的喜好调整我们声明的隐私保证。
以下是可以使用 zkSNARK 提出的声明类型的一些示例,这在以前是不可能的:
这些声明可以以任意复杂的方式组合、整理,甚至编程。
虽然这一切在理论上都是可能的,但我们还有很长的路要走。为下一代应用生产一套强大的零知识身份工具,需要在性能、可靠性、开发者体验和应用设计模式方面进行实质性改进。在下一篇文章中,我们将讨论我们对未来道路的理解。
要了解密码学在哪些方面可用于构建身份系统,将身份系统的概念分解为关键的组件是很有用的。
在分析特定身份系统时,我们可能会问以下一些问题:
其中一些概念相互融合:身份、声誉和身份证明密切相关,不易分割。例如,在某些系统中,身份的原子单位甚至被定义为“中\央权威机构可以为其提供有效证明的东西”——不存在不存储在 Facebook 数据库中的 Facebook 帐户的概念。
然而,一般来说,我们在这一系列中使用身份来指代一个实体(个人、组织、机器人)的持久标签,该标签随时间的推移保持不变并为实体的代表——法人身份、公钥、帐户 ID 等。我们使用声誉来指代可以对实体做出的关于其过去行为的声明(“Alice 一直信守诺言”、“Bob 一直按时支付信用卡账单”、“Comfort Homes一直使用准确的图片作为其 Airbnb 房源”)。
https://iden3.io/ https://semaphore.appliedzkp.org/