区别
我们常使用type A,type A1两种曲线。type A是素数阶的,type A1与其很类似,但其
G
1
,
G
2
,
G
T
G_1,G_2,G_T
G1,G2,GT的阶是合数
N
N
N.
N
N
N是一系列素数的乘积
N
=
p
1
p
2
.
.
.
p
n
N=p_1 p_2...p_n
N=p1p2...pn.对双线性映射
e
:
G
1
×
G
2
→
G
T
e:G_1 \times G_2 \rightarrow G_T
e:G1×G2→GT同样满足双线性的性质。
合数阶群与素数阶群的区别在于,他有一系列子群:阶为
p
i
p_i
pi的子群
G
p
i
(
i
∈
{
1
,
2
,
.
.
.
,
n
}
)
G_{p_i} (i \in \{1,2,...,n\})
Gpi(i∈{1,2,...,n}).对于不同的子群之间是正交的.
e
(
h
i
,
g
j
)
=
1
(
h
i
∈
G
P
i
,
g
i
∈
G
p
j
)
e(h_i,g_j)=1 (h_i \in G_{P_i} ,g_i \in G_{p_j})
e(hi,gj)=1(hi∈GPi,gi∈Gpj)
使用
public static void main(String[] args) {
// TODO Auto-generated method stub
int num=3;
TypeA1CurveGenerator pg = new TypeA1CurveGenerator(num, 517);
PairingParameters s=pg.generate();
Pairing pairing=PairingFactory.getPairing(s);
Field Zn=pairing.getZr();
Field Gt=pairing.getGT();
Element zn1=Zn.newRandomElement().getImmutable();
Element gt1=Gt.newRandomElement().getImmutable();
System.out.println("zn1:"+zn1.toString());
System.out.println("gt:"+gt1.toString());
Element generator=pairing.getG1().newRandomElement().getImmutable();
//使用生成阶为pi的子群,生成随机元素 :
Element Gp1=ElementUtils.getGenerator(pairing, generator, s, 0, num).getImmutable();
System.out.println("Gp1:"+Gp1.toString());
}