Idemix是一套协议加密组件。它可以提供强大的身份验证和隐私保护特性。如匿名性、在不透露交易者身份的情况下进行交易的能力、以及不可链接性、单个身份发送多个交易的能力。Idemix有三种角色:用户、发行者、验证者。
发行者将一组用户的属性以一个数字证书的形式发布,以下简称“身份证书”。
用户随后生成一个“零知识证明”的身份证书,并且还可以自己选择公开哪些属性。因为是零知识证明,所以它没有向验证者、发行者或任何其他人透露额外的信息。
举一个例子:假设“Alice”需要向Bob(一个店员)证明,她拥有DMV颁发的一张驾照。注:DMV是Department of Vehicles(车管所)的缩写。
在这种情况下,Alice是用户,DMV是发行者,Bob是验证者。为了向Bob证明Alice有驾驶执照,她可以向他展示。可是这样Bob会看到爱丽丝的姓名,地址,实际年龄等信息,这些信息其实Bob不需要知道。
解决这个问题的方法是, Alice可以使用Idemix生成Bob的“零知识证明”,这个证明只能表明她有一个有效的驾驶执照,没有其他任何用途。
所以从证明中可以得知:
Bob除了知道Alice有一个有效驾照(匿名)以外,不知道任何关于她的附加信息。
如果Alice多次访问商店,并且每次都为Bob生成证明,那Bob无法确定这是同一个人(不可链接性)。
Idemix身份验证技术提供了类似于标准X.509证书所保证的信任模型和安全保证。但是与X.509相比,Idemix提供了底层密码算法。这些算法有效地提供了高级隐私特征。我们将在下面的技术部分详细地比较Idemix和X.509。
为了理解如何在Hyperledger Fabric中使用Idemix,我们需要查看哪些Fabric组件与Idemix中的用户、发行者和验证者有关。
用户是Java SDK API。未来Fabric的其他SDK也将支持Idemix。
Fabrci提供了两种可能的Idemix发行人:
1、用于生产或开发环境的Fabric CA
2、用于开发环境的idemixgen生成工具
验证者是Fabric中的一个Idemix MSP。
为了在Hyperledger Fabric中使用Idemix,需要以下三个基本步骤:
将这张图中的角色与上面一张图的角色进行比较。
Fabric CA(版本1.3或更高)已被增强为自动成为Idemix发行者。当Fabric CA服务器启动的时候(或通过CA服务器初始化命令初始化时),以下两个文件是会在fabric-ca-server的
Home目录下自动创建: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
使用Java SDK调用Idemix只需要一个额外的API:
org.hyperledger.fabric_ca.sdk.HFCAClient类中的idemixEnroll方法。
例如:假设hfcaClient是你的HFCAClient对象,x509Enrollment是org.hyperledger.fabric.sdk.Enrollment的对象,它与你的X509证书相关联。下面的调用将返回一个org.hyperledger.fabric.sdk.Enrollment对象,它与你的Idemix证书相关联: