概述
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 前言
- 一、前置知识
- 1.域
- 1.1有限域
- 2.群
- 2.1 群
- 2.2 循环群
- 二、什么是双线性映射?
- 三、验证
- 1.导包
- 2.实现代码
- 3.运行结果
前言
对于学习双线性映射知识过程中的一些理解
一、前置知识
如果对这部分知识比较了解可略过
1.域
域中元素进行加法、减法、乘法、除法之后运算的结果依然在域内
ex: 有理数集合,实数集合
反例:整数集合
1.1有限域
域F只包含有限个元素
阶:有限域中元素的个数称为有限域的阶;每个有限域的阶必为素数的幂,即有限域的阶可表示为
p
n
p^n
pn(p为素数,n是正整数),记为GF(
p
n
p^n
pn)
2.群
2.1 群
群G有四个特性(设该群为乘法群)
1.封闭性,群中元素进行乘法运算后的结果依然在群中
2.结合律,
∀
forall
∀a,b,c
∈
in
∈G, a
×
times
×(b
×
times
×c) = (a
×
times
×b)
×
times
×c
3.存在单位元(幺元)
∃
exists
∃e
∈
in
∈ G,
∀
forall
∀a
∈
in
∈ G, a
×
times
×e = e
×
times
×a = e (加法的单位元是0,乘法的单位元是1)
4.任意元素都存在逆元
∃
exists
∃e
∈
in
∈ G,
∀
forall
∀a
∈
in
∈ G,
∃
exists
∃
a
−
1
a^{-1}
a−1
∈
in
∈ G , a
×
times
×
a
−
1
a^{-1}
a−1 =
a
−
1
a^{-1}
a−1
×
times
×a = e
2.2 循环群
循环群中所有的元素都是由一个元素生成,也就是所有的元素都是形如 g n g^n gn = g ⋅ cdot ⋅g ⋅ cdot ⋅ ⋅ cdot ⋅ ⋅ cdot ⋅ ⋅ cdot ⋅ ⋅ cdot ⋅g(n个g),n为任意整数。这个生成所有元素的元素g称为生成元
循环群的阶:设G是由g
∈
in
∈G生成的循环群,使得
g
n
=
e
g^n=e
gn=e成立的最小正整数n称为群G的阶,记作|G|=n
如果|G|=n,则
g
n
g^n
gn=e(单位元),群G为有限循环群
G={
g
g
g,
g
2
g^2
g2,
g
3
g^3
g3,
⋅
cdot
⋅
⋅
cdot
⋅
⋅
cdot
⋅,
g
n
=
e
g^n=e
gn=e}
二、什么是双线性映射?
双线性映射有三个特性:
1、双线性, 即
∀
forall
∀
u
,
v
u,v
u,v
∈
in
∈ G,
a
,
b
a,b
a,b
∈
in
∈
Z
p
Z_p
Zp , e(
u
a
,
v
b
u^a,v^b
ua,vb) = e(
u
,
v
)
a
b
u,v)^{ab}
u,v)ab
2、非退化性,
e
(
g
,
g
)
e(g,g)
e(g,g)
≠
neq
= 1
3、可计算性,存在有效的算法实现该映射
三、验证
1.导包
导入JPBC相关jar包
2.实现代码
import it.unisa.dia.gas.jpbc.Element;
import it.unisa.dia.gas.jpbc.Field;
import it.unisa.dia.gas.jpbc.Pairing;
import it.unisa.dia.gas.plaf.jpbc.pairing.PairingFactory;
public class JPBCDemo {
public static void main(String[] args) {
Pairing bp = PairingFactory.getPairing("a.properties");
Field Zr = bp.getZr();
Field G1 = bp.getG1();
Field G2 = bp.getG2();
Element g1 = G1.newRandomElement();
Element g2 = G2.newRandomElement();
Element a = Zr.newRandomElement();
Element b = Zr.newRandomElement();
Element g_a = g1.duplicate().powZn(a);
Element g_b = g2.duplicate().powZn(b);
Element egg_ab = bp.pairing(g_a, g_b);
Element egg = bp.pairing(g1, g2);
Element ab = a.duplicate().mul(b);
Element egg_ab_p = egg. duplicate().powZn(ab);
if (egg_ab .isEqual(egg_ab_p))
System.out.println("Yes");
else
System.out.println("No");
}
}
3.运行结果
最后
以上就是时尚发带为你收集整理的双线性映射(Bilinear Maps)实现(有限域、循环群)前言一、前置知识二、什么是双线性映射?三、验证的全部内容,希望文章能够帮你解决双线性映射(Bilinear Maps)实现(有限域、循环群)前言一、前置知识二、什么是双线性映射?三、验证所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复