日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

JPBC库的使用--双线性配对,ECC加密

發(fā)布時(shí)間:2023/12/31 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JPBC库的使用--双线性配对,ECC加密 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

JPBC簡(jiǎn)介

JPBC庫(kù)是ABE加密以及橢圓曲線加密等常用的加密庫(kù)。下載地址:http://gas.dia.unisa.it/projects/jpbc/index.html#.VTDrLSOl_Cw

1. 主要參數(shù)

a. 主要使用的橢圓曲線為TypeA型素?cái)?shù)階橢圓曲線,y2 = x3 + x 參數(shù)如下:

public static String curveParams = "type a\n"+ "q 87807107996633125224377819847540498158068831994142082"+ "1102865339926647563088022295707862517942266222142315585"+ "8769582317459277713367317481324925129998224791\n"+ "h 12016012264891146079388821366740534204802954401251311"+ "822919615131047207289359704531102844802183906537786776\n"+ "r 730750818665451621361119245571504901405976559617\n"+ "exp2 159\n" + "exp1 107\n" + "sign1 1\n" + "sign0 1\n";

TypeA1型為合數(shù)階橢圓曲線,使用較少。

b.一般隨機(jī)選擇元素為從G1,G2,Gt以及Zp域選擇,具體選擇如下。

public Cpabe(String param){this.pp = new PP();this.mk = new MK();PairingParameters params = new PropertiesParameters().load(new ByteArrayInputStream(param.getBytes()));this.pp.p = PairingFactory.getPairing(params);this.pp.g = this.pp.p.getG1().newRandomElement();//從G1域隨機(jī)選取元素//構(gòu)造主密鑰參數(shù)this.mk.beta = this.pp.p.getZr().newRandomElement();this.mk.g_alpha = this.pp.g.duplicate().powZn(this.pp.p.getZr().newRandomElement());//構(gòu)造公鑰參數(shù)this.pp.h = this.pp.g.duplicate().powZn(this.mk.beta);this.pp.y = this.pp.p.pairing(this.pp.g, this.mk.g_alpha);//雙線性配對(duì)操作 }

c. JPBC庫(kù)的基本元素為Element,有newElement方法,可以從byte構(gòu)造Element元素。

2. 雙線性配對(duì)

雙線性配對(duì)基于DBDH假設(shè),在密碼學(xué)有很廣泛的應(yīng)用,與基于離散對(duì)數(shù)難解性的指數(shù)運(yùn)算加密相比,具有更高的效率。在我的實(shí)驗(yàn)過(guò)程中,雙線性配對(duì)操作為1ms,進(jìn)行一次底數(shù)為1024為G1域上的元素,指數(shù)為160為Zp域的指數(shù)運(yùn)算用時(shí)為13ms左右,雙線性配對(duì)效率更高。

雙線性配對(duì)操作主要代碼

this.pp.y = this.pp.p.pairing(this.pp.g, this.mk.g_alpha);//雙線性配對(duì)操作,通過(guò)pairing來(lái)進(jìn)行

在ABE中,一般設(shè)定G1域和G2域?yàn)橄嗟鹊挠?#xff0c;將G1域和G2域的元素映射到Gt域。

3. ECC加密

ECC安全基礎(chǔ)為一般群模型,即在計(jì)算K=kG過(guò)程中,知道k和G很容易計(jì)算K,但是在知道K的情況下很難得到k。(這一小節(jié)使用的橢圓曲線為y2 = x3 + x)
橢圓曲線加密一般使用的為GF§域上的安全橢圓曲線y2 = x3 + ax + b,設(shè)定好橢圓曲線參數(shù),直接進(jìn)行運(yùn)算
  現(xiàn)在我們描述一個(gè)利用橢圓曲線進(jìn)行加密通信的過(guò)程:
  
1、ALice選定一條橢圓曲線Ep(a,b),并取橢圓曲線上一點(diǎn),作為基點(diǎn)G,G是系統(tǒng)公開(kāi)參數(shù)
  在設(shè)定好安全橢圓曲線的前提下,隨機(jī)選取元素作為生成元即可。

Element G = cpabe.pp.p.getGT().newRandomElement(); //基點(diǎn)

2、Alice選擇一個(gè)私有密鑰k,并生成公開(kāi)密鑰K=kG。
  這里為使用大整數(shù)作為私鑰

Random random1=new Random();BigInteger SK1= new BigInteger(160, random1);//大整數(shù)作為私鑰1//Element SK1 = cpabe.pp.p.getZr().newRandomElement(); //以Zp域隨機(jī)元素作為私鑰//System.out.println(SK1);//Date d1 = new Date();Element PK1=G.duplicate().mul(SK1);//公鑰1

3、Alice將Ep(a,b)和點(diǎn)K,G傳給用戶B。公開(kāi)參數(shù)
  4、Bob接到信息后 ,將待傳輸?shù)拿魑膍進(jìn)行加密。這里m為隨機(jī)選取的一個(gè)Element

Element encRc1 = m.duplicate().add(PK1.duplicate.mu.(r));//加密 Element encRc2 = G.duplicate().mul(r);

5、Bob將encRc1,encRc2傳給用戶A。
6、用戶A接到信息后,計(jì)算encRc1-kencRc2,結(jié)果就是點(diǎn)m。
因?yàn)閑ncRc1-kencRc2=m+rK-k(rG)=m+rK-r(kG)=m 。

4. 注意事項(xiàng)

**在所有的代碼過(guò)程中需要注意Element.duplicate()方法**


如上圖所示,可以看到無(wú)論是乘法運(yùn)算,還是指數(shù)運(yùn)算,最終結(jié)果均為同一點(diǎn)。

如果加入Element.duplicate()方法,則結(jié)果為正確結(jié)果。這是因?yàn)镋lement本身的因素,加入duplicate()方法之后,相當(dāng)于對(duì)Element本身加入一個(gè)復(fù)制,在計(jì)算時(shí)不會(huì)覆蓋本身。

總結(jié)

以上是生活随笔為你收集整理的JPBC库的使用--双线性配对,ECC加密的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。