Fabric的零知识身份证明

参照
https://hyperledger-fabric-cn.readthedocs.io/zh/1.3.0_zh-cn/idemix.html

什么是Idemix

Idemix是一个加密协议套件,它提供强大的身份验证以及隐私保护功能,如匿名,无需披露交易者身份即可进行交易,以及不可关联性,即单个身份发送多个交易的能力,而不会泄露交易是通过相同的身份发送的。

下面有三个角色:用户,身份发行者,验证者
Fabric的零知识身份证明_第1张图片

  • 身份发行者验证用户的一组属性,然后以数字证书 (以下简称 ‘凭据’) 的形式颁发。
  • 用户稍后会生成拥有凭据的零知识证明, 并且还有选择地只公开用户部分属性。由于这个证明是零知识的, 所以不会向验证者、身份发行者或其他人透漏其他信息,以用来验证身份。

例如, 假设 alice 需要向bob (一名店员) 证明, 她有 dmv 发给她的驾驶证。在这种情况下, alice 是用户, dmv 是身份发行者, bob 是验证者。为了向bob证明alice有驾照, alice可以选择给bob看驾驶证。不过, bob 这样就能看到alice的名字、地址、确切年龄等–比bob需要知道的要多很多。
相反, alice 可以使用 idemix 为 bob 生成 零知识证明, 这样只能显示她有有效的驾驶证, 而没有其他。

所以从凭证来说:

  • bob没有了解任何关于alice的其他信息, 除了她有有效的许可证 (匿名)
  • 如果alice多次访问商店, 每次都为bob生成证据, bob将无法从证据中判断它是同一个人 (无关联性)。

idemix 身份验证技术提供的信任模型和安全保证类似于标准 x.509 证书所保证的内容, 但底层加密算法可有效地提供高级隐私功能, 包括上面描述的。我们将在下面的技术部分详细比较 idemix 和 x.509 技术。

如何使用Idemix

要了解如何将 idemix 与fabric一起使用, 我们首先需要知道「用户、身份发行者和验证者」在idemix 中与各组件的对应关系。

  • Fabric Java SDK为 用户 角色提供了API。将来,其他Fabric SDK也将支持Idemix。
  • Fabric提供了两个Idemix 身份发行者
    a. Fabric CA, 它适用于生产环境或开发环境。
    b. 用于开发环境的idemixgen工具
  • 验证者要满足Fabric中的Idemix MSP身份。

要在Hyperledger Fabric中使用Idemix,需要以下三个基本步骤
Fabric的零知识身份证明_第2张图片
比较上下两幅图中的角色

  1. 身份创建者
    fabric-ca (1.3 版或更高版本) 已被升级为 idemix 身份创建者。当fabric-ca-server启动 (或通过fabric-ca-server init 命令初始化) 时, 以下两个文件将在fabric-ca-server的主目录中自动创建: IssuerPublicKey和 IssuerRevocationPublicKey,这些文件在步骤2中使用。对于开发环境, 如果不使用fabric-ca, 则可以使用 idemixgen 创建这些文件。

  2. 验证者
    使用上面的IssuerPublicKey和 IssuerRevocationPublicKey创建Idemix MSP。
    例如,请参考以下摘录自
    Hyperledger 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 ,在目录mspdir(crypto-config/peerOrganizations/org3.example.com)下面存放IssuerPublicKey和IssuerRevocationPublicKey两个文件。
在这个例子中,Org1Idemix代表Org1的Idemix MSP,同时它也具有X509 MSP。

  1. 用户(想想上面介绍的java sdk api)
    在 java sdk 中使用 idemix 只需要一个额外的 api 调用,是class(org.hyperledger.fabric_ca.sdk.HFCAClient)中的 idemixEnroll方法。例如,假设 hfcaclient 是你的 HFCAClient对象,x509Enrollment是与你X509证书相关联的org.hyperledger.fabric.sdk.Enrollment。
    下面这个调用会返回org.hyperledger.fabric.sdk.Enrollment,这就是你的 Idemix 凭据
IdemixEnrollment idemixEnrollment = hfcaClient.idemixEnroll(x509enrollment, "idemixMSPID1");

