我是靠谱客的博主 时尚发带,最近开发中收集的这篇文章主要介绍双线性映射(Bilinear Maps)实现(有限域、循环群)前言一、前置知识二、什么是双线性映射?三、验证,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、前置知识
    • 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} a1 ∈ in G , a × times × a − 1 a^{-1} a1 = a − 1 a^{-1} a1 × 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)实现(有限域、循环群)前言一、前置知识二、什么是双线性映射?三、验证所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(47)

评论列表共有 0 条评论

立即
投稿
返回
顶部