在 JPBC 中将元素从 G1 映射到 Zn
Map an Element from G1 to Zn in JPBC
我在 ORUTA 项目中使用双线性映射,在实现它时我一直坚持使用一个方程式。等式是:
r*h(λ)
其中 r 是 Zn 中的随机元素(对于某个大素数 n),λ 是 G1 的成员,其中 G1 是生成元为 g 的乘法循环群。
这里 h() 由 G -> Zn 给出。
如何将属于 G1 的 λ 值映射到 Zn 中的值。
我在 java 中使用 JPBC 库来实现这个基于配对的应用程序。
为此你需要三样东西:
- 一个映射函数(G1到
byte[]
中的元素),
- 实际加密哈希(
byte[]
到 byte[]
)和
- 一个映射函数(
byte[]
到Zn中的元素)。
您可以通过像这样编码将任何元素映射到 byte[]
(只要您保持一致,在这里做什么并不重要):
byte[] g1Bytes = g1Element.toCanonicalRepresentation();
你可以用 java.security.MessageDigest
散列一些东西:
MessageDigest hasher = MessageDigest.getInstance("SHA-512");
byte[] znBytes = hasher.digest(g1Bytes);
您可以使用 pairing
(it.unisa.dia.gas.jpbc.Pairing
的实例)和适当的字段将一些字节映射到一个元素:
Element znElement = pairing.getZr().newElementFromHash(znBytes, 0, znBytes.length);
我在 ORUTA 项目中使用双线性映射,在实现它时我一直坚持使用一个方程式。等式是:
r*h(λ)
其中 r 是 Zn 中的随机元素(对于某个大素数 n),λ 是 G1 的成员,其中 G1 是生成元为 g 的乘法循环群。
这里 h() 由 G -> Zn 给出。
如何将属于 G1 的 λ 值映射到 Zn 中的值。
我在 java 中使用 JPBC 库来实现这个基于配对的应用程序。
为此你需要三样东西:
- 一个映射函数(G1到
byte[]
中的元素), - 实际加密哈希(
byte[]
到byte[]
)和 - 一个映射函数(
byte[]
到Zn中的元素)。
您可以通过像这样编码将任何元素映射到 byte[]
(只要您保持一致,在这里做什么并不重要):
byte[] g1Bytes = g1Element.toCanonicalRepresentation();
你可以用 java.security.MessageDigest
散列一些东西:
MessageDigest hasher = MessageDigest.getInstance("SHA-512");
byte[] znBytes = hasher.digest(g1Bytes);
您可以使用 pairing
(it.unisa.dia.gas.jpbc.Pairing
的实例)和适当的字段将一些字节映射到一个元素:
Element znElement = pairing.getZr().newElementFromHash(znBytes, 0, znBytes.length);