另外,IdemixEnrollment实现了org.hyperledger.fabric.sdk.Enrollment接口,因此可以使用与注册X509对象相同的方式,当然,这会自动提供Idemix的隐私增强功能。

Idemix 和 chaincode

从验证者的角度来看, 还有一个特殊的参与者需要考虑→智能合约。当使用 idemix 凭据时, 智能合约可以得到什么信息?
当使用Idemix凭据的时候,cid (Client Identity)这个库已经扩展支持了方法GetAttributeValue。但是, 正如下面的 当前限制 中所提到的, 在 Idemix 中只暴露了两个属性: ou和role

前提,Fabric CA作为身份发行者。

  • ou属性的值是身份的隶属关系,如右边的哪个组织哪个部门 (e.g. “org1.department1”)
  • role属性的值将是“member”或“admin”。值“admin”表示是MSP管理员。默认情况下,Fabric CA创建的身份是“member”角色。要创建“admin”角色,请使用role属性后面跟个2。

目前的局限性

当前版本的Idemix确实有一些限制

  • 固定的属性
    目前还无法使用自定义属性来发布或使用Idemix凭据。将来的版本将支持自定义属性。目前支持以下四个属性。
    1 .组织单位属性(ou)
    ・用法: 与 X.509类似
    ・类型: String
    ・是否暴露: always
    2.角色属性(role)
    ・用法: 与 X.509类似
    ・类型: integer
    ・是否暴露: always
    3.注册ID属性
    ・用法:标识唯一用户—在属于同一用户的所有注册凭据中相同(将在未来版本中用于审核)
    ・类型: BIG
    ・是否暴露:不出现在签名中,仅出现在为Fabric CA生成身份验证令牌时
    4.撤销属性
    ・用法:唯一标识凭证—(将在未来版本中用于撤销)
    ・类型:integer
    ・是否暴露:never
撤销尚不支持

尽管上面提到了撤销属性的存在,并可以看到大部分撤销框架已经做成,但还尚未支持撤销Idemix凭据。

peer不能使用Idemix身份进行背书

目前,peer只能使用Idemix MSP进行签名验证。 而使用Idemix进行签名只能通过Client SDK来完成。 Idemix MSP将支持更多角色(包括peer角色)。

技术总结

Idemix凭据与X.509证书的比较

证书/凭证的概念和颁发过程,在Idemix和X.509证书中非常相似:一组属性使用无法伪造的签名进行数字签名,并且有一个密钥,凭证以加密方式绑定到该密钥中。

标准X.509证书和Identity Mixer凭证之间的主要区别是用于验证属性的签名方案。Identity Mixer系统底层的签名允许在不显示签名和(选择的)属性值本身的情况下有效地证明签名和对应属性的拥有权。我们使用零知识证明来确保这样的“知识”或“信息”不被泄露,同时确保对某些属性的签名是有效的,和用户持有相应的凭证密钥。

这种凭证像X.509证书那样,可以用最初签署了该凭证并且无法伪造的权威机构的公钥进行验证。只有知道凭证密钥的用户才能生成关于凭证及其属性的证明。

关于不可关联性, 在显示 x.509 证书时, 必须显示所有属性以验证证书签名。这意味着签名事务的所有证书用法都是可关联的。

为了避免这种可关联性, 每次都需要使用新的 x.509 证书, 这将导致复杂的密钥管理、通信和存储开销。此外, 在某些情况下, 即使是颁发证书的 ca 也不能将所有事务链接到用户, 这一点很重要。

idemix 有助于避免与 ca 和验证程序的链接, 因为即使 ca 也无法将现在的凭证链接到原始凭证。颁发者和验证者都无法判断两个凭证是从相同的凭证 (还是从两个不同的凭证) 派生的。

基础加密协议

Idemix技术建立在一个盲签名方案之上,该方案支持多个消息和有效的拥有签名的零知识证明。Idemix的所有加密构建块都在顶级会议和期刊上发表,并得到了科学界的验证。

Fabric的这种特殊的Idemix实现使用基于配对的签名方案,该方案由Camenisch和Lysyanskaya简要提出并由Au等人详细描述。在零知识证明中证明签名知识的能力让Camenisch等人使用了。

你可能感兴趣的:(区块链)