当前位置: 首页 > news >正文

Iden3 协议规范(Version 0)详细总结

Iden3 协议规范(Version 0)详细总结

本文档为 Iden3 协议的初始版本规范,目前处于持续开发与更新中,核心围绕分布式数字身份体系构建,通过密码学技术(如零知识证明、默克尔树)实现身份的可信管理、隐私保护与高效交互,以下从核心概念、数据结构、关键流程、隐私增强机制等维度展开详细整理。

一、基础概念与角色定义

Iden3 协议中涉及三类核心角色,各角色职责与交互围绕“声明(Claim)”与“凭证(Credential)”展开,核心术语定义如下:

术语(Term)定义与核心职责
Issuer(签发者)发起声明的主体,可对自身或其他身份创建声明,需确保声明的合法性(通过私钥授权)。
Holder(持有者)接收声明的主体,存储自身相关的声明,并可基于声明生成零知识证明以向验证者证明身份属性。
Verifier(验证者)验证声明有效性的主体,需确认声明是否由指定身份签发、是否被持有者合法持有,且未被撤销或过期。
Credential(凭证)证明声明有效性的数据集合,由“声明(Claim)”和“证明(Proof,如默克尔树证明、零知识证明)”组成。
Identity(身份)由“自身签发的声明”和“其他身份签发的声明”共同构成的数字主体,其状态通过默克尔树根哈希锚定在区块链上,支持声明的签发、更新、撤销。
Genesis ID(创世ID)身份的初始唯一标识,由身份初始状态(创世声明树、空撤销树、空根树的根哈希)计算得出,格式为31字节(2字节类型+27字节创世状态+2字节校验和),Base58编码。

二、核心数据结构

1. 默克尔树(Merkle Tree, MT)

Iden3 协议使用的默克尔树为稀疏二进制零知识友好型树,是身份状态与声明存储的核心结构,具体特性与分类如下:

特性说明
二进制(Binary)每个非叶节点仅包含两个子节点,确保树结构的规范性与高效遍历。
稀疏且确定性(Sparse & Deterministic)数据按索引存储在叶节点,插入顺序不影响最终根哈希;未使用的叶节点为空,保证结构一致性。
零知识友好(ZK-friendly)使用 Poseidon 哈希函数,适配零知识证明(ZKP)的计算需求,降低证明生成与验证成本。

协议中涉及三类核心默克尔树,分别对应身份管理的不同维度:

树类型作用与叶节点内容
Claims Tree(ClT,声明树)存储身份相关的所有声明,叶节点为声明数据(253字节,含索引部分与值部分),仅支持追加(不可修改/删除)。
Revocation Tree(ReT,撤销树)存储声明的撤销信息,叶节点为“64位撤销随机数 + 32位版本号 + 157位保留位”,需完全公开以支持有效性验证。
Roots Tree(RoT,根树)存储声明树的历史根哈希,叶节点为声明树的根哈希(253位),用于追溯声明树的状态变迁。
GIST(Global Identities State Tree,全局身份状态树)存储所有 Iden3 身份的最新状态,叶节点索引为“创世ID的哈希”(避免树失衡),值为身份最新状态,锚定在区块链智能合约中。

2. 声明(Claim)

声明是身份属性的核心载体,由“索引部分(Index)”和“值部分(Value)”组成,支持自定义属性、版本控制、过期与撤销机制。

(1)声明结构
  • 索引部分(Index,共512位):用于定位声明在声明树中的位置,包含声明 schema、选项标志、版本等信息,核心字段如下:
    • i_0(128位):含128位声明 schema(定义声明类型)、32位选项标志(如主体类型、是否过期、是否可更新)、32位版本(可选)、61位保留位。
    • i_1-i_3(各253位):存储身份标识(可选)或保留位,用于区分“自身声明”与“他人声明”。
  • 值部分(Value,共512位):存储声明的具体内容,核心字段如下:
    • v_0(253位):含64位撤销随机数(用于撤销声明)、64位过期时间戳(可选)、125位保留位。
    • v_1-v_3(各253位):存储身份标识(可选)或保留位,与索引部分配合定义声明的方向关系(如“身份拥有某属性”“属性属于某身份”)。
(2)声明属性
  • 不可伪造性:需身份私钥授权才能生成代表该身份的声明,无授权则无法伪造。
  • 可撤销性:通过将声明的“撤销随机数”写入撤销树,标记声明失效。
  • 可更新性:可通过增加版本号生成新声明(旧版本需通过撤销树标记失效),是否可更新由索引部分的“Updatable”标志控制。
  • 唯一性:同一索引的声明不可重复,避免同一身份对同一属性生成矛盾声明。

3. 身份状态(Identity State, IdState)

身份状态是身份当前所有默克尔树状态的哈希摘要,用于锚定在区块链上以确保可验证性,计算方式为:
IdState = H(ClR || ReR || RoR)
其中:

  • ClR:声明树(ClT)的根哈希;
  • ReR:撤销树(ReT)的根哈希;
  • RoR:根树(RoT)的根哈希;
  • H:由身份类型定义的哈希函数(如 Poseidon)。

