区块链密码学【免费下载链接】fabricHyperledger Fabric is an enterprise-grade permissioned distributed ledger framework for developing solutions and applications. Its modular and versatile design satisfies a broad range of industry use cases. It offers a unique approach to consensus that enables performance at scale while preserving privacy.项目地址https://gitcode.com/gh_mirrors/fabr/fabric点击查看免费下载IdemixIdentity Mixer身份混洗器是一套密码学协议族为 Hyperledger Fabric 提供了基于零知识证明的隐私保护认证能力交易者可以在不暴露自身身份的前提下完成认证匿名性同一身份发起的多次交易也无法被关联不可链接性。本文以 docs/source/idemix.rst 为主线结合本仓库的 MSP 源码与端到端测试系统讲解 Idemix 的角色模型、在 Fabric 中的三步接入流程、与链码的交互方式、当前限制以及底层密码学原理帮助读者从概念理解走到可落地的 MSP 配置与 SDK 调用。什么是 IdemixIdemix 是一套提供强认证能力、同时具备隐私保护特性的密码学协议套件核心特性有两个匿名性Anonymity交易者可以在不暴露自己身份的情况下完成交易不可链接性Unlinkability同一个身份发出的多笔交易无法被验证者识别为出自同一人。与基于 X.509 证书的传统认证相比Idemix 的信任模型和安全保证与之类似但其底层密码学算法能够高效地提供上述高级隐私特性。三个参与角色一个完整的 Idemix 流程涉及三个角色角色职责签发者Issuer将用户的一组属性以数字证书的形式签发出来即凭证credential用户User持有凭证并在需要时生成该凭证的零知识证明只选择性披露自己愿意透露的属性验证者Verifier验证用户提交的零知识证明是否有效由于证明是零知识zero-knowledge的验证者、签发者以及其他任何人都无法从证明中获取额外信息。一个直观的例子假设 Alice 需要向店员 Bob 证明自己持有 DMV车管所签发的驾照Alice 是用户DMV 是签发者Bob 是验证者如果 Alice 直接出示驾照Bob 会看到她的姓名、地址、确切年龄等信息——远多于 Bob 需要知道的而使用 IdemixAlice 可以生成一个零知识证明只向 Bob 揭示她持有有效驾照这一事实其他信息一概不泄露。从该证明中Bob 除了Alice 持有有效驾照之外学不到任何额外信息匿名性即使 Alice 多次光顾并向 Bob 多次生成证明Bob 也无法判断这些证明出自同一个人不可链接性。如何在 Hyperledger Fabric 中使用 Idemix要将 Idemix 落地到 Fabric 中首先需要明确 Fabric 组件与 Idemix 三个角色的对应关系用户User由 Fabric Java SDK 充当 API 入口未来其他 Fabric SDK 也会支持 Idemix签发者Issuer有两个可选实现——生产或开发环境使用Fabric CA纯开发环境也可使用idemixgen工具验证者VerifierFabric 网络中的Idemix MSP。整体上只需三步即可启用 Idemix。第一步准备签发者Issuer方案 A使用 Fabric CA推荐Fabric CA 1.3 及以上版本已内置 Idemix 签发能力。当fabric-ca-server启动或通过fabric-ca-server init初始化时会在其主目录自动生成两个文件IssuerPublicKey签发者公钥IssuerRevocationPublicKey签发者撤销公钥。这两个文件是第二步创建 Idemix MSP 的必需输入。方案 B使用 idemixgen在不使用 Fabric CA 的开发环境中可以用idemixgen工具生成上述两个密钥文件。第二步配置验证者Verifier——创建 Idemix MSP使用第一步生成的IssuerPublicKey和IssuerRevocationPublicKey创建 Idemix MSP。在通道配置configtx.yaml中只需将 MSP 的msptype指定为idemix并让mspdir指向包含上述两个公钥文件的目录。以下摘录自 Fabric Java SDK 示例中的configtx.yaml- Org1Idemix # defaultorg defines the organization which is used in the sampleconfig # of the fabric.git development environment name: idemixMSP1 # id to load the msp definition as id: idemixMSPID1 msptype: idemix mspdir: crypto-config/peerOrganizations/org3.example.com要点说明msptype: idemix是关键它告诉 Fabric 用 Idemix 而非默认的 X.509BCCSP方式加载该 MSPmspdir指向的目录示例中为crypto-config/peerOrganizations/org3.example.com/msp内应包含IssuerPublicKey和IssuerRevocationPublicKey文件示例中Org1Idemix表示 Org1 的 Idemix MSP——注意一个组织通常同时拥有一个 X.509 MSP 和一个 Idemix MSP。源码印证Idemix MSP 是如何被加载的在本仓库的 msp/msp.go 中ProviderType定义了三种提供方类型其中IDEMIX对应字符串idemixconst ( FABRIC ProviderType iota // MSP is of FABRIC type IDEMIX // MSP is of IDEMIX type OTHER // MSP is of OTHER TYPE )在 msp/configbuilder.go 的GetLocalMspConfigWithType中当mspType为idemix时会调用idemix.GetIdemixMspConfig(dir, ID)直接从指定目录加载 Idemix MSP 配置印证了msptype: idemix配置项在代码层面的实际作用。MSP 工厂 提供了IdemixNewOpts选项对象New()会根据版本创建对应的 Idemix MSP 实例MSPv1_1直接创建MSPv1_3与MSPv1_4_3则统一按MSPv1_3语义创建最终包装为 msp/idemix.go 中的idemixMSPWrapper。该包装器实现了 Fabric 侧统一的MSP接口GetIdentifier、Validate、SatisfiesPrincipal、DeserializeIdentity等底层委托给 IBM 开源的github.com/IBM/idemix/msp实现。第三步配置用户User——SDK 中的一次额外 API 调用Java SDK 是用户的 API 入口。使用 Idemix 只需要额外调用一次HFCAClient的idemixEnroll方法IdemixEnrollment idemixEnrollment hfcaClient.idemixEnroll(x509enrollment, idemixMSPID1);其中hfcaClient是你的HFCAClient对象x509enrollment是与你的 X.509 证书关联的org.hyperledger.fabric.sdk.Enrollment。该方法返回一个与 Idemix 凭证关联的org.hyperledger.fabric.sdk.Enrollment对象。IdemixEnrollment实现了org.hyperledger.fabric.sdk.Enrollment接口因此可以像使用 X.509 enrollment 对象一样使用它——区别在于它自动提供了 Idemix 的隐私增强特性匿名性与不可链接性。Idemix 与链码从验证者角度看链码是另一个需要关注的参与者当使用 Idemix 凭证时链码能了解到交易者的什么信息Go 链码可以借助cidClient Identity库的GetAttributeValue函数读取属性但受限于当前限制一节Idemix 场景下仅披露两个属性ou和role。当 Fabric CA 作为凭证签发者时ou属性的值是身份的归属affiliation例如org1.department1role属性的值是member或admin。admin表示该身份是 MSP 管理员默认情况下 Fabric CA 创建的身份返回member角色。要创建admin身份注册时需携带role属性且值为2。重要提醒Idemix 组织不能用于背书链码或批准链码定义。在设置通道的LifecycleEndorsement与Endorsement策略时必须考虑到这一点详见下文限制部分。当前限制当前版本的 Idemix 存在以下局限Idemix 组织与背书策略Idemix 组织无法背书链码交易也无法批准链码定义。默认情况下Channel/Application/LifecycleEndorsement和Channel/Application/Endorsement策略要求通道上大多数组织签名。这意味着如果一个通道包含大量 Idemix 组织可能无法凑足默认策略所需的大多数例如通道有 2 个X.509MSP 组织和 2 个 Idemix 组织时通道策略要求 4 个组织中 3 个批准链码定义才能提交由于 Idemix 组织无法批准策略最多只能验证 4 个签名中的 2 个永远无法达成。如果你的通道中 Idemix 组织的数量足以影响背书策略可以使用**签名策略signature policy**显式指定所需的 MSP 组织。固定属性集目前尚不支持签发或使用带自定义属性的 Idemix 凭证自定义属性将在未来版本中支持当前仅支持以下四个属性属性用途类型披露情况组织单元ou与 X.509 相同String始终披露角色role与 X.509 相同integer始终披露注册 IDEnrollment ID唯一标识一个用户——同一用户的所有注册凭证中保持一致将在未来版本中用于审计BIG签名中永不披露仅在为 Fabric CA 生成认证令牌时披露撤销句柄Revocation Handle唯一标识一个凭证将在未来版本中用于撤销integer永不披露撤销尚未支持尽管大部分撤销框架已经就位从上述撤销句柄属性的存在可见一斑但对 Idemix 凭证的撤销目前尚未支持。Peer 不用于 Idemix 背书目前peer 仅使用 Idemix MSP 做签名验证使用 Idemix 签名只能通过客户端 SDK 完成。包括peer角色在内的更多角色未来将由 Idemix MSP 支持。技术总结Idemix 凭证与 X.509 证书的对比Idemix 凭证与 X.509 证书在凭证概念和签发流程上非常相似一组属性被不可伪造的签名所覆盖且凭证与一把秘密密钥在密码学上绑定。两者的主要差异在于为属性签名所用的签名方案。Identity Mixer 底层的签名方案允许在不暴露签名本身及选定的属性值的前提下高效地证明持有某个签名及对应属性。Fabric 使用零知识证明来确保这类知识/信息不被泄露同时保证针对某些属性的签名是有效的且用户确实持有对应的凭证秘密密钥。与 X.509 证书一样这类证明可以用最初签发凭证的权威机构的公钥进行验证且无法被成功伪造——只有知道凭证秘密密钥的用户才能生成关于该凭证及其属性的证明。在不可链接性方面出示 X.509 证书时必须披露全部属性才能验证证书签名这意味着证书的所有签名用途都是可链接的为避免链接每次都必须使用全新的 X.509 证书这带来复杂的密钥管理以及通信与存储开销某些场景下还要求连签发证书的 CA 本身都无法将交易链接到用户。Idemix 同时对 CA 和验证者都避免了可链接性即使是 CA 也无法将证明链接回原始凭证。签发者和验证者都无法判断两个证明出自同一个凭证还是两个不同凭证。拓扑信息鉴于上述限制建议每个通道只配置一个Idemix 类型的 MSP极端情况下整个网络一个。原因在于如果同一通道存在多个 Idemix MSP任何读取该通道账本的一方都能区分属于不同 Idemix MSP 方签名的交易——因为每笔交易都会泄露签名者的 MSP-ID。换句话说Idemix 目前仅提供客户端在同一组织MSP内的匿名性。未来Idemix 可以扩展为支持 Idemix 类型 CA 的匿名层级结构其签发的凭证可以通过单一公钥验证从而实现在组织MSP之间的匿名性届时多个 Idemix MSP 就可以共存于同一通道。原则上一个通道可以配置为单个 Idemix MSP 多个 X.509 MSP的组合。当然这些 MSP 之间的交互可能泄露信息需要对泄露的信息量逐案例评估。底层密码学协议Idemix 技术建立在支持多消息的盲签名方案之上并配合高效的签名持有零知识证明。Idemix 的全部密码学构件均发表于顶级会议与期刊并经过科学社区验证。Fabric 所使用的这套 Idemix 实现采用基于配对pairing-based的签名方案该方案最初由 Camenisch 与 Lysyanskaya 提出由 Au 等人给出详细描述并使用 Camenisch 等人提出的在零知识证明中证明签名持有知识的能力。关于 Identity Mixer 技术的更多概念与特性可参阅学术论文《Concepts and Languages for Privacy-Preserving Attribute-Based Authentication》。仓库中的验证证据与进一步阅读本仓库对 Idemix 的支持不仅体现在上述文档与配置中还有完整的端到端测试可循integration/idemix/idemix_test.goEndToEnd Idemix Suite使用nwo.BasicEtcdRaftWithIdemix()搭建包含 Idemix 组织的 Raft 测试网络然后通过IdemixUserSession以 Idemix 用户身份执行ChaincodeQuery与ChaincodeInvoke验证了Idemix 用户签名 → 网络校验 → 查询/调用成功的完整链路msp/msp_test.go包含 Idemix MSP 的单元测试源码入口msp/idemix.go、msp/factory.go、msp/configbuilder.go。如需进一步了解 MSP 在 Fabric 中的整体设计可查阅 docs/source/msp.rst关于 Fabric CA 如何作为 Idemix 签发者工作可参考 docs/source/hsm.md 及 Fabric CA 相关文档。赞分享区块链密码学【免费下载链接】fabricHyperledger Fabric is an enterprise-grade permissioned distributed ledger framework for developing solutions and applications. Its modular and versatile design satisfies a broad range of industry use cases. It offers a unique approach to consensus that enables performance at scale while preserving privacy.项目地址https://gitcode.com/gh_mirrors/fabr/fabric点击查看免费下载相关推荐Hyperledger Fabric MSP 配置完全指南身份验证、组织单元与最佳实践Hyperledger Fabric MSP 配置完全指南身份验证、组织单元与最佳实践 本文以 Hyperledger Fabric 官方文档 docs/so区块链密码学为什么选择viral-clips-crew10大理由让内容创作效率提升10倍为什么选择viral clips crew10大理由让内容创作效率提升10倍 viral clips crew是一款基于CrewAI的视频编辑助手专为社交媒人工智能AI 应用AI Agent视频处理语音Hyperledger Fabric MSP 身份有效性规则Identity Validity Rules解析认证树、吊销列表与 OU 约束Hyperledger Fabric MSP 身份有效性规则Identity Validity Rules解析认证树、吊销列表与 OU 约束 导读 MSP区块链密码学上一篇Redux Toolkit 迁移指南从传统 Redux 到现代 Redux 实践下一篇V1项目管理与协作Turbo构建系统完全指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考