Skip to content

FISCO-BCOS/group-signature-client

Repository files navigation

group-signature-client

PRs Welcome GitHub issues All releases

群/环签名客户端,通过向服务端发起请求生成签名,并将签名上链,然后调用群/环签名预编译合约实现签名的链上认证。关于群/环签名的开发示例,架构如下:

注意:当前分支为v3.x版本group-signature-client,仅适配于FISCO BCOS 3.0+; FISCO BCOS 2.0+ 适配版本请手动切换至master-2.0分支

代码结构

目录
说明
main/java/org/fisco/bcos/groupsig/app 客户端主逻辑,包括RPC调用和合约调用
main/java/org/fisco/bcos/groupsig/contract 由智能合约转换的java代码
main/resources/conf 客户端配置文件目录
main/resources/sol 链上部署的智能合约目录
main/resources/node 节点配置文件目录

部署依赖

部署服务端

群/环签名客户端要访问签名服务,因此需要先部署服务端,详细步骤可参考操作文档

部署FISCO BCOS

客户端可将群/环签名上链,若要使用链上验证功能,需要部署FISCO BCOS,并开启隐私模块开关。

FISCO BCOS详细搭建步骤可参考搭建第一个区块链网络

编译与配置

依赖部署完毕后,就可以拉取代码,编译并配置客户端。详细步骤如下:

编译客户端

git clone https://github.com/FISCO-BCOS/group-signature-client
# 进入客户端目录
cd group-signature-client
# 编译客户端需安装jdk v1.8及以上,gradle v4.6及以上
./gradlew build
# 编译成功后会生成目标目录dist

配置客户端

(1) 配置RPC服务:dist/conf/conn.json

  • ip:服务端IP,默认是127.0.0.1
  • port:服务端RPC监听端口,默认是8005
  • thread_num:线程数目,压测场景使用

(2) 配置日志:dist/conf/log4j.properties,dist/conf/clog.ini

  • 使用默认配置即可

(3) 配置区块链节点信息:dist/conf/node

  • dist/conf/目录下的config-sample.toml拷贝成config.toml
  • 将节点的nodes/127.0.0.1/sdk目录下的ca.crtsdk.crtsdk.key文件拷贝dist/conf/node目录下
  • config-sample.toml详细配置说明可参考配置中注释

使用客户端

配置完客户端后就可以开始体验它的相关功能了。

群签名示例

接口说明详见群签名接口文档,以下命令在dist目录下执行。

(1)创建群

创建群组group1,创建群时使用了A类型线性对。

# 参数说明
# 启动客户端程序:java -cp 'apps/*:lib/*:conf' org.fisco.bcos.groupsig.app.Main
# args[0] : 调用的接口名称
# args[1:]: 调用的接口参数 
java -cp 'apps/*:lib/*:conf' org.fisco.bcos.groupsig.app.Main create_group 'group1' '123' '{"linear_type":"a", "q_bits_len":256, "r_bits_len":256}'

(2)群成员加入

在group1中加入群成员member1。

java -cp 'conf/:lib/*:apps/*' org.fisco.bcos.groupsig.app.Main join_group 'group1' 'member1'

(3) 生成群签名

生成群group1中成员member1对信息“hello”的群签名。

java -cp 'conf/:lib/*:apps/*' org.fisco.bcos.groupsig.app.Main group_sig 'group1' 'member1' 'hello'

(4) 产生群签名,将签名信息上链

首先生成群group1成员member1对信息“hello”的群签名,然后使用AMOP将群签名信息写到链上,返回合约地址。

java -cp 'conf/:lib/*:apps/*' org.fisco.bcos.groupsig.app.Main deploy_group_sig 'group1' 'member1' 'hello'

(5) 链上验证群签名

示例:验证部署于地址为0xd6c8a04b8826b0a37c6d4aa0eaa8644d8e35b79f合约处的群签名有效性(返回群签名验证结果true/false)。

java -cp 'conf/:lib/*:apps/*' org.fisco.bcos.groupsig.app.Main group_sig_verify '0xd6c8a04b8826b0a37c6d4aa0eaa8644d8e35b79f'

环签名示例

接口说明详见环签名接口文档

(1) 初始化环

调用127.0.0.1 8005端口的群签名服务(群签名RPC服务部署方法参考群/环签名RPC ),初始化环ring1(环成员公/私钥长度默认为1024bits)。

java -cp 'conf/:lib/*:apps/*' org.fisco.bcos.groupsig.app.Main setup_ring 'ring1'

(2) 加入环成员

在环ring1中加入一个环成员,可重复执行该命令来生成多个环成员。

java -cp 'conf/:lib/*:apps/*' org.fisco.bcos.groupsig.app.Main join_ring 'ring1'

(3) 生成环签名

为环ring1的位置0处的环成员生成对消息“hello”环签名,假设当前的环成员大于4。

java -cp 'conf/:lib/*:apps/*' org.fisco.bcos.groupsig.app.Main ring_sig 'hello' 'ring1' '0' '4'

(4) 生成环签名,并将签名信息上链

首先生成环ring1位置0成员对消息“hello”的环签名,然后使用AMOP将环签名信息写到链上,返回合约地址。

java -cp 'conf/:lib/*:apps/*' org.fisco.bcos.groupsig.app.Main deploy_ring_sig 'hello' 'ring1' '0' '4'

(5) 环签名信息链上验证

示例:验证部署于地址为0x2426edaa1173f65cd7d62c93c935bfde329d247c处合约中的环签名有效性,返回验证结果。

java -cp 'conf/:lib/*:apps/*' org.fisco.bcos.groupsig.app.Main ring_sig_verify '0x2426edaa1173f65cd7d62c93c935bfde329d247c'

注意事项

  • 环签名限制

由于环签名的签名长度以及签名/验证时间与环成员数目呈线性关系,为防止超gas,每个环的环成员数量不能超过32个。

  • 群签名算法签名和验证时间与群成员数目无关,具有良好的可扩展性。

  • 群签名算法签名长度与线性对参数设置有关,不同线性对的公私钥长度和签名长度(字节)如下:

线性对参数类型 私钥 公钥 签名
A:{"linear_type":"a","q_bit_len":256,"r_bit_len":256} 912 2700 1602
A1:{"linear_type":"a_one","order":512} 1293 5180 3102
E:{"linear_type":"e","q_bits_len":1024,"r_bits_len":160} 905 4148 2328
F:{"linear_type":"f","bit_len":256} 653 2358 1584

接口说明

详见接口文档

贡献代码

  • 我们欢迎并非常感谢您的贡献,请参阅代码贡献流程
  • 如项目对您有帮助,欢迎star支持!

加入社区

FISCO BCOS开源社区是国内活跃的开源社区,社区长期为机构和个人开发者提供各类支持与帮助。已有来自各行业的数千名技术爱好者在研究和使用FISCO BCOS。如您对FISCO BCOS开源技术及应用感兴趣,欢迎加入社区获得更多支持与帮助。

License

license

group-signature-client的开源协议为APACHE LICENSE 2.0. 详情参考LICENSE