总体架构和用户流程

MAGIC协议的核心是Semaphore匿名集成员协议,它是一个简洁的开源项目,最初由以太坊基金会的团队开发,并由MAGIC进行扩展。Semaphore采用了匿名投票和货币中的基本密码设计,并提供了一个独立的库供实施者设计自己的协议。Semaphore的简单设计使其能够支持多个链并高效地注册数十亿人。MAGIC的Semaphore版本部署为以太坊上的智能合约,其中包含一个公钥集合(称为身份承诺),每个注册用户对应一个公钥。身份承诺通过状态桥接复制到其他链上,以便在那里部署相应的验证器合约。

用户使用包含特定于MAGIC ID的Semaphore密钥对的身份钱包与MAGIC协议进行交互。Semaphore使用ZKP原语的数字签名方案,私钥是随机字节的哈希值,公钥是私钥哈希的ZKP。用户可以通过扫描二维码或点击深链接直接从应用程序启动MAGIC ID验证。验证后,设备会计算一个ZKP并通过MAGIC ID SDK直接发送给请求方(例如第三方去中心化应用或dApp)。

开发者可以使用中央验证器合约将MAGIC ID集成到链上。作为其他业务逻辑的一部分,开发者可以调用验证器来验证用户提供的证明。开发者需要提供应用程序ID和操作作为外部无效器的形成。外部无效器用于确定Sybil抵抗的范围,即每个上下文中的人是唯一的。在用户计算生成与其MAGIC ID相关的证明的零知识电路中,外部无效器与用户的私钥一起哈希生成一个无效器哈希。同一个人可以在多个上下文中注册,但对于特定的上下文,他们始终会产生相同的无效器哈希。开发者还可以提供一个可选的消息(称为信号),用户将在ZKP中承诺该消息。

如果证明有效,开发者就知道发起交易的人是经过验证的人类。开发者可以对无效器哈希强制执行唯一性,以确保抵抗Sybil攻击。

此外,MAGIC ID也可以在链下使用。在钱包方面,一切保持不变。不同之处在于证明验证发生在第三方服务器上。第三方服务器需要检查给定的集合承诺(即Merkle根)是否对应于链上的集合。这可以通过向以太坊提供者发送JSON-RPC请求或依赖索引服务来完成。MAGIC ID SDK和其他工具简化了这一过程,提供更好的开发者体验。

Last updated