本人也做fabric 项目搭建、开发、浏览器、sdk、共识算法的测试、改进等工作、有问题或需要,可以加q 260261476
,欢迎指导!
介绍
本章介绍了如何使用PBC库实现Boneh-Lynn-Shacham(BLS)签名方案。它基于文件 example / bls.c(见安装目录)。我们有三个素数为 r 的 G1,G2,GT 组,以及一个双线性映射 e,它从 G1 提取元素,从 G2 提取元素,并输出 GT 元素。我们将它们与系统参数 g 一起公布,系统参数 g 是 G2 的随机选择元素。Alice 希望对发送给 Bob 消息签名。她按如下方式生成她的公、私钥。她的私钥是 Zr 的随机元素 x,而她对应的公钥是 g^x。
当要签名消息时,Alice 将消息散列到 G1 的某个元素 h,然后输出签名 h^x。为了验证签名 σ,Bob 检查下面公式是否满足以验证签名的正确性。
e(h,g^x)= e(σ,g)
// Boneh-Lynn-Shacham short signatures demo.
//
// See the PBC_sig library for a practical implementation.
//
// Ben Lynn
#include "/usr/local/include/pbc/pbc.h"
#include "/usr/local/include/pbc/pbc_test.h"
int main(int argc, char **argv) {
// 定义一个双线性对
pairing_t pairing;
// 定义一些参数
element_t g, h;
element_t public_key, sig;
element_t secret_key;
element_t temp1, temp2;
// 实例化 paring
pbc_demo_pairing_init(pairing, argc, argv);
// 实例化 元素 属于 G1.G2,GT
element_init_G2(g, pairing);
element_init_G2(public_key, pairing);
element_init_G1(h, pairing);
element_init_G1(sig, pairing);
element_init_GT(temp1, pairing);
element_init_GT(temp2, pairing);
// 实例化 元素 属于 Zr(表示以r为模的整数环。) r是阶 (G1.G2,GT)
element_init_Zr(secret_key, pairing);
printf