DSA 签名验证和 BigInteger 类



我得到了一个(非常(简单的DSA问题,并且已经找到了密钥和其他变量。为了验证签名,我需要以某种方式翻译等式:

V = [(y^u1*h^u2(mod p] mod q

转换为 BigInteger 操作。这在 Java 上甚至可能吗?到目前为止,我一直在成功使用 modPow,但到目前为止所有问题都以以下形式出现:

r.modPow(指数,模数(;

我不知道如何通过 BigInteger 完成上述等式(尤其是粗体部分(,我想知道这是否可能。有人有什么想法吗?

如果 BigInteger 做不到,我将如何通过 Pari 来表达这个方程?

我认为你只需要使用标识

(a*b) mod p == ((a mod p)*(b mod p)) mod p

所以要计算 yu1 × hu2 mod p:

  1. 计算 yu1 mod p,使用 modPow
  2. 计算 hu2 mod p, 使用 modPow
  3. 将步骤 1 和 2 的结果相乘,
  4. 减少步骤 3 mod p 的结果。
步骤

4 是必需的,因为步骤 1 和 2 的结果可能会相乘以产生大于 p 的值。

最新更新