身份状态的核心作用:

  • 锚定在区块链上,关联时间戳,确保身份状态的不可篡改与可追溯;
  • 支持身份状态变迁(如添加/更新/撤销声明),变迁需通过“身份状态转换函数(ITF)”验证。

三、核心密码学技术:零知识证明(ZKP)

协议使用 zkSNARKs Groth16 方案实现零知识证明,核心目标是让持有者在不暴露敏感信息(如创世ID、声明内容)的情况下,向验证者证明声明的有效性。

1. zkSNARKs Groth16 特性

特性说明与协议适配性
非交互性(Non-interactive)仅需持有者发送一份证明,验证者即可完成验证,支持智能合约自动验证(适配区块链场景)。
高效验证(Efficient Verification)验证过程计算成本低、证明体积小,适合区块链上的低成本验证(规避高Gas费)。
证明生成复杂(Heavy Proof Generation)生成证明需大量计算,需高性能硬件支持,但协议通过批量处理(如批量添加声明)降低频率。
可信设置(Trusted Setup)需提前生成密钥并销毁,确保验证者无法作弊,协议通过标准化流程保证设置的安全性。

2. 协议中 ZKP 的核心应用场景

  • 身份所有权证明:证明持有者知道与“操作密钥授权声明”对应的私钥,无需暴露声明内容或私钥。
  • 声明有效性证明:证明声明已由指定身份签发、未被撤销、未过期,且为最新版本,无需暴露创世ID或声明细节。
  • 身份状态转换证明:证明身份从旧状态到新状态的变迁符合协议规则(如仅追加声明、正确标记撤销),确保区块链上的状态更新合法。

四、关键流程

1. 身份创建与初始化

  1. 生成初始操作密钥(Baby Jubjub 曲线,适配 zkSNARKs);
  2. 创建“操作密钥授权声明”,作为创世声明树(ClT)的初始叶节点;
  3. 计算创世声明树根(ClR)、空撤销树根(ReR)、空根树根(RoR),生成创世身份状态;
  4. 基于创世身份状态计算 Genesis ID(31字节,Base58编码),完成身份初始化(创世状态无需上链,可直接通过 Genesis ID 验证)。

2. 声明的签发与发布

  1. 签发声明:签发者(Issuer)生成声明(含索引、值部分),通过私钥授权后,将声明添加到自身声明树(ClT),更新 ClR;
  2. 更新身份状态:将新 ClR 加入根树(RoT),更新 RoR,计算新的身份状态(IdState);
  3. 上链锚定:通过直接交易或 Relay(中继)将新 IdState 发布到区块链智能合约,关联时间戳;
  4. 批量处理:支持一次性添加多个声明(批量签发),仅需生成一份零知识证明,提升 scalability。

3. 声明的验证(含有效性与最新版本)

验证者需确认声明的“历史签发合法性”与“当前有效性”,流程分为两步:

(1)证明声明已签发(历史合法性)

需提供以下材料:

  • 声明原文(含索引、值部分);
  • 签发时的时间戳 t1
  • 声明到当时声明树根(ClR_t1)的默克尔树证明(MTP);
  • 当时的根树(RoR_t1)、撤销树(ReR_t1)与身份状态(IdState_t1,需在区块链上可查)。
(2)证明声明当前有效(未撤销、未过期、最新版本)

需提供以下材料:

  • 声明的撤销随机数与版本号;
  • 最新时间戳 t2(验证者可指定“近期”范围,如5分钟内,避免数据竞争);
  • 撤销随机数/版本号“未存在于撤销树”的默克尔树证明(MTP,证明声明未被撤销);
  • 最新的 ClR_t2、RoR_t2、ReR_t2 与 IdState_t2(区块链可查);
  • 若声明含过期时间,需证明当前时间早于过期时间(通过 ZKP 隐藏具体时间)。

4. 声明的更新与撤销

(1)声明更新
  1. 生成新版本声明(版本号+1,索引部分不变,值部分更新);
  2. 将新版本声明添加到声明树(ClT),更新 ClR;
  3. 在撤销树(ReT)中添加“旧版本声明的撤销随机数+旧版本号”,标记旧版本失效;
  4. 更新根树(RoT)与身份状态(IdState),并上链锚定。
(2)声明撤销
  1. 在撤销树(ReT)中添加“目标声明的撤销随机数+最新版本号”,标记该声明所有版本失效;
  2. 更新身份状态(IdState)并上链,确保撤销信息可被验证者查询;
  3. 撤销不可逆:一旦写入撤销树,无法删除或修改,确保验证者信任。

5. 身份密钥轮换

身份可通过“签发新操作密钥声明+撤销旧操作密钥声明”实现密钥轮换,流程如下:

  1. 生成新的 Baby Jubjub 操作密钥;
  2. 签发“新操作密钥授权声明”,添加到声明树(ClT);
  3. 在撤销树(ReT)中添加“旧操作密钥声明的撤销随机数+版本号”,标记旧密钥失效;
  4. 更新身份状态并上链,新密钥可用于后续声明签发与零知识证明生成。

五、隐私增强机制

1. Identity Profile(身份档案)

