群/环签名客户端,通过向服务端发起请求生成签名,并将签名上链,然后调用群/环签名预编译合约实现签名的链上认证。关于群/环签名的开发示例,架构如下:
注意:当前分支为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.crt
、sdk.crt
和sdk.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开源技术及应用感兴趣,欢迎加入社区获得更多支持与帮助。
group-signature-client的开源协议为APACHE LICENSE 2.0. 详情参考LICENSE。