群签名&&环签名
1 基本介绍
1.1 场景
FISCO-BCOS实现了群签名和环签名链上验证功能,主要包括如下使用场景:
(1)群签名场景
- 场景1: 机构内成员(C端用户)或机构内下属机构通过机构将群签名信息上链,其他人在链上验证签名时,仅可获知签名所属的群组,却无法获取签名者身份,保证成员的匿名性和签名的不可篡改性;(如拍卖、匿名存证、征信等场景)
场景2:B端用户将生成的群签名通过AMOP发送给上链结构(如webank),上链机构将收集到的群签名信息统一上链(如竞标、对账等场景),其他人验证签名时,无法获取签名者身份,保证成员的匿名性,监管可通过可信第三方追踪签名者信息,保证签名的可追踪性。(2)环签名场景
场景1(匿名投票):机构内成员(C端用户)对投票信息进行环签名,并通过可信机构(如webank)将签名信息和投票结果写到链上,其他人可在链上验证签名时,仅可获取发布投票到链上的机构,却无法获取投票者身份信息
- 其他场景(如匿名存证、征信):场景与群签名匿名存证、征信场景类似,唯一的区别是任何人都无法追踪签名者身份
- 匿名交易:在UTXO模型下,可将环签名算法应用于匿名交易,任何人都无法追踪转账交易双方;
1.2 相关代码
FISCO BCOS提供了群签名&&环签名链上验证功能,下表详细介绍了相关代码模块:
模块 | 代码 | 说明 |
依赖软件安装模块 | scripts/install_pbc.shdeploy_pbc.sh | 群签名库的实现依赖于pbc和pbc-sig库, 调用deploy_pbc.sh安装 |
群签名,环签名源码 | deps/src/group_sig_lib.tgz | 群签名&&环签名库源码压缩包 |
实现模块 | libevm/ethcall/EthcallGroupSig.hlibevm/ethcall/EthcallRingSig.h | 使用ethcall,调用群签名&&环签名库,实现群签名&&环签名链上验证功能 |
编译模块 | cmake/FindPBC.cmakecmake/ProjectGroupSig.cmake | FISCO BCOS中编译群签名&&环签名库源码相关的cmake文件 |
为了给用户提供最大的使用灵活性,FISCO BCOS支持群签名&&环签名ethcall开关功能(默认关闭群签名&&环签名ethcall):
关闭群签名&&环签名ethcall验证功能:群签名&&环签名库以及群签名&&环签名验证实现模块均没被编译到FISCO BCOS中,编译速度较快,但FISCO BCOS不支持群签名&&环签名链上验证功能;
开启群签名&&环签名ethcall验证功能:群签名&&环签名库以及相关代码被编译到FISCO BCOS中,编译速度稍慢,但支持群签名&&环签名链上验证功能。
下节详细描述了开启和关闭群签名&&环签名ethcall的部署方法。
2 部署
开启和关闭群签名&&环签名ethcall之前,必须保证您的机器可正确部署FISCO BCOS,FISCO BCOS详细部署方法可参考FISCO BCOS区块链操作手册.
2.1 开启群签名&&环签名ethcall
(1) 安装依赖软件
① 安装基础依赖软件
部署FISCO BCOS之前需要安装git, dos2unix和lsof依赖软件:
- git: 用于拉取最新代码
- dos2unix && lsof: 用于处理windows文件上传到linux服务器时,可执行文件无法被linux正确解析的问题;针对centos和ubuntu两种不同的操作系统,可分别用以下命令安装这些依赖软件:
(若依赖软件安装失败,请检查yum源或者ubuntu源是否配置正确)
- [centos]
- sudo yum -y install git
- sudo yum -y install dos2unix
- sudo yum -y install lsof
- [ubuntu]
- sudo apt install git
- sudo apt install lsof
- sudo apt install tofrodos
- ln -s /usr/bin/todos /usr/bin/unxi2dos
- ln -s /usr/bin/fromdos /usr/bin/dos2unix
② 安装群签名依赖软件pbc和pbc-sig
群签名依赖pbc和pbc-sig,因此打开群签名和环签名ethcall开关前,必须先安装pbc和pbc-sig,为了方便用户操作,FISCO BCOS提供了pbc和pbc-sig的部署脚本(支持在centos和ubuntu系统安装pbc和pbc-sig):
- #用dos2unix格式化可执行脚本,防止windows文件上传到unix,无法被正确解析
- bash format.sh
- #用deploy_pbc.sh脚本安装pbc和pbc-sig
- sudo bash deploy_pbc.sh
(2) 打开群签名&&环签名ethcall编译开关
FISCO BCOS群签名和环签名相关的编译开关是在使用cmake生成Makefile文件时通过-DGROUPSIG=ON或者-DGROUPSIG=OFF设置,默认是关闭该开关的:
- #新建build文件用于存储编译文件
- cd FISCO-BCOS && mkdir -p build && cd build
- #cmake生成Makefile时打开编译开关
- #**centos系统:
- cmake3 -DGROUPSIG=ON -DEVMJIT=OFF -DTESTS=OFF -DMINIUPNPC=OFF ..
- #**ubuntu系统:
- cmake -DGROUPSIG=ON -DEVMJIT=OFF -DTESTS=OFF -DMINIUPNPC=OFF ..
(3) 编译并运行fisco bcos
- #编译fisco-bcos
- make -j4 #注: 这里j4表明用4线程并发编译,可根据机器CPU配置调整并发线程数
- #运行fisco-bcos: 替换节点启动的可执行文件,重启节点:
- bash start.sh
2.2 关闭群签名&&环签名ethcall
(1) 关闭群签名&&环签名ethcall编译开关
编译fisco bcos时,将cmake的-DGROUPSIG编译选项设置为OFF可关闭群签名&&环签名ethcall功能:
- #新建build文件用于存储编译文件
- cd FISCO-BCOS && mkdir -p build && rm -rf build/* && cd build
- #关闭群签名&&环签名ethcall开关
- #centos系统:
- cmake3 -DGROUPSIG=OFF -DEVMJIT=OFF -DTESTS=OFF -DMINIUPNPC=OFF ..
- #ubuntu系统:
- cmake -DGROUPSIG=OFF -DEVMJIT=OFF -DTESTS=OFF -DMINIUPNPC=OFF ..
(2) 编译并运行fisco bcos
- #编译fisco-bcos
- make -j4 #注: 这里j4表明用4线程并发编译,可根据机器CPU配置调整并发线程数
- #运行fisco-bcos: 替换节点启动的可执行文件,重启节点:
- bash start.sh
3 使用
在区块链上使用群签名&&环签名功能,还需要部署以下服务:
(1) 群签名&&环签名客户端: sig-service-client
sig-service-client客户端提供了以下功能:
- 访问群签名&&环签名服务rpc接口;
- 将群签名&&环签名信息写入链上(发交易)具体使用和部署方法请参考群签名&&环签名客户端操作手册.
(2) 群签名&&环签名服务:sig-service
sig-service签名服务部署在机构内,为群签名&&环签名客户端(sig-service-client)提供了如下功能:
- 群生成、群成员加入、生成群签名、群签名验证、追踪签名者身份等rpc接口;
- 环生成、生成环签名、环签名验证等rpc接口;在FISCO BCOS中,sig-service-client客户端一般先请求该签名服务生成群签名或环签名,然后将获取的签名信息写入到区块链节点;区块链节点调用群签名&&环签名ethcall验证签名的有效性。
sig-service的使用和部署方法请参考群签名&&环签名RPC服务操作手册.
4 注意事项
(1) 群签名&& 环签名ethcall兼容老版本FISCO BCOS
(2) 启用群签名&&环签名ethcall,并调用相关功能后,不能关闭该ethcall接口,否则验证区块时,群签名和环签名相关的数据无法找到验证接口,从而导致链异常退出
若操作者在开启并使用群签名&&环签名特性后,不小心关闭了该ethcall功能,可通过回滚fisco bcos到开启群签名&&环签名ethcall时的版本来使链恢复正常;
(3) 同一条链的fisco bcos版本必须相同
即:若某个节点开启了群签名&&环签名验证功能,其他链必须也开启该功能,否则在同步链时,无群签名&&环签名ethcall实现的节点会异常退出;
(4) 使用群签名&&环签名链上验证功能前,必须先部署群签名&&环签名服务和群签名&&环签名客户端
客户端sig-service-client向链上发签名信息,群签名&&环签名服务为客户端提供签名生成服务