核心目标是隐藏 Genesis ID,避免用户被跨平台追踪,实现“场景化身份”管理,关键特性如下:

(1)生成方式

Identity Profile = 哈希(Genesis ID + 随机Nonce),格式与 Genesis ID 完全一致(31字节,Base58编码):

  • IDtype:继承自 Genesis ID 的2字节类型;
  • profile_state:Genesis ID 与 Nonce 的 Poseidon 哈希的前27字节;
  • checksum:类型+profile_state 的16位小端校验和。
(2)核心隐私属性
  • 不可逆性:无 Nonce 则无法从 Profile 反推 Genesis ID,确保底层身份不泄露;
  • 不可区分性:Profile 与 Genesis ID 格式一致,外部无法判断当前使用的是基础身份还是场景化身份;
  • 抗追踪性:用户可对不同平台/场景使用不同 Nonce 生成 Profile,避免跨场景追踪;
  • 声明复用性:基于 Genesis ID 或某 Profile 的声明,可通过 ZKP 转换为另一 Profile 的证明,且不暴露关联关系。

2. 全局身份状态树(GIST)的隐私保护

  • 索引设计:GIST 的叶节点索引为“Genesis ID 的哈希”(而非 Genesis ID 本身),避免因 Genesis ID 固定前缀导致树失衡,同时隐藏身份的底层标识;
  • 所有权证明:用户可通过 ZKP 证明“自身身份状态存在于 GIST 中”,无需暴露 Genesis ID,仅需证明哈希映射关系。

3. 隐私保护细节

  • 声明树私有化:仅声明树的根哈希(ClR)上链,声明内容本身不公开,避免敏感属性泄露;
  • Relay 中继上链:身份状态可通过 Relay 发布到区块链,验证者仅需查询 Relay 状态,无需直接关联用户身份;
  • 零知识隐藏敏感信息:验证时可通过 ZKP 隐藏声明的部分字段(如具体过期时间、身份标识),仅证明“满足某条件”(如“已成年”“拥有某权限”)。

六、协议实现与参考资源

  1. 默克尔树规范:协议文档内定义,未来可兼容其他稀疏二进制ZK友好树;
  2. Baby Jubjub 曲线规范:协议文档内定义,适配 zkSNARKs 的高效签名与加密;
  3. 核心电路代码
    • 身份状态转换电路:https://github.com/iden3/circuits/blob/master/circuits/stateTransition.circom
    • 身份所有权证明电路:https://github.com/iden3/circuits/blob/master/circuits/lib/idOwnershipBySignature.circom
    • 零知识凭证验证电路:https://github.com/iden3/circuits/tree/master/circuits/lib
  4. 数据存储选项
    • 身份状态上链:EVM 兼容区块链智能合约;
    • 声明树/撤销树数据:IPFS(通过 IPNS 地址访问)或 HTTPS 端点(标准化 API)。

七、协议局限性与未来方向

  • 当前局限性:V0 版本中,智能合约暂不验证声明树的“仅追加”特性(因批量添加声明的 ZKP 计算复杂,需平衡 scalability);
  • 未来方向
    • 支持更多 ZKP 方案(如 PLONK,无需可信设置);
    • 优化批量声明处理的计算效率,降低证明生成成本;
    • 扩展身份类型与声明 schema,适配更多场景(如金融、医疗、社交)。
http://www.dtcms.com/a/568574.html

相关文章:

  • 破局延时任务(下):Spring Boot + DelayQueue 优雅实现分布式延时队列(实战篇)
  • HTTP协议深度解析:从基础到性能优化
  • NEWBASIC 2.06.7 API 帮助与用户使用手册
  • python MongoDB 基础
  • 在Ubuntu系统上安装英伟达(NVIDIA)RTX 3070 Ti的驱动程序
  • SpringBoot同时使用MyBatis事务以及MongoDB事务
  • 上海建筑网站大全贵阳网页设计培训班
  • jQuery UI 小部件方法调用
  • Robot栏配置
  • 基于openresty实现短链接跳长链接服务
  • tcl脚本|异步FIFO约束
  • C语言基础之指针
  • 郑州网站制作工具龙岩网站建设馨烨
  • 沈阳网站建设的公司软件网站下载免费
  • iOS SwiftUI 动画开发指南
  • LeetCode算法学习之验证回文串
  • 深入掌握 OpenCV-Python:从图像处理到智能视觉
  • 运输层协议概述及UDP
  • 【多所高校合作】第四届图像处理、计算机视觉与机器学习国际学术会议(ICICML 2025)
  • 什么网站做h5做得好登录不上wordpress
  • 个人制作的网站模板自助建站自己要做网站的来看下
  • 第十五周Fscan和利用漏洞上线远程和数据库提权上线远控
  • 第5章 所有权系统
  • 从零开始学Flink:事件驱动
  • 机器学习实现逻辑回归-癌症分类预测
  • Kafka 从入门到精通完整指南
  • 常见二三维GIS数据分类及处理流程图
  • LLM结构化输出:约束解码、CFG和response_format
  • 做网站麻烦不文山网站建设求职简历
  • wordpress网站静态页面外国食品优秀设计网站