JPBC库的使用--双线性配对,ECC加密
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ì)操作主要代碼
在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ī)選取元素作為生成元即可。
2、Alice選擇一個(gè)私有密鑰k,并生成公開(kāi)密鑰K=kG。
這里為使用大整數(shù)作為私鑰
3、Alice將Ep(a,b)和點(diǎn)K,G傳給用戶B。公開(kāi)參數(shù)
4、Bob接到信息后 ,將待傳輸?shù)拿魑膍進(jìn)行加密。這里m為隨機(jī)選取的一個(gè)Element
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)題。
- 上一篇: 【LKJ】LKJ弧形限速小结
- 下一篇: 如何锁定屏幕 键盘