如何在Charm crypto中设置配对组的顺序

时间:2015-10-10 10:33:57

标签: python cryptography charm-crypto

我正在尝试使用charm crypto框架实现一个方案。为此,我需要限制配对组的顺序。在文档中提到所有配对组都是主要的顺序p。有没有办法设置和检索组的顺序?

这是一些初始化代码:

recipes

1 个答案:

答案 0 :(得分:0)

您不能随意限制组的顺序,因为它是静态定义的。仅更改订单会导致错误的数学运算。有关实际的曲线/组定义,请参阅pairingcurves.py

Charm不提供随机生成组的API。你必须使用其他一些手段。您可以为不同类型的配对(A, A1,D,E,F,G)定义自己的双线性组,并通过file path加载它:

group = PairingGroup('path/to/your.curve', param_file=True)

找到一条好的曲线是很棘手的,所以不应该掉以轻心。或者您可以使用符合您需求的现有曲线,但您需要将其定义符合PBC框架语法。或者,您可以尝试使用MIRACL或RELIC组。

称为SS512的双线性组具有159位的顺序,因此您可以使用jPBC轻松生成类似大小的组:

TypeACurveGenerator acg = new TypeACurveGenerator(159, 512);
System.out.println(acg.generate().toString());

如果这个问题是关于在Charm中使用复合配对,那么这肯定是可能的,但是使用复合配对的大多数(所有?)方案在素数阶配对组中没有变化。由于Charm主要是一个原型框架,所以这是可以接受的。

如果您需要复合订单配对,则需要使用A1类型配对(以PBC术语表示)。这是一个随机生成的3个素数组合顺序,配对512位:

type a1
p 1670989300461616676020115835196624302572015979741737622588414172392006868526486484884570321557721963197638289051694226860029659217040445686227725866093025893199423787713616626672757609704165197428442342008003828808450677009862027725351326816526944993760066091035498153554504093779461048411316013603195971067672308536313762529018467620342707812387949408799890849708954393542918305728285021157211449323969172048055050509532384121122664412498844071023691473088832866379
n 609850109657524334313910888757892081230662766329101322112559916931389368075360030979770190349533563210816893814486944109499875626657096965776542286895264924525337148800590009734583069235096787382643190513870010514033093799219718147938440443987936129109513171910765749472446749554547827887341610804086120827617630852669256397451995481876900661455455988613098850258742479395225659024921540568325346468601887608779215514427877416468125697992278858037843603317092287
n0 8505241857674726137023630400543607424307642763093227742803963199629609197431754602210402024133058838940680654387728383432014899362154746576168888879287087
n1 6728838950500080306008250663471535622833113558890962570274290389468902237095474435002792009761303551917673603722453122814539738669387524716830981925740419
n2 10656051345714616867334012480608522414320097962876120231224626211497062700168731928194215198773439101914013339645791513272716800476458903122389271111043579
l 2740

这是通过jPBC使用以下代码生成的:

TypeA1CurveGenerator a1 = new TypeA1CurveGenerator(3, 512);
System.out.println(a1.generate().toString());

自担风险。