JPBC下載與安裝
JPBC是對PBC的java語言封裝版本,適合有Java基礎的人。做密碼學的人可能知道的比較多點,最近要仿真一篇屬性加密(ABE)論文,正好順手研究下怎么實現。
安裝&運行
首先從官網下載jar。注意有1.2.1和2.0.0的版本,其中2.0.0拋棄了1.2.1版本中的某些內容,例如從字符串初始化配對,還有官網的某些案例在2.0.0版本中也沒了,根據自己的功能選擇就行。
下載完解壓后,直接導入jar就行,我這里用的是Idea
接下來編寫一個雙線性映射測試類,順便解釋下用法
雙線性映射Demo
import it.unisa.dia.gas.jpbc.Element;
import it.unisa.dia.gas.jpbc.Pairing;
import it.unisa.dia.gas.plaf.jpbc.pairing.PairingFactory;
public class Demo {
public static void main(String[] args) {
// 使用a.properties文件內容初始化配對參數
Pairing pairing = PairingFactory.getPairing("a.properties");
// 隨機選擇G1群上的一個元素e1
Element e1 = pairing.getG1().newRandomElement();
// e1設置為隨機值
e1.setToRandom();
// 隨機選擇G2群上的一個元素e1
Element e2 = pairing.getG2().newRandomElement();
// e2設置為隨機值
e2.setToRandom();
// 隨機選擇Zr群上的一個元素x
Element x = pairing.getZr().newRandomElement();
// x設置為隨機值
x.setToRandom();
// 復制一份e1
Element e1_copy = e1.duplicate();
// 計算e1^x
e1_copy.mulZn(x);
// 計算e(e1^x,e2)
Element mp1 = pairing.pairing(e1_copy, e2);
// 計算e(e1, e2)^x
Element mp2 = pairing.pairing(e1, e2);
mp2.mulZn(x);
System.out.println(mp1.isEqual(mp2));
}
}
上面的代碼實現了如下的一個雙線性映射:
代碼解釋
參照官網文檔,Pairing可以從橢圓曲線參數文件中生成一個G1xG2->GT的映射,關於a.properties文件可以在解壓后的params文件中找到。G1、G2、GT都是橢圓曲線群上的元素,Zr是整數域Zp上的元素。
其中a.properties是一個對稱的映射,即G1和G2是對等的,a1.properties是非對稱映射,G1和G2不等。