参照
https://hyperledger-fabric-cn.readthedocs.io/zh/1.3.0_zh-cn/idemix.html
Idemix是一个加密协议套件,它提供强大的身份验证以及隐私保护功能,如匿名,无需披露交易者身份即可进行交易,以及不可关联性,即单个身份发送多个交易的能力,而不会泄露交易是通过相同的身份发送的。
例如, 假设 alice 需要向bob (一名店员) 证明, 她有 dmv 发给她的驾驶证。在这种情况下, alice 是用户, dmv 是身份发行者, bob 是验证者。为了向bob证明alice有驾照, alice可以选择给bob看驾驶证。不过, bob 这样就能看到alice的名字、地址、确切年龄等–比bob需要知道的要多很多。
相反, alice 可以使用 idemix 为 bob 生成 零知识证明, 这样只能显示她有有效的驾驶证, 而没有其他。
所以从凭证来说:
idemix 身份验证技术提供的信任模型和安全保证类似于标准 x.509 证书所保证的内容, 但底层加密算法可有效地提供高级隐私功能, 包括上面描述的。我们将在下面的技术部分详细比较 idemix 和 x.509 技术。
要了解如何将 idemix 与fabric一起使用, 我们首先需要知道「用户、身份发行者和验证者」在idemix 中与各组件的对应关系。
要在Hyperledger Fabric中使用Idemix,需要以下三个基本步骤
比较上下两幅图中的角色
身份创建者
fabric-ca (1.3 版或更高版本) 已被升级为 idemix 身份创建者。当fabric-ca-server启动 (或通过fabric-ca-server init 命令初始化) 时, 以下两个文件将在fabric-ca-server的主目录中自动创建: IssuerPublicKey和 IssuerRevocationPublicKey,这些文件在步骤2中使用。对于开发环境, 如果不使用fabric-ca, 则可以使用 idemixgen 创建这些文件。
验证者
使用上面的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。
IdemixEnrollment idemixEnrollment = hfcaClient.idemixEnroll(x509enrollment, "idemixMSPID1");
另外,IdemixEnrollment实现了org.hyperledger.fabric.sdk.Enrollment接口,因此可以使用与注册X509对象相同的方式,当然,这会自动提供Idemix的隐私增强功能。
从验证者的角度来看, 还有一个特殊的参与者需要考虑→智能合约。当使用 idemix 凭据时, 智能合约可以得到什么信息?
当使用Idemix凭据的时候,cid (Client Identity)这个库已经扩展支持了方法GetAttributeValue。但是, 正如下面的 当前限制 中所提到的, 在 Idemix 中只暴露了两个属性: ou和role
前提,Fabric CA作为身份发行者。
当前版本的Idemix确实有一些限制
尽管上面提到了撤销属性的存在,并可以看到大部分撤销框架已经做成,但还尚未支持撤销Idemix凭据。
目前,peer只能使用Idemix MSP进行签名验证。 而使用Idemix进行签名只能通过Client SDK来完成。 Idemix MSP将支持更多角色(包括peer角色)。
证书/凭证的概念和颁发过程,在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等人使用了。