PBC库学习记录 1 -安装和初步使用PBC

PBC库学习记录 1

PBC library是一个免费可移植的C库,可以基于配对的密码系统进行快速原型设计,它为循环群提供了一个抽象的双线性配对的接口,使程序员免受数学细节的影响。

PBC library是基于GMP library的,PBC API也深受GMP API影响。

PBC library homepage: https://crypto.stanford.edu/pbc/

GMP library homepage: https://gmplib.org/

这个学习记录是依照PBC library官方文档撰写的:https://crypto.stanford.edu/pbc/manual/ch01.html

安装PBC

1. 安装GMP库

2. 安装PBC库

在PBC主页下载然后解压。
在Linux 和 Mac OS X上,执行

./configure
make
make install

在Windows上执行时,configure命令需要几个选项

./configure -disable-static -enable-shared

PBC默认安装在/usr/local/lib. 在某些系统这可能并非是library路径。一种解决方法是修改 /etc/ld.so.conf 文件然后执行 ldconfig。具体方法参考PBC library 学习笔记(一)中介绍的链接 ldconfig命令。

快速启动

我们可以用下面的方式来快速使用。

测试两个循环群的双线性映射 G1×G2→GT ,这三个群的阶都是素数r.
在PBC安装文件解压的路径执行

pbc/pbc

然后输入

g := rnd(G1);
g;

第一行生成 G1 群中的一个元素 g,第二行打印出 g 的值。再输入

h := rnd(G2);
h;

h 是 G2 群中的一个元素。事实上,默认的配对pbc是对称的,因此G1和G2实际上是同一个群,但是一般而言它们是不同的。输入

pairing(g,h);

计算应用于g和h的配对。
g和h的阶数都是r。我们生成两个1到r之间的随机数

a := rnd(Zr);
b := rnd(Zr);

根据双线性映射,下面两行语句的结果应该是相同的

pairing(g^a,h^b);
pairing(g,h)^(a*b);

基本使用

要使用PBC库,程序中应该包含头文件 pbc.h

#include 

并且链接PBC 库和 GMP 库,例如

gcc program.c -L. -lpbc -lgmp

pbc.h 中已经包含了 gmp.h.

PBC在几个方面遵从了 GMP:

  • 输出参数通常在输入参数之前。
  • 相同的变量可以在一次调用中用作输入和输出。
  • 在使用变量之前,它必须被初始化一次。当不再需要时,它必须被清除。为了提高效率,应该避免不必要的初始化和清理。
  • 在函数调用中,以 _t 结尾的PBC变量与GMP变量表现相同:作为引用来调用。换句话说,就像在GMP中一样,如果一个函数修改了输入变量,那么当控制权返回给调用者时,该变量仍然会被修改。
  • 与GMP一样,变量在需要时自动分配内存。默认情况下,malloc() 等会被调用,但是这可以改变。
  • PBC函数大多是可重入的。

由于PBC库基于GMP,GMP类型也可以使用。GMP拥有整数类型 mpz_t ,有理数类型 mpq_t 等等。与之相对,PBC使用 element_t 数据类型表示不同代数结构的元素,比如椭圆曲线组,多项式环和有限域。函数假设它们的输入来自于适当的代数结构。

PBC数据类型和功能可以分类如下。只需前两个就可以满足一系列应用。

  • element_t: 代数结构的元素。
  • pairing_t: 元素所属的配对(pairing);可以从param子目录中与PBC捆绑的示例配对参数初始化。
  • pbc_param_t: 用于生成配对参数。
  • pbc_cm_t: 通过CM方法构造曲线的参数;有时为pbc_param_t 所需。
  • field_t: 代数结构:群、环和域;在pairing_t内部中被使用。
  • 一些杂项函数,比如控制随机比特生成的函数。

在给定的数据类型上操作的函数通常具有相同的前缀,例如,涉及element_t对象的函数以 element_ 开头。

你可能感兴趣的:(密码学,PBC)