PBC Library Manual(PBC库手册)翻译(五)

目录

 

5.参数(Param)函数

 5.1 Param生成


5.参数(Param)函数

Pairing是由 pairing parameter初始化得到,这些参数是pbc_param_t类型的对象。一些应用程序可以忽略此数据类型,因为pairing_init_set_str()函数在后台处理了这类数据:这个函数读取了一个字符串作为一个pbc_param_t,然后使用这些参数初始化了pairing。

// 从字符串s初始化pairing参数,成功则返回0,其他情况返回1
int pbc_param_init_set_str(pbc_param_t par, const char *s)

// 同样的,但是最多读取len个字节。如果len为0,这个函数和上面的函数相同
// 成功则返回0,其他情况返回1
int pbc_param_init_set_buf(pbc_param_t par, const char *s, size_t len)

// 以文本格式将pairing参数写入“stream”文件句柄
void pbc_param_out_str(FILE *stream, pbc_param_t p)

// 释放p。当p不再用时释放它
void pbc_param_clear(pbc_param_t p)

 5.1 Param生成

在param子目录中的这些参数用于准备示例参数。

我们大致按照发现的顺序用大写字母来标记pairing族,以便我们查阅。A类型是最快的。当元素需要很短且速度较慢时,D类型是一个不错的选择。F类型元素更短,但是速度也更慢。速度差异依赖于硬件,并且使用预处理时也会发生变化。B类型和C类型未实现。

pbc_cm_t数据类型保存用于生成D类型和G类型曲线的CM参数。

// 初始化cm
void pbc_cm_init(pbc_cm_t cm)

// 释放cm
void pbc_cm_clear(pbc_cm_t cm)

int pbc_cm_search_d(int(*callback)(pbc_cm_t, void*), void *data, unsigned int D, unsigned int bitlimit)

对于给定的判别式D,搜索适合于密码学的D类型pairing(嵌入度为6的MNT曲线)。群的阶数最多是bitlimit位。对于找到的每一组CM参数,调用带有pbc_cm_t和给定的void*的callback函数。如果callback返回非0,停止查找并且返回那个值,否则返回0。


int pbc_cm_search_g(int(*callback)(pbc_cm_t, void*), void *data, unsigned int D, unsigned int bitlimit)

 对于给定的判别式D,查找适合于密码学的G类型pairing(Freeman曲线)。群的阶数最多是bitlimit位。对于找到的每一组CM参数,调用带有pbc_cm_t和给定的void*的callback函数。如果callback返回非0,停止查找并且返回那个值,否则返回0。


void pbc_param_init_a_gen(pbc_param_t par, int rbits, int qbits)

 生成A类型pairing参数,并存储在par中,其中群的阶数r为 rbits 长,并且基域q的阶数为 qbits 长。元素以 qbits 来代表。

为了安全起见,一般的离散对数算法在阶r的群中必须不可行(infeasible),有限域离散对数算法在阶 q^2 的有限域中必须不可行, 例如,rbits = 160,qbits = 512。

param/a.param文件包含适合密码学使用的类型A的参数。


void pbc_param_init_i_gen(pbc_param_t par, int group_size)

 生成I类型pairing参数,并存储在par中,其中群阶数至少为2^group_size。

要像64位对称加密一样的安全,group_sie 可以是150。为了获得128位对称加密算法的安全级别,group_size可以是694。

param/i.param文件包含适合密码学使用的类型I的参数。


void pbc_param_init_a1_gen(pbc_param_t param, mpz_t n)

生成A1类型的pairing参数并存储在param中。群的阶数为n。基域的阶数要稍微长一些。为了安全起见,一般的离散对数算法必须在阶数n的群中不可行,有限域离散对数算法在阶大约为n^2的有限域中不可行。此外,n应该很难因数分解。

例如:n是两个素数的乘积,每个素数至少512位。

param/a1.param文件包含A1类型pairing的样本参数,但是它仅用于基准测试:如果没有n(群的阶数)的分解因数是没有用的。


void pbc_param_init_d_gen(pbc_param_t p, pbc_cm_t cm)

 D型曲线是使用复数乘法(complex multiplication, CM)方法生成的。这个函数将p设置为来自于CM参数 cm 的D类型pairing的参数其他库调用搜索适当的CM参数,结果可以传递给这个函数。

为了安全起见,一般的离散对数算法在阶r的群中必须不可行(infeasible),有限域离散对数算法在阶 q^6 的有限域中必须不可行。对于通常的CM参数,r比q小几个比特。

使用D类型的pairing允许群G1的元素非常的短,通常为170位。由于某种技巧,G2群的元素只需要3倍长,也就是大约510位,而不是6倍长。这不像F型pairing那么短,但是速度快很多。

我有时把D型曲线称为数字的三元组:判别式、素数q中的比特数、素数r中的比特数。gen/listmnt程序打印出了这几个数。

在捆绑的D型曲线的参数为曲线9563-201-181,62003-159-158和496659-224-224,分别缩写为param/d201.param, param/d159.param, 和param/d225.param。

有关如何生成D类型的pairing参数,参照gen/listmnt.c和gen/gendparam.c。


void pbc_param_init_e_gen(pbc_param_t p, int rbits, int qbits)

 生成E类型的pairing参数并存储在p中,其中群的阶数r为 rbits长,基域的阶数q为 qbits长。为了安全起见,一般的离散对数算法在阶r的群中必须不可行(infeasible),有限域离散对数算法在阶 q 的有限域中必须不可行, 例如,rbits = 160,qbits = 1024。

这个pairing只是一种好奇:它完全可以素数阶的域中实现,也就是说,只需要素数取算数模。并且不需要拓展一个域。

如果离散对数在域拓展中被发现比以前认为的更容易解决,或者离散对数在椭圆曲线中可以像在有限域中一样容易解决,那么这个pairing类型会变得有用。


void pbc_param_init_f_gen(pbc_param_t p, int bits)

 生成F类型的pairing参数并存储在p中。群的阶数r和基域的阶数q都大致为bits位的数字。为了安全起见,一般的离散对数算法在阶r的群中必须不可行(infeasible),有限域离散对数算法在阶 q^12 的有限域中必须不可行,例如bits = 160。

当最小化带宽最重要时(如短签名),应该使用F类型。目前F类型的实现使其很缓慢。

如果有限域离散对数算法进一步改进,D类型的pairing将不得不使用更大的域,但是F类型在一定程度上仍然可以保持很短。


void pbc_param_init_g_gen(pbc_param_t p, pbc_cm_t cm)

 G型曲线可以使用复数乘法(CM)方法生成。这个函数将从CM参数 cm 设置p为G类型pairing的参数。嵌入度为10。

为了安全起见,一般的离散对数算法在阶r的群中必须不可行(infeasible),有限域离散对数算法在阶 q^6 的有限域中必须不可行。对于通常的CM参数,r比q要小几位。

目前它的速度很慢,所以F型是更好的选择。

param/g149.param文件包含一个群和域都是149位的G类型 pairing参数。

 

注:由于本章的内容自己理解的较浅,且涉及到一些不懂得数学知识,翻译的不是很通顺和标准,有误之处请指出。

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值