群签名&&环签名

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.cmakeFISCO 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源是否配置正确)

  1. [centos]
  2. sudo yum -y install git
  3. sudo yum -y install dos2unix
  4. sudo yum -y install lsof
  5.  
  6. [ubuntu]
  7. sudo apt install git
  8. sudo apt install lsof
  9. sudo apt install tofrodos
  10. ln -s /usr/bin/todos /usr/bin/unxi2dos
  11. 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):

  1. #用dos2unix格式化可执行脚本,防止windows文件上传到unix,无法被正确解析
  2. bash format.sh
  3. #用deploy_pbc.sh脚本安装pbc和pbc-sig
  4. sudo bash deploy_pbc.sh

(2) 打开群签名&&环签名ethcall编译开关

FISCO BCOS群签名和环签名相关的编译开关是在使用cmake生成Makefile文件时通过-DGROUPSIG=ON或者-DGROUPSIG=OFF设置,默认是关闭该开关的:

  1. #新建build文件用于存储编译文件
  2. cd FISCO-BCOS && mkdir -p build && cd build
  3. #cmake生成Makefile时打开编译开关
  4. #**centos系统:
  5. cmake3 -DGROUPSIG=ON -DEVMJIT=OFF -DTESTS=OFF -DMINIUPNPC=OFF ..
  6. #**ubuntu系统:
  7. cmake -DGROUPSIG=ON -DEVMJIT=OFF -DTESTS=OFF -DMINIUPNPC=OFF ..

(3) 编译并运行fisco bcos

  1. #编译fisco-bcos
  2. make -j4 #注: 这里j4表明用4线程并发编译,可根据机器CPU配置调整并发线程数
  3. #运行fisco-bcos: 替换节点启动的可执行文件,重启节点:
  4. bash start.sh

2.2 关闭群签名&&环签名ethcall

(1) 关闭群签名&&环签名ethcall编译开关

编译fisco bcos时,将cmake的-DGROUPSIG编译选项设置为OFF可关闭群签名&&环签名ethcall功能:

  1. #新建build文件用于存储编译文件
  2. cd FISCO-BCOS && mkdir -p build && rm -rf build/* && cd build
  3. #关闭群签名&&环签名ethcall开关
  4. #centos系统:
  5. cmake3 -DGROUPSIG=OFF -DEVMJIT=OFF -DTESTS=OFF -DMINIUPNPC=OFF ..
  6. #ubuntu系统:
  7. cmake -DGROUPSIG=OFF -DEVMJIT=OFF -DTESTS=OFF -DMINIUPNPC=OFF ..

(2) 编译并运行fisco bcos

  1. #编译fisco-bcos
  2. make -j4 #注: 这里j4表明用4线程并发编译,可根据机器CPU配置调整并发线程数
  3. #运行fisco-bcos: 替换节点启动的可执行文件,重启节点:
  4. bash start.sh

3 使用

在区块链上使用群签名&&环签名功能,还需要部署以下服务:

(1) 群签名&&环签名客户端: sig-service-client

sig-service-client客户端提供了以下功能:

(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向链上发签名信息,群签名&&环签名服务为客户端提供签名生成服务