gpt4 book ai didi

encryption - Proxy Re-Encryption中的密文转换

转载 作者:行者123 更新时间:2023-12-02 00:24:26 24 4
gpt4 key购买 nike

我正在尝试实现 proxy re encryption用于使用以下参数进行概念验证。

q = 31, g = 2, sk_a = 3, sk_b = 5,

sk_a 和 q 是互素数,因此 sk_a 的逆存在于 mod q 中。

proxy_key = sk_b/sk_a  

其中 proxy_key 的计算方法是将 sk_b 与 sk_a 的模逆相乘,即 (sk_b.sk_a inverse) mod q

密文:y = (g^sk_a) mod q

要转换密文,我使用 (y^proxy) mod q.

根据算法密文转换应该是(g^sk_b) mod q,但是对我不起作用。

我不确定其中有什么问题。我正在使用以下代码。

    BigInteger q = new BigInteger("31");

BigInteger g = new BigInteger("2");
BigInteger sk_a = new BigInteger("3");
BigInteger sk_b = new BigInteger("5");

BigInteger proxy_key = sk_b.multiply(sk_a.modInverse(q)).mod(q);

BigInteger y = g.modPow(sk_a, q);
System.out.println("Cipher Text: " + y);

BigInteger transformation = y.modPow(proxy_key, q);
System.out.println("Cipher Text Transformation: " + transformation);

最佳答案

你有两个问题:

  1. 2 不是原根模 31,因此您的“g”不是乘法群的生成器。您可以改用 3。

  2. 看来有人在解释 Blaze、Bleumer & Strauss 时犯了一个错误。您需要计算 b/a 模 phi(q) 而不是模 q。然后您可以使用欧拉定理来证明重新加密有效。当 a^-1 以 q 为模计算时,(g^a)^(a^-1)=g (mod q) 是不正确的。这也意味着 sk_a 和 sk_b 应该与 phi(q) 互质。尝试改用 7 和 11。

以下应该会如您所愿:

BigInteger q = new BigInteger("31");
BigInteger phi = new BigInteger("30");

BigInteger g = new BigInteger("3");
BigInteger sk_a = new BigInteger("7");
BigInteger sk_b = new BigInteger("11");

BigInteger proxy_key = sk_b.multiply(sk_a.modInverse(phi)).mod(phi);

BigInteger y = g.modPow(sk_a, q);
System.out.println("Cipher Text: " + y);

BigInteger transformation = y.modPow(proxy_key, q);
System.out.println("Cipher Text Transformation: " + transformation);

关于encryption - Proxy Re-Encryption中的密文转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9406009/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com