9. 使用同态加密与群环签名¶
标签:隐私合约
隐私保护
合约开发
同态加密
环签名
群签名
隐私保护是联盟链的一大技术挑战。为了保护链上数据、保障联盟成员隐私,并且保证监管的有效性,FISCO BCOS以预编译合约的形式集成了同态加密、群/环签名验证功能,提供了多种隐私保护手段。
文档一、二节分别对同态加密和群/环签名算法以及相关应用场景进行了简单介绍,第三、四节则详细介绍了FISCO BCOS隐私保护模块启用方法以及调用方式。
注解
FISCO BCOS 2.3.0+ 支持同态加密、群签名和环签名
FISCO BCOS 2.3.0, 2.4.0以及2.4.1,需手动编译二进制启用隐私保护模块
FISCO BCOS 2.5.0+ 默认启用隐私保护模块
同态加密¶
算法简介¶
同态加密(Homomorphic Encryption)是公钥密码系统领域的明珠之一,已有四十余年的研究历史。其绝妙的密码特性,吸引密码学家前赴后继,在业界也受到了广泛的关注。
同态加密本质是一种公钥加密算法,即加密使用公钥pk,解密使用私钥sk;
同态加密支持密文计算,即由相同公钥加密生成的密文可以计算f( )操作,生成的新密文解密后恰好等于两个原始明文计算f( )的结果;
同态加密公式描述如下:
FISCO BCOS采用的是paillier加密算法,支持加法同态。paillier的公私钥兼容主流的RSA加密算法,接入门槛低。同时paillier作为一种轻量级的同态加密算法,计算开销小易被业务系统接受。因此经过功能性和可用性的权衡,最终选定了paillier算法。
功能组件¶
FISCO BCOS同态加密模块提供的功能组件包括:
使用方式¶
对于有隐私保护需求的业务,如果涉及简单密文计算,可借助本模块实现相关功能。凡是上链的数据可通过调用paillier库完成加密,链上的密文数据可通过调用paillier预编译合约实现密文的同态加运算,密文返还回业务层后,可通过调用paillier库完成解密,得到执行结果。具体流程如下图所示:
应用场景¶
在联盟链中,不同的业务场景需要配套不同的隐私保护策略。对于强隐私的业务,比如金融机构之间的对账,对资产数据进行加密是很有必要的。在FISCO BCOS中,用户可以调用同态加密库对数据进行加密,共识节点执行交易的时候调用同态加密预编译合约,得到密文计算的结果。
群/环签名¶
算法简介¶
群签名
群签名(Group Signature)是一种能保护签名者身份的具有相对匿名性的数字签名方案,用户可以代替自己所在的群对消息进行签名,而验证者可以验证该签名是否有效,但是并不知道签名属于哪一个群成员。同时,用户无法滥用这种匿名行为,因为群管理员可以通过群主私钥打开签名,暴露签名的归属信息。群签名的特性包括:
匿名性:群成员用群参数产生签名,其他人仅可验证签名的有效性,并通过签名知道签名者所属群组,却无法获取签名者身份信息;
不可伪造性:只有群成员才能生成有效可被验证的群签名;
不可链接性:给定两个签名,无法判断它们是否来自同一个签名者;
可追踪性:在监管介入的场景中,群主可通过签名获取签名者身份。
环签名
环签名(Ring Signature)是一种特殊的群签名方案,但具备完全匿名性,即不存在管理员这个角色,所有成员可主动加入环,且签名无法被打开。环签名的特性包括:
不可伪造性:环中其他成员不能伪造真实签名者签名;
完全匿名性:没有群主,只有环成员,其他人仅可验证环签名的有效性,但没有人可以获取签名者身份信息。
使用方式¶
有签名者身份隐匿需求的业务可借助本模块实现相关功能。签名者通过调用群/环签名库完成对数据的签名,然后将签名上链,业务合约通过调用群/环签名预编译合约完成签名的验证,并将验证结果返还回业务层。如果是群签名,那么监管方还能打开指定签名数据,获得签名者身份。具体流程如下图所示:
应用场景¶
群/环签名由于其天然的匿名性,在需要对参与者身份进行隐匿的场景中有广泛的应用前景,例如匿名投票、匿名竞拍、匿名拍卖等等,甚至在区块链UTXO模型中可用于实现匿名转账。同时,由于群签名具备可追踪性,可以用于需要监管介入的场景,监管方作为群主或者委托群主揭露签名者身份。