JPBC库的使用--双线性配对,ECC加密
JPBC簡介
JPBC庫是ABE加密以及橢圓曲線加密等常用的加密庫。下載地址:http://gas.dia.unisa.it/projects/jpbc/index.html#.VTDrLSOl_Cw
1. 主要參數
a. 主要使用的橢圓曲線為TypeA型素數階橢圓曲線,y2 = x3 + x 參數如下:
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型為合數階橢圓曲線,使用較少。
b.一般隨機選擇元素為從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域隨機選取元素//構造主密鑰參數this.mk.beta = this.pp.p.getZr().newRandomElement();this.mk.g_alpha = this.pp.g.duplicate().powZn(this.pp.p.getZr().newRandomElement());//構造公鑰參數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);//雙線性配對操作 }c. JPBC庫的基本元素為Element,有newElement方法,可以從byte構造Element元素。
2. 雙線性配對
雙線性配對基于DBDH假設,在密碼學有很廣泛的應用,與基于離散對數難解性的指數運算加密相比,具有更高的效率。在我的實驗過程中,雙線性配對操作為1ms,進行一次底數為1024為G1域上的元素,指數為160為Zp域的指數運算用時為13ms左右,雙線性配對效率更高。
雙線性配對操作主要代碼
在ABE中,一般設定G1域和G2域為相等的域,將G1域和G2域的元素映射到Gt域。
3. ECC加密
ECC安全基礎為一般群模型,即在計算K=kG過程中,知道k和G很容易計算K,但是在知道K的情況下很難得到k。(這一小節使用的橢圓曲線為y2 = x3 + x)
橢圓曲線加密一般使用的為GF§域上的安全橢圓曲線y2 = x3 + ax + b,設定好橢圓曲線參數,直接進行運算
現在我們描述一個利用橢圓曲線進行加密通信的過程:
1、ALice選定一條橢圓曲線Ep(a,b),并取橢圓曲線上一點,作為基點G,G是系統公開參數
在設定好安全橢圓曲線的前提下,隨機選取元素作為生成元即可。
2、Alice選擇一個私有密鑰k,并生成公開密鑰K=kG。
這里為使用大整數作為私鑰
3、Alice將Ep(a,b)和點K,G傳給用戶B。公開參數
4、Bob接到信息后 ,將待傳輸的明文m進行加密。這里m為隨機選取的一個Element
5、Bob將encRc1,encRc2傳給用戶A。
6、用戶A接到信息后,計算encRc1-kencRc2,結果就是點m。
因為encRc1-kencRc2=m+rK-k(rG)=m+rK-r(kG)=m 。
4. 注意事項
**在所有的代碼過程中需要注意Element.duplicate()方法**
如上圖所示,可以看到無論是乘法運算,還是指數運算,最終結果均為同一點。
如果加入Element.duplicate()方法,則結果為正確結果。這是因為Element本身的因素,加入duplicate()方法之后,相當于對Element本身加入一個復制,在計算時不會覆蓋本身。
總結
以上是生活随笔為你收集整理的JPBC库的使用--双线性配对,ECC加密的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【LKJ】LKJ弧形限速小结
- 下一篇: 如何锁定屏幕 